+ Paginated Table Search
This commit is contained in:
@@ -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 };
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user