import { useTranslation } from '@affine/i18n'; import { EdgelessIcon, PaperIcon } from '@blocksuite/icons'; import { assertExists } from '@blocksuite/store'; import { Command } from 'cmdk'; import { NextRouter } from 'next/router'; import React, { Dispatch, SetStateAction, useEffect, useState } from 'react'; import { useRecentlyViewed } from '../../../hooks/affine/use-recent-views'; import { useBlockSuiteWorkspaceHelper } from '../../../hooks/use-blocksuite-workspace-helper'; import { usePageMeta } from '../../../hooks/use-page-meta'; import { BlockSuiteWorkspace } from '../../../shared'; import { useSwitchToConfig } from './config'; import { NoResultSVG } from './NoResultSVG'; import { StyledListItem, StyledNotFound } from './style'; export type ResultsProps = { blockSuiteWorkspace: BlockSuiteWorkspace; query: string; loading: boolean; onClose: () => void; setShowCreatePage: Dispatch>; router: NextRouter; }; export const Results: React.FC = ({ query, loading, blockSuiteWorkspace, setShowCreatePage, router, onClose, }) => { useBlockSuiteWorkspaceHelper(blockSuiteWorkspace); const pageList = usePageMeta(blockSuiteWorkspace); assertExists(blockSuiteWorkspace.room); const List = useSwitchToConfig(blockSuiteWorkspace.room); const [results, setResults] = useState(new Map()); const recentlyViewed = useRecentlyViewed(); const { t } = useTranslation(); useEffect(() => { setResults(blockSuiteWorkspace.search(query)); //Save the Map obtained from the search as state // eslint-disable-next-line react-hooks/exhaustive-deps }, [query, setResults]); const pageIds = [...results.values()]; const resultsPageMeta = pageList.filter( page => pageIds.indexOf(page.id) > -1 && !page.trash ); useEffect(() => { setShowCreatePage(!resultsPageMeta.length); //Determine whether to display the ‘+ New page’ }, [resultsPageMeta.length, setShowCreatePage]); return loading ? null : ( <> {query ? ( resultsPageMeta.length ? ( {resultsPageMeta.map(result => { return ( { onClose(); assertExists(blockSuiteWorkspace.room); // fixme: refactor to `useRouterHelper` router.push({ pathname: '/workspace/[workspaceId]/[pageId]', query: { workspaceId: blockSuiteWorkspace.room, pageId: result.id, }, }); }} value={result.id} > {result.mode === 'edgeless' ? ( ) : ( )} {result.title} ); })} ) : ( {t('Find 0 result')} ) ) : (
{recentlyViewed.length > 0 && ( {recentlyViewed.map(recent => { return ( { onClose(); router.push({ pathname: '/workspace/[workspaceId]/[pageId]', query: { workspaceId: blockSuiteWorkspace.room, pageId: recent.id, }, }); }} > {recent.mode === 'edgeless' ? ( ) : ( )} {recent.title} ); })} )} {List.map(link => { return ( { onClose(); router.push(link.href); }} > {link.title} ); })}
)} ); };