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
3 changed files with 34 additions and 7 deletions
Showing only changes of commit 0a92126b92 - Show all commits

View File

@@ -16,7 +16,7 @@ export interface DashboardSection {
title?: string; title?: string;
summary?: string; summary?: string;
component: React.ComponentType<any>; component: React.ComponentType<any>;
dataKey?: string; dataKey: string;
settings?: Record<string, any>; settings?: Record<string, any>;
isList?: boolean; isList?: boolean;
style?: { style?: {
@@ -49,4 +49,5 @@ export interface DashboardProps {
toggleMode: () => void; toggleMode: () => void;
togglePeriodType: () => void; togglePeriodType: () => void;
setSelectedPeriodId: (id: string | null) => void; setSelectedPeriodId: (id: string | null) => void;
toggleComparison: () => void;
} }

View File

@@ -24,6 +24,13 @@ export default function Dashboard(props: DashboardProps) {
})); }));
}; };
const toggleComparison = () => {
setState(prev => ({
...prev,
comparison: !prev.comparison,
}));
};
const setSelectedPeriodId = (selectedPeriodId: typeof state.selectedPeriodId) => { const setSelectedPeriodId = (selectedPeriodId: typeof state.selectedPeriodId) => {
setState(prev => ({ ...prev, selectedPeriodId })); setState(prev => ({ ...prev, selectedPeriodId }));
}; };
@@ -35,6 +42,7 @@ export default function Dashboard(props: DashboardProps) {
setState={setState} setState={setState}
toggleMode={toggleMode} toggleMode={toggleMode}
togglePeriodType={togglePeriodType} togglePeriodType={togglePeriodType}
toggleComparison={toggleComparison}
setSelectedPeriodId={setSelectedPeriodId} setSelectedPeriodId={setSelectedPeriodId}
/> />
); );

View File

@@ -22,11 +22,12 @@ export default function DashboardView({
setState, setState,
toggleMode, toggleMode,
togglePeriodType, togglePeriodType,
toggleComparison,
setSelectedPeriodId, setSelectedPeriodId,
}: ViewProps) { }: ViewProps) {
const theme = useTheme(); const theme = useTheme();
const themeMode = theme.palette.mode; const themeMode = theme.palette.mode;
const { mode, periodType, selectedPeriodId, comparison } = state; const { mode, periodType, comparison, selectedPeriodId } = state;
// Resolve colors with fallbacks // Resolve colors with fallbacks
const colors = React.useMemo(() => { const colors = React.useMemo(() => {
@@ -117,7 +118,19 @@ export default function DashboardView({
header={item.payeeName || item.name} header={item.payeeName || item.name}
progressAmount={item.amount} progressAmount={item.amount}
totalAmount={data.totalAmount} totalAmount={data.totalAmount}
colorTheme={mode === "expense" ? "error" : "success"} accentColor={colors.primary}
colorScheme={colors}
// State management
mode={mode}
periodType={periodType}
comparison={comparison}
selectedPeriodId={selectedPeriodId}
togglePeriodType={togglePeriodType}
toggleComparison={toggleComparison}
setSelectedPeriodId={setSelectedPeriodId}
/> />
</Grid> </Grid>
))} ))}
@@ -128,16 +141,21 @@ export default function DashboardView({
{...section.settings} {...section.settings}
header={section.title} header={section.title}
summary={section.summary} summary={section.summary}
data={section.dataKey ? data[section.dataKey] : data.chartData} data={data[mode][section.dataKey]}
title={section.title} title={section.title}
accentColor={colors.primary} accentColor={colors.primary}
colorScheme={colors} colorScheme={colors}
// State management
mode={mode}
periodType={periodType} periodType={periodType}
onPeriodTypeChange={(p: any) => setState(prev => ({ ...prev, periodType: p }))}
comparison={comparison} comparison={comparison}
setComparison={(c: any) => setState(prev => ({ ...prev, comparison: c }))}
selectedPeriodId={selectedPeriodId} selectedPeriodId={selectedPeriodId}
onSelectPeriodId={setSelectedPeriodId}
togglePeriodType={togglePeriodType}
toggleComparison={toggleComparison}
setSelectedPeriodId={setSelectedPeriodId}
/> />
)} )}
</Grid> </Grid>