aboutsummaryrefslogtreecommitdiffstats
path: root/apps/web/app/dashboard/layout.tsx
diff options
context:
space:
mode:
authorMohamed Bassem <me@mbassem.com>2025-12-30 12:52:50 +0200
committerGitHub <noreply@github.com>2025-12-30 10:52:50 +0000
commita0b4a26ad398137e13c35f3fe0dad99154537d91 (patch)
tree6e7f7b8acb7725717fdbb06ad262a122cdd2dfd5 /apps/web/app/dashboard/layout.tsx
parent7ab7db8e48360417498643eec2384b0fcb7fbdfb (diff)
downloadkarakeep-a0b4a26ad398137e13c35f3fe0dad99154537d91.tar.zst
feat: 2025 wrapped (#2322)
* feat: 2025 wrapped * don't add wrapped for new users
Diffstat (limited to 'apps/web/app/dashboard/layout.tsx')
-rw-r--r--apps/web/app/dashboard/layout.tsx20
1 files changed, 18 insertions, 2 deletions
diff --git a/apps/web/app/dashboard/layout.tsx b/apps/web/app/dashboard/layout.tsx
index be65e66a..81b44a3c 100644
--- a/apps/web/app/dashboard/layout.tsx
+++ b/apps/web/app/dashboard/layout.tsx
@@ -16,6 +16,7 @@ import {
Highlighter,
Home,
Search,
+ Sparkles,
Tag,
} from "lucide-react";
@@ -34,9 +35,10 @@ export default async function Dashboard({
redirect("/");
}
- const [lists, userSettings] = await Promise.all([
+ const [lists, userSettings, showWrapped] = await Promise.all([
tryCatch(api.lists.list()),
tryCatch(api.users.settings()),
+ tryCatch(api.users.hasWrapped()),
]);
if (userSettings.error) {
@@ -55,6 +57,10 @@ export default async function Dashboard({
throw lists.error;
}
+ if (showWrapped.error) {
+ throw showWrapped.error;
+ }
+
const items = (t: TFunction) =>
[
{
@@ -86,10 +92,20 @@ export default async function Dashboard({
icon: <Archive size={18} />,
path: "/dashboard/archive",
},
+ // Only show wrapped if user has at least 20 bookmarks
+ showWrapped.data
+ ? [
+ {
+ name: t("wrapped.button"),
+ icon: <Sparkles size={18} />,
+ path: "/dashboard/wrapped",
+ },
+ ]
+ : [],
].flat();
const mobileSidebar = (t: TFunction) => [
- ...items(t),
+ ...items(t).filter((item) => item.path !== "/dashboard/wrapped"),
{
name: t("lists.all_lists"),
icon: <ClipboardList size={18} />,