import { useEffect, useCallback, useState } from 'react'; import type { CSSProperties } from 'react'; import { Layout, Nav, Button, Breadcrumb, BackTop, Avatar, Toast, SideSheet, Row, List, ButtonGroup, Typography, } from '@douyinfe/semi-ui'; import { IconBell, IconExit, IconArrowUp, IconMenu, IconCode, } from '@douyinfe/semi-icons'; import { IconDescriptions } from '@douyinfe/semi-icons-lab'; import { useAuthStore } from '../stores/useAuthStore'; import { useNoteStore } from '../stores/useNoteStore'; import { useUIStore } from '../stores/useUIStore'; import noteService from '../services/note.service'; import authService from '../services/auth.service'; import NoteTree from '../components/sidebar/NoteTree'; import NoteEditor from '../components/note/NoteEditor'; import HomePage from './home/HomePage'; import DeleteModal from '../components/modals/DeleteModal'; import PasswordModal from '../components/modals/PasswordModal'; import TrashListModal from '../components/modals/TrashListModal'; import type { INote } from '../types'; import './styles.css'; const topStyle: CSSProperties = { display: 'flex', alignItems: 'center', justifyContent: 'center', height: 30, width: 30, borderRadius: '100%', backgroundColor: 'var(--semi-color-primary)', color: '#fff', bottom: 65, right: 20, }; export default function NotePage() { const user = useAuthStore((s) => s.user); const { setTreeData, setHomeData, setViewData } = useNoteStore(); const { activeView, siderFlag, sideVisible, setActiveView, setSiderFlag, setSideVisible, setDeleteModalVisible, setUpdatePasswordModalVisible, } = useUIStore(); const [trashList, setTrashList] = useState([]); const loadTree = useCallback(() => { noteService.getAllContent().then( (res) => setTreeData(res.data), () => Toast.error('加载笔记树失败'), ); }, [setTreeData]); useEffect(() => { loadTree(); noteService.getHomeData('1', '0').then( (res) => setHomeData(res.data), () => {}, ); noteService.getHomeData('3', '0').then( (res) => setViewData(res.data.slice(0, 10)), () => {}, ); }, [loadTree, setHomeData, setViewData]); const handleLogout = useCallback(() => { void authService.logout(); }, []); const handleNavItemClick = useCallback( (item: string) => { if (item === '首页') { setActiveView('home'); } else if (item === '设置') { setActiveView('settings'); } else if (item === '已删除') { noteService.getHomeData('4', '0').then( (res) => { setTrashList(res.data); setDeleteModalVisible(true); }, () => Toast.error('加载回收站失败'), ); } }, [setActiveView, setDeleteModalVisible], ); const handleSearch = useCallback(() => { const query = useUIStore.getState().searchQuery; setActiveView('search'); noteService.getHomeData('0', query).then( (res) => setHomeData(res.data), () => Toast.error('搜索失败'), ); }, [setActiveView, setHomeData]); const handleBreakpoint = useCallback( (_screen: string, matched: boolean) => { setSiderFlag(matched); }, [setSiderFlag], ); const { Header, Footer, Sider, Content } = Layout; const siderWidth = siderFlag ? '265px' : '0px'; return (
{siderFlag && ( )} {/* Delete confirmation modal */} {/* Change password modal */} {/* Trash / deleted notes modal */} {/* Main content area */} {activeView === 'note' && ( )} {activeView === 'home' && (
)} {activeView === 'settings' && (
Settings


)} {activeView === 'search' && (
{ setActiveView('note'); noteService.get(id).then( (res) => { const note = res.data; useNoteStore.getState().setCurrentNote(note.id, note.title, note.context); }, () => Toast.error('加载失败'), ); }} />
)}
Copyright © 2023 Chuyaoyuan. CYY.IM. 客服 反馈建议
); } /** Inline search results — reads homeData (set by search) from store */ function SearchResults({ onViewNote }: { onViewNote: (id: number) => void }) { const homeData = useNoteStore((s) => s.homeData); const searchQuery = useUIStore((s) => s.searchQuery); return ( <>

搜索:{searchQuery}

( NOTE} main={
{item.title} 创建时间:{item.createtime},更新时间:{item.updatetime}。
} extra={ } /> )} />
); }