[BUG] Record settings not saved (#9762)

# Introduction
By initially fixing this Fixes #9381, discovered other behavior that
have been fix.
Overall we encountered a bug that corrupts a workspace and make the
browser + api crash
This issue https://github.com/twentyhq/core-team-issues/issues/25
suggests a refactor that has final save button instead of auto-save

## `labelIdentifierFieldMetadataId` form default value
The default value resulted in being undefined, resulting in react hook
form `labelIdentifierFieldMetadataId` is required field error.

### Fix
Setting default value fallback to `null`  as field is `nullable`

## `SettingsDataModelObjectSettingsFormCard` never triggers form
Unless I'm mistaken in production touching any fields within
`SettingsDataModelObjectSettingsFormCard` would never trigger form
submission until you also modify `SettingsDataModelObjectAboutForm`
fields

### Fix
Provide and apply `onblur` that triggers the form on both
`SettingsDataModelObjectSettingsFormCard` inputs

## Wrong default `labelIdentifierFieldMetadataItem` on first page render
When landing on the page for the first time, if a custom
`labelIdentifierFieldMetadataItem` has been set it won't be computed
within the `PreviewCard`.
Occurs when `labelIdentifierFieldMetadataId` form default value is
undefined, due to `any` injection.

### Fix
In the `getLabelIdentifierFieldMetadataItem` check the
`labelIdentifierFieldMetadataIdFormValue` definition, if undefined
fallback to current `objectMetadata` identifier

---------

Co-authored-by: Charles Bochet <charles@twenty.com>
This commit is contained in:
Paul Rastoin
2025-01-22 16:32:57 +01:00
committed by GitHub
parent 80c9ebfd4e
commit 8ab01ebef4
22 changed files with 161 additions and 89 deletions

View File

@ -17,12 +17,13 @@ const mockObjectMetadataItem: ObjectMetadataItem = {
labelSingular: 'Company',
labelPlural: 'Companies',
isCustom: false,
labelIdentifierFieldMetadataId: '20202020-dd4a-4ea4-bb7b-1c7300491b65',
isActive: true,
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString(),
fields: [
{
id: 'field-1',
id: '20202020-fed9-4ce5-9502-02a8efaf46e1',
name: 'amount',
label: 'Amount',
type: FieldMetadataType.NUMBER,
@ -32,7 +33,7 @@ const mockObjectMetadataItem: ObjectMetadataItem = {
updatedAt: new Date().toISOString(),
} as FieldMetadataItem,
{
id: 'field-2',
id: '20202020-dd4a-4ea4-bb7b-1c7300491b65',
name: 'name',
label: 'Name',
type: FieldMetadataType.TEXT,

View File

@ -18,6 +18,7 @@ const objectMetadataItem: ObjectMetadataItem = {
updatedAt: '2021-01-01',
nameSingular: 'object1',
namePlural: 'object1s',
labelIdentifierFieldMetadataId: '20202020-72ba-4e11-a36d-e17b544541e1',
icon: 'icon',
isActive: true,
isSystem: false,

View File

@ -18,7 +18,7 @@ describe('buildRecordGqlFieldsAggregateForView', () => {
isActive: true,
isSystem: false,
isRemote: false,
labelIdentifierFieldMetadataId: null,
labelIdentifierFieldMetadataId: '06b33746-5293-4d07-9f7f-ebf5ad396064',
imageIdentifierFieldMetadataId: null,
isLabelSyncedWithName: true,
fields: [

View File

@ -25,6 +25,7 @@ describe('useLimitPerMetadataItem', () => {
labelSingular: 'labelSingular',
namePlural: 'namePlural',
nameSingular: 'nameSingular',
labelIdentifierFieldMetadataId: '20202020-72ba-4e11-a36d-e17b544541e1',
updatedAt: 'updatedAt',
isLabelSyncedWithName: false,
fields: [],

View File

@ -9,6 +9,7 @@ describe('generateAggregateQuery', () => {
id: 'test-id',
labelSingular: 'Company',
labelPlural: 'Companies',
labelIdentifierFieldMetadataId: '20202020-72ba-4e11-a36d-e17b544541e1',
isCustom: false,
isActive: true,
createdAt: new Date().toISOString(),
@ -46,6 +47,7 @@ describe('generateAggregateQuery', () => {
id: 'test-id',
labelSingular: 'Person',
labelPlural: 'People',
labelIdentifierFieldMetadataId: '20202020-72ba-4e11-a36d-e17b544541e1',
isCustom: false,
isActive: true,
createdAt: new Date().toISOString(),