mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-28 19:30:57 +00:00
role-dashboards.config.ts's ROLE_LAYOUTS was a hand-typed table of ~40 raw role/position keys (including edr_freight_app/xxx ad-hoc sub-positions), matched against the user's held keys client-side. Replaced with resolveOverviewLayout(), which just picks the highest-priority key out of whatever GET /overview/layouts returns — the same 'server filters by permission, frontend renders what comes back' shape Reports already uses, so the frontend no longer needs to know any individual permission key. Hard cutover: no fallback to the old key table. Positions not covered by the previous commit's grants (the ad-hoc department sub-positions) will render the executive layout until granted a layout permission.
86 lines
2.5 KiB
TypeScript
86 lines
2.5 KiB
TypeScript
import { useQuery } from "@tanstack/react-query";
|
|
|
|
import { QUERY_KEYS } from "@/constants/QUERY_KEYS";
|
|
import { overviewService } from "@/services/overview.service";
|
|
import type { OverviewRange } from "@/types/overview";
|
|
|
|
export function useOverview(range: OverviewRange = "30d") {
|
|
return useQuery({
|
|
queryKey: QUERY_KEYS.OVERVIEW.dashboard(range),
|
|
queryFn: () => overviewService.getDashboard(range),
|
|
});
|
|
}
|
|
|
|
/** Layouts the caller may render — server-filtered by permission, same shape as useReports' catalog. */
|
|
export function useOverviewLayouts() {
|
|
return useQuery({
|
|
queryKey: QUERY_KEYS.OVERVIEW.layouts(),
|
|
queryFn: () => overviewService.getLayouts(),
|
|
staleTime: 5 * 60 * 1000,
|
|
});
|
|
}
|
|
|
|
export function useOverviewBookingsTab(range: OverviewRange, enabled: boolean) {
|
|
return useQuery({
|
|
queryKey: QUERY_KEYS.OVERVIEW.bookingsTab(range),
|
|
queryFn: () => overviewService.getBookingsTab(range),
|
|
enabled,
|
|
});
|
|
}
|
|
|
|
export function useOverviewContractsTab(range: OverviewRange, enabled: boolean) {
|
|
return useQuery({
|
|
queryKey: QUERY_KEYS.OVERVIEW.contractsTab(range),
|
|
queryFn: () => overviewService.getContractsTab(range),
|
|
enabled,
|
|
});
|
|
}
|
|
|
|
export function useOverviewBillingTab(range: OverviewRange, enabled: boolean) {
|
|
return useQuery({
|
|
queryKey: QUERY_KEYS.OVERVIEW.billingTab(range),
|
|
queryFn: () => overviewService.getBillingTab(range),
|
|
enabled,
|
|
});
|
|
}
|
|
|
|
export function useOverviewOperationsTab(range: OverviewRange, enabled: boolean) {
|
|
return useQuery({
|
|
queryKey: QUERY_KEYS.OVERVIEW.operationsTab(range),
|
|
queryFn: () => overviewService.getOperationsTab(range),
|
|
enabled,
|
|
});
|
|
}
|
|
|
|
export function useOverviewFleetTab(range: OverviewRange, enabled: boolean) {
|
|
return useQuery({
|
|
queryKey: QUERY_KEYS.OVERVIEW.fleetTab(range),
|
|
queryFn: () => overviewService.getFleetTab(range),
|
|
enabled,
|
|
});
|
|
}
|
|
|
|
export function useOverviewClearanceTab(enabled: boolean) {
|
|
return useQuery({
|
|
queryKey: QUERY_KEYS.OVERVIEW.clearanceTab(),
|
|
queryFn: () => overviewService.getClearanceTab(),
|
|
enabled,
|
|
});
|
|
}
|
|
|
|
export function useOverviewCustomersTab(range: OverviewRange, enabled: boolean) {
|
|
return useQuery({
|
|
queryKey: QUERY_KEYS.OVERVIEW.customersTab(range),
|
|
queryFn: () => overviewService.getCustomersTab(range),
|
|
enabled,
|
|
});
|
|
}
|
|
|
|
export function useOverviewStaffTab(range: OverviewRange, enabled: boolean) {
|
|
return useQuery({
|
|
queryKey: QUERY_KEYS.OVERVIEW.staffTab(range),
|
|
queryFn: () => overviewService.getStaffTab(range),
|
|
enabled,
|
|
});
|
|
}
|