80 lines
1.9 KiB
TypeScript
80 lines
1.9 KiB
TypeScript
import { NavigateFunction } from 'react-router-dom';
|
|
import { Recipe } from '../api/types.gen';
|
|
|
|
export type View =
|
|
| 'welcome'
|
|
| 'chat'
|
|
| 'pair'
|
|
| 'settings'
|
|
| 'extensions'
|
|
| 'moreModels'
|
|
| 'configureProviders'
|
|
| 'configPage'
|
|
| 'ConfigureProviders'
|
|
| 'settingsV2'
|
|
| 'sessions'
|
|
| 'schedules'
|
|
| 'sharedSession'
|
|
| 'loading'
|
|
| 'recipes'
|
|
| 'permission';
|
|
|
|
export type ViewOptions = {
|
|
showEnvVars?: boolean;
|
|
deepLinkConfig?: unknown;
|
|
sessionDetails?: unknown;
|
|
error?: string;
|
|
baseUrl?: string;
|
|
recipe?: Recipe;
|
|
parentView?: View;
|
|
parentViewOptions?: ViewOptions;
|
|
disableAnimation?: boolean;
|
|
initialMessage?: string;
|
|
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':
|
|
navigate('/pair', { 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 'permission':
|
|
navigate('/permission', { state: options });
|
|
break;
|
|
case 'ConfigureProviders':
|
|
navigate('/configure-providers', { state: options });
|
|
break;
|
|
case 'sharedSession':
|
|
navigate('/shared-session', { state: options });
|
|
break;
|
|
|
|
case 'welcome':
|
|
navigate('/welcome', { state: options });
|
|
break;
|
|
case 'extensions':
|
|
navigate('/extensions', { state: options });
|
|
break;
|
|
default:
|
|
navigate('/', { state: options });
|
|
}
|
|
};
|
|
};
|