Collapse the Expenses page into a single src/Expense.tsx file and rename the Reports page to src/Reports/Report.tsx, extracting their shared transaction-list UI, date/grouping helpers, field configs, and types into an expense/report-agnostic src/common module. Update ReportViewer and GenerateReportPanel to consume the shared components, rewire main.jsx imports, and remove the old src/Expense/ folder and src/Reports/Reports.tsx.
26 lines
1.0 KiB
TypeScript
26 lines
1.0 KiB
TypeScript
import type { ResourceConfig } from "../../../react-openapi";
|
|
import type { TxnFieldConfigs } from "../types";
|
|
|
|
export function buildTxnFieldConfigs(resources: ResourceConfig[]): TxnFieldConfigs | null {
|
|
const expensesRes = resources.find((r) => r.name === "expenses");
|
|
const entitiesRes = resources.find((r) => r.name === "entities");
|
|
const accountsRes = resources.find((r) => r.name === "accounts");
|
|
const find = (res: ResourceConfig | undefined, name: string) => res?.fields.find((f) => f.name === name);
|
|
const entity = find(expensesRes, "entity");
|
|
const amount = find(expensesRes, "amount");
|
|
const account = find(expensesRes, "account");
|
|
const occurredAt = find(expensesRes, "occurred_at");
|
|
const logo = find(entitiesRes, "logo");
|
|
if (!entity || !amount || !account || !occurredAt || !logo) return null;
|
|
return {
|
|
entity,
|
|
amount,
|
|
account,
|
|
occurredAt,
|
|
logo,
|
|
formats: {
|
|
entity: entitiesRes?.displayFormat ?? "{name}",
|
|
account: accountsRes?.displayFormat ?? "{name}",
|
|
},
|
|
};
|
|
} |