aboutsummaryrefslogtreecommitdiff
path: root/apps/web/src/contexts
diff options
context:
space:
mode:
authorDhravya <[email protected]>2024-04-13 09:55:29 -0700
committerDhravya <[email protected]>2024-04-13 09:55:29 -0700
commit57e699a6ee35b161cf69aa82bec6c50f114b1055 (patch)
treea40d3c983c4d7661797e1c18591019cc09c3f083 /apps/web/src/contexts
parentmerge (diff)
parentfix edge case for getting metadata (diff)
downloadarchived-supermemory-57e699a6ee35b161cf69aa82bec6c50f114b1055.tar.xz
archived-supermemory-57e699a6ee35b161cf69aa82bec6c50f114b1055.zip
conflicts
Diffstat (limited to 'apps/web/src/contexts')
-rw-r--r--apps/web/src/contexts/MemoryContext.tsx80
1 files changed, 51 insertions, 29 deletions
diff --git a/apps/web/src/contexts/MemoryContext.tsx b/apps/web/src/contexts/MemoryContext.tsx
index 0438d75e..881ba45e 100644
--- a/apps/web/src/contexts/MemoryContext.tsx
+++ b/apps/web/src/contexts/MemoryContext.tsx
@@ -1,13 +1,17 @@
"use client";
import React, { useCallback } from "react";
-import { CollectedSpaces } from "../../types/memory";
import {
ChachedSpaceContent,
StoredContent,
storedContent,
StoredSpace,
} from "@/server/db/schema";
-import { addMemory, searchMemoriesAndSpaces } from "@/actions/db";
+import {
+ addMemory,
+ searchMemoriesAndSpaces,
+ addSpace,
+ fetchContentForSpace,
+} from "@/actions/db";
import { User } from "next-auth";
export type SearchResult = {
@@ -21,18 +25,15 @@ export const MemoryContext = React.createContext<{
spaces: StoredSpace[];
deleteSpace: (id: number) => Promise<void>;
freeMemories: StoredContent[];
- addSpace: (space: StoredSpace) => Promise<void>;
- addMemory: (
- memory: typeof storedContent.$inferInsert,
- spaces?: number[],
- ) => Promise<void>;
+ addSpace: typeof addSpace;
+ addMemory: typeof addMemory;
cachedMemories: ChachedSpaceContent[];
- search: (query: string) => Promise<SearchResult[]>;
+ search: typeof searchMemoriesAndSpaces;
}>({
spaces: [],
freeMemories: [],
- addMemory: async () => {},
- addSpace: async () => {},
+ addMemory: (() => {}) as unknown as typeof addMemory,
+ addSpace: (async () => {}) as unknown as typeof addSpace,
deleteSpace: async () => {},
cachedMemories: [],
search: async () => [],
@@ -60,39 +61,60 @@ export const MemoryProvider: React.FC<
ChachedSpaceContent[]
>(initialCachedMemories);
- const addSpace = async (space: StoredSpace) => {
- setSpaces((prev) => [...prev, space]);
- };
-
const deleteSpace = async (id: number) => {
setSpaces((prev) => prev.filter((s) => s.id !== id));
};
- const search = async (query: string) => {
- if (!user.id) {
- throw new Error("user id is not define");
- }
- const data = await searchMemoriesAndSpaces(user.id, query);
- return data as SearchResult[];
- };
-
// const fetchMemories = useCallback(async (query: string) => {
// const response = await fetch(`/api/memories?${query}`);
// }, []);
- const _addMemory = async (
- memory: typeof storedContent.$inferInsert,
- spaces: number[] = [],
- ) => {
- const content = await addMemory(memory, spaces);
+ const _addSpace: typeof addSpace = async (...params) => {
+ const { space: addedSpace, addedMemories } = (await addSpace(...params))!;
+
+ setSpaces((prev) => [...prev, addedSpace]);
+ const cachedMemories = (
+ await fetchContentForSpace(addedSpace.id, {
+ offset: 0,
+ limit: 3,
+ })
+ ).map((m) => ({ ...m, space: addedSpace.id }));
+
+ setCachedMemories((prev) => [...prev, ...cachedMemories]);
+
+ return {
+ space: addedSpace,
+ addedMemories,
+ };
+ };
+
+ const _addMemory: typeof addMemory = async (...params) => {
+ const { memory: addedMemory, addedToSpaces } = (await addMemory(
+ ...params,
+ ))!;
+
+ addedToSpaces.length > 0
+ ? setCachedMemories((prev) => [
+ ...prev,
+ ...addedToSpaces.map((s) => ({
+ ...addedMemory,
+ space: s.spaceId,
+ })),
+ ])
+ : setFreeMemories((prev) => [...prev, addedMemory]);
+
+ return {
+ memory: addedMemory,
+ addedToSpaces,
+ };
};
return (
<MemoryContext.Provider
value={{
- search,
+ search: searchMemoriesAndSpaces,
spaces,
- addSpace,
+ addSpace: _addSpace,
deleteSpace,
freeMemories,
cachedMemories,