feat: add populate property to Local / REST API (#8969)
### What?
Adds `populate` property to Local API and REST API operations that can
be used to specify `select` for a specific collection when it's
populated
```ts
const result = await payload.findByID({
populate: {
// type safe if you have generated types
posts: {
text: true,
},
},
collection: 'pages',
depth: 1,
id: aboutPage.id,
})
result.relatedPost // only has text and id properties
```
```ts
fetch('https://localhost:3000/api/pages?populate[posts][text]=true') // highlight-line
.then((res) => res.json())
.then((data) => console.log(data))
```
It also overrides
[`defaultPopulate`](https://github.com/payloadcms/payload/pull/8934)
Ensures `defaultPopulate` doesn't affect GraphQL.
### How?
Implements the property for all operations that have the `depth`
argument.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import type { Field, PayloadRequest } from 'payload'
|
||||
import type { Field, PayloadRequest, PopulateType } from 'payload'
|
||||
|
||||
import { fieldAffectsData, fieldHasSubFields, fieldIsArrayType, tabHasName } from 'payload/shared'
|
||||
|
||||
@@ -12,6 +12,7 @@ type NestedRichTextFieldsArgs = {
|
||||
draft: boolean
|
||||
fields: Field[]
|
||||
overrideAccess: boolean
|
||||
populateArg?: PopulateType
|
||||
populationPromises: Promise<void>[]
|
||||
req: PayloadRequest
|
||||
showHiddenFields: boolean
|
||||
@@ -24,6 +25,7 @@ export const recurseNestedFields = ({
|
||||
draft,
|
||||
fields,
|
||||
overrideAccess = false,
|
||||
populateArg,
|
||||
populationPromises,
|
||||
req,
|
||||
showHiddenFields,
|
||||
@@ -48,7 +50,8 @@ export const recurseNestedFields = ({
|
||||
key: i,
|
||||
overrideAccess,
|
||||
req,
|
||||
select: collection.config.defaultPopulate,
|
||||
select:
|
||||
populateArg?.[collection.config.slug] ?? collection.config.defaultPopulate,
|
||||
showHiddenFields,
|
||||
}),
|
||||
)
|
||||
@@ -70,7 +73,8 @@ export const recurseNestedFields = ({
|
||||
key: i,
|
||||
overrideAccess,
|
||||
req,
|
||||
select: collection.config.defaultPopulate,
|
||||
select:
|
||||
populateArg?.[collection.config.slug] ?? collection.config.defaultPopulate,
|
||||
showHiddenFields,
|
||||
}),
|
||||
)
|
||||
@@ -96,7 +100,7 @@ export const recurseNestedFields = ({
|
||||
key: 'value',
|
||||
overrideAccess,
|
||||
req,
|
||||
select: collection.config.defaultPopulate,
|
||||
select: populateArg?.[collection.config.slug] ?? collection.config.defaultPopulate,
|
||||
showHiddenFields,
|
||||
}),
|
||||
)
|
||||
@@ -117,7 +121,7 @@ export const recurseNestedFields = ({
|
||||
key: field.name,
|
||||
overrideAccess,
|
||||
req,
|
||||
select: collection.config.defaultPopulate,
|
||||
select: populateArg?.[collection.config.slug] ?? collection.config.defaultPopulate,
|
||||
showHiddenFields,
|
||||
}),
|
||||
)
|
||||
@@ -131,6 +135,7 @@ export const recurseNestedFields = ({
|
||||
draft,
|
||||
fields: field.fields,
|
||||
overrideAccess,
|
||||
populateArg,
|
||||
populationPromises,
|
||||
req,
|
||||
showHiddenFields,
|
||||
@@ -143,6 +148,7 @@ export const recurseNestedFields = ({
|
||||
draft,
|
||||
fields: field.fields,
|
||||
overrideAccess,
|
||||
populateArg,
|
||||
populationPromises,
|
||||
req,
|
||||
showHiddenFields,
|
||||
@@ -157,6 +163,7 @@ export const recurseNestedFields = ({
|
||||
draft,
|
||||
fields: tab.fields,
|
||||
overrideAccess,
|
||||
populateArg,
|
||||
populationPromises,
|
||||
req,
|
||||
showHiddenFields,
|
||||
@@ -174,6 +181,7 @@ export const recurseNestedFields = ({
|
||||
draft,
|
||||
fields: block.fields,
|
||||
overrideAccess,
|
||||
populateArg,
|
||||
populationPromises,
|
||||
req,
|
||||
showHiddenFields,
|
||||
@@ -191,6 +199,7 @@ export const recurseNestedFields = ({
|
||||
draft,
|
||||
fields: field.fields,
|
||||
overrideAccess,
|
||||
populateArg,
|
||||
populationPromises,
|
||||
req,
|
||||
showHiddenFields,
|
||||
|
||||
@@ -1,4 +1,10 @@
|
||||
import type { PayloadRequest, RichTextAdapter, RichTextField } from 'payload'
|
||||
import type {
|
||||
CollectionConfig,
|
||||
PayloadRequest,
|
||||
PopulateType,
|
||||
RichTextAdapter,
|
||||
RichTextField,
|
||||
} from 'payload'
|
||||
|
||||
import type { AdapterArguments } from '../types.js'
|
||||
|
||||
@@ -16,6 +22,7 @@ type RecurseRichTextArgs = {
|
||||
draft: boolean
|
||||
field: RichTextField<any[], any, any>
|
||||
overrideAccess: boolean
|
||||
populateArg?: PopulateType
|
||||
populationPromises: Promise<void>[]
|
||||
req: PayloadRequest
|
||||
showHiddenFields: boolean
|
||||
@@ -28,6 +35,7 @@ export const recurseRichText = ({
|
||||
draft,
|
||||
field,
|
||||
overrideAccess = false,
|
||||
populateArg,
|
||||
populationPromises,
|
||||
req,
|
||||
showHiddenFields,
|
||||
@@ -54,7 +62,10 @@ export const recurseRichText = ({
|
||||
key: 'value',
|
||||
overrideAccess,
|
||||
req,
|
||||
select: collection.config.defaultPopulate,
|
||||
select:
|
||||
req.payloadAPI !== 'GraphQL'
|
||||
? (populateArg?.[collection.config.slug] ?? collection.config.defaultPopulate)
|
||||
: undefined,
|
||||
showHiddenFields,
|
||||
}),
|
||||
)
|
||||
@@ -70,6 +81,7 @@ export const recurseRichText = ({
|
||||
draft,
|
||||
fields: field.admin.upload.collections[element.relationTo].fields,
|
||||
overrideAccess,
|
||||
populateArg,
|
||||
populationPromises,
|
||||
req,
|
||||
showHiddenFields,
|
||||
@@ -94,7 +106,10 @@ export const recurseRichText = ({
|
||||
key: 'value',
|
||||
overrideAccess,
|
||||
req,
|
||||
select: collection.config.defaultPopulate,
|
||||
select:
|
||||
req.payloadAPI !== 'GraphQL'
|
||||
? (populateArg?.[collection.config.slug] ?? collection.config.defaultPopulate)
|
||||
: undefined,
|
||||
showHiddenFields,
|
||||
}),
|
||||
)
|
||||
@@ -109,6 +124,7 @@ export const recurseRichText = ({
|
||||
draft,
|
||||
fields: field.admin?.link?.fields,
|
||||
overrideAccess,
|
||||
populateArg,
|
||||
populationPromises,
|
||||
req,
|
||||
showHiddenFields,
|
||||
@@ -124,6 +140,7 @@ export const recurseRichText = ({
|
||||
draft,
|
||||
field,
|
||||
overrideAccess,
|
||||
populateArg,
|
||||
populationPromises,
|
||||
req,
|
||||
showHiddenFields,
|
||||
@@ -139,6 +156,7 @@ export const richTextRelationshipPromise = ({
|
||||
draft,
|
||||
field,
|
||||
overrideAccess,
|
||||
populateArg,
|
||||
populationPromises,
|
||||
req,
|
||||
showHiddenFields,
|
||||
@@ -151,6 +169,7 @@ export const richTextRelationshipPromise = ({
|
||||
draft,
|
||||
field,
|
||||
overrideAccess,
|
||||
populateArg,
|
||||
populationPromises,
|
||||
req,
|
||||
showHiddenFields,
|
||||
|
||||
@@ -159,6 +159,7 @@ export function slateEditor(
|
||||
findMany,
|
||||
flattenLocales,
|
||||
overrideAccess,
|
||||
populate,
|
||||
populationPromises,
|
||||
req,
|
||||
showHiddenFields,
|
||||
@@ -182,6 +183,7 @@ export function slateEditor(
|
||||
findMany,
|
||||
flattenLocales,
|
||||
overrideAccess,
|
||||
populateArg: populate,
|
||||
populationPromises,
|
||||
req,
|
||||
showHiddenFields,
|
||||
|
||||
Reference in New Issue
Block a user