+ {searchFields.length > 0 && (
+
+ {
+ setSearchTerm(e.target.value);
+ handleSearchChange(e.target.value);
+ }}
+ className="input input-bordered w-full max-w-xs justify-end"
+ />
+
+ )}
{
- 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 };
-};
+}