import { UNTITLED_WORKSPACE_NAME } from '@affine/env'; import { useAFFiNEI18N } from '@affine/i18n/hooks'; import { EdgelessIcon, PageIcon } from '@blocksuite/icons'; import { assertExists } from '@blocksuite/store'; import { useBlockSuitePageMeta } from '@toeverything/hooks/use-block-suite-page-meta'; import { useBlockSuiteWorkspaceHelper } from '@toeverything/hooks/use-block-suite-workspace-helper'; import { Command } from 'cmdk'; import { useAtomValue } from 'jotai'; import Image from 'next/legacy/image'; import type { NextRouter } from 'next/router'; import type { Dispatch, FC, SetStateAction } from 'react'; import { useEffect } from 'react'; import { recentPageSettingsAtom } from '../../../atoms'; import { useRouterHelper } from '../../../hooks/use-router-helper'; import type { BlockSuiteWorkspace } from '../../../shared'; import { useSwitchToConfig } from './config'; import { StyledListItem, StyledNotFound } from './style'; export type ResultsProps = { blockSuiteWorkspace: BlockSuiteWorkspace; query: string; onClose: () => void; setShowCreatePage: Dispatch>; router: NextRouter; }; export const Results: FC = ({ query, blockSuiteWorkspace, setShowCreatePage, router, onClose, }) => { useBlockSuiteWorkspaceHelper(blockSuiteWorkspace); const pageList = useBlockSuitePageMeta(blockSuiteWorkspace); assertExists(blockSuiteWorkspace.id); const List = useSwitchToConfig(blockSuiteWorkspace.id); const recentPageSetting = useAtomValue(recentPageSettingsAtom); const t = useAFFiNEI18N(); const { jumpToPage } = useRouterHelper(router); const results = blockSuiteWorkspace.search(query); const pageIds = [...results.values()]; const resultsPageMeta = pageList.filter( page => pageIds.indexOf(page.id) > -1 && !page.trash ); const recentlyViewedItem = recentPageSetting.filter(recent => { const page = pageList.find(page => recent.id === page.id); if (!page) { return false; } else { return page.trash !== true; } }); useEffect(() => { setShowCreatePage(!resultsPageMeta.length); //Determine whether to display the ‘+ New page’ }, [resultsPageMeta.length, setShowCreatePage]); if (!query) { return ( <> {recentlyViewedItem.length > 0 && ( {recentlyViewedItem.map(recent => { const page = pageList.find(page => recent.id === page.id); assertExists(page); return ( { onClose(); jumpToPage(blockSuiteWorkspace.id, page.id).catch( console.error ); }} > {recent.mode === 'edgeless' ? ( ) : ( )} {page.title || UNTITLED_WORKSPACE_NAME} ); })} )} {List.map(link => { return ( { onClose(); router.push(link.href).catch(console.error); }} > {link.title} ); })} ); } if (!resultsPageMeta.length) { return ( {t['Find 0 result']()} no result ); } return ( {resultsPageMeta.map(result => { return ( { onClose(); assertExists(blockSuiteWorkspace.id); jumpToPage(blockSuiteWorkspace.id, result.id).catch(error => console.error(error) ); }} value={result.id} > {result.mode === 'edgeless' ? : } {result.title || UNTITLED_WORKSPACE_NAME} ); })} ); };