From a9cd23a883d89c8deb3c1b5386decd50516d69fd Mon Sep 17 00:00:00 2001 From: James Date: Mon, 3 Apr 2023 22:30:24 -0400 Subject: [PATCH] feat: improves required type accuracy --- src/utilities/entityToJSONSchema.ts | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/utilities/entityToJSONSchema.ts b/src/utilities/entityToJSONSchema.ts index af0379c396..92b80355a4 100644 --- a/src/utilities/entityToJSONSchema.ts +++ b/src/utilities/entityToJSONSchema.ts @@ -8,9 +8,19 @@ import deepCopyObject from './deepCopyObject'; import { toWords } from './formatLabels'; import { SanitizedConfig } from '../config/types'; +const propertyIsRequired = (field: Field) => { + if (fieldAffectsData(field) && (('required' in field && field.required === true))) return true; -const propertyIsOptional = (field: Field) => { - return fieldAffectsData(field) && (('required' in field && field.required === true)); + if ('fields' in field) { + if (field.admin?.condition || field.access?.read) return false; + return field.fields.find((subField) => propertyIsRequired(subField)); + } + + if (field.type === 'tabs') { + return field.tabs.some((tab) => 'name' in tab && tab.fields.find((subField) => propertyIsRequired(subField))); + } + + return false; }; function getCollectionIDType(collections: SanitizedCollectionConfig[], slug: string): 'string' | 'number' { @@ -371,7 +381,7 @@ function generateFieldTypes(config: SanitizedConfig, fields: Field[]): { ), required: [ ...fields - .filter(propertyIsOptional) + .filter(propertyIsRequired) .map((field) => (fieldAffectsData(field) ? field.name : '')), ...requiredTopLevelProps, ],