import { useSearch } from '@tanstack/react-router'; import { getCurrentWebviewWindow } from '@tauri-apps/api/webviewWindow'; import classNames from 'classnames'; import React, { useState } from 'react'; import { useKeyPressEvent } from 'react-use'; import { useOsInfo } from '../../hooks/useOsInfo'; import { capitalize } from '../../lib/capitalize'; import { HStack } from '../core/Stacks'; import { TabContent, Tabs } from '../core/Tabs/Tabs'; import { HeaderSize } from '../HeaderSize'; import { SettingsAppearance } from './SettingsAppearance'; import { SettingsGeneral } from './SettingsGeneral'; import { SettingsLicense } from './SettingsLicense'; import { SettingsPlugins } from './SettingsPlugins'; import { SettingsProxy } from './SettingsProxy'; import { SettingsTab } from './SettingsTab'; interface Props { hide?: () => void; } const tabs = [ SettingsTab.General, SettingsTab.Appearance, SettingsTab.Proxy, SettingsTab.Plugins, SettingsTab.License, ]; export default function Settings({ hide }: Props) { const osInfo = useOsInfo(); const { tab: tabFromQuery } = useSearch({ from: '/workspaces/$workspaceId/settings' }); const [tab, setTab] = useState(tabFromQuery ?? SettingsTab.General); // Close settings window on escape // TODO: Could this be put in a better place? Eg. in Rust key listener when creating the window useKeyPressEvent('Escape', async () => { if (hide != null) { // It's being shown in a dialog, so close the dialog hide(); } else { // It's being shown in a window, so close the window await getCurrentWebviewWindow().close(); } }); return (
{hide ? ( ) : (
Settings
)} ({ value, label: capitalize(value) }))} >
); }