feat(platform): persist quality filters in route
This commit is contained in:
@@ -20,6 +20,9 @@ export default function App() {
|
||||
const [analysisVin, setAnalysisVin] = useState(initialVehicleKey);
|
||||
const [activeProtocol, setActiveProtocol] = useState(initialRoute.protocol ?? '');
|
||||
const [vehicleFilters, setVehicleFilters] = useState<Record<string, string>>(initialRoute.filters ?? {});
|
||||
const [qualityFilters, setQualityFilters] = useState<Record<string, string>>(
|
||||
initialRoute.page === 'quality' ? qualityFiltersFromRoute(initialRoute) : {}
|
||||
);
|
||||
const [linkIssueCount, setLinkIssueCount] = useState<number | null>(null);
|
||||
const [currentVehicleStatus, setCurrentVehicleStatus] = useState<VehicleServiceStatus | undefined>();
|
||||
const [currentVehicleLabel, setCurrentVehicleLabel] = useState('');
|
||||
@@ -87,6 +90,9 @@ export default function App() {
|
||||
if (route.page === 'vehicles') {
|
||||
setVehicleFilters(route.filters ?? {});
|
||||
}
|
||||
if (route.page === 'quality') {
|
||||
setQualityFilters(qualityFiltersFromRoute(route));
|
||||
}
|
||||
setActiveProtocol(route.protocol ?? '');
|
||||
};
|
||||
window.addEventListener('hashchange', applyHashRoute);
|
||||
@@ -110,6 +116,10 @@ export default function App() {
|
||||
replaceHash(page, analysisVin, activeProtocol);
|
||||
return;
|
||||
}
|
||||
if (page === 'quality') {
|
||||
replaceQualityHash(qualityFilters);
|
||||
return;
|
||||
}
|
||||
replaceHash(page, undefined, undefined, page === 'vehicles' ? vehicleFilters : undefined);
|
||||
};
|
||||
|
||||
@@ -124,6 +134,21 @@ export default function App() {
|
||||
replaceHash('vehicles', undefined, undefined, filters);
|
||||
};
|
||||
|
||||
const replaceQualityHash = (filters: Record<string, string> = {}) => {
|
||||
const keyword = filters.keyword;
|
||||
const protocol = filters.protocol;
|
||||
const issueFilters: Record<string, string> = {};
|
||||
if (filters.issueType) {
|
||||
issueFilters.issueType = filters.issueType;
|
||||
}
|
||||
replaceHash('quality', keyword, protocol, issueFilters);
|
||||
};
|
||||
|
||||
const updateQualityFilters = (filters: Record<string, string> = {}) => {
|
||||
setQualityFilters(filters);
|
||||
replaceQualityHash(filters);
|
||||
};
|
||||
|
||||
const openVehicle = async (keyword: string, protocol?: string) => {
|
||||
const lookupKey = keyword.trim();
|
||||
const nextProtocol = protocol?.trim() ?? '';
|
||||
@@ -188,7 +213,7 @@ export default function App() {
|
||||
detail: <VehicleDetail vin={activeVin} protocol={activeProtocol} onOpenHistory={openHistoryForVehicle} onOpenMileage={openMileageForVehicle} onQueryChange={updateVehicleDetailQuery} />,
|
||||
history: <History initialVin={analysisVin} initialProtocol={activeProtocol} onOpenVehicle={openVehicle} />,
|
||||
mileage: <Mileage initialVin={analysisVin} initialProtocol={activeProtocol} onOpenVehicle={openVehicle} />,
|
||||
quality: <Quality onOpenVehicle={openVehicle} onHealthLoaded={(health) => setLinkIssueCount(health.linkHealth.filter((item) => item.status !== 'ok').length)} />
|
||||
quality: <Quality onOpenVehicle={openVehicle} onHealthLoaded={(health) => setLinkIssueCount(health.linkHealth.filter((item) => item.status !== 'ok').length)} onFiltersChange={updateQualityFilters} initialFilters={qualityFilters} />
|
||||
};
|
||||
|
||||
return (
|
||||
@@ -198,6 +223,14 @@ export default function App() {
|
||||
);
|
||||
}
|
||||
|
||||
function qualityFiltersFromRoute(route: ReturnType<typeof parseAppHash>): Record<string, string> {
|
||||
return {
|
||||
...(route.keyword ? { keyword: route.keyword } : {}),
|
||||
...(route.protocol ? { protocol: route.protocol } : {}),
|
||||
...(route.filters?.issueType ? { issueType: route.filters.issueType } : {})
|
||||
};
|
||||
}
|
||||
|
||||
function serviceStatusFromOverview(overview: VehicleServiceOverview): VehicleServiceStatus {
|
||||
const sourceCount = overview.sourceCount;
|
||||
const onlineSourceCount = overview.onlineSourceCount;
|
||||
|
||||
Reference in New Issue
Block a user