+ Paginated Table Search

This commit is contained in:
Nicolas
2025-02-17 01:41:46 +01:00
parent b8357d1d06
commit 6c67a11cab
4 changed files with 112 additions and 52 deletions

View File

@@ -1,24 +1,43 @@
'use server';
import { PrismaClient } from '@repo/db';
"use server";
import { PrismaClient } from "@repo/db";
export const getData = async (
prismaModelName: keyof PrismaClient,
take: number,
skip: number
) => {
const prisma = new PrismaClient();
if (
!prismaModelName ||
!prisma[prismaModelName] ||
!('findMany' in prisma[prismaModelName])
)
return;
const model = prisma[prismaModelName] as any;
if (!model.findMany || !model.count) return;
const data = await model.findMany({
take,
skip,
const prisma = new PrismaClient();
export async function getData(
model: keyof PrismaClient,
limit: number,
offset: number,
searchTerm: string,
searchFields: string[]
) {
if (!model || !prisma[model]) {
return { data: [], total: 0 };
}
const formattedId = searchTerm.match(/^VAR(\d+)$/)?.[1];
const where = searchTerm
? {
OR: [
formattedId ? { id: formattedId } : undefined,
...searchFields.map((field) => ({
[field]: { contains: searchTerm },
})),
].filter(Boolean),
}
: {};
if (!prisma[model]) {
return { data: [], total: 0 };
}
const data = await (prisma[model] as any).findMany({
where,
take: limit,
skip: offset,
});
const total = await model.count();
const total = await (prisma[model] as any).count({ where });
return { data, total };
};
}