feat: optimizes field operations

* wip: beforeChange field op pattern

* feat: optimizes field-level beforeChange

* feat: optimizes beforeValidate

* feat: optimizes afterChange

* feat: optimizes afterRead

* chore: comment accuracy
This commit is contained in:
James Mikrut
2022-05-02 12:46:52 -04:00
committed by GitHub
parent 69d328d15e
commit 18489faceb
44 changed files with 1577 additions and 1110 deletions

View File

@@ -1,6 +1,5 @@
/* eslint-disable @typescript-eslint/no-use-before-define */
import { Collection } from '../../collections/config/types';
import { Payload } from '../..';
import { RichTextField, Field } from '../config/types';
import { PayloadRequest } from '../../express/types';
@@ -10,7 +9,6 @@ type Arguments = {
key: string | number
depth: number
currentDepth?: number
payload: Payload
field: RichTextField
req: PayloadRequest
showHiddenFields: boolean
@@ -24,7 +22,6 @@ export const populate = async ({
overrideAccess,
depth,
currentDepth,
payload,
req,
showHiddenFields,
}: Omit<Arguments, 'field'> & {
@@ -34,7 +31,7 @@ export const populate = async ({
}): Promise<void> => {
const dataRef = data as Record<string, unknown>;
const doc = await payload.findByID({
const doc = await req.payload.findByID({
req,
collection: collection.config.slug,
id,

View File

@@ -1,5 +1,4 @@
/* eslint-disable @typescript-eslint/no-use-before-define */
import { Payload } from '../..';
import { Field, fieldHasSubFields, fieldIsArrayType, fieldAffectsData } from '../config/types';
import { PayloadRequest } from '../../express/types';
import { populate } from './populate';
@@ -10,7 +9,6 @@ type NestedRichTextFieldsArgs = {
data: unknown
fields: Field[]
req: PayloadRequest
payload: Payload
overrideAccess: boolean
depth: number
currentDepth?: number
@@ -22,7 +20,6 @@ export const recurseNestedFields = ({
data,
fields,
req,
payload,
overrideAccess = false,
depth,
currentDepth = 0,
@@ -34,7 +31,7 @@ export const recurseNestedFields = ({
if (field.hasMany && Array.isArray(data[field.name])) {
if (Array.isArray(field.relationTo)) {
data[field.name].forEach(({ relationTo, value }, i) => {
const collection = payload.collections[relationTo];
const collection = req.payload.collections[relationTo];
if (collection) {
promises.push(populate({
id: value,
@@ -45,7 +42,6 @@ export const recurseNestedFields = ({
overrideAccess,
depth,
currentDepth,
payload,
req,
showHiddenFields,
}));
@@ -53,7 +49,7 @@ export const recurseNestedFields = ({
});
} else {
data[field.name].forEach((id, i) => {
const collection = payload.collections[field.relationTo as string];
const collection = req.payload.collections[field.relationTo as string];
if (collection) {
promises.push(populate({
id,
@@ -64,7 +60,6 @@ export const recurseNestedFields = ({
overrideAccess,
depth,
currentDepth,
payload,
req,
showHiddenFields,
}));
@@ -72,7 +67,7 @@ export const recurseNestedFields = ({
});
}
} else if (Array.isArray(field.relationTo) && data[field.name]?.value && data[field.name]?.relationTo) {
const collection = payload.collections[data[field.name].relationTo];
const collection = req.payload.collections[data[field.name].relationTo];
promises.push(populate({
id: data[field.name].value,
field,
@@ -82,14 +77,13 @@ export const recurseNestedFields = ({
overrideAccess,
depth,
currentDepth,
payload,
req,
showHiddenFields,
}));
}
}
if (typeof data[field.name] !== 'undefined' && typeof field.relationTo === 'string') {
const collection = payload.collections[field.relationTo];
const collection = req.payload.collections[field.relationTo];
promises.push(populate({
id: data[field.name],
field,
@@ -99,7 +93,6 @@ export const recurseNestedFields = ({
overrideAccess,
depth,
currentDepth,
payload,
req,
showHiddenFields,
}));
@@ -111,7 +104,6 @@ export const recurseNestedFields = ({
data: data[field.name],
fields: field.fields,
req,
payload,
overrideAccess,
depth,
currentDepth,
@@ -123,7 +115,6 @@ export const recurseNestedFields = ({
data,
fields: field.fields,
req,
payload,
overrideAccess,
depth,
currentDepth,
@@ -140,7 +131,6 @@ export const recurseNestedFields = ({
data: data[field.name][i],
fields: block.fields,
req,
payload,
overrideAccess,
depth,
currentDepth,
@@ -157,7 +147,6 @@ export const recurseNestedFields = ({
data: data[field.name][i],
fields: field.fields,
req,
payload,
overrideAccess,
depth,
currentDepth,
@@ -173,7 +162,6 @@ export const recurseNestedFields = ({
recurseRichText({
req,
children: node.children,
payload,
overrideAccess,
depth,
currentDepth,

View File

@@ -1,17 +1,15 @@
import { Payload } from '../..';
import { RichTextField } from '../config/types';
import { PayloadRequest } from '../../express/types';
import { recurseNestedFields } from './recurseNestedFields';
import { populate } from './populate';
type Arguments = {
data: unknown
overrideAccess?: boolean
depth: number
type Args = {
currentDepth?: number
payload: Payload
depth: number
field: RichTextField
overrideAccess?: boolean
req: PayloadRequest
siblingDoc: Record<string, unknown>
showHiddenFields: boolean
}
@@ -20,7 +18,6 @@ type RecurseRichTextArgs = {
overrideAccess: boolean
depth: number
currentDepth: number
payload: Payload
field: RichTextField
req: PayloadRequest
promises: Promise<void>[]
@@ -30,7 +27,6 @@ type RecurseRichTextArgs = {
export const recurseRichText = ({
req,
children,
payload,
overrideAccess = false,
depth,
currentDepth = 0,
@@ -40,7 +36,7 @@ export const recurseRichText = ({
}: RecurseRichTextArgs): void => {
if (Array.isArray(children)) {
(children as any[]).forEach((element) => {
const collection = payload.collections[element?.relationTo];
const collection = req.payload.collections[element?.relationTo];
if ((element.type === 'relationship' || element.type === 'upload')
&& element?.value?.id
@@ -52,7 +48,6 @@ export const recurseRichText = ({
data: element.fields || {},
fields: field.admin.upload.collections[element.relationTo].fields,
req,
payload,
overrideAccess,
depth,
currentDepth,
@@ -67,7 +62,6 @@ export const recurseRichText = ({
overrideAccess,
depth,
currentDepth,
payload,
field,
collection,
showHiddenFields,
@@ -76,14 +70,13 @@ export const recurseRichText = ({
if (element?.children) {
recurseRichText({
req,
children: element.children,
payload,
overrideAccess,
depth,
currentDepth,
depth,
field,
overrideAccess,
promises,
req,
showHiddenFields,
});
}
@@ -91,27 +84,25 @@ export const recurseRichText = ({
}
};
const richTextRelationshipPromise = ({
req,
data,
payload,
overrideAccess,
depth,
const richTextRelationshipPromise = async ({
currentDepth,
depth,
field,
overrideAccess,
req,
siblingDoc,
showHiddenFields,
}: Arguments) => async (): Promise<void> => {
}: Args): Promise<void> => {
const promises = [];
recurseRichText({
req,
children: data[field.name],
payload,
overrideAccess,
depth,
children: siblingDoc[field.name] as unknown[],
currentDepth,
depth,
field,
overrideAccess,
promises,
req,
showHiddenFields,
});