"use client"; import { getAllUserMemoriesAndSpaces } from "@/app/actions/fetchers"; import { Content, StoredSpace } from "@/server/db/schema"; import { MemoriesIcon, NextIcon, SearchIcon, UrlIcon } from "@repo/ui/icons"; import { NotebookIcon, PaperclipIcon } from "lucide-react"; import Image from "next/image"; import Link from "next/link"; import React, { useEffect, useMemo, useState } from "react"; import Masonry from "react-layout-masonry"; import { getRawTweet } from "@repo/shared-types/utils"; import { MyTweet } from "./render-tweet"; export function MemoriesPage({ memoriesAndSpaces, }: { memoriesAndSpaces: { memories: Content[]; spaces: StoredSpace[] }; }) { const [filter, setFilter] = useState("All"); // Sort Both memories and spaces by their savedAt and createdAt dates respectfully. // The output should be just one single list of items // And it will look something like { item: "memory" | "space", date: Date, data: Content | StoredSpace } const sortedItems = useMemo(() => { // Merge the lists const unifiedItems = [ ...memoriesAndSpaces.memories.map((memory) => ({ item: "memory", date: new Date(memory.savedAt), // Assuming savedAt is a string date data: memory, })), ...memoriesAndSpaces.spaces.map((space) => ({ item: "space", date: new Date(space.createdAt), // Assuming createdAt is a string date data: space, })), ].map((item) => ({ ...item, date: Number(item.date), // Convert the date to a number })); // Sort the merged list return unifiedItems .filter((item) => { if (filter === "All") return true; if (filter === "Spaces" && item.item === "space") { console.log(item); return true; } if (filter === "Pages") return ( item.item === "memory" && (item.data as Content).type === "page" ); if (filter === "Notes") return ( item.item === "memory" && (item.data as Content).type === "note" ); if (filter === "Tweet") return ( item.item === "memory" && (item.data as Content).type === "tweet" ); return false; }) .sort((a, b) => b.date - a.date); }, [memoriesAndSpaces.memories, memoriesAndSpaces.spaces, filter]); return (

My Memories

{sortedItems.map((item) => { if (item.item === "memory") { return ( ); } if (item.item === "space") { return ( ); } return null; })}
); } function TabComponent({ title, description, }: { title: string; description: string; }) { return (
Spaces icon Space
{title.slice(0, 2).toUpperCase()}
{title}
{description}
Search icon
); } function LinkComponent({ type, content, title, url, image, description, }: { type: string; content: string; title: string; url: string; image?: string; description: string; }) { return ( {type === "page" ? ( <>
Page
{title}
{url.replace("https://supermemory.ai", "").split("#")[0] ?? "/"}
) : type === "note" ? ( <>
Note
{title}
{content.replace(title, "")}
) : type === "tweet" ? ( ) : null} ); } const FilterMethods = ["All", "Spaces", "Pages", "Notes", "Tweet"]; function Filters({ setFilter, filter, }: { setFilter: (i: string) => void; filter: string; }) { return (
{FilterMethods.map((i) => { return ( ); })}
); } export default MemoriesPage;