Files
ai-code-app/src/app/main/mainView/navigation.ts

59 lines
2.1 KiB
TypeScript

import { PLAN_FILTER_STATUSES, type PlanFilterStatus } from '../../../features/planBoard';
import type { PlanSidebarKey, PlaySidebarKey, TopMenuKey } from '../types';
import { resolveSavedLayoutMenuKey } from './constants';
export type MainViewInitialNavigation = {
activeTopMenu: TopMenuKey;
selectedPlanMenu: PlanSidebarKey;
selectedPlayMenu: PlaySidebarKey;
initialSelectedPlanId: number | null;
initialSelectedWorkId: string | null;
};
export function resolveInitialNavigation(): MainViewInitialNavigation {
if (typeof window === 'undefined') {
return {
activeTopMenu: 'chat',
selectedPlanMenu: 'all',
selectedPlayMenu: 'layout',
initialSelectedPlanId: null,
initialSelectedWorkId: null,
};
}
const params = new URLSearchParams(window.location.search);
const topMenuParam = params.get('topMenu');
const requestedTopMenu: TopMenuKey =
topMenuParam === 'docs' || topMenuParam === 'apis' || topMenuParam === 'plans' || topMenuParam === 'chat' || topMenuParam === 'play'
? topMenuParam
: 'chat';
const planFilterParam = params.get('planFilter');
const selectedPlanMenu =
planFilterParam === 'release'
? 'release'
: planFilterParam && PLAN_FILTER_STATUSES.includes(planFilterParam as PlanFilterStatus)
? (planFilterParam as PlanFilterStatus)
: 'all';
const planIdParam = params.get('planId');
const parsedPlanId = planIdParam ? Number(planIdParam) : null;
const playSectionParam = params.get('playSection');
const playLayoutIdParam = params.get('playLayoutId');
return {
activeTopMenu: requestedTopMenu,
selectedPlanMenu,
selectedPlayMenu:
playSectionParam === 'layout'
? 'layout'
: playSectionParam === 'test'
? 'test'
: playSectionParam === 'cbt'
? 'cbt'
: playSectionParam === 'layout-record' && playLayoutIdParam
? resolveSavedLayoutMenuKey(playLayoutIdParam)
: 'layout',
initialSelectedPlanId: Number.isFinite(parsedPlanId) ? parsedPlanId : null,
initialSelectedWorkId: params.get('workId'),
};
}