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({
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,

View file

@ -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();