Redesigned Search, removed Unused Admin Route
This commit is contained in:
@@ -2,56 +2,30 @@
|
||||
"use server";
|
||||
import { prisma, PrismaClient } from "@repo/db";
|
||||
|
||||
export async function getData(
|
||||
model: keyof PrismaClient,
|
||||
limit: number,
|
||||
offset: number,
|
||||
searchTerm: string,
|
||||
searchFields: string[],
|
||||
filter?: Record<string, any>,
|
||||
include?: Record<string, boolean>,
|
||||
orderBy?: Record<string, "asc" | "desc">,
|
||||
select?: Record<string, any>,
|
||||
) {
|
||||
if (!model || !prisma[model]) {
|
||||
export async function getData<Twhere>({
|
||||
model,
|
||||
limit,
|
||||
offset,
|
||||
where,
|
||||
include,
|
||||
orderBy,
|
||||
select,
|
||||
}: {
|
||||
model: keyof PrismaClient;
|
||||
limit: number;
|
||||
offset: number;
|
||||
where: Twhere;
|
||||
include?: Record<string, boolean>;
|
||||
orderBy?: Record<string, "asc" | "desc">;
|
||||
select?: Record<string, any>;
|
||||
}) {
|
||||
if (!model || !(prisma as any)[model]) {
|
||||
return { data: [], total: 0 };
|
||||
}
|
||||
|
||||
const formattedId = searchTerm.match(/^VAR(\d+)$/)?.[1];
|
||||
const delegate = (prisma as any)[model];
|
||||
|
||||
const where = searchTerm
|
||||
? {
|
||||
OR: [
|
||||
formattedId ? { id: formattedId } : undefined,
|
||||
...searchFields.map((field) => {
|
||||
if (field.includes(".")) {
|
||||
const parts: string[] = field.split(".");
|
||||
|
||||
// Helper function to build nested object
|
||||
const buildNestedFilter = (parts: string[], index = 0): any => {
|
||||
if (index === parts.length - 1) {
|
||||
// Reached the last part - add the contains filter
|
||||
return { [parts[index] as string]: { contains: searchTerm } };
|
||||
}
|
||||
|
||||
// For intermediate levels, nest the next level
|
||||
return { [parts[index] as string]: buildNestedFilter(parts, index + 1) };
|
||||
};
|
||||
|
||||
return buildNestedFilter(parts);
|
||||
}
|
||||
|
||||
return { [field]: { contains: searchTerm } };
|
||||
}),
|
||||
].filter(Boolean),
|
||||
...filter,
|
||||
}
|
||||
: { ...filter };
|
||||
|
||||
if (!prisma[model]) {
|
||||
return { data: [], total: 0 };
|
||||
}
|
||||
const data = await (prisma[model] as any).findMany({
|
||||
const data = await delegate.findMany({
|
||||
where,
|
||||
orderBy,
|
||||
take: limit,
|
||||
@@ -60,7 +34,7 @@ export async function getData(
|
||||
select,
|
||||
});
|
||||
|
||||
const total = await (prisma[model] as any).count({ where });
|
||||
const total = await delegate.count({ where });
|
||||
|
||||
return { data, total };
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user