From 4f31d10da486046e8e43277fe95d997803e8efb7 Mon Sep 17 00:00:00 2001 From: Michael Zhang Date: Mon, 27 May 2024 02:02:19 -0500 Subject: [PATCH] order --- app/package.json | 1 + app/src/App.tsx | 27 ++++++++++++++++-------- app/src/components/SearchBar.module.scss | 1 + app/src/components/SearchBar.tsx | 10 ++++----- crates/panorama-daemon/src/node.rs | 6 +++++- pnpm-lock.yaml | 4 +++- 6 files changed, 33 insertions(+), 16 deletions(-) diff --git a/app/package.json b/app/package.json index 96823fd..80d8b19 100644 --- a/app/package.json +++ b/app/package.json @@ -24,6 +24,7 @@ "date-fns": "^3.6.0", "hast-util-to-jsx-runtime": "^2.3.0", "hast-util-to-mdast": "^10.1.0", + "immutable": "^4.3.6", "javascript-time-ago": "^2.5.10", "jotai": "^2.8.1", "katex": "^0.16.10", diff --git a/app/src/App.tsx b/app/src/App.tsx index 634417d..62bef67 100644 --- a/app/src/App.tsx +++ b/app/src/App.tsx @@ -11,36 +11,38 @@ import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import TimeAgo from "javascript-time-ago"; import en from "javascript-time-ago/locale/en"; import Sidebar from "./components/Sidebar"; -import { atom, useAtom } from "jotai"; +import { atom, useAtom, useAtomValue } from "jotai"; +import { OrderedMap, OrderedSet } from "immutable"; const queryClient = new QueryClient(); TimeAgo.addDefaultLocale(en); -export const nodesOpenedAtom = atom([]); +export const nodesOpenedAtom = atom>(OrderedSet()); function App() { - const [nodesOpened, setNodesOpened] = useAtom(nodesOpenedAtom); + const nodesOpened = useAtomValue(nodesOpenedAtom); + const openNode = useOpenNode(); // Open today's journal entry if it's not already opened useEffect(() => { (async () => { console.log("ndoes", nodesOpened); - if (nodesOpened.length === 0) { + if (nodesOpened.size === 0) { console.log("Opening today's entry."); const resp = await fetch( "http://localhost:5195/journal/get_todays_journal_id", ); const data = await resp.json(); console.log("resp", data); - setNodesOpened([data.node_id]); + openNode(data.node_id); } })(); - }, [nodesOpened]); + }, [nodesOpened, openNode]); - const nodes = nodesOpened.map((nodeId) => ( - - )); + const nodes = nodesOpened + .reverse() + .map((nodeId) => ); return ( @@ -57,3 +59,10 @@ function App() { } export default App; + +export function useOpenNode() { + const [nodesOpened, setNodesOpened] = useAtom(nodesOpenedAtom); + return (node_id: string) => { + setNodesOpened(nodesOpened.remove(node_id).add(node_id)); + }; +} diff --git a/app/src/components/SearchBar.module.scss b/app/src/components/SearchBar.module.scss index 5544b4d..3bf84a0 100644 --- a/app/src/components/SearchBar.module.scss +++ b/app/src/components/SearchBar.module.scss @@ -49,5 +49,6 @@ .subtitle { font-size: .75rem; + color: rgba(0, 0, 0, 0.8); } } \ No newline at end of file diff --git a/app/src/components/SearchBar.tsx b/app/src/components/SearchBar.tsx index 58c9ed2..299c144 100644 --- a/app/src/components/SearchBar.tsx +++ b/app/src/components/SearchBar.tsx @@ -14,7 +14,7 @@ import { import { useDebounce } from "use-debounce"; import { useEffect, useState } from "react"; import { atom, useAtom, useSetAtom } from "jotai"; -import { nodesOpenedAtom } from "../App"; +import { nodesOpenedAtom, useOpenNode } from "../App"; const searchQueryAtom = atom(""); const showMenuAtom = atom(false); @@ -87,25 +87,25 @@ export default function SearchBar() { } function SearchMenu({ results }) { - const setNodesOpened = useSetAtom(nodesOpenedAtom); const setSearchQuery = useSetAtom(searchQueryAtom); const setShowMenu = useSetAtom(showMenuAtom); + const openNode = useOpenNode(); return (
{results.map((result) => ( ))}
diff --git a/crates/panorama-daemon/src/node.rs b/crates/panorama-daemon/src/node.rs index 147e0e2..cec251f 100644 --- a/crates/panorama-daemon/src/node.rs +++ b/crates/panorama-daemon/src/node.rs @@ -233,6 +233,10 @@ pub async fn search_nodes( State(state): State, Query(query): Query, ) -> AppResult> { + // TODO: This is temporary, there may be more ways to search so tacking on * + // at the end may destroy some queries + let query = format!("{}*", query.query); + let results = state.db.run_script( " results[node_id, content, score] := ~journal:text_index {node_id, content, | @@ -249,7 +253,7 @@ pub async fn search_nodes( :order -score ", btmap! { - "q".to_owned() => DataValue::from(query.query), + "q".to_owned() => DataValue::from(query), }, ScriptMutability::Immutable, )?; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9a7c421..f56528c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -53,6 +53,9 @@ importers: hast-util-to-mdast: specifier: ^10.1.0 version: 10.1.0 + immutable: + specifier: ^4.3.6 + version: 4.3.6 javascript-time-ago: specifier: ^2.5.10 version: 2.5.10 @@ -1975,7 +1978,6 @@ packages: /immutable@4.3.6: resolution: {integrity: sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==} - dev: true /import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}