diff --git a/packages/app/src/components/quick-search/content/index.tsx b/packages/app/src/components/quick-search/content/index.tsx index 136d4fb222..d416c3598d 100644 --- a/packages/app/src/components/quick-search/content/index.tsx +++ b/packages/app/src/components/quick-search/content/index.tsx @@ -1,11 +1,15 @@ import React from 'react'; -import JumpTo from './JumpTo'; +import JumpTo from './jumpTo'; import { Command } from 'cmdk'; import SearchResult from './searchResult'; -const Result = (props: { result: string }) => { +const Result = (props: { query: string }) => { + const query = props.query; + return ( - {props.result ? : } + + {query ? : } + ); }; diff --git a/packages/app/src/components/quick-search/content/searchResult/NotFound.tsx b/packages/app/src/components/quick-search/content/searchResult/NotFound.tsx index d44a891b4d..4a53546f9d 100644 --- a/packages/app/src/components/quick-search/content/searchResult/NotFound.tsx +++ b/packages/app/src/components/quick-search/content/searchResult/NotFound.tsx @@ -1,11 +1,12 @@ import React from 'react'; import { Command, useCommandState } from 'cmdk'; -const noResult = () => { +const NoResult = () => { // eslint-disable-next-line react-hooks/rules-of-hooks + const search = useCommandState(state => state.search); // eslint-disable-next-line react/no-unescaped-entities return No results found for "{search}".; }; -export default noResult; +export default NoResult; diff --git a/packages/app/src/components/quick-search/content/searchResult/index.tsx b/packages/app/src/components/quick-search/content/searchResult/index.tsx index 33f14b08d2..e921b527d6 100644 --- a/packages/app/src/components/quick-search/content/searchResult/index.tsx +++ b/packages/app/src/components/quick-search/content/searchResult/index.tsx @@ -1,18 +1,41 @@ -import React from 'react'; -import NoResult from './NotFound'; +import { useEffect, useState } from 'react'; +import NoResult from './notFound'; import { Command } from 'cmdk'; +import { PageMeta, useEditor } from '@/providers/editor-provider'; -const SearchResult = () => { +function renderPages(resultsPageMeta: PageMeta[]) { + return resultsPageMeta.map(resultPageMeta => { + return ( + + {resultPageMeta.title} + + ); + }); +} + +const SearchResult = (props: { query: string }) => { + const { search, getPageMeta, openPage } = useEditor(); + const [results, setResults] = useState(new Map()); + const query = props.query; + useEffect(() => { + return setResults(search(query)); + //Save the Map obtained from the search as state + }, [query]); + + const resultsPageMeta: PageMeta[] = []; + + results.forEach(pageId => { + if (!pageId) { + return; + } + const pageMeta = getPageMeta(pageId); + if (pageMeta) { + //Get pageMeta just like { title , id , text...} + resultsPageMeta.push(pageMeta); + } + }); return ( - <> - - - a - b - c - - Apple - + <>{resultsPageMeta.length ? renderPages(resultsPageMeta) : } ); }; diff --git a/packages/app/src/components/quick-search/footer.tsx b/packages/app/src/components/quick-search/footer.tsx index eb4046a2de..7f176c9fb0 100644 --- a/packages/app/src/components/quick-search/footer.tsx +++ b/packages/app/src/components/quick-search/footer.tsx @@ -6,17 +6,19 @@ import { useModal } from '@/providers/global-modal-provider'; import { IconButton } from '@/ui/button'; const QuickSearchFooter = () => { - const { createPage } = useEditor(); + const { createPage, getPageMeta, openPage } = useEditor(); const { triggerQuickSearchModal } = useModal(); return ( - - { - createPage(); - triggerQuickSearchModal(); - }} - /> + { + const page = createPage(); + const pageMeta = getPageMeta((await page).id); + pageMeta && openPage(pageMeta.id); + triggerQuickSearchModal(); + }} + > + New page diff --git a/packages/app/src/components/quick-search/index.tsx b/packages/app/src/components/quick-search/index.tsx index 1c0fc5e0a4..c0ee637c92 100644 --- a/packages/app/src/components/quick-search/index.tsx +++ b/packages/app/src/components/quick-search/index.tsx @@ -6,12 +6,11 @@ import { StyledModalDivider, StyledShortcut, } from './style'; -import Input from './Input'; +import Input from './input'; import Result from './content'; -import QuickSearchFooter from './Footer'; +import QuickSearchFooter from './footer'; import { Command } from 'cmdk'; import { useEffect, useState } from 'react'; -import { useEditor } from '@/providers/editor-provider'; import { useModal } from '@/providers/global-modal-provider'; type TransitionsModalProps = { open: boolean; @@ -22,13 +21,7 @@ const isMac = () => { }; export const QuickSearch = ({ open, onClose }: TransitionsModalProps) => { const [query, setQuery] = useState(''); - const { search } = useEditor(); - const [result, setResult] = useState({}); - const { pageList } = useEditor(); const { triggerQuickSearchModal } = useModal(); - // useEffect(() => { - // setResult(search(query, { enrich: true })); - // }, [query]); useEffect(() => { const down = (e: KeyboardEvent) => { if (e.key === 'k' && e.metaKey) { @@ -64,7 +57,7 @@ export const QuickSearch = ({ open, onClose }: TransitionsModalProps) => { - + diff --git a/packages/app/src/providers/editor-provider/interface.ts b/packages/app/src/providers/editor-provider/interface.ts index 11201c11f8..e1fbfe514d 100644 --- a/packages/app/src/providers/editor-provider/interface.ts +++ b/packages/app/src/providers/editor-provider/interface.ts @@ -22,5 +22,5 @@ export type EditorHandlers = { unFavoritePage: (pageId: string) => void; toggleFavoritePage: (pageId: string) => void; permanentlyDeletePage: (pageId: string) => void; - search: (query: QueryContent) => any; + search: (query: QueryContent) => Map; }; diff --git a/packages/app/src/providers/editor-provider/useEditorHandler.ts b/packages/app/src/providers/editor-provider/useEditorHandler.ts index 3341ddbd52..04199ff486 100644 --- a/packages/app/src/providers/editor-provider/useEditorHandler.ts +++ b/packages/app/src/providers/editor-provider/useEditorHandler.ts @@ -50,9 +50,7 @@ export const useEditorHandler = (workspace?: Workspace): EditorHandlers => { } }, search: (query: QueryContent) => { - if (query) { - return workspace!.search(query); - } + return workspace!.search(query); }, }; };