From 0d5704a931fbf811c6feb9ae6ea80aa0a7031427 Mon Sep 17 00:00:00 2001 From: ryaneggz Date: Thu, 31 Jul 2025 00:12:27 -0500 Subject: [PATCH 1/2] init --- source/providers/NavProvider/effects.tsx | 65 ++++++++++++++++++++++++ source/providers/NavProvider/index.tsx | 42 +++++++++++++++ source/providers/NavProvider/state.tsx | 14 +++++ 3 files changed, 121 insertions(+) create mode 100644 source/providers/NavProvider/effects.tsx create mode 100644 source/providers/NavProvider/index.tsx create mode 100644 source/providers/NavProvider/state.tsx diff --git a/source/providers/NavProvider/effects.tsx b/source/providers/NavProvider/effects.tsx new file mode 100644 index 0000000..26a5413 --- /dev/null +++ b/source/providers/NavProvider/effects.tsx @@ -0,0 +1,65 @@ +import {useCallback} from 'react'; +import {NavigationState} from './state.js'; + +export const useNavigationEffects = ( + setState: React.Dispatch>, +) => { + const navigateToHome = useCallback(() => { + setState(prev => ({ + ...prev, + currentView: 'home', + })); + }, [setState]); + + const navigateToHelp = useCallback(() => { + setState(prev => ({ + ...prev, + currentView: 'help', + })); + }, [setState]); + + const navigateToModels = useCallback(() => { + setState(prev => ({ + ...prev, + currentView: 'models', + })); + }, [setState]); + + const navigateToApiConfig = useCallback(() => { + setState(prev => ({ + ...prev, + currentView: 'api-config', + })); + }, [setState]); + + const navigateToConfig = useCallback(() => { + setState(prev => ({ + ...prev, + currentView: 'config', + })); + }, [setState]); + + const navigateToChat = useCallback(() => { + setState(prev => ({ + ...prev, + currentView: 'chat', + })); + }, [setState]); + + const navigateToInit = useCallback(() => { + setState(prev => ({ + ...prev, + currentView: 'init', + })); + }, [setState]); + + return { + navigateToHome, + navigateToHelp, + navigateToModels, + navigateToApiConfig, + navigateToConfig, + navigateToChat, + navigateToInit, + }; +}; \ No newline at end of file diff --git a/source/providers/NavProvider/index.tsx b/source/providers/NavProvider/index.tsx new file mode 100644 index 0000000..fb97189 --- /dev/null +++ b/source/providers/NavProvider/index.tsx @@ -0,0 +1,42 @@ +import React, {createContext, useContext, useState} from 'react'; +import {useNavigationEffects} from './effects.js'; +import {NavigationState, initialNavigationState} from './state.js'; + +interface NavigationContextType { + state: NavigationState; + navigateToHome: () => void; + navigateToHelp: () => void; + navigateToModels: () => void; + navigateToApiConfig: () => void; + navigateToConfig: () => void; + navigateToChat: () => void; + navigateToInit: () => void; +} + +const NavigationContext = createContext( + undefined, +); + +export function NavigationProvider({children}: {children: React.ReactNode}) { + const [state, setState] = useState(initialNavigationState); + const effects = useNavigationEffects(setState); + + return ( + + {children} + + ); +} + +export function useNavigation() { + const context = useContext(NavigationContext); + if (!context) { + throw new Error('useNavigation must be used within NavigationProvider'); + } + return context; +} \ No newline at end of file diff --git a/source/providers/NavProvider/state.tsx b/source/providers/NavProvider/state.tsx new file mode 100644 index 0000000..565983e --- /dev/null +++ b/source/providers/NavProvider/state.tsx @@ -0,0 +1,14 @@ +export type NavigationState = { + currentView: + | 'home' + | 'help' + | 'models' + | 'init' + | 'api-config' + | 'chat' + | 'config'; +}; + +export const initialNavigationState: NavigationState = { + currentView: 'home', +}; \ No newline at end of file From 7a9909208726bd530f5d45df838df4e5cf00dde6 Mon Sep 17 00:00:00 2001 From: ryaneggz Date: Thu, 31 Jul 2025 00:14:03 -0500 Subject: [PATCH 2/2] fix linting --- source/providers/NavProvider/effects.tsx | 2 +- source/providers/NavProvider/index.tsx | 2 +- source/providers/NavProvider/state.tsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/source/providers/NavProvider/effects.tsx b/source/providers/NavProvider/effects.tsx index 26a5413..7ccc1ae 100644 --- a/source/providers/NavProvider/effects.tsx +++ b/source/providers/NavProvider/effects.tsx @@ -62,4 +62,4 @@ export const useNavigationEffects = ( navigateToChat, navigateToInit, }; -}; \ No newline at end of file +}; diff --git a/source/providers/NavProvider/index.tsx b/source/providers/NavProvider/index.tsx index fb97189..9137c31 100644 --- a/source/providers/NavProvider/index.tsx +++ b/source/providers/NavProvider/index.tsx @@ -39,4 +39,4 @@ export function useNavigation() { throw new Error('useNavigation must be used within NavigationProvider'); } return context; -} \ No newline at end of file +} diff --git a/source/providers/NavProvider/state.tsx b/source/providers/NavProvider/state.tsx index 565983e..8b4b9e6 100644 --- a/source/providers/NavProvider/state.tsx +++ b/source/providers/NavProvider/state.tsx @@ -11,4 +11,4 @@ export type NavigationState = { export const initialNavigationState: NavigationState = { currentView: 'home', -}; \ No newline at end of file +};