All checks were successful
ci/woodpecker/push/ci Pipeline was successful
Co-authored-by: Jason Woltje <jason@diversecanvas.com> Co-committed-by: Jason Woltje <jason@diversecanvas.com>
38 lines
937 B
TypeScript
38 lines
937 B
TypeScript
import { useState, useCallback } from 'react';
|
|
|
|
export type AppMode = 'chat' | 'sidebar' | 'search';
|
|
|
|
export interface UseAppModeReturn {
|
|
mode: AppMode;
|
|
setMode: (mode: AppMode) => void;
|
|
toggleSidebar: () => void;
|
|
sidebarOpen: boolean;
|
|
}
|
|
|
|
export function useAppMode(): UseAppModeReturn {
|
|
const [mode, setModeState] = useState<AppMode>('chat');
|
|
const [sidebarOpen, setSidebarOpen] = useState(false);
|
|
|
|
const setMode = useCallback((next: AppMode) => {
|
|
setModeState(next);
|
|
if (next === 'sidebar') {
|
|
setSidebarOpen(true);
|
|
}
|
|
}, []);
|
|
|
|
const toggleSidebar = useCallback(() => {
|
|
setSidebarOpen((prev) => {
|
|
if (prev) {
|
|
// Closing sidebar — return to chat
|
|
setModeState('chat');
|
|
return false;
|
|
}
|
|
// Opening sidebar — set mode to sidebar
|
|
setModeState('sidebar');
|
|
return true;
|
|
});
|
|
}, []);
|
|
|
|
return { mode, setMode, toggleSidebar, sidebarOpen };
|
|
}
|