ed5b2448af
Signed-off-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com> Signed-off-by: Douwe Osinga <douwe@squareup.com> Co-authored-by: Douwe Osinga <douwe@squareup.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
91 lines
2.5 KiB
TypeScript
91 lines
2.5 KiB
TypeScript
import { NavigateFunction } from 'react-router-dom';
|
|
import { Recipe } from '../api';
|
|
import { UserInput } from '../types/message';
|
|
|
|
export type View =
|
|
| 'chat'
|
|
| 'pair'
|
|
| 'settings'
|
|
| 'extensions'
|
|
| 'moreModels'
|
|
| 'configureProviders'
|
|
| 'configPage'
|
|
| 'ConfigureProviders'
|
|
| 'settingsV2'
|
|
| 'sessions'
|
|
| 'schedules'
|
|
| 'sharedSession'
|
|
| 'loading'
|
|
| 'recipes'
|
|
| 'skills'
|
|
| 'permission';
|
|
|
|
export type ViewOptions = {
|
|
showEnvVars?: boolean;
|
|
deepLinkConfig?: unknown;
|
|
sessionDetails?: unknown;
|
|
error?: string;
|
|
baseUrl?: string;
|
|
recipe?: Recipe;
|
|
parentView?: View;
|
|
parentViewOptions?: ViewOptions;
|
|
disableAnimation?: boolean;
|
|
initialMessage?: UserInput;
|
|
shareToken?: string;
|
|
resumeSessionId?: string;
|
|
pendingScheduleDeepLink?: string;
|
|
};
|
|
|
|
export const createNavigationHandler = (navigate: NavigateFunction) => {
|
|
return (view: View, options?: ViewOptions) => {
|
|
switch (view) {
|
|
case 'chat':
|
|
navigate('/', { state: options });
|
|
break;
|
|
case 'pair': {
|
|
// Put resumeSessionId in URL search params (not just state) so that:
|
|
// 1. The sidebar can read it to highlight the active session
|
|
// 2. Page refresh preserves which session is active
|
|
// 3. Browser back/forward navigation works correctly
|
|
const searchParams = new URLSearchParams();
|
|
if (options?.resumeSessionId) {
|
|
searchParams.set('resumeSessionId', options.resumeSessionId);
|
|
}
|
|
const url = searchParams.toString() ? `/pair?${searchParams.toString()}` : '/pair';
|
|
navigate(url, { state: options });
|
|
break;
|
|
}
|
|
case 'settings':
|
|
navigate('/settings', { state: options });
|
|
break;
|
|
case 'sessions':
|
|
navigate('/sessions', { state: options });
|
|
break;
|
|
case 'schedules':
|
|
navigate('/schedules', { state: options });
|
|
break;
|
|
case 'recipes':
|
|
navigate('/recipes', { state: options });
|
|
break;
|
|
case 'skills':
|
|
navigate('/skills', { state: options });
|
|
break;
|
|
case 'permission':
|
|
navigate('/permission', { state: options });
|
|
break;
|
|
case 'ConfigureProviders':
|
|
navigate('/configure-providers', { state: options });
|
|
break;
|
|
case 'sharedSession':
|
|
navigate('/shared-session', { state: options });
|
|
break;
|
|
|
|
case 'extensions':
|
|
navigate('/extensions', { state: options });
|
|
break;
|
|
default:
|
|
navigate('/', { state: options });
|
|
}
|
|
};
|
|
};
|