import { useCallback } from 'react'; import type { CSSProperties, ReactNode } from 'react'; import { Tree, List, Input, Button, ButtonGroup, Dropdown, Typography, Toast, } from '@douyinfe/semi-ui'; import { IconCopyAdd, IconDelete, IconSearch, } from '@douyinfe/semi-icons'; import { IconModal, IconToken as LabIconToken, IconTreeSelect } from '@douyinfe/semi-icons-lab'; import { useNoteStore } from '../../stores/useNoteStore'; import { useUIStore } from '../../stores/useUIStore'; import noteService from '../../services/note.service'; import type { INote, ITreeNode } from '../../types'; const NAV_ITEMS = ['首页', '设置', '已删除'] as const; type NavItem = (typeof NAV_ITEMS)[number]; interface NoteTreeProps { onRefreshTree: () => void; onNavItemClick: (item: NavItem) => void; onSearch: () => void; } export default function NoteTree({ onRefreshTree, onNavItemClick, onSearch }: NoteTreeProps) { const { treeData, viewData, currentNoteId, setCurrentNote } = useNoteStore(); const { openDeleteConfirm, setSearchQuery, searchQuery, setActiveView } = useUIStore(); const toNoteId = (id: string | number) => Number(id); const loadNote = useCallback( (id: number) => { noteService.get(id).then( (res) => { const note = res.data; setCurrentNote(note.id, note.title, note.context); setActiveView('note'); }, () => Toast.error('加载笔记失败'), ); }, [setCurrentNote, setActiveView], ); const addNote = useCallback( (pid: number) => { noteService.add(pid).then( () => { Toast.success('已添加'); onRefreshTree(); }, () => Toast.error('添加失败'), ); }, [onRefreshTree], ); const treeStyle: CSSProperties = { height: 550, border: '1px solid var(--semi-color-border)', position: 'sticky', top: '85px', }; const renderLabel = (label: ReactNode, item: ITreeNode) => (