import { chakra, Box, Button, Center, Flex, HStack, Icon, IconButton, Menu, MenuButton, MenuItem, MenuList, Portal, Spacer, Tab, TabList, TabPanel, TabPanels, Tabs, Text, VStack, useBreakpointValue, useToast, } from '@chakra-ui/react'; import { PanelQMCv2Key } from './panels/PanelQMCv2Key'; import { useState } from 'react'; import { MdExpandMore, MdMenu, MdOutlineSettingsBackupRestore } from 'react-icons/md'; import { useAppDispatch, useAppSelector } from '~/hooks'; import { commitStagingChange, discardStagingChanges } from './settingsSlice'; import { PanelKWMv2Key } from './panels/PanelKWMv2Key'; import { selectIsSettingsNotSaved } from './settingsSelector'; const TABS: { name: string; Tab: () => JSX.Element }[] = [ { name: 'QMCv2 密钥', Tab: PanelQMCv2Key }, { name: 'KWMv2 密钥', Tab: PanelKWMv2Key }, { name: '其它/待定', Tab: () => 这里空空如也~, }, ]; export function Settings() { const toast = useToast(); const dispatch = useAppDispatch(); const isLargeWidthDevice = useBreakpointValue({ base: false, lg: true, }) ?? false; const [tabIndex, setTabIndex] = useState(0); const handleTabChange = (idx: number) => { setTabIndex(idx); }; const handleResetSettings = () => { dispatch(discardStagingChanges()); toast({ status: 'info', title: '未储存的设定已舍弃', description: '已还原到更改前的状态。', isClosable: true, }); }; const handleApplySettings = () => { dispatch(commitStagingChange()); toast({ status: 'success', title: '设定已应用', isClosable: true, }); }; const isSettingsNotSaved = useAppSelector(selectIsSettingsNotSaved); return ( } rightIcon={} colorScheme="gray" variant="outline" w="full" flexShrink={0} hidden={isLargeWidthDevice} mb="4" > {TABS[tabIndex].name} {TABS.map(({ name }, i) => ( setTabIndex(i)}> {name} ))} {TABS.map(({ name, Tab }) => (
{isSettingsNotSaved ? ( 有未储存的更改{' '} 设定将在保存后生效 ) : ( 设定将在保存后生效 )}
} onClick={handleResetSettings} colorScheme="red" variant="ghost" title="放弃未储存的更改,将设定还原为储存前的状态。" aria-label="放弃未储存的更改" />
))}
); }