diff --git a/.changeset/tender-experts-stop.md b/.changeset/tender-experts-stop.md new file mode 100644 index 00000000..38d0c95c --- /dev/null +++ b/.changeset/tender-experts-stop.md @@ -0,0 +1,5 @@ +--- +"@premieroctet/next-admin": patch +--- + +fix: avoid fetching list relation records in list view, only count is needed diff --git a/packages/next-admin/src/utils/prisma.ts b/packages/next-admin/src/utils/prisma.ts index f95291c8..f7698bb2 100644 --- a/packages/next-admin/src/utils/prisma.ts +++ b/packages/next-admin/src/utils/prisma.ts @@ -401,7 +401,7 @@ const preparePrismaListRequest = async ( let select: Select | undefined; let where = {}; const list = options?.model?.[resource]?.list as ListOptions; - select = selectPayloadForModel(resource, list, "object"); + select = selectPayloadForModel(resource, list, "object", "list"); where = createWherePredicate({ resource, options, @@ -715,7 +715,8 @@ const isVirtualField = ( export const selectPayloadForModel = ( resource: M, options?: EditOptions | ListOptions, - level: "scalar" | "object" = "scalar" + level: "scalar" | "object" = "scalar", + context: "list" | "edit" = "edit" ) => { const model = getSchema().definitions[ resource @@ -753,7 +754,7 @@ export const selectPayloadForModel = ( !displayKeys ) { if (fieldNextAdmin?.kind === "object" && level === "object") { - if (fieldNextAdmin?.isList) { + if (fieldNextAdmin?.isList && context === "list") { const countFields = acc["_count"]?.select ?? {}; acc["_count"] = { select: { @@ -761,25 +762,26 @@ export const selectPayloadForModel = ( [name]: true, }, }; - } - acc[name] = { - select: selectPayloadForModel( - fieldNextAdmin.type as ModelName, - {}, - "scalar" - ), - }; + } else { + acc[name] = { + select: selectPayloadForModel( + fieldNextAdmin.type as ModelName, + {}, + "scalar" + ), + }; - const orderField = - (options as EditOptions)?.fields?.[ - name as Field - // @ts-expect-error - ]?.orderField || (options as ListOptions)?.orderField; + const orderField = + (options as EditOptions)?.fields?.[ + name as Field + // @ts-expect-error + ]?.orderField || (options as ListOptions)?.orderField; - if (orderField) { - acc[name].orderBy = { - [orderField]: "asc", - }; + if (orderField) { + acc[name].orderBy = { + [orderField]: "asc", + }; + } } } else { acc[name] = true;