major refactor of the dashboard and react-openapi integration #1

Merged
aetos merged 44 commits from period-selection into main 2026-05-07 11:00:54 +00:00
Owner

Summary

This MR introduces a major refactor of the dashboard and react-openapi integration, focusing on configurability, separation of concerns, and improved extensibility.


Key Changes

1. OpenAPI / Admin Refactor

  • Extracted ConfigContext into a dedicated provider.

  • Introduced AppProvider to encapsulate:

    • Config loading
    • API client initialization
    • React Query setup
  • Removed internal QueryClientProvider from Admin for better composability.

  • Admin now supports both:

    • Standalone usage
    • Nested usage inside an existing provider

2. Resource System Improvements

  • Added hidden flag to ResourceConfig and overrides.

  • Admin UI now filters out hidden resources.

  • Added useResourceByName helper for dynamic resource access.

  • Improved useResource:

    • Handles undefined config safely
    • Adds guards for missing endpoints
    • Disables queries when endpoint is absent

3. API Client Enhancements

  • Added custom paramsSerializer:

    • Serializes arrays without []
    • Ensures backend-compatible query formats

4. Dashboard Architecture Overhaul

  • Replaced hardcoded dashboard with config-driven system:

    • Introduced ConfigurableDashboard
    • Dashboard sections defined via config
  • New state model:

    • mode (expense/income)
    • periodType (rolling/calendar)
    • comparison
    • selectedPeriodId

5. Component Refactor (View / Logic Split)

  • Split major components into:

    • .tsx (logic/controller)
    • .view.tsx (presentation)
    • .models.ts (types)
  • Applied to:

    • Dashboard
    • HistoryChart
    • ProgressCard
    • LatestItems

6. HistoryChart Redesign

  • Fully rebuilt using report-driven data

  • Supports:

    • Weekly / Monthly / Yearly / FY / Full views
    • Rolling vs Calendar periods
    • Comparison mode (auto-aligned offsets)
  • Introduced:

    • Bucket merging logic
    • Dynamic comparison attachment

7. Reporting Integration

  • Dashboard now powered by:

    • useReport
    • prepareReport
  • Removes need for multiple manual API calls

8. UI / UX Improvements

  • Theme-aware color system
  • Dynamic accent colors per mode
  • Cleaner layout using section-based rendering
  • Improved selection and interaction in charts

9. Cleanup & Removals

  • Removed legacy components:

    • Old HistoryChart
    • Old ProgressCard
  • Simplified Header layout spacing


Behavior Changes

  • Hidden resources are no longer visible in Admin UI.
  • Dashboard is now entirely configuration-driven.
  • API query params for arrays no longer use [].
  • Resource hooks no longer crash on missing config.

Risks / Considerations

  • Dashboard depends on correct configuration structure.
  • Hidden flag may unintentionally hide resources if misconfigured.
  • Query param serialization change must align with backend expectations.

Follow-ups

  • Add typing improvements to remove @ts-ignore in GenericForm.
  • Extend dashboard config with more reusable section presets.
  • Add tests for report aggregation and comparison logic.

## Summary This MR introduces a major refactor of the dashboard and react-openapi integration, focusing on configurability, separation of concerns, and improved extensibility. --- ## Key Changes ### 1. OpenAPI / Admin Refactor * Extracted `ConfigContext` into a dedicated provider. * Introduced `AppProvider` to encapsulate: * Config loading * API client initialization * React Query setup * Removed internal `QueryClientProvider` from `Admin` for better composability. * `Admin` now supports both: * Standalone usage * Nested usage inside an existing provider ### 2. Resource System Improvements * Added `hidden` flag to `ResourceConfig` and overrides. * Admin UI now filters out hidden resources. * Added `useResourceByName` helper for dynamic resource access. * Improved `useResource`: * Handles undefined config safely * Adds guards for missing endpoints * Disables queries when endpoint is absent ### 3. API Client Enhancements * Added custom `paramsSerializer`: * Serializes arrays without `[]` * Ensures backend-compatible query formats ### 4. Dashboard Architecture Overhaul * Replaced hardcoded dashboard with **config-driven system**: * Introduced `ConfigurableDashboard` * Dashboard sections defined via config * New state model: * `mode` (expense/income) * `periodType` (rolling/calendar) * `comparison` * `selectedPeriodId` ### 5. Component Refactor (View / Logic Split) * Split major components into: * `.tsx` (logic/controller) * `.view.tsx` (presentation) * `.models.ts` (types) * Applied to: * Dashboard * HistoryChart * ProgressCard * LatestItems ### 6. HistoryChart Redesign * Fully rebuilt using report-driven data * Supports: * Weekly / Monthly / Yearly / FY / Full views * Rolling vs Calendar periods * Comparison mode (auto-aligned offsets) * Introduced: * Bucket merging logic * Dynamic comparison attachment ### 7. Reporting Integration * Dashboard now powered by: * `useReport` * `prepareReport` * Removes need for multiple manual API calls ### 8. UI / UX Improvements * Theme-aware color system * Dynamic accent colors per mode * Cleaner layout using section-based rendering * Improved selection and interaction in charts ### 9. Cleanup & Removals * Removed legacy components: * Old `HistoryChart` * Old `ProgressCard` * Simplified Header layout spacing --- ## Behavior Changes * Hidden resources are no longer visible in Admin UI. * Dashboard is now entirely configuration-driven. * API query params for arrays no longer use `[]`. * Resource hooks no longer crash on missing config. --- ## Risks / Considerations * Dashboard depends on correct configuration structure. * Hidden flag may unintentionally hide resources if misconfigured. * Query param serialization change must align with backend expectations. --- ## Follow-ups * Add typing improvements to remove `@ts-ignore` in `GenericForm`. * Extend dashboard config with more reusable section presets. * Add tests for report aggregation and comparison logic. ---
aetos added 44 commits 2026-05-07 11:00:45 +00:00
aetos merged commit 009ab50b47 into main 2026-05-07 11:00:54 +00:00
aetos deleted branch period-selection 2026-05-07 11:00:55 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: apps/khata-ui#1
No description provided.