From 4315c8353216af5f24e6e5848a5f2817f83278c8 Mon Sep 17 00:00:00 2001 From: Jack Andrews Date: Thu, 7 Nov 2024 00:50:03 +0000 Subject: [PATCH] chore: document filters --- apps/client/pages/documents/index.tsx | 61 ++++++++++++++++++++++++--- 1 file changed, 55 insertions(+), 6 deletions(-) diff --git a/apps/client/pages/documents/index.tsx b/apps/client/pages/documents/index.tsx index b843398dd..f44293b71 100644 --- a/apps/client/pages/documents/index.tsx +++ b/apps/client/pages/documents/index.tsx @@ -3,9 +3,17 @@ import { getCookie } from "cookies-next"; import { Ellipsis } from "lucide-react"; import useTranslation from "next-translate/useTranslation"; import { useRouter } from "next/router"; -import { useEffect } from "react"; +import { useEffect, useState } from "react"; import { useQuery } from "react-query"; import { useUser } from "../../store/session"; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/shadcn/ui/select"; +import { Input } from "@/shadcn/ui/input"; function groupDocumentsByDate(notebooks) { const today = new Date(); @@ -66,6 +74,8 @@ async function fetchNotebooks(token) { export default function NoteBooksIndex() { const { t } = useTranslation("peppermint"); + const [sortBy, setSortBy] = useState("updatedAt"); + const [searchQuery, setSearchQuery] = useState(""); const token = getCookie("session"); const { data, status, error } = useQuery("getUsersNotebooks", () => @@ -94,6 +104,23 @@ export default function NoteBooksIndex() { }); } + const sortedAndFilteredNotebooks = (notebooks) => { + if (!notebooks) return []; + + // First filter by search query + let filtered = notebooks.filter((notebook) => + notebook.title.toLowerCase().includes(searchQuery.toLowerCase()) + ); + + // Then sort + return filtered.sort((a, b) => { + const dateA = new Date(a[sortBy]); + const dateB = new Date(b[sortBy]); + //@ts-ignore + return dateB - dateA; + }); + }; + return (
@@ -101,6 +128,23 @@ export default function NoteBooksIndex() {

Documents

+
+ setSearchQuery(e.target.value)} + className="max-w-xs" + /> + +
{/*

Documents can be private, shared with others, or public.

*/} @@ -118,13 +162,18 @@ export default function NoteBooksIndex() {
) : (
-
- +
+
+ +
+ {data?.notebooks && - Object.entries(groupDocumentsByDate(data.notebooks)).map( + Object.entries( + groupDocumentsByDate(sortedAndFilteredNotebooks(data.notebooks)) + ).map( ([period, docs]) => Array.isArray(docs) && docs.length > 0 && (