diff --git a/Spacefile b/Spacefile index 9e463f7..40091d6 100644 --- a/Spacefile +++ b/Spacefile @@ -8,3 +8,4 @@ micros: primary: true commands: - NODE_OPTIONS="--max-old-space-size=1024" npm run build + dev: npm run dev diff --git a/package-lock.json b/package-lock.json index ed27856..9c0fb1c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43,6 +43,7 @@ "@types/react-dom": "^18.0.11", "@vitejs/plugin-react": "^4.0.4", "buffer": "^5.7.1", + "deta": "^2.0.0-rc.1", "path-browserify": "^1.0.1", "process": "^0.11.10", "vite": "^4.4.9" @@ -2643,6 +2644,15 @@ "node": ">=6" } }, + "node_modules/deta": { + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/deta/-/deta-2.0.0-rc.1.tgz", + "integrity": "sha512-NsNVMB54m2WDZQUIWmH51C8kvtUi/U3M2iuj/WdmL2qCmPhhVxsRP2skloAcjk4pgJRklIIEYPGo808vGBDY8w==", + "dev": true, + "dependencies": { + "node-fetch": "^2.6.7" + } + }, "node_modules/detect-libc": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", @@ -5723,6 +5733,26 @@ } } }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/node-releases": { "version": "2.0.13", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", @@ -6927,6 +6957,12 @@ "node": ">=8.0" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, "node_modules/trim-lines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", @@ -7409,6 +7445,22 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -9262,6 +9314,15 @@ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==" }, + "deta": { + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/deta/-/deta-2.0.0-rc.1.tgz", + "integrity": "sha512-NsNVMB54m2WDZQUIWmH51C8kvtUi/U3M2iuj/WdmL2qCmPhhVxsRP2skloAcjk4pgJRklIIEYPGo808vGBDY8w==", + "dev": true, + "requires": { + "node-fetch": "^2.6.7" + } + }, "detect-libc": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", @@ -11316,6 +11377,15 @@ "styled-jsx": "5.1.1" } }, + "node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + } + }, "node-releases": { "version": "2.0.13", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", @@ -12151,6 +12221,12 @@ "is-number": "^7.0.0" } }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, "trim-lines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", @@ -12425,6 +12501,22 @@ } } }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index 7d495d7..88e66d5 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "@types/react-dom": "^18.0.11", "@vitejs/plugin-react": "^4.0.4", "buffer": "^5.7.1", + "deta": "^2.0.0-rc.1", "path-browserify": "^1.0.1", "process": "^0.11.10", "vite": "^4.4.9" diff --git a/src/components/Chats.tsx b/src/components/Chats.tsx index 5f15bf0..20869bd 100644 --- a/src/components/Chats.tsx +++ b/src/components/Chats.tsx @@ -1,9 +1,8 @@ import { ActionIcon, Flex, Menu } from "@mantine/core"; import { IconDotsVertical, IconMessages } from "@tabler/icons-react"; import { Link } from "@tanstack/react-location"; -import { useLiveQuery } from "dexie-react-hooks"; -import { useMemo } from "react"; -import { db } from "../db"; +import { useEffect, useMemo, useState } from "react"; +import { Chat, detaDB } from "../db"; import { useChatId } from "../hooks/useChatId"; import { DeleteChatModal } from "./DeleteChatModal"; import { EditChatModal } from "./EditChatModal"; @@ -11,9 +10,23 @@ import { MainLink } from "./MainLink"; export function Chats({ search }: { search: string }) { const chatId = useChatId(); - const chats = useLiveQuery(() => - db.chats.orderBy("createdAt").reverse().toArray() - ); + + const [chats, setChats] = useState(); + + useEffect(() => { + // fetch data + const dataFetch = async () => { + const { items } = await detaDB.chats.fetch(); + + setChats(items as unknown as Chat[]); + }; + + dataFetch(); + }, []); + + // const chats = useLiveQuery(() => + // db.chats.orderBy("createdAt").reverse().toArray() + // ); const filteredChats = useMemo( () => (chats ?? []).filter((chat) => { @@ -27,8 +40,8 @@ export function Chats({ search }: { search: string }) { <> {filteredChats.map((chat) => ( ({ marginTop: 1, "&:hover, &.active": { @@ -39,7 +52,7 @@ export function Chats({ search }: { search: string }) { }, })} > - + } color="teal" diff --git a/src/components/Layout.tsx b/src/components/Layout.tsx index 3c39330..fcb53d4 100644 --- a/src/components/Layout.tsx +++ b/src/components/Layout.tsx @@ -29,10 +29,8 @@ import { IconX, } from "@tabler/icons-react"; import { Link, Outlet, useNavigate, useRouter } from "@tanstack/react-location"; -import { useLiveQuery } from "dexie-react-hooks"; -import { nanoid } from "nanoid"; import { useEffect, useState } from "react"; -import { db } from "../db"; +import { Chat, db, detaDB, generateKey } from "../db"; import { useChatId } from "../hooks/useChatId"; import { Chats } from "./Chats"; import { CreatePromptModal } from "./CreatePromptModal"; @@ -58,9 +56,17 @@ export function Layout() { const [search, setSearch] = useState(""); const chatId = useChatId(); - const chat = useLiveQuery(async () => { - if (!chatId) return null; - return db.chats.get(chatId); + + const [chat, setChat] = useState(); + + useEffect(() => { + const dataFetch = async () => { + const item = await detaDB.chats.get(chatId!); + + setChat(item as unknown as Chat); + }; + + dataFetch(); }, [chatId]); const border = `${rem(1)} solid ${ @@ -133,14 +139,21 @@ export function Layout() {