mirror of
https://github.com/jkingsman/Remote-Terminal-for-MeshCore.git
synced 2026-07-05 17:32:10 +02:00
extract frontend app shell
This commit is contained in:
@@ -2,6 +2,7 @@ export { useUnreadCounts } from './useUnreadCounts';
|
||||
export { useConversationMessages, getMessageContentKey } from './useConversationMessages';
|
||||
export { useRadioControl } from './useRadioControl';
|
||||
export { useRepeaterDashboard } from './useRepeaterDashboard';
|
||||
export { useAppShell } from './useAppShell';
|
||||
export { useAppSettings } from './useAppSettings';
|
||||
export { useConversationRouter } from './useConversationRouter';
|
||||
export { useContactsAndChannels } from './useContactsAndChannels';
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
import { startTransition, useCallback, useState, type Dispatch, type SetStateAction } from 'react';
|
||||
|
||||
import { getLocalLabel, type LocalLabel } from '../utils/localLabel';
|
||||
import type { SettingsSection } from '../components/settings/settingsConstants';
|
||||
|
||||
interface UseAppShellResult {
|
||||
showNewMessage: boolean;
|
||||
showSettings: boolean;
|
||||
settingsSection: SettingsSection;
|
||||
sidebarOpen: boolean;
|
||||
showCracker: boolean;
|
||||
crackerRunning: boolean;
|
||||
localLabel: LocalLabel;
|
||||
targetMessageId: number | null;
|
||||
setSettingsSection: (section: SettingsSection) => void;
|
||||
setSidebarOpen: (open: boolean) => void;
|
||||
setCrackerRunning: (running: boolean) => void;
|
||||
setLocalLabel: (label: LocalLabel) => void;
|
||||
setTargetMessageId: Dispatch<SetStateAction<number | null>>;
|
||||
handleCloseSettingsView: () => void;
|
||||
handleToggleSettingsView: () => void;
|
||||
handleOpenNewMessage: () => void;
|
||||
handleCloseNewMessage: () => void;
|
||||
handleToggleCracker: () => void;
|
||||
}
|
||||
|
||||
export function useAppShell(): UseAppShellResult {
|
||||
const [showNewMessage, setShowNewMessage] = useState(false);
|
||||
const [showSettings, setShowSettings] = useState(false);
|
||||
const [settingsSection, setSettingsSection] = useState<SettingsSection>('radio');
|
||||
const [sidebarOpen, setSidebarOpen] = useState(false);
|
||||
const [showCracker, setShowCracker] = useState(false);
|
||||
const [crackerRunning, setCrackerRunning] = useState(false);
|
||||
const [localLabel, setLocalLabel] = useState(getLocalLabel);
|
||||
const [targetMessageId, setTargetMessageId] = useState<number | null>(null);
|
||||
|
||||
const handleCloseSettingsView = useCallback(() => {
|
||||
startTransition(() => setShowSettings(false));
|
||||
setSidebarOpen(false);
|
||||
}, []);
|
||||
|
||||
const handleToggleSettingsView = useCallback(() => {
|
||||
startTransition(() => {
|
||||
setShowSettings((prev) => !prev);
|
||||
});
|
||||
setSidebarOpen(false);
|
||||
}, []);
|
||||
|
||||
const handleOpenNewMessage = useCallback(() => {
|
||||
setShowNewMessage(true);
|
||||
setSidebarOpen(false);
|
||||
}, []);
|
||||
|
||||
const handleCloseNewMessage = useCallback(() => {
|
||||
setShowNewMessage(false);
|
||||
}, []);
|
||||
|
||||
const handleToggleCracker = useCallback(() => {
|
||||
setShowCracker((prev) => !prev);
|
||||
}, []);
|
||||
|
||||
return {
|
||||
showNewMessage,
|
||||
showSettings,
|
||||
settingsSection,
|
||||
sidebarOpen,
|
||||
showCracker,
|
||||
crackerRunning,
|
||||
localLabel,
|
||||
targetMessageId,
|
||||
setSettingsSection,
|
||||
setSidebarOpen,
|
||||
setCrackerRunning,
|
||||
setLocalLabel,
|
||||
setTargetMessageId,
|
||||
handleCloseSettingsView,
|
||||
handleToggleSettingsView,
|
||||
handleOpenNewMessage,
|
||||
handleCloseNewMessage,
|
||||
handleToggleCracker,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user