feat(platform-web): support shareable vehicle routes
This commit is contained in:
33
vehicle-data-platform/apps/web/src/domain/appRoute.ts
Normal file
33
vehicle-data-platform/apps/web/src/domain/appRoute.ts
Normal file
@@ -0,0 +1,33 @@
|
||||
import type { PageKey } from '../layout/AppShell';
|
||||
|
||||
const pageKeys = new Set<PageKey>(['dashboard', 'vehicles', 'realtime', 'detail', 'history', 'mileage', 'quality']);
|
||||
|
||||
export type AppRoute = {
|
||||
page?: PageKey;
|
||||
keyword?: string;
|
||||
};
|
||||
|
||||
export function parseAppHash(hash: string): AppRoute {
|
||||
const normalized = hash.trim().replace(/^#\/?/, '');
|
||||
if (!normalized) {
|
||||
return {};
|
||||
}
|
||||
const [pagePart, queryPart = ''] = normalized.split('?', 2);
|
||||
if (!pageKeys.has(pagePart as PageKey)) {
|
||||
return {};
|
||||
}
|
||||
const params = new URLSearchParams(queryPart);
|
||||
const keyword = params.get('keyword')?.trim() || undefined;
|
||||
return { page: pagePart as PageKey, keyword };
|
||||
}
|
||||
|
||||
export function buildAppHash(route: AppRoute): string {
|
||||
const page = route.page && pageKeys.has(route.page) ? route.page : 'dashboard';
|
||||
const params = new URLSearchParams();
|
||||
const keyword = route.keyword?.trim();
|
||||
if (keyword) {
|
||||
params.set('keyword', keyword);
|
||||
}
|
||||
const query = params.toString();
|
||||
return query ? `#/${page}?${query}` : `#/${page}`;
|
||||
}
|
||||
Reference in New Issue
Block a user