mirror of
https://github.com/AstrBotDevs/AstrBot
synced 2026-07-16 17:47:06 +08:00
* fix(dashboard): stabilize sidebar hash navigation on startup * fix(dashboard): reuse shared extension tab route helpers * fix(dashboard): avoid leaking extension route query state * fix(dashboard): preserve route params in tab locations * fix(dashboard): harden hash tab routing fallbacks * fix(dashboard): warn on tab route navigation failures * fix(dashboard): harden extension tab startup routing
47 lines
1.1 KiB
JavaScript
47 lines
1.1 KiB
JavaScript
import { EXTENSION_ROUTE_NAME } from '../router/routeConstants.mjs';
|
|
|
|
export function getValidHashTab(routeHash, validTabs) {
|
|
const hash = String(routeHash || '');
|
|
const tab = hash.includes('#') ? hash.slice(hash.lastIndexOf('#') + 1) : hash;
|
|
return validTabs.includes(tab) ? tab : null;
|
|
}
|
|
|
|
export function createTabRouteLocation(route, tab, fallbackRouteName = EXTENSION_ROUTE_NAME) {
|
|
const query = route?.query ? { ...route.query } : {};
|
|
const params = route?.params ? { ...route.params } : undefined;
|
|
|
|
if (route?.name) {
|
|
return {
|
|
name: route.name,
|
|
...(params ? { params } : {}),
|
|
query,
|
|
hash: `#${tab}`,
|
|
};
|
|
}
|
|
|
|
if (route?.path) {
|
|
return {
|
|
path: route.path,
|
|
query,
|
|
hash: `#${tab}`,
|
|
};
|
|
}
|
|
|
|
return {
|
|
name: fallbackRouteName,
|
|
...(params ? { params } : {}),
|
|
query,
|
|
hash: `#${tab}`,
|
|
};
|
|
}
|
|
|
|
export async function replaceTabRoute(router, route, tab, logger = console) {
|
|
try {
|
|
await router.replace(createTabRouteLocation(route, tab));
|
|
return true;
|
|
} catch (error) {
|
|
logger.warn?.('Failed to update extension tab route:', error);
|
|
return false;
|
|
}
|
|
}
|