import Link from 'next/link' import { HStack, VStack, Box } from '../elements/LayoutPrimitives' import { StyledText } from '../elements/StyledText' import { useGetViewerQuery } from '../../lib/networking/queries/useGetViewerQuery' import { PrimaryHeader } from '../patterns/PrimaryHeader' import { navigationCommands } from '../../lib/keyboardShortcuts/navigationShortcuts' import { useKeyboardShortcuts } from '../../lib/keyboardShortcuts/useKeyboardShortcuts' import { useRouter } from 'next/router' import { applyStoredTheme } from '../../lib/themeUpdater' import { logoutMutation } from '../../lib/networking/mutations/logoutMutation' import { useState } from 'react' import { ConfirmationModal } from '../patterns/ConfirmationModal' import { KeyboardShortcutListModal } from './KeyboardShortcutListModal' import { PageMetaData } from '../patterns/PageMetaData' type SettingsLayoutProps = { title?: string children: React.ReactNode } export function SettingsLayout(props: SettingsLayoutProps): JSX.Element { const { viewerData } = useGetViewerQuery() const router = useRouter() const [showLogoutConfirmation, setShowLogoutConfirmation] = useState(false) const [showKeyboardCommandsModal, setShowKeyboardCommandsModal] = useState(false) useKeyboardShortcuts(navigationCommands(router)) applyStoredTheme(false) async function logout(): Promise { await logoutMutation() try { const result = await logoutMutation() if (!result) { throw new Error('Logout failed') } router.push('/login') } catch { // TODO: display an error message instead router.push('/') } } return ( <> {props.children} {showLogoutConfirmation ? ( setShowLogoutConfirmation(false)} /> ) : null} {showKeyboardCommandsModal ? ( setShowKeyboardCommandsModal(false)} /> ) : null} ) }