aboutsummaryrefslogtreecommitdiffstats
path: root/packages/web/app
diff options
context:
space:
mode:
authorMohamedBassem <me@mbassem.com>2024-02-15 16:03:24 +0000
committerMohamedBassem <me@mbassem.com>2024-02-15 16:03:24 +0000
commit97d18d7ac3bc6ab4f40618e74f021ee63a4cf7b6 (patch)
tree1baa3a602da8c2a67b6c4807dcc27c329a2351c4 /packages/web/app
parent25d399c1abbccc28a899ef43a3c945a86f680af9 (diff)
downloadkarakeep-97d18d7ac3bc6ab4f40618e74f021ee63a4cf7b6.tar.zst
ui: Usage images for link cards
Diffstat (limited to 'packages/web/app')
-rw-r--r--packages/web/app/dashboard/bookmarks/components/LinkCard.tsx68
-rw-r--r--packages/web/app/dashboard/error.tsx10
-rw-r--r--packages/web/app/dashboard/not-found.tsx10
3 files changed, 53 insertions, 35 deletions
diff --git a/packages/web/app/dashboard/bookmarks/components/LinkCard.tsx b/packages/web/app/dashboard/bookmarks/components/LinkCard.tsx
index 00e4ef26..7413c2fe 100644
--- a/packages/web/app/dashboard/bookmarks/components/LinkCard.tsx
+++ b/packages/web/app/dashboard/bookmarks/components/LinkCard.tsx
@@ -1,7 +1,9 @@
import { Badge } from "@/components/ui/badge";
import {
ImageCard,
+ ImageCardBanner,
ImageCardBody,
+ ImageCardContent,
ImageCardFooter,
ImageCardTitle,
} from "@/components/ui/imageCard";
@@ -13,40 +15,56 @@ export default function LinkCard({ bookmark }: { bookmark: ZBookmark }) {
const link = bookmark.content;
const parsedUrl = new URL(link.url);
+ // A dummy white pixel for when there's no image.
+ // TODO: Better handling for cards with no images
+ const image =
+ link.imageUrl ??
+ "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAA1JREFUGFdj+P///38ACfsD/QVDRcoAAAAASUVORK5CYII=";
+
return (
<ImageCard
className={
"border-grey-100 border bg-gray-50 duration-300 ease-in hover:border-blue-300 hover:transition-all"
}
- image={link?.imageUrl ?? undefined}
>
- <ImageCardTitle>
- <Link className="line-clamp-2" href={link.url}>
- {link?.title ?? parsedUrl.host}
- </Link>
- </ImageCardTitle>
- <ImageCardBody className="overflow-clip py-2">
- {bookmark.tags.map((t) => (
- <Link key={t.id} href={`/dashboard/tags/${t.name}`}>
- <Badge
- variant="default"
- className="bg-gray-300 text-gray-500 hover:text-white"
- >
- #{t.name}
- </Badge>
+ <Link href={link.url}>
+ <ImageCardBanner src={image} />
+ </Link>
+ <ImageCardContent>
+ <ImageCardTitle>
+ <Link className="line-clamp-2" href={link.url}>
+ {link?.title ?? parsedUrl.host}
</Link>
- ))}
- </ImageCardBody>
- <ImageCardFooter>
- <div className="flex justify-between text-gray-500">
- <div className="my-auto">
- <Link className="line-clamp-1 hover:text-black" href={link.url}>
- {parsedUrl.host}
+ </ImageCardTitle>
+ {/* There's a hack here. Every tag has the full hight of the container itself. That why, when we enable flex-wrap,
+ the overflowed don't show up. */}
+ <ImageCardBody className="flex h-full flex-wrap space-x-1 overflow-hidden">
+ {bookmark.tags.map((t) => (
+ <Link
+ className="flex h-full flex-col justify-end"
+ key={t.id}
+ href={`/dashboard/tags/${t.name}`}
+ >
+ <Badge
+ variant="default"
+ className="text-nowrap bg-gray-300 text-gray-500 hover:text-white"
+ >
+ #{t.name}
+ </Badge>
</Link>
+ ))}
+ </ImageCardBody>
+ <ImageCardFooter>
+ <div className="flex justify-between text-gray-500">
+ <div className="my-auto">
+ <Link className="line-clamp-1 hover:text-black" href={link.url}>
+ {parsedUrl.host}
+ </Link>
+ </div>
+ <BookmarkOptions bookmark={bookmark} />
</div>
- <BookmarkOptions bookmark={bookmark} />
- </div>
- </ImageCardFooter>
+ </ImageCardFooter>
+ </ImageCardContent>
</ImageCard>
);
}
diff --git a/packages/web/app/dashboard/error.tsx b/packages/web/app/dashboard/error.tsx
index 2bba0e98..556e59a3 100644
--- a/packages/web/app/dashboard/error.tsx
+++ b/packages/web/app/dashboard/error.tsx
@@ -1,9 +1,9 @@
"use client";
export default function Error() {
- return (
- <div className="flex size-full">
- <div className="m-auto text-3xl">Something went wrong</div>
- </div>
- );
+ return (
+ <div className="flex size-full">
+ <div className="m-auto text-3xl">Something went wrong</div>
+ </div>
+ );
}
diff --git a/packages/web/app/dashboard/not-found.tsx b/packages/web/app/dashboard/not-found.tsx
index abd1ebae..64df220c 100644
--- a/packages/web/app/dashboard/not-found.tsx
+++ b/packages/web/app/dashboard/not-found.tsx
@@ -1,7 +1,7 @@
export default function NotFound() {
- return (
- <div className="flex size-full">
- <div className="m-auto text-3xl">Not Found :(</div>
- </div>
- );
+ return (
+ <div className="flex size-full">
+ <div className="m-auto text-3xl">Not Found :(</div>
+ </div>
+ );
}