From b23c76c2ecddb5e6ff64b5a17e8dfa99fa026b81 Mon Sep 17 00:00:00 2001 From: trafficlunar Date: Mon, 19 May 2025 17:05:39 +0100 Subject: [PATCH] feat: sort by oldest --- src/components/mii-list/index.tsx | 16 ++++++++++++---- src/components/mii-list/sort-select.tsx | 4 ++-- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/components/mii-list/index.tsx b/src/components/mii-list/index.tsx index 713b304..fabad86 100644 --- a/src/components/mii-list/index.tsx +++ b/src/components/mii-list/index.tsx @@ -23,7 +23,7 @@ interface Props { const searchSchema = z.object({ q: querySchema.optional(), - sort: z.enum(["newest", "likes"], { message: "Sort must be either 'newest' or 'likes'" }).default("newest"), + sort: z.enum(["newest", "likes", "oldest"], { message: "Sort must be either 'newest', 'likes', or 'oldest'" }).default("newest"), tags: z .string() .optional() @@ -79,9 +79,17 @@ export default async function MiiList({ searchParams, userId, inLikesPage }: Pro ...(userId && { userId }), }; - // Sorting by likes or newest - const orderBy: Prisma.MiiOrderByWithRelationInput[] = - sort === "likes" ? [{ likedBy: { _count: "desc" } }, { name: "asc" }] : [{ createdAt: "desc" }, { name: "asc" }]; + // Sorting by likes, newest, or oldest + let orderBy: Prisma.MiiOrderByWithRelationInput[]; + + if (sort === "likes") { + orderBy = [{ likedBy: { _count: "desc" } }, { name: "asc" }]; + } else if (sort === "oldest") { + orderBy = [{ createdAt: "asc" }, { name: "asc" }]; + } else { + // default to newest + orderBy = [{ createdAt: "desc" }, { name: "asc" }]; + } const select: Prisma.MiiSelect = { id: true, diff --git a/src/components/mii-list/sort-select.tsx b/src/components/mii-list/sort-select.tsx index 6d3c4a8..af60f0a 100644 --- a/src/components/mii-list/sort-select.tsx +++ b/src/components/mii-list/sort-select.tsx @@ -4,9 +4,9 @@ import { Icon } from "@iconify/react"; import { useSelect } from "downshift"; import { redirect, useSearchParams } from "next/navigation"; -type Sort = "likes" | "newest"; +type Sort = "newest" | "likes" | "oldest"; -const items = ["likes", "newest"]; +const items = ["newest", "likes", "oldest"]; export default function SortSelect() { const searchParams = useSearchParams();