({
items,
folders,
selectedId,
onSelect,
itemIcon,
itemNameKey,
isItem,
batchUpdateItemsOrder,
createItem,
updateItem,
deleteItem,
copyItem,
createFolder,
updateFolder,
deleteFolder,
clearFolder,
toggleFolderExpanded,
defaultItemId,
emptyText = '暂无配置',
addItemText = '新建配置',
createItemLabel = '新建配置',
createFolderLabel = '新建文件夹'
}: ConfigTreeProps<T>)
| 40 | } |
| 41 | |
| 42 | export function ConfigTree<T extends ConfigItemBase>({ |
| 43 | items, |
| 44 | folders, |
| 45 | selectedId, |
| 46 | onSelect, |
| 47 | itemIcon, |
| 48 | itemNameKey, |
| 49 | isItem, |
| 50 | batchUpdateItemsOrder, |
| 51 | createItem, |
| 52 | updateItem, |
| 53 | deleteItem, |
| 54 | copyItem, |
| 55 | createFolder, |
| 56 | updateFolder, |
| 57 | deleteFolder, |
| 58 | clearFolder, |
| 59 | toggleFolderExpanded, |
| 60 | defaultItemId, |
| 61 | emptyText = '暂无配置', |
| 62 | addItemText = '新建配置', |
| 63 | createItemLabel = '新建配置', |
| 64 | createFolderLabel = '新建文件夹' |
| 65 | }: ConfigTreeProps<T>): React.JSX.Element { |
| 66 | const { showDeleteConfirm } = useConfirmDialog() |
| 67 | const [multiSelect, setMultiSelect] = useState(false) |
| 68 | const [checkedKeys, setCheckedKeys] = useState<string[]>([]) |
| 69 | |
| 70 | const handleCreate = (): void => { |
| 71 | const item = createItem() |
| 72 | onSelect(item.id) |
| 73 | } |
| 74 | |
| 75 | const handleCreateFolder = (): void => { |
| 76 | const folder = createFolder('新文件夹') |
| 77 | onSelect(folder.id) |
| 78 | } |
| 79 | |
| 80 | const handleCreateItemInFolder = useCallback( |
| 81 | (folderId: string): void => { |
| 82 | const item = createItem(folderId) |
| 83 | onSelect(item.id) |
| 84 | }, |
| 85 | [createItem, onSelect] |
| 86 | ) |
| 87 | |
| 88 | const handleCreateSubFolder = useCallback( |
| 89 | (parentFolderId: string): void => { |
| 90 | const folder = createFolder('新文件夹', parentFolderId) |
| 91 | onSelect(folder.id) |
| 92 | }, |
| 93 | [createFolder, onSelect] |
| 94 | ) |
| 95 | |
| 96 | const handleToggleMultiSelect = (): void => { |
| 97 | setMultiSelect(!multiSelect) |
| 98 | if (multiSelect) { |
| 99 | setCheckedKeys([]) |
nothing calls this directly
no test coverage detected