aboutsummaryrefslogtreecommitdiff
path: root/apps/web/src/app
diff options
context:
space:
mode:
authorYash <[email protected]>2024-04-05 08:27:54 +0000
committerYash <[email protected]>2024-04-05 08:27:54 +0000
commit97988798bdc8b225ec6dbe7b0a725bfde6059157 (patch)
tree3b673f17600332f36747f381b1ad83acb7baff9a /apps/web/src/app
parentcontext added (diff)
parentmake ext work with dev mode (diff)
downloadsupermemory-97988798bdc8b225ec6dbe7b0a725bfde6059157.tar.xz
supermemory-97988798bdc8b225ec6dbe7b0a725bfde6059157.zip
Merge branch 'new-ui' of https://github.com/Dhravya/supermemory into new-ui
Diffstat (limited to 'apps/web/src/app')
-rw-r--r--apps/web/src/app/MessagePoster.tsx6
-rw-r--r--apps/web/src/app/api/store/route.ts43
-rw-r--r--apps/web/src/app/page.tsx109
-rw-r--r--apps/web/src/app/ui/content.tsx2
-rw-r--r--apps/web/src/app/ui/page.tsx18
5 files changed, 47 insertions, 131 deletions
diff --git a/apps/web/src/app/MessagePoster.tsx b/apps/web/src/app/MessagePoster.tsx
index 76bbc4dd..3d0bbe7e 100644
--- a/apps/web/src/app/MessagePoster.tsx
+++ b/apps/web/src/app/MessagePoster.tsx
@@ -8,11 +8,7 @@ function MessagePoster({ jwt }: { jwt: string }) {
window.postMessage({ jwt }, '*');
}, [jwt]);
- return (
- <button onClick={() => window.postMessage({ jwt }, '*')}>
- Send auth token to extension
- </button>
- );
+ return null;
}
export default MessagePoster;
diff --git a/apps/web/src/app/api/store/route.ts b/apps/web/src/app/api/store/route.ts
index 46e4cdfb..3a4f7e27 100644
--- a/apps/web/src/app/api/store/route.ts
+++ b/apps/web/src/app/api/store/route.ts
@@ -1,6 +1,6 @@
import { db } from "@/server/db";
import { eq } from "drizzle-orm";
-import { sessions, storedContent, userStoredContent, users } from "@/server/db/schema";
+import { sessions, storedContent, users } from "@/server/db/schema";
import { type NextRequest, NextResponse } from "next/server";
import { env } from "@/env";
import { getMetaData } from "@/server/helpers";
@@ -38,32 +38,19 @@ export async function POST(req: NextRequest) {
let id: number | undefined = undefined;
- const storedCont = await db.select().from(storedContent).where(eq(storedContent.url, data.url)).limit(1)
-
- if (storedCont.length > 0) {
- id = storedCont[0].id;
- } else {
- const storedContentId = await db.insert(storedContent).values({
- content: data.pageContent,
- title: metadata.title,
- description: metadata.description,
- url: data.url,
- baseUrl: metadata.baseUrl,
- image: metadata.image,
- savedAt: new Date()
- })
-
- id = storedContentId.meta.last_row_id;
- }
+ const storedContentId = await db.insert(storedContent).values({
+ content: data.pageContent,
+ title: metadata.title,
+ description: metadata.description,
+ url: data.url,
+ baseUrl: metadata.baseUrl,
+ image: metadata.image,
+ savedAt: new Date(),
+ space: "all",
+ user: session.user.id
+ })
- try {
- await db.insert(userStoredContent).values({
- userId: session.user.id,
- contentId: id
- });
- } catch (e) {
- console.log(e);
- }
+ id = storedContentId.meta.last_row_id;
const res = await Promise.race([
fetch("https://cf-ai-backend.dhravya.workers.dev/add", {
@@ -78,10 +65,6 @@ export async function POST(req: NextRequest) {
)
]) as Response
- const _ = await res.text();
-
- console.log(_)
-
if (res.status !== 200) {
return NextResponse.json({ message: "Error", error: "Error in CF function" }, { status: 500 });
}
diff --git a/apps/web/src/app/page.tsx b/apps/web/src/app/page.tsx
index 2522a25f..d1d47ae5 100644
--- a/apps/web/src/app/page.tsx
+++ b/apps/web/src/app/page.tsx
@@ -1,17 +1,12 @@
-import { CardContent, Card } from '@/components/ui/card';
import { db } from '@/server/db';
-import {
- sessions,
- storedContent,
- userStoredContent,
- users,
-} from '@/server/db/schema';
+import { sessions, storedContent, users } from '@/server/db/schema';
import { eq, inArray } from 'drizzle-orm';
import { cookies, headers } from 'next/headers';
import { redirect } from 'next/navigation';
-import Image from 'next/image';
-import QueryAI from '@/components/QueryAI';
+import Sidebar from '@/components/Sidebar/index';
+import Main from '@/components/Main';
import MessagePoster from './MessagePoster';
+import { transformContent } from '../../types/memory';
export const runtime = 'edge';
@@ -26,6 +21,13 @@ export default async function Home() {
return redirect('/api/auth/signin');
}
+ const selectedItem = cookies().get('selectedItem')?.value;
+
+ const setSelectedItem = async (selectedItem: string | null) => {
+ 'use server';
+ cookies().set('selectedItem', selectedItem!);
+ };
+
const session = await db
.select()
.from(sessions)
@@ -35,101 +37,28 @@ export default async function Home() {
return redirect('/api/auth/signin');
}
- const userContent = await db
- .select()
- .from(userStoredContent)
- .where(eq(userStoredContent.userId, session[0].userId));
-
- const userData = await db
+ const [userData] = await db
.select()
.from(users)
.where(eq(users.id, session[0].userId))
.limit(1);
- if (!userData || userData.length === 0) {
+ if (!userData) {
return redirect('/api/auth/signin');
}
- const listOfContent =
- userContent.map((content) => content.contentId).length > 0
- ? userContent.map((content) => content.contentId)
- : [1];
-
const posts = await db
.select()
.from(storedContent)
- .where(inArray(storedContent.id, listOfContent));
+ .where(eq(storedContent.user, userData.id));
- return (
- <div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 flex flex-col items-center">
- <div className="flex flex-col mt-16">
- <div className="flex flex-col md:flex-row gap-4">
- <Image
- className="rounded-2xl"
- src="/logo.png"
- width={120}
- height={120}
- alt="logo"
- />
- <div className="mt-4 text-gray-400 max-w-md">
- <h1 className="text-xl font-bold text-white">SuperMemory</h1>
- Remember that one thing you read a while ago? We got you covered.
- Add the extension, click a button and I'll remember it for you.{' '}
- <a
- href="https://github.com/dhravyashah/anycontext"
- target="_blank"
- rel="noreferrer"
- className="text-sky-500"
- >
- Get the Extension
- </a>
- </div>
- </div>
- </div>
-
- <QueryAI />
+ const collectedSpaces = transformContent(posts);
+ return (
+ <div className="flex w-screen">
+ <Sidebar selectChange={setSelectedItem} spaces={collectedSpaces} />
+ <Main sidebarOpen={selectedItem !== null} />
<MessagePoster jwt={token} />
-
- {/* TODO: LABEL THE WEBSITES USING A CLASSIFICATION MODEL */}
- {/* <nav className="flex space-x-2 my-4">
- <Badge variant="secondary">Technology (2)</Badge>
- <Badge variant="secondary">Business & Finance (1)</Badge>
- <Badge variant="secondary">Education & Career (1)</Badge>
- </nav> */}
- <main className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 mt-16">
- {posts.reverse().map((post) => (
- <a
- href={post.url}
- target="_blank"
- rel="noreferrer"
- className="hover:scale-105 ease-in-out transition-transform duration-300"
- >
- <Card className="w-full">
- <img
- alt="Not found"
- className="w-full h-48 object-cover rounded-md"
- height="200"
- src={
- post.image && post.image !== 'Image not found'
- ? post.image
- : '/placeholder.svg'
- }
- style={{
- aspectRatio: '300/200',
- objectFit: 'cover',
- }}
- width="300"
- />
- <CardContent>
- <h3 className="text-lg font-semibold mt-4">{post.title}</h3>
- <p className="text-sm text-gray-600">{post.baseUrl}</p>
- <p className="text-sm">{post.description}</p>
- </CardContent>
- </Card>
- </a>
- ))}
- </main>
</div>
);
}
diff --git a/apps/web/src/app/ui/content.tsx b/apps/web/src/app/ui/content.tsx
index 6e28eaf8..16f66394 100644
--- a/apps/web/src/app/ui/content.tsx
+++ b/apps/web/src/app/ui/content.tsx
@@ -8,7 +8,7 @@ export default function Content() {
return (
<div className="flex w-screen">
- <Sidebar onSelectChange={setSelectedItem} />
+ {/* <Sidebar selectChange={setSelectedItem} /> */}
<Main sidebarOpen={selectedItem !== null} />
</div>
);
diff --git a/apps/web/src/app/ui/page.tsx b/apps/web/src/app/ui/page.tsx
index 35175334..ec1998b6 100644
--- a/apps/web/src/app/ui/page.tsx
+++ b/apps/web/src/app/ui/page.tsx
@@ -1,10 +1,18 @@
-import { MemoryProvider } from "@/contexts/MemoryContext";
-import Content from "./content";
+import Main from "@/components/Main";
+import Sidebar from "@/components/Sidebar/index";
+import { cookies } from "next/headers";
export default function Home() {
+ const selectedItem = cookies().get("selectedItem")?.value;
+ const setSelectedItem = async (selectedItem: string | null) => {
+ "use server";
+ cookies().set("selectedItem", selectedItem!);
+ };
+
return (
- <MemoryProvider spaces={[]}>
- <Content />
- </MemoryProvider>
+ <div className="flex w-screen">
+ {/* <Sidebar selectChange={setSelectedItem} spaces={spaces} /> */}
+ <Main sidebarOpen={selectedItem !== null} />
+ </div>
);
}