import { Box, Button, ButtonGroup, Flex, HStack, Heading, Icon, IconButton, Input, InputGroup, InputLeftElement, InputRightElement, List, ListItem, Menu, MenuButton, MenuDivider, MenuItem, MenuList, Spacer, TabPanel, Text, VStack, } from '@chakra-ui/react'; import { useSelector } from 'react-redux'; import { selectQM2CSettings } from '../settingsSlice'; import React, { useEffect, useState } from 'react'; import { nanoid } from 'nanoid'; import { produce } from 'immer'; import { MdAdd, MdDeleteForever, MdExpandMore, MdFileUpload, MdVpnKey } from 'react-icons/md'; interface InternalQMCKeys { id: string; name: string; key: string; } export function PanelQMC() { const qmcSettings = useSelector(selectQM2CSettings); const [qmcKeys, setQMCKeys] = useState([]); const resetQmcKeys = () => { const result: InternalQMCKeys[] = []; for (const [name, key] of Object.entries(qmcSettings.keys)) { result.push({ id: name, name, key }); } setQMCKeys(result); }; const addRow = () => { setQMCKeys((prev) => [...prev, { id: nanoid(), key: '', name: '' }]); }; const updateKey = (prop: 'name' | 'key', id: string, e: React.ChangeEvent) => { setQMCKeys((prev) => produce(prev, (draft) => { const item = draft.find((item) => item.id === id); if (item) { item[prop] = e.target.value; } }) ); }; const applyChanges = () => { // }; const clearAll = () => setQMCKeys([]); useEffect(resetQmcKeys, [qmcSettings.keys]); return ( 密钥 {qmcKeys.map(({ id, key, name }, i) => ( {i + 1} updateKey('name', id, e)} /> updateKey('key', id, e)} /> {key.length || '?'} ))} {qmcKeys.length === 0 && 还没有添加密钥。} 密钥填充完毕后,按下「应用」来使用新的设置。 }> 1 alert('TODO!')} icon={}> 从文件导入 (JSON) }> 清空 ); }