feat: sort by oldest

This commit is contained in:
trafficlunar 2025-05-19 17:05:39 +01:00
parent d9a299bb7f
commit b23c76c2ec
2 changed files with 14 additions and 6 deletions

View file

@ -23,7 +23,7 @@ interface Props {
const searchSchema = z.object({ const searchSchema = z.object({
q: querySchema.optional(), 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 tags: z
.string() .string()
.optional() .optional()
@ -79,9 +79,17 @@ export default async function MiiList({ searchParams, userId, inLikesPage }: Pro
...(userId && { userId }), ...(userId && { userId }),
}; };
// Sorting by likes or newest // Sorting by likes, newest, or oldest
const orderBy: Prisma.MiiOrderByWithRelationInput[] = let orderBy: Prisma.MiiOrderByWithRelationInput[];
sort === "likes" ? [{ likedBy: { _count: "desc" } }, { name: "asc" }] : [{ createdAt: "desc" }, { name: "asc" }];
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 = { const select: Prisma.MiiSelect = {
id: true, id: true,

View file

@ -4,9 +4,9 @@ import { Icon } from "@iconify/react";
import { useSelect } from "downshift"; import { useSelect } from "downshift";
import { redirect, useSearchParams } from "next/navigation"; 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() { export default function SortSelect() {
const searchParams = useSearchParams(); const searchParams = useSearchParams();