diff --git a/apps/web/app/api/assets/[assetId]/route.ts b/apps/web/app/api/assets/[assetId]/route.ts deleted file mode 100644 index 20bd30c..0000000 --- a/apps/web/app/api/assets/[assetId]/route.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { createContextFromRequest } from "@/server/api/client"; -import { and, eq } from "drizzle-orm"; - -import { assets } from "@lifetracker/db/schema"; -import { readAsset } from "@lifetracker/shared/assetdb"; - -export const dynamic = "force-dynamic"; -export async function GET( - request: Request, - { params }: { params: { assetId: string } }, -) { - const ctx = await createContextFromRequest(request); - if (!ctx.user) { - return Response.json({ error: "Unauthorized" }, { status: 401 }); - } - - const assetDb = await ctx.db.query.assets.findFirst({ - where: and(eq(assets.id, params.assetId), eq(assets.userId, ctx.user.id)), - }); - - if (!assetDb) { - return Response.json({ error: "Asset not found" }, { status: 404 }); - } - - const { asset, metadata } = await readAsset({ - userId: ctx.user.id, - assetId: params.assetId, - }); - - const range = request.headers.get("Range"); - if (range) { - const parts = range.replace(/bytes=/, "").split("-"); - const start = parseInt(parts[0], 10); - const end = parts[1] ? parseInt(parts[1], 10) : asset.length - 1; - - // TODO: Don't read the whole asset into memory in the first place - const chunk = asset.subarray(start, end + 1); - return new Response(chunk, { - status: 206, // Partial Content - headers: { - "Content-Range": `bytes ${start}-${end}/${asset.length}`, - "Accept-Ranges": "bytes", - "Content-Length": chunk.length.toString(), - "Content-type": metadata.contentType, - }, - }); - } else { - return new Response(asset, { - status: 200, - headers: { - "Content-Length": asset.length.toString(), - "Content-type": metadata.contentType, - }, - }); - } -} diff --git a/apps/web/app/api/assets/route.ts b/apps/web/app/api/assets/route.ts deleted file mode 100644 index 28f8142..0000000 --- a/apps/web/app/api/assets/route.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { createContextFromRequest } from "@/server/api/client"; -import { TRPCError } from "@trpc/server"; - -import type { ZUploadResponse } from "@lifetracker/shared/types/uploads"; -import { assets, AssetTypes } from "@lifetracker/db/schema"; -import { - newAssetId, - saveAsset, - SUPPORTED_UPLOAD_ASSET_TYPES, -} from "@lifetracker/shared/assetdb"; -import serverConfig from "@lifetracker/shared/config"; - -const MAX_UPLOAD_SIZE_BYTES = serverConfig.maxAssetSizeMb * 1024 * 1024; - -export const dynamic = "force-dynamic"; -export async function POST(request: Request) { - const ctx = await createContextFromRequest(request); - if (!ctx.user) { - return Response.json({ error: "Unauthorized" }, { status: 401 }); - } - if (serverConfig.demoMode) { - throw new TRPCError({ - message: "Mutations are not allowed in demo mode", - code: "FORBIDDEN", - }); - } - const formData = await request.formData(); - const data = formData.get("file") ?? formData.get("image"); - let buffer; - let contentType; - if (data instanceof File) { - contentType = data.type; - if (!SUPPORTED_UPLOAD_ASSET_TYPES.has(contentType)) { - return Response.json( - { error: "Unsupported asset type" }, - { status: 400 }, - ); - } - if (data.size > MAX_UPLOAD_SIZE_BYTES) { - return Response.json({ error: "Asset is too big" }, { status: 413 }); - } - buffer = Buffer.from(await data.arrayBuffer()); - } else { - return Response.json({ error: "Bad request" }, { status: 400 }); - } - - const fileName = data.name; - const [assetDb] = await ctx.db - .insert(assets) - .values({ - id: newAssetId(), - // Initially, uploads are uploaded for unknown purpose - // And without an attached bookmark. - assetType: AssetTypes.UNKNOWN, - bookmarkId: null, - userId: ctx.user.id, - contentType, - size: data.size, - fileName, - }) - .returning(); - const assetId = assetDb.id; - - await saveAsset({ - userId: ctx.user.id, - assetId, - metadata: { contentType, fileName }, - asset: buffer, - }); - - return Response.json({ - assetId, - contentType, - size: buffer.byteLength, - fileName, - } satisfies ZUploadResponse); -} diff --git a/apps/web/app/api/bookmarks/export/route.tsx b/apps/web/app/api/bookmarks/export/route.tsx deleted file mode 100644 index 7ae46c5..0000000 --- a/apps/web/app/api/bookmarks/export/route.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { toExportFormat, zExportSchema } from "@/lib/exportBookmarks"; -import { api, createContextFromRequest } from "@/server/api/client"; -import { z } from "zod"; - -import { MAX_NUM_BOOKMARKS_PER_PAGE } from "@hoarder/shared/types/bookmarks"; - -export const dynamic = "force-dynamic"; -export async function GET(request: Request) { - const ctx = await createContextFromRequest(request); - if (!ctx.user) { - return Response.json({ error: "Unauthorized" }, { status: 401 }); - } - const req = { - limit: MAX_NUM_BOOKMARKS_PER_PAGE, - useCursorV2: true, - }; - - let resp = await api.bookmarks.getBookmarks(req); - let results = resp.bookmarks.map(toExportFormat); - - while (resp.nextCursor) { - resp = await api.bookmarks.getBookmarks({ - ...request, - cursor: resp.nextCursor, - }); - results = [...results, ...resp.bookmarks.map(toExportFormat)]; - } - - const exportData: z.infer = { - bookmarks: results.filter((b) => b.content !== null), - }; - - return new Response(JSON.stringify(exportData), { - status: 200, - headers: { - "Content-type": "application/json", - "Content-disposition": `attachment; filename="hoarder-export-${new Date().toISOString()}.json"`, - }, - }); -} diff --git a/apps/web/app/api/v1/bookmarks/[bookmarkId]/lists/route.ts b/apps/web/app/api/v1/bookmarks/[bookmarkId]/lists/route.ts deleted file mode 100644 index ad3052c..0000000 --- a/apps/web/app/api/v1/bookmarks/[bookmarkId]/lists/route.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { NextRequest } from "next/server"; -import { buildHandler } from "@/app/api/v1/utils/handler"; - -export const dynamic = "force-dynamic"; - -export const GET = ( - req: NextRequest, - params: { params: { bookmarkId: string } }, -) => - buildHandler({ - req, - handler: async ({ api }) => { - const resp = await api.lists.getListsOfBookmark({ - bookmarkId: params.params.bookmarkId, - }); - return { status: 200, resp }; - }, - }); diff --git a/apps/web/app/api/v1/bookmarks/[bookmarkId]/route.ts b/apps/web/app/api/v1/bookmarks/[bookmarkId]/route.ts deleted file mode 100644 index 8fe4d9f..0000000 --- a/apps/web/app/api/v1/bookmarks/[bookmarkId]/route.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { NextRequest } from "next/server"; -import { buildHandler } from "@/app/api/v1/utils/handler"; - -import { zUpdateBookmarksRequestSchema } from "@hoarder/shared/types/bookmarks"; - -export const dynamic = "force-dynamic"; - -export const GET = ( - req: NextRequest, - { params }: { params: { bookmarkId: string } }, -) => - buildHandler({ - req, - handler: async ({ api }) => { - const bookmark = await api.bookmarks.getBookmark({ - bookmarkId: params.bookmarkId, - }); - return { status: 200, resp: bookmark }; - }, - }); - -export const PATCH = ( - req: NextRequest, - { params }: { params: { bookmarkId: string } }, -) => - buildHandler({ - req, - bodySchema: zUpdateBookmarksRequestSchema.omit({ bookmarkId: true }), - handler: async ({ api, body }) => { - const bookmark = await api.bookmarks.updateBookmark({ - bookmarkId: params.bookmarkId, - ...body!, - }); - return { status: 200, resp: bookmark }; - }, - }); - -export const DELETE = ( - req: NextRequest, - { params }: { params: { bookmarkId: string } }, -) => - buildHandler({ - req, - handler: async ({ api }) => { - await api.bookmarks.deleteBookmark({ - bookmarkId: params.bookmarkId, - }); - return { status: 204 }; - }, - }); diff --git a/apps/web/app/api/v1/bookmarks/[bookmarkId]/tags/route.ts b/apps/web/app/api/v1/bookmarks/[bookmarkId]/tags/route.ts deleted file mode 100644 index df46461..0000000 --- a/apps/web/app/api/v1/bookmarks/[bookmarkId]/tags/route.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { NextRequest } from "next/server"; -import { buildHandler } from "@/app/api/v1/utils/handler"; -import { z } from "zod"; - -import { zManipulatedTagSchema } from "@hoarder/shared/types/bookmarks"; - -export const dynamic = "force-dynamic"; - -export const POST = ( - req: NextRequest, - params: { params: { bookmarkId: string } }, -) => - buildHandler({ - req, - bodySchema: z.object({ - tags: z.array(zManipulatedTagSchema), - }), - handler: async ({ api, body }) => { - const resp = await api.bookmarks.updateTags({ - bookmarkId: params.params.bookmarkId, - attach: body!.tags, - detach: [], - }); - return { status: 200, resp: { attached: resp.attached } }; - }, - }); - -export const DELETE = ( - req: NextRequest, - params: { params: { bookmarkId: string } }, -) => - buildHandler({ - req, - bodySchema: z.object({ - tags: z.array(zManipulatedTagSchema), - }), - handler: async ({ api, body }) => { - const resp = await api.bookmarks.updateTags({ - bookmarkId: params.params.bookmarkId, - detach: body!.tags, - attach: [], - }); - return { status: 200, resp: { detached: resp.detached } }; - }, - }); diff --git a/apps/web/app/api/v1/bookmarks/route.ts b/apps/web/app/api/v1/bookmarks/route.ts deleted file mode 100644 index 1342f07..0000000 --- a/apps/web/app/api/v1/bookmarks/route.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { NextRequest } from "next/server"; -import { z } from "zod"; - -import { zNewBookmarkRequestSchema } from "@hoarder/shared/types/bookmarks"; - -import { buildHandler } from "../utils/handler"; -import { adaptPagination, zPagination } from "../utils/pagination"; -import { zStringBool } from "../utils/types"; - -export const dynamic = "force-dynamic"; - -export const GET = (req: NextRequest) => - buildHandler({ - req, - searchParamsSchema: z - .object({ - favourited: zStringBool.optional(), - archived: zStringBool.optional(), - }) - .and(zPagination), - handler: async ({ api, searchParams }) => { - const bookmarks = await api.bookmarks.getBookmarks({ - ...searchParams, - }); - return { status: 200, resp: adaptPagination(bookmarks) }; - }, - }); - -export const POST = (req: NextRequest) => - buildHandler({ - req, - bodySchema: zNewBookmarkRequestSchema, - handler: async ({ api, body }) => { - const bookmark = await api.bookmarks.createBookmark(body!); - return { status: 201, resp: bookmark }; - }, - }); diff --git a/apps/web/app/api/v1/lists/[listId]/bookmarks/[bookmarkId]/route.ts b/apps/web/app/api/v1/lists/[listId]/bookmarks/[bookmarkId]/route.ts deleted file mode 100644 index 6efe205..0000000 --- a/apps/web/app/api/v1/lists/[listId]/bookmarks/[bookmarkId]/route.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { NextRequest } from "next/server"; -import { buildHandler } from "@/app/api/v1/utils/handler"; - -export const dynamic = "force-dynamic"; - -export const PUT = ( - req: NextRequest, - { params }: { params: { listId: string; bookmarkId: string } }, -) => - buildHandler({ - req, - handler: async ({ api }) => { - // TODO: PUT is supposed to be idempotent, but we currently fail if the bookmark is already in the list. - await api.lists.addToList({ - listId: params.listId, - bookmarkId: params.bookmarkId, - }); - return { status: 204 }; - }, - }); - -export const DELETE = ( - req: NextRequest, - { params }: { params: { listId: string; bookmarkId: string } }, -) => - buildHandler({ - req, - handler: async ({ api }) => { - await api.lists.removeFromList({ - listId: params.listId, - bookmarkId: params.bookmarkId, - }); - return { status: 204 }; - }, - }); diff --git a/apps/web/app/api/v1/lists/[listId]/bookmarks/route.ts b/apps/web/app/api/v1/lists/[listId]/bookmarks/route.ts deleted file mode 100644 index 72d4aa5..0000000 --- a/apps/web/app/api/v1/lists/[listId]/bookmarks/route.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { NextRequest } from "next/server"; -import { buildHandler } from "@/app/api/v1/utils/handler"; -import { adaptPagination, zPagination } from "@/app/api/v1/utils/pagination"; - -export const dynamic = "force-dynamic"; - -export const GET = (req: NextRequest, params: { params: { listId: string } }) => - buildHandler({ - req, - searchParamsSchema: zPagination, - handler: async ({ api, searchParams }) => { - const bookmarks = await api.bookmarks.getBookmarks({ - listId: params.params.listId, - ...searchParams, - }); - return { status: 200, resp: adaptPagination(bookmarks) }; - }, - }); diff --git a/apps/web/app/api/v1/lists/[listId]/route.ts b/apps/web/app/api/v1/lists/[listId]/route.ts deleted file mode 100644 index 69c99fd..0000000 --- a/apps/web/app/api/v1/lists/[listId]/route.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { NextRequest } from "next/server"; -import { buildHandler } from "@/app/api/v1/utils/handler"; - -import { zNewBookmarkListSchema } from "@hoarder/shared/types/lists"; - -export const dynamic = "force-dynamic"; - -export const GET = ( - req: NextRequest, - { params }: { params: { listId: string } }, -) => - buildHandler({ - req, - handler: async ({ api }) => { - const list = await api.lists.get({ - listId: params.listId, - }); - return { - status: 200, - resp: list, - }; - }, - }); - -export const PATCH = ( - req: NextRequest, - { params }: { params: { listId: string } }, -) => - buildHandler({ - req, - bodySchema: zNewBookmarkListSchema.partial(), - handler: async ({ api, body }) => { - const list = await api.lists.edit({ - listId: params.listId, - ...body!, - }); - return { status: 200, resp: list }; - }, - }); - -export const DELETE = ( - req: NextRequest, - { params }: { params: { listId: string } }, -) => - buildHandler({ - req, - handler: async ({ api }) => { - await api.lists.delete({ - listId: params.listId, - }); - return { - status: 204, - }; - }, - }); diff --git a/apps/web/app/api/v1/lists/route.ts b/apps/web/app/api/v1/lists/route.ts deleted file mode 100644 index 724fadf..0000000 --- a/apps/web/app/api/v1/lists/route.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { NextRequest } from "next/server"; - -import { zNewBookmarkListSchema } from "@hoarder/shared/types/lists"; - -import { buildHandler } from "../utils/handler"; - -export const dynamic = "force-dynamic"; - -export const GET = (req: NextRequest) => - buildHandler({ - req, - handler: async ({ api }) => { - const lists = await api.lists.list(); - return { status: 200, resp: lists }; - }, - }); - -export const POST = (req: NextRequest) => - buildHandler({ - req, - bodySchema: zNewBookmarkListSchema, - handler: async ({ api, body }) => { - const list = await api.lists.create(body!); - return { status: 201, resp: list }; - }, - }); diff --git a/apps/web/app/api/v1/tags/[tagId]/bookmarks/route.ts b/apps/web/app/api/v1/tags/[tagId]/bookmarks/route.ts deleted file mode 100644 index 98133ec..0000000 --- a/apps/web/app/api/v1/tags/[tagId]/bookmarks/route.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { NextRequest } from "next/server"; -import { buildHandler } from "@/app/api/v1/utils/handler"; -import { adaptPagination, zPagination } from "@/app/api/v1/utils/pagination"; - -export const dynamic = "force-dynamic"; - -export const GET = ( - req: NextRequest, - { params }: { params: { tagId: string } }, -) => - buildHandler({ - req, - searchParamsSchema: zPagination, - handler: async ({ api, searchParams }) => { - const bookmarks = await api.bookmarks.getBookmarks({ - tagId: params.tagId, - limit: searchParams.limit, - cursor: searchParams.cursor, - }); - return { - status: 200, - resp: adaptPagination(bookmarks), - }; - }, - }); diff --git a/apps/web/app/api/v1/tags/[tagId]/route.ts b/apps/web/app/api/v1/tags/[tagId]/route.ts deleted file mode 100644 index 29b2721..0000000 --- a/apps/web/app/api/v1/tags/[tagId]/route.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { NextRequest } from "next/server"; -import { buildHandler } from "@/app/api/v1/utils/handler"; - -import { zUpdateTagRequestSchema } from "@hoarder/shared/types/tags"; - -export const dynamic = "force-dynamic"; - -export const GET = ( - req: NextRequest, - { params }: { params: { tagId: string } }, -) => - buildHandler({ - req, - handler: async ({ api }) => { - const tag = await api.tags.get({ - tagId: params.tagId, - }); - return { - status: 200, - resp: tag, - }; - }, - }); - -export const PATCH = ( - req: NextRequest, - { params }: { params: { tagId: string } }, -) => - buildHandler({ - req, - bodySchema: zUpdateTagRequestSchema.omit({ tagId: true }), - handler: async ({ api, body }) => { - const tag = await api.tags.update({ - tagId: params.tagId, - ...body!, - }); - return { status: 200, resp: tag }; - }, - }); - -export const DELETE = ( - req: NextRequest, - { params }: { params: { tagId: string } }, -) => - buildHandler({ - req, - handler: async ({ api }) => { - await api.tags.delete({ - tagId: params.tagId, - }); - return { - status: 204, - }; - }, - }); diff --git a/apps/web/app/api/v1/tags/route.ts b/apps/web/app/api/v1/tags/route.ts deleted file mode 100644 index 9625820..0000000 --- a/apps/web/app/api/v1/tags/route.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { NextRequest } from "next/server"; - -import { buildHandler } from "../utils/handler"; - -export const dynamic = "force-dynamic"; - -export const GET = (req: NextRequest) => - buildHandler({ - req, - handler: async ({ api }) => { - const tags = await api.tags.list(); - return { status: 200, resp: tags }; - }, - }); diff --git a/apps/web/app/dashboard/@modal/(.)preview/[bookmarkId]/page.tsx b/apps/web/app/dashboard/@modal/(.)preview/[bookmarkId]/page.tsx deleted file mode 100644 index 432e7a6..0000000 --- a/apps/web/app/dashboard/@modal/(.)preview/[bookmarkId]/page.tsx +++ /dev/null @@ -1,35 +0,0 @@ -"use client"; - -import { useState } from "react"; -import { useRouter } from "next/navigation"; -import BookmarkPreview from "@/components/dashboard/preview/BookmarkPreview"; -import { Dialog, DialogContent } from "@/components/ui/dialog"; - -export default function BookmarkPreviewPage({ - params, -}: { - params: { bookmarkId: string }; -}) { - const router = useRouter(); - - const [open, setOpen] = useState(true); - - const setOpenWithRouter = (value: boolean) => { - setOpen(value); - if (!value) { - router.back(); - } - }; - - return ( - - e.preventDefault()} - > - - - - ); -} diff --git a/apps/web/app/dashboard/@modal/[...catchAll]/page.tsx b/apps/web/app/dashboard/@modal/[...catchAll]/page.tsx deleted file mode 100644 index 1fd97c2..0000000 --- a/apps/web/app/dashboard/@modal/[...catchAll]/page.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export default function CatchAll() { - return null; -} diff --git a/apps/web/app/dashboard/@modal/default.tsx b/apps/web/app/dashboard/@modal/default.tsx deleted file mode 100644 index 6ddf1b7..0000000 --- a/apps/web/app/dashboard/@modal/default.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export default function Default() { - return null; -} diff --git a/apps/web/app/dashboard/archive/page.tsx b/apps/web/app/dashboard/archive/page.tsx deleted file mode 100644 index becb6a5..0000000 --- a/apps/web/app/dashboard/archive/page.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import Bookmarks from "@/components/dashboard/bookmarks/Bookmarks"; -import InfoTooltip from "@/components/ui/info-tooltip"; - -function header() { - return ( -
-

🗄️ Archive

- -

Archived bookmarks won't appear in the homepage

-
-
- ); -} - -export default async function ArchivedBookmarkPage() { - return ( - - ); -} diff --git a/apps/web/app/dashboard/categories/[categoryId]/page.tsx b/apps/web/app/dashboard/categories/[categoryId]/page.tsx deleted file mode 100644 index f6e02a6..0000000 --- a/apps/web/app/dashboard/categories/[categoryId]/page.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import { notFound } from "next/navigation"; -import Bookmarks from "@/components/dashboard/bookmarks/Bookmarks"; -import EditableTagName from "@/components/dashboard/tags/EditableTagName"; -import { TagOptions } from "@/components/dashboard/tags/TagOptions"; -import { Button } from "@/components/ui/button"; -import { api } from "@/server/api/client"; -import { TRPCError } from "@trpc/server"; -import { MoreHorizontal } from "lucide-react"; - -export default async function TagPage({ - params, -}: { - params: { tagId: string }; -}) { - let tag; - try { - tag = await api.tags.get({ tagId: params.tagId }); - } catch (e) { - if (e instanceof TRPCError) { - if (e.code == "NOT_FOUND") { - notFound(); - } - } - throw e; - } - - return ( - - - - - - - - } - query={{ tagId: tag.id }} - showEditorCard={true} - /> - ); -} diff --git a/apps/web/app/dashboard/cleanups/page.tsx b/apps/web/app/dashboard/cleanups/page.tsx deleted file mode 100644 index ca9187e..0000000 --- a/apps/web/app/dashboard/cleanups/page.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { TagDuplicationDetection } from "@/components/dashboard/cleanups/TagDuplicationDetention"; -import { Separator } from "@/components/ui/separator"; -import { Paintbrush, Tags } from "lucide-react"; - -export default function Cleanups() { - return ( -
- - - Cleanups - - - - - Duplicate Tags - - - -
- ); -} diff --git a/apps/web/app/dashboard/favourites/page.tsx b/apps/web/app/dashboard/favourites/page.tsx deleted file mode 100644 index be20bd2..0000000 --- a/apps/web/app/dashboard/favourites/page.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import Bookmarks from "@/components/dashboard/bookmarks/Bookmarks"; - -export default async function FavouritesBookmarkPage() { - return ( - -

⭐️ Favourites

- - } - query={{ favourited: true }} - showDivider={true} - showEditorCard={true} - /> - ); -} diff --git a/apps/web/app/dashboard/feeds/[feedId]/page.tsx b/apps/web/app/dashboard/feeds/[feedId]/page.tsx deleted file mode 100644 index ed5f9e4..0000000 --- a/apps/web/app/dashboard/feeds/[feedId]/page.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { notFound } from "next/navigation"; -import Bookmarks from "@/components/dashboard/bookmarks/Bookmarks"; -import { api } from "@/server/api/client"; -import { TRPCError } from "@trpc/server"; - -export default async function FeedPage({ - params, -}: { - params: { feedId: string }; -}) { - let feed; - try { - feed = await api.feeds.get({ feedId: params.feedId }); - } catch (e) { - if (e instanceof TRPCError) { - if (e.code == "NOT_FOUND") { - notFound(); - } - } - throw e; - } - - return ( - {feed.name}} - /> - ); -} diff --git a/apps/web/app/dashboard/lists/[listId]/page.tsx b/apps/web/app/dashboard/lists/[listId]/page.tsx deleted file mode 100644 index f8c5e0b..0000000 --- a/apps/web/app/dashboard/lists/[listId]/page.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { notFound } from "next/navigation"; -import Bookmarks from "@/components/dashboard/bookmarks/Bookmarks"; -import ListHeader from "@/components/dashboard/lists/ListHeader"; -import { api } from "@/server/api/client"; -import { TRPCError } from "@trpc/server"; - -export default async function ListPage({ - params, -}: { - params: { listId: string }; -}) { - let list; - try { - list = await api.lists.get({ listId: params.listId }); - } catch (e) { - if (e instanceof TRPCError) { - if (e.code == "NOT_FOUND") { - notFound(); - } - } - throw e; - } - - return ( - } - /> - ); -} diff --git a/apps/web/app/dashboard/lists/page.tsx b/apps/web/app/dashboard/lists/page.tsx deleted file mode 100644 index 1c22ac3..0000000 --- a/apps/web/app/dashboard/lists/page.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import AllListsView from "@/components/dashboard/lists/AllListsView"; -import { Separator } from "@/components/ui/separator"; -import { api } from "@/server/api/client"; - -export default async function ListsPage() { - const lists = await api.lists.list(); - - return ( -
-

📋 All Lists

- - -
- ); -} diff --git a/apps/web/app/dashboard/preview/[bookmarkId]/page.tsx b/apps/web/app/dashboard/preview/[bookmarkId]/page.tsx deleted file mode 100644 index 236f544..0000000 --- a/apps/web/app/dashboard/preview/[bookmarkId]/page.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import { notFound } from "next/navigation"; -import BookmarkPreview from "@/components/dashboard/preview/BookmarkPreview"; -import { api } from "@/server/api/client"; -import { TRPCError } from "@trpc/server"; - -export default async function BookmarkPreviewPage({ - params, -}: { - params: { bookmarkId: string }; -}) { - let bookmark; - try { - bookmark = await api.bookmarks.getBookmark({ - bookmarkId: params.bookmarkId, - }); - } catch (e) { - if (e instanceof TRPCError) { - if (e.code === "NOT_FOUND") { - notFound(); - } - } - throw e; - } - - return ( -
- -
- ); -} diff --git a/apps/web/app/dashboard/search/page.tsx b/apps/web/app/dashboard/search/page.tsx deleted file mode 100644 index a239550..0000000 --- a/apps/web/app/dashboard/search/page.tsx +++ /dev/null @@ -1,28 +0,0 @@ -"use client"; - -import { Suspense } from "react"; -import BookmarksGrid from "@/components/dashboard/bookmarks/BookmarksGrid"; -import { FullPageSpinner } from "@/components/ui/full-page-spinner"; -import { useBookmarkSearch } from "@/lib/hooks/bookmark-search"; - -function SearchComp() { - const { data } = useBookmarkSearch(); - - return ( -
- {data ? ( - - ) : ( - - )} -
- ); -} - -export default function SearchPage() { - return ( - - - - ); -} diff --git a/apps/web/app/settings/ai/page.tsx b/apps/web/app/settings/ai/page.tsx deleted file mode 100644 index 2b3d7a8..0000000 --- a/apps/web/app/settings/ai/page.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import AISettings from "@/components/settings/AISettings"; - -export default function AISettingsPage() { - return ; -} diff --git a/apps/web/app/settings/feeds/page.tsx b/apps/web/app/settings/feeds/page.tsx deleted file mode 100644 index d2d1f18..0000000 --- a/apps/web/app/settings/feeds/page.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import FeedSettings from "@/components/settings/FeedSettings"; - -export default function FeedSettingsPage() { - return ; -} diff --git a/apps/web/app/settings/import/page.tsx b/apps/web/app/settings/import/page.tsx deleted file mode 100644 index e27aa9a..0000000 --- a/apps/web/app/settings/import/page.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import ImportExport from "@/components/settings/ImportExport"; - -export default function ImportSettingsPage() { - return ( -
- -
- ); -} diff --git a/apps/web/components/dashboard/bookmarks/AssetCard.tsx b/apps/web/components/dashboard/bookmarks/AssetCard.tsx deleted file mode 100644 index 61b3bc8..0000000 --- a/apps/web/components/dashboard/bookmarks/AssetCard.tsx +++ /dev/null @@ -1,75 +0,0 @@ -"use client"; - -import Image from "next/image"; -import Link from "next/link"; - -import type { ZBookmarkTypeAsset } from "@hoarder/shared/types/bookmarks"; -import { getAssetUrl } from "@hoarder/shared-react/utils/assetUtils"; -import { getSourceUrl } from "@hoarder/shared-react/utils/bookmarkUtils"; - -import { BookmarkLayoutAdaptingCard } from "./BookmarkLayoutAdaptingCard"; -import FooterLinkURL from "./FooterLinkURL"; - -function AssetImage({ - bookmark, - className, -}: { - bookmark: ZBookmarkTypeAsset; - className?: string; -}) { - const bookmarkedAsset = bookmark.content; - switch (bookmarkedAsset.assetType) { - case "image": { - return ( - - asset - - ); - } - case "pdf": { - return ( -