From 160838007702cc8a9e79257e89c2ceb0a06e57cf Mon Sep 17 00:00:00 2001 From: Mahesh Sanikommmu Date: Sat, 3 Jan 2026 14:46:33 -0800 Subject: [PATCH] add: final changes with memory modal --- .../new/document-cards/tweet-preview.tsx | 19 ++++++++-- .../new/document-modal/content/tweet.tsx | 37 +++++++++++++++++++ .../new/document-modal/document-icon.tsx | 29 +++++++++++++++ .../document-modal/graph-list-memories.tsx | 13 ++++--- .../components/new/document-modal/index.tsx | 32 ++++++++++++---- .../components/new/document-modal/summary.tsx | 2 +- .../components/new/document-modal/title.tsx | 11 +++++- 7 files changed, 124 insertions(+), 19 deletions(-) create mode 100644 apps/web/components/new/document-modal/content/tweet.tsx diff --git a/apps/web/components/new/document-cards/tweet-preview.tsx b/apps/web/components/new/document-cards/tweet-preview.tsx index 51f97bce..7ba9b392 100644 --- a/apps/web/components/new/document-cards/tweet-preview.tsx +++ b/apps/web/components/new/document-cards/tweet-preview.tsx @@ -13,16 +13,29 @@ import { import { cn } from "@lib/utils" import { dmSansClassName } from "@/utils/fonts" -export function TweetPreview({ data }: { data: Tweet }) { +export function TweetPreview({ + data, + noBgColor, +}: { + data: Tweet + noBgColor?: boolean +}) { const parsedTweet = typeof data === "string" ? JSON.parse(data) : data const tweet = enrichTweet(parsedTweet) return ( -
+
}> diff --git a/apps/web/components/new/document-modal/content/tweet.tsx b/apps/web/components/new/document-modal/content/tweet.tsx new file mode 100644 index 00000000..528cf72f --- /dev/null +++ b/apps/web/components/new/document-modal/content/tweet.tsx @@ -0,0 +1,37 @@ +"use client" + +import type { Tweet } from "react-tweet/api" +import { TweetPreview } from "@/components/new/document-cards/tweet-preview" +import { ExternalLinkIcon } from "lucide-react" + +interface TweetContentProps { + url?: string | null + tweetMetadata?: unknown +} + +export function TweetContent({ url, tweetMetadata }: TweetContentProps) { + if (tweetMetadata) { + return ( +
+ +
+ ) + } + + return ( +
+

Tweet preview unavailable

+ {url && ( + + View on X + + + )} +
+ ) +} diff --git a/apps/web/components/new/document-modal/document-icon.tsx b/apps/web/components/new/document-modal/document-icon.tsx index 6d97d7d5..ec174094 100644 --- a/apps/web/components/new/document-modal/document-icon.tsx +++ b/apps/web/components/new/document-modal/document-icon.tsx @@ -113,6 +113,26 @@ const PDFIcon = ({ className }: { className: string }) => { ) } +const YouTubeIcon = ({ className }: { className: string }) => { + return ( + + YouTube Icon + + + + ) +} + const TextDocumentIcon = ({ className }: { className: string }) => { return ( } + if (url?.includes("youtube.com") || url?.includes("youtu.be")) { + return + } + if ( type === "webpage" || type === "url" || @@ -201,6 +225,8 @@ export const getDocumentIcon = ( } switch (type) { + case "tweet": + return 𝕏 case "google_doc": return case "google_sheet": @@ -228,6 +254,9 @@ export const getDocumentIcon = ( return case "pdf": return + case "youtube": + case "video": + return default: return } diff --git a/apps/web/components/new/document-modal/graph-list-memories.tsx b/apps/web/components/new/document-modal/graph-list-memories.tsx index 5b681fc4..88c0ab68 100644 --- a/apps/web/components/new/document-modal/graph-list-memories.tsx +++ b/apps/web/components/new/document-modal/graph-list-memories.tsx @@ -183,7 +183,7 @@ export function GraphListMemories({ - Graph +

Graph

List - List +

List

diff --git a/apps/web/components/new/document-modal/index.tsx b/apps/web/components/new/document-modal/index.tsx index fc5e3821..e9a5563d 100644 --- a/apps/web/components/new/document-modal/index.tsx +++ b/apps/web/components/new/document-modal/index.tsx @@ -12,6 +12,8 @@ import { dmSansClassName } from "@/utils/fonts" import { GraphListMemories, type MemoryEntry } from "./graph-list-memories" import { PdfViewer } from "./content/pdf" import { YoutubeVideo } from "./content/yt-video" +import { TweetContent } from "./content/tweet" +import { isTwitterUrl } from "@/utils/url-helpers" type DocumentsResponse = z.infer type DocumentWithMemories = DocumentsResponse["documents"][0] @@ -32,7 +34,7 @@ export function DocumentModal({ !open && onClose()}>
- {_document?.type === "pdf" && _document.url && ( + {_document?.url && (
-
+
- {_document?.type === "text" && ( -
{_document.content}
+ {(_document?.type === "tweet" || + (_document?.url && isTwitterUrl(_document.url))) && ( + )} + {_document?.type === "text" && + !(_document?.url && isTwitterUrl(_document.url)) && ( +
+ {_document.content} +
+ )} {_document?.type === "pdf" && } - {(_document?.url?.includes("youtube.com")) && ( + {_document?.url?.includes("youtube.com") && ( )}
{_document?.summary && (

diff --git a/apps/web/components/new/document-modal/title.tsx b/apps/web/components/new/document-modal/title.tsx index 8bbdc7db..b8bdc8bb 100644 --- a/apps/web/components/new/document-modal/title.tsx +++ b/apps/web/components/new/document-modal/title.tsx @@ -18,9 +18,11 @@ function getFileExtension(documentType: DocumentType): string | null { export function Title({ title, documentType, + url, }: { title: string | null | undefined documentType: DocumentType + url?: string | null }) { const extension = getFileExtension(documentType) @@ -31,8 +33,13 @@ export function Title({ "text-[16px] font-semibold text-[#FAFAFA] line-clamp-1 leading-[125%] flex items-center gap-3", )} > -

- {getDocumentIcon(documentType as DocumentType, "w-4 h-4 flex-shrink-0")} +
+ {getDocumentIcon( + documentType as DocumentType, + "w-5 h-5", + undefined, + url ?? undefined, + )} {extension && (