From ff3ab18d1690e50473be2d77897fb9de48361413 Mon Sep 17 00:00:00 2001 From: James Date: Fri, 23 Dec 2022 10:24:43 -0500 Subject: [PATCH] fix: #1752, removes label from row field type --- src/admin/components/views/collections/List/Cell/index.tsx | 2 +- src/errors/InvalidFieldName.ts | 4 ++-- src/errors/InvalidFieldRelationship.ts | 4 ++-- src/errors/MissingFieldInputOptions.ts | 4 ++-- src/fields/config/sanitize.spec.ts | 4 ++-- src/fields/config/sanitize.ts | 2 +- src/fields/config/types.ts | 2 +- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/admin/components/views/collections/List/Cell/index.tsx b/src/admin/components/views/collections/List/Cell/index.tsx index a88ebd91a6..e24d63bb6d 100644 --- a/src/admin/components/views/collections/List/Cell/index.tsx +++ b/src/admin/components/views/collections/List/Cell/index.tsx @@ -39,7 +39,7 @@ const DefaultCell: React.FC = (props) => { if (!CellComponent) { return ( - {(cellData === '' || typeof cellData === 'undefined') && t('noLabel', { label: getTranslation(typeof field.label === 'function' ? 'data' : field.label || 'data', i18n) })} + {((cellData === '' || typeof cellData === 'undefined') && 'label' in field) && t('noLabel', { label: getTranslation(typeof field.label === 'function' ? 'data' : field.label || 'data', i18n) })} {typeof cellData === 'string' && cellData} {typeof cellData === 'number' && cellData} {typeof cellData === 'object' && JSON.stringify(cellData)} diff --git a/src/errors/InvalidFieldName.ts b/src/errors/InvalidFieldName.ts index d9c09f753e..044dd97b78 100644 --- a/src/errors/InvalidFieldName.ts +++ b/src/errors/InvalidFieldName.ts @@ -1,8 +1,8 @@ -import { Field } from '../fields/config/types'; +import { FieldAffectingData } from '../fields/config/types'; import APIError from './APIError'; class InvalidFieldName extends APIError { - constructor(field: Field, fieldName: string) { + constructor(field: FieldAffectingData, fieldName: string) { super(`Field ${field.label} has invalid name '${fieldName}'. Field names can not include periods (.) and must be alphanumeric.`); } } diff --git a/src/errors/InvalidFieldRelationship.ts b/src/errors/InvalidFieldRelationship.ts index 55b8cf766e..62fd616a92 100644 --- a/src/errors/InvalidFieldRelationship.ts +++ b/src/errors/InvalidFieldRelationship.ts @@ -1,8 +1,8 @@ -import { Field } from '../fields/config/types'; +import { RelationshipField, UploadField } from '../fields/config/types'; import APIError from './APIError'; class InvalidFieldRelationship extends APIError { - constructor(field: Field, relationship: string) { + constructor(field: RelationshipField | UploadField, relationship: string) { super(`Field ${field.label} has invalid relationship '${relationship}'.`); } } diff --git a/src/errors/MissingFieldInputOptions.ts b/src/errors/MissingFieldInputOptions.ts index f28473b4a0..daa9b971d4 100644 --- a/src/errors/MissingFieldInputOptions.ts +++ b/src/errors/MissingFieldInputOptions.ts @@ -1,8 +1,8 @@ -import { Field } from '../fields/config/types'; +import { RadioField, SelectField } from '../fields/config/types'; import APIError from './APIError'; class MissingFieldInputOptions extends APIError { - constructor(field: Field) { + constructor(field: SelectField | RadioField) { super(`Field ${field.label} is missing options.`); } } diff --git a/src/fields/config/sanitize.spec.ts b/src/fields/config/sanitize.spec.ts index 87102a6704..8d8e8755cd 100644 --- a/src/fields/config/sanitize.spec.ts +++ b/src/fields/config/sanitize.spec.ts @@ -1,6 +1,6 @@ import sanitizeFields from './sanitize'; import { MissingFieldType, InvalidFieldRelationship, InvalidFieldName } from '../../errors'; -import { ArrayField, Block, BlockField, CheckboxField, Field, TextField } from './types'; +import { ArrayField, Block, BlockField, CheckboxField, Field, NumberField, TextField } from './types'; describe('sanitizeFields', () => { it('should throw on missing type field', () => { @@ -143,7 +143,7 @@ describe('sanitizeFields', () => { expect(sanitizedField.label).toStrictEqual('Special Block'); expect(sanitizedField.type).toStrictEqual('blocks'); expect(sanitizedField.labels).toMatchObject({ singular: 'Special Block', plural: 'Special Blocks' }); - expect(sanitizedField.blocks[0].fields[0].label).toStrictEqual('Test Number'); + expect((sanitizedField.blocks[0].fields[0] as NumberField).label).toStrictEqual('Test Number'); }); }); diff --git a/src/fields/config/sanitize.ts b/src/fields/config/sanitize.ts index 19155aab0b..4709d2b05c 100644 --- a/src/fields/config/sanitize.ts +++ b/src/fields/config/sanitize.ts @@ -15,7 +15,7 @@ const sanitizeFields = (fields: Field[], validRelationships: string[]): Field[] if (!field.type) throw new MissingFieldType(field); // assert that field names do not contain forbidden characters - if ('name' in field && field.name && field.name.includes('.')) { + if (fieldAffectsData(field) && field.name.includes('.')) { throw new InvalidFieldName(field, field.name); } diff --git a/src/fields/config/types.ts b/src/fields/config/types.ts index 7afe5362dc..dd4a87811c 100644 --- a/src/fields/config/types.ts +++ b/src/fields/config/types.ts @@ -183,7 +183,7 @@ export type GroupField = FieldBase & { export type RowAdmin = Omit; -export type RowField = Omit & { +export type RowField = Omit & { admin?: RowAdmin; type: 'row'; fields: Field[];