diff --git a/.cursor/rules/nx-rules.mdc b/.cursor/rules/nx-rules.mdc index 613a579b504..de338c6a1d3 100644 --- a/.cursor/rules/nx-rules.mdc +++ b/.cursor/rules/nx-rules.mdc @@ -42,7 +42,7 @@ npx nx g @nx/react:component my-component }, "test": { "executor": "@nx/jest:jest", - "options": { "jestConfig": "packages/twenty-front/jest.config.ts" } + "options": { "jestConfig": "packages/twenty-front/jest.config.mjs" } } } } diff --git a/.vscode/launch.json b/.vscode/launch.json index c294f7f7d5b..378bd89a66b 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -94,7 +94,7 @@ "twenty-server:jest", "--", "--config", - "./jest.config.ts", + "./jest.config.mjs", "${relativeFile}" ], "cwd": "${workspaceFolder}/packages/twenty-server", diff --git a/jest.config.js b/jest.config.mjs similarity index 100% rename from jest.config.js rename to jest.config.mjs diff --git a/nx.json b/nx.json index 822a6ac6af2..3bf20bbdeae 100644 --- a/nx.json +++ b/nx.json @@ -104,7 +104,7 @@ ], "outputs": ["{projectRoot}/coverage"], "options": { - "jestConfig": "{projectRoot}/jest.config.ts", + "jestConfig": "{projectRoot}/jest.config.mjs", "coverage": true, "coverageReporters": ["text-summary"], "cacheDirectory": "../../.cache/jest/{projectRoot}" @@ -317,4 +317,4 @@ "tui": { "enabled": false } -} \ No newline at end of file +} diff --git a/packages/twenty-front/jest.config.ts b/packages/twenty-front/jest.config.mjs similarity index 94% rename from packages/twenty-front/jest.config.ts rename to packages/twenty-front/jest.config.mjs index c4e8c7ac944..8197cebfbe8 100644 --- a/packages/twenty-front/jest.config.ts +++ b/packages/twenty-front/jest.config.mjs @@ -1,6 +1,6 @@ import { readFileSync } from 'fs'; import { dirname, resolve } from 'path'; -import { pathsToModuleNameMapper, type JestConfigWithTsJest } from 'ts-jest'; +import { pathsToModuleNameMapper } from 'ts-jest'; import { fileURLToPath } from 'url'; const __filename = fileURLToPath(import.meta.url); @@ -8,9 +8,12 @@ const __dirname = dirname(__filename); const tsConfigPath = resolve(__dirname, './tsconfig.spec.json'); const tsConfig = JSON.parse(readFileSync(tsConfigPath, 'utf8')); + +// eslint-disable-next-line no-undef process.env.TZ = 'GMT'; +// eslint-disable-next-line no-undef process.env.LC_ALL = 'en_US.UTF-8'; -const jestConfig: JestConfigWithTsJest = { +const jestConfig = { silent: true, // For more information please have a look to official docs https://jestjs.io/docs/configuration/#prettierpath-string // Prettier v3 will should be supported in jest v30 https://github.com/jestjs/jest/releases/tag/v30.0.0-alpha.1 diff --git a/packages/twenty-front/src/generated-metadata/graphql.ts b/packages/twenty-front/src/generated-metadata/graphql.ts index 64754831eb8..dc0058fff83 100644 --- a/packages/twenty-front/src/generated-metadata/graphql.ts +++ b/packages/twenty-front/src/generated-metadata/graphql.ts @@ -640,6 +640,7 @@ export type CreateFieldInput = { isNullable?: InputMaybe; isRemoteCreation?: InputMaybe; isSystem?: InputMaybe; + isUIReadOnly?: InputMaybe; isUnique?: InputMaybe; label: Scalars['String']; morphRelationsCreationPayload?: InputMaybe>; @@ -975,6 +976,7 @@ export type Field = { isLabelSyncedWithName?: Maybe; isNullable?: Maybe; isSystem?: Maybe; + isUIReadOnly?: Maybe; isUnique?: Maybe; label: Scalars['String']; morphRelations?: Maybe>; @@ -1010,6 +1012,7 @@ export type FieldFilter = { isActive?: InputMaybe; isCustom?: InputMaybe; isSystem?: InputMaybe; + isUIReadOnly?: InputMaybe; or?: InputMaybe>; }; @@ -2158,6 +2161,7 @@ export type Object = { isRemote: Scalars['Boolean']; isSearchable: Scalars['Boolean']; isSystem: Scalars['Boolean']; + isUIReadOnly: Scalars['Boolean']; labelIdentifierFieldMetadataId?: Maybe; labelPlural: Scalars['String']; labelSingular: Scalars['String']; @@ -2212,6 +2216,7 @@ export type ObjectFilter = { isRemote?: InputMaybe; isSearchable?: InputMaybe; isSystem?: InputMaybe; + isUIReadOnly?: InputMaybe; or?: InputMaybe>; }; @@ -3200,6 +3205,7 @@ export type UpdateFieldInput = { isLabelSyncedWithName?: InputMaybe; isNullable?: InputMaybe; isSystem?: InputMaybe; + isUIReadOnly?: InputMaybe; isUnique?: InputMaybe; label?: InputMaybe; name?: InputMaybe; @@ -4226,7 +4232,7 @@ export type DeleteOneFieldMetadataItemMutation = { __typename?: 'Mutation', dele export type ObjectMetadataItemsQueryVariables = Exact<{ [key: string]: never; }>; -export type ObjectMetadataItemsQuery = { __typename?: 'Query', objects: { __typename?: 'ObjectConnection', edges: Array<{ __typename?: 'ObjectEdge', node: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string, labelSingular: string, labelPlural: string, description?: string | null, icon?: string | null, isCustom: boolean, isRemote: boolean, isActive: boolean, isSystem: boolean, createdAt: string, updatedAt: string, labelIdentifierFieldMetadataId?: string | null, imageIdentifierFieldMetadataId?: string | null, shortcut?: string | null, isLabelSyncedWithName: boolean, isSearchable: boolean, duplicateCriteria?: Array> | null, indexMetadataList: Array<{ __typename?: 'Index', id: string, createdAt: string, updatedAt: string, name: string, indexWhereClause?: string | null, indexType: IndexType, isUnique: boolean, isCustom?: boolean | null, indexFieldMetadataList: Array<{ __typename?: 'IndexField', id: string, fieldMetadataId: string, createdAt: string, updatedAt: string, order: number }> }>, fieldsList: Array<{ __typename?: 'Field', id: string, type: FieldMetadataType, name: string, label: string, description?: string | null, icon?: string | null, isCustom?: boolean | null, isActive?: boolean | null, isSystem?: boolean | null, isNullable?: boolean | null, isUnique?: boolean | null, createdAt: string, updatedAt: string, defaultValue?: any | null, options?: any | null, settings?: any | null, isLabelSyncedWithName?: boolean | null, relation?: { __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } } | null, morphRelations?: Array<{ __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } }> | null }> } }>, pageInfo: { __typename?: 'PageInfo', hasNextPage?: boolean | null, hasPreviousPage?: boolean | null, startCursor?: any | null, endCursor?: any | null } } }; +export type ObjectMetadataItemsQuery = { __typename?: 'Query', objects: { __typename?: 'ObjectConnection', edges: Array<{ __typename?: 'ObjectEdge', node: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string, labelSingular: string, labelPlural: string, description?: string | null, icon?: string | null, isCustom: boolean, isRemote: boolean, isActive: boolean, isSystem: boolean, isUIReadOnly: boolean, createdAt: string, updatedAt: string, labelIdentifierFieldMetadataId?: string | null, imageIdentifierFieldMetadataId?: string | null, shortcut?: string | null, isLabelSyncedWithName: boolean, isSearchable: boolean, duplicateCriteria?: Array> | null, indexMetadataList: Array<{ __typename?: 'Index', id: string, createdAt: string, updatedAt: string, name: string, indexWhereClause?: string | null, indexType: IndexType, isUnique: boolean, isCustom?: boolean | null, indexFieldMetadataList: Array<{ __typename?: 'IndexField', id: string, fieldMetadataId: string, createdAt: string, updatedAt: string, order: number }> }>, fieldsList: Array<{ __typename?: 'Field', id: string, type: FieldMetadataType, name: string, label: string, description?: string | null, icon?: string | null, isCustom?: boolean | null, isActive?: boolean | null, isSystem?: boolean | null, isUIReadOnly?: boolean | null, isNullable?: boolean | null, isUnique?: boolean | null, createdAt: string, updatedAt: string, defaultValue?: any | null, options?: any | null, settings?: any | null, isLabelSyncedWithName?: boolean | null, relation?: { __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } } | null, morphRelations?: Array<{ __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } }> | null }> } }>, pageInfo: { __typename?: 'PageInfo', hasNextPage?: boolean | null, hasPreviousPage?: boolean | null, startCursor?: any | null, endCursor?: any | null } } }; export type SkipBookOnboardingStepMutationVariables = Exact<{ [key: string]: never; }>; @@ -7601,6 +7607,7 @@ export const ObjectMetadataItemsDocument = gql` isRemote isActive isSystem + isUIReadOnly createdAt updatedAt labelIdentifierFieldMetadataId @@ -7636,6 +7643,7 @@ export const ObjectMetadataItemsDocument = gql` isCustom isActive isSystem + isUIReadOnly isNullable isUnique createdAt diff --git a/packages/twenty-front/src/generated/graphql.ts b/packages/twenty-front/src/generated/graphql.ts index f718464b431..db443406d1a 100644 --- a/packages/twenty-front/src/generated/graphql.ts +++ b/packages/twenty-front/src/generated/graphql.ts @@ -636,6 +636,7 @@ export type CreateFieldInput = { isNullable?: InputMaybe; isRemoteCreation?: InputMaybe; isSystem?: InputMaybe; + isUIReadOnly?: InputMaybe; isUnique?: InputMaybe; label: Scalars['String']; morphRelationsCreationPayload?: InputMaybe>; @@ -939,6 +940,7 @@ export type Field = { isLabelSyncedWithName?: Maybe; isNullable?: Maybe; isSystem?: Maybe; + isUIReadOnly?: Maybe; isUnique?: Maybe; label: Scalars['String']; morphRelations?: Maybe>; @@ -974,6 +976,7 @@ export type FieldFilter = { isActive?: InputMaybe; isCustom?: InputMaybe; isSystem?: InputMaybe; + isUIReadOnly?: InputMaybe; or?: InputMaybe>; }; @@ -2069,6 +2072,7 @@ export type Object = { isRemote: Scalars['Boolean']; isSearchable: Scalars['Boolean']; isSystem: Scalars['Boolean']; + isUIReadOnly: Scalars['Boolean']; labelIdentifierFieldMetadataId?: Maybe; labelPlural: Scalars['String']; labelSingular: Scalars['String']; @@ -2123,6 +2127,7 @@ export type ObjectFilter = { isRemote?: InputMaybe; isSearchable?: InputMaybe; isSystem?: InputMaybe; + isUIReadOnly?: InputMaybe; or?: InputMaybe>; }; @@ -3046,6 +3051,7 @@ export type UpdateFieldInput = { isLabelSyncedWithName?: InputMaybe; isNullable?: InputMaybe; isSystem?: InputMaybe; + isUIReadOnly?: InputMaybe; isUnique?: InputMaybe; label?: InputMaybe; name?: InputMaybe; diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/hooks/useRelatedRecordActions.ts b/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/hooks/useRelatedRecordActions.ts index 6826cd1830a..03454c17683 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/hooks/useRelatedRecordActions.ts +++ b/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/hooks/useRelatedRecordActions.ts @@ -6,7 +6,7 @@ import { ActionViewType } from '@/action-menu/actions/types/ActionViewType'; import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems'; import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; -import { isWorkflowSubObjectMetadata } from '@/object-metadata/utils/isWorkflowSubObjectMetadata'; +import { isRecordReadOnly } from '@/object-record/read-only/utils/isRecordReadOnly'; import { msg } from '@lingui/core/macro'; import React from 'react'; import { isDefined } from 'twenty-shared/utils'; @@ -81,11 +81,19 @@ export const useRelatedRecordActions = ({ selectedRecord, objectPermissions, getTargetObjectWritePermission, + objectMetadataItem, }) => (isDefined(selectedRecord) && - !selectedRecord.isRemote && + isDefined(objectMetadataItem) && + isRecordReadOnly({ + objectPermissions: { + canUpdateObjectRecords: objectPermissions.canUpdateObjectRecords, + objectMetadataId: objectMetadataItem.id, + }, + objectMetadataItem, + isRecordDeleted: isDefined(selectedRecord.deletedAt), + }) && objectPermissions.canUpdateObjectRecords && - !isWorkflowSubObjectMetadata(targetObjectNameSingular) && getTargetObjectWritePermission( targetObjectNameSingular === CoreObjectNameSingular.TaskTarget ? CoreObjectNameSingular.Task diff --git a/packages/twenty-front/src/modules/activities/calendar/components/CalendarEventDetails.tsx b/packages/twenty-front/src/modules/activities/calendar/components/CalendarEventDetails.tsx index 7a12222223c..b7d98234139 100644 --- a/packages/twenty-front/src/modules/activities/calendar/components/CalendarEventDetails.tsx +++ b/packages/twenty-front/src/modules/activities/calendar/components/CalendarEventDetails.tsx @@ -7,7 +7,6 @@ import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadata import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { formatFieldMetadataItemAsFieldDefinition } from '@/object-metadata/utils/formatFieldMetadataItemAsFieldDefinition'; import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext'; -import { useIsRecordReadOnly } from '@/object-record/record-field/ui/hooks/read-only/useIsRecordReadOnly'; import { RecordFieldComponentInstanceContext } from '@/object-record/record-field/ui/states/contexts/RecordFieldComponentInstanceContext'; import { RecordInlineCell } from '@/object-record/record-inline-cell/components/RecordInlineCell'; import { PropertyBox } from '@/object-record/record-inline-cell/property-box/components/PropertyBox'; @@ -16,6 +15,7 @@ import { Chip, ChipAccent, ChipSize, ChipVariant } from 'twenty-ui/components'; import { IconCalendarEvent } from 'twenty-ui/display'; import { mapArrayToObject } from '~/utils/array/mapArrayToObject'; import { beautifyPastDateRelativeToNow } from '~/utils/date-utils'; +import { useIsRecordReadOnly } from '@/object-record/read-only/hooks/useIsRecordReadOnly'; type CalendarEventDetailsProps = { calendarEvent: CalendarEvent; diff --git a/packages/twenty-front/src/modules/activities/components/ActivityRichTextEditor.tsx b/packages/twenty-front/src/modules/activities/components/ActivityRichTextEditor.tsx index 2c2fd5a1de9..615e252b2b7 100644 --- a/packages/twenty-front/src/modules/activities/components/ActivityRichTextEditor.tsx +++ b/packages/twenty-front/src/modules/activities/components/ActivityRichTextEditor.tsx @@ -29,7 +29,7 @@ import { useDeleteManyRecords } from '@/object-record/hooks/useDeleteManyRecords import { useLazyFetchAllRecords } from '@/object-record/hooks/useLazyFetchAllRecords'; import { useRestoreManyRecords } from '@/object-record/hooks/useRestoreManyRecords'; import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; -import { useIsRecordFieldReadOnly } from '@/object-record/record-field/ui/hooks/read-only/useIsRecordFieldReadOnly'; +import { useIsRecordFieldReadOnly } from '@/object-record/read-only/hooks/useIsRecordFieldReadOnly'; import { isTitleCellInEditModeComponentState } from '@/object-record/record-title-cell/states/isTitleCellInEditModeComponentState'; import { RecordTitleCellContainerType } from '@/object-record/record-title-cell/types/RecordTitleCellContainerType'; import { getRecordFieldInputInstanceId } from '@/object-record/utils/getRecordFieldInputId'; diff --git a/packages/twenty-front/src/modules/object-metadata/graphql/queries.ts b/packages/twenty-front/src/modules/object-metadata/graphql/queries.ts index 4d650509be7..6f72f9bfc5e 100644 --- a/packages/twenty-front/src/modules/object-metadata/graphql/queries.ts +++ b/packages/twenty-front/src/modules/object-metadata/graphql/queries.ts @@ -16,6 +16,7 @@ export const FIND_MANY_OBJECT_METADATA_ITEMS = gql` isRemote isActive isSystem + isUIReadOnly createdAt updatedAt labelIdentifierFieldMetadataId @@ -51,6 +52,7 @@ export const FIND_MANY_OBJECT_METADATA_ITEMS = gql` isCustom isActive isSystem + isUIReadOnly isNullable isUnique createdAt diff --git a/packages/twenty-front/src/modules/object-metadata/utils/__tests__/isWorkflowRelatedObjectMetadata.test.ts b/packages/twenty-front/src/modules/object-metadata/utils/__tests__/isWorkflowRelatedObjectMetadata.test.ts deleted file mode 100644 index 819551828cd..00000000000 --- a/packages/twenty-front/src/modules/object-metadata/utils/__tests__/isWorkflowRelatedObjectMetadata.test.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; -import { isWorkflowRelatedObjectMetadata } from '@/object-metadata/utils/isWorkflowRelatedObjectMetadata'; - -describe('isWorkflowRelatedObjectMetadata', () => { - it('should return true for Workflow object', () => { - const result = isWorkflowRelatedObjectMetadata( - CoreObjectNameSingular.Workflow, - ); - - expect(result).toBe(true); - }); - - it('should return true for WorkflowVersion object', () => { - const result = isWorkflowRelatedObjectMetadata( - CoreObjectNameSingular.WorkflowVersion, - ); - - expect(result).toBe(true); - }); - - it('should return true for WorkflowRun object', () => { - const result = isWorkflowRelatedObjectMetadata( - CoreObjectNameSingular.WorkflowRun, - ); - - expect(result).toBe(true); - }); - - it('should return false for non-workflow related objects', () => { - const result = isWorkflowRelatedObjectMetadata( - CoreObjectNameSingular.Company, - ); - - expect(result).toBe(false); - }); - - it('should return false for unknown object names', () => { - const result = isWorkflowRelatedObjectMetadata('unknownObject'); - - expect(result).toBe(false); - }); - - it('should return false for Person object', () => { - const result = isWorkflowRelatedObjectMetadata( - CoreObjectNameSingular.Person, - ); - - expect(result).toBe(false); - }); -}); diff --git a/packages/twenty-front/src/modules/object-metadata/utils/formatFieldMetadataItemAsFieldDefinition.ts b/packages/twenty-front/src/modules/object-metadata/utils/formatFieldMetadataItemAsFieldDefinition.ts index a210e36ec9b..8390fb388e4 100644 --- a/packages/twenty-front/src/modules/object-metadata/utils/formatFieldMetadataItemAsFieldDefinition.ts +++ b/packages/twenty-front/src/modules/object-metadata/utils/formatFieldMetadataItemAsFieldDefinition.ts @@ -49,6 +49,7 @@ export const formatFieldMetadataItemAsFieldDefinition = ({ settings: field.settings, isNullable: field.isNullable, isCustom: field.isCustom ?? false, + isUIReadOnly: field.isUIReadOnly ?? false, }; return { diff --git a/packages/twenty-front/src/modules/object-metadata/utils/isObjectMetadataReadOnly.ts b/packages/twenty-front/src/modules/object-metadata/utils/isObjectMetadataReadOnly.ts deleted file mode 100644 index 67b3a2af8cf..00000000000 --- a/packages/twenty-front/src/modules/object-metadata/utils/isObjectMetadataReadOnly.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; -import { isWorkflowSubObjectMetadata } from '@/object-metadata/utils/isWorkflowSubObjectMetadata'; - -export const isObjectMetadataReadOnly = ( - objectMetadataItem: Pick, -) => - objectMetadataItem.isRemote || - isWorkflowSubObjectMetadata(objectMetadataItem.nameSingular); diff --git a/packages/twenty-front/src/modules/object-metadata/utils/isWorkflowRelatedObjectMetadata.ts b/packages/twenty-front/src/modules/object-metadata/utils/isWorkflowRelatedObjectMetadata.ts deleted file mode 100644 index 2d3bdbe1bbd..00000000000 --- a/packages/twenty-front/src/modules/object-metadata/utils/isWorkflowRelatedObjectMetadata.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; -import { isWorkflowSubObjectMetadata } from '@/object-metadata/utils/isWorkflowSubObjectMetadata'; - -export const isWorkflowRelatedObjectMetadata = (objectNameSingular: string) => { - return ( - objectNameSingular === CoreObjectNameSingular.Workflow || - isWorkflowSubObjectMetadata(objectNameSingular) - ); -}; diff --git a/packages/twenty-front/src/modules/object-metadata/utils/isWorkflowSubObjectMetadata.ts b/packages/twenty-front/src/modules/object-metadata/utils/isWorkflowSubObjectMetadata.ts deleted file mode 100644 index 1ad6c0cbb29..00000000000 --- a/packages/twenty-front/src/modules/object-metadata/utils/isWorkflowSubObjectMetadata.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; - -export const isWorkflowSubObjectMetadata = ( - objectMetadataNameSingular?: string, -) => - objectMetadataNameSingular === CoreObjectNameSingular.WorkflowVersion || - objectMetadataNameSingular === CoreObjectNameSingular.WorkflowRun; diff --git a/packages/twenty-front/src/modules/object-metadata/validation-schemas/fieldMetadataItemSchema.ts b/packages/twenty-front/src/modules/object-metadata/validation-schemas/fieldMetadataItemSchema.ts index 322d6da3ce6..32959c7a77c 100644 --- a/packages/twenty-front/src/modules/object-metadata/validation-schemas/fieldMetadataItemSchema.ts +++ b/packages/twenty-front/src/modules/object-metadata/validation-schemas/fieldMetadataItemSchema.ts @@ -19,6 +19,7 @@ export const fieldMetadataItemSchema = (existingLabels?: string[]) => { isNullable: z.boolean(), isUnique: z.boolean(), isSystem: z.boolean(), + isUIReadOnly: z.boolean(), label: metadataLabelSchema(existingLabels), isLabelSyncedWithName: z.boolean(), name: camelCaseStringSchema, diff --git a/packages/twenty-front/src/modules/object-metadata/validation-schemas/objectMetadataItemSchema.ts b/packages/twenty-front/src/modules/object-metadata/validation-schemas/objectMetadataItemSchema.ts index 19873197a2b..88951876adc 100644 --- a/packages/twenty-front/src/modules/object-metadata/validation-schemas/objectMetadataItemSchema.ts +++ b/packages/twenty-front/src/modules/object-metadata/validation-schemas/objectMetadataItemSchema.ts @@ -22,6 +22,7 @@ export const objectMetadataItemSchema = z.object({ isCustom: z.boolean(), isRemote: z.boolean(), isSystem: z.boolean(), + isUIReadOnly: z.boolean(), isSearchable: z.boolean(), labelIdentifierFieldMetadataId: z.string().uuid(), labelPlural: metadataLabelSchema(), diff --git a/packages/twenty-front/src/modules/object-record/hooks/__tests__/useAggregateRecordsQuery.test.tsx b/packages/twenty-front/src/modules/object-record/hooks/__tests__/useAggregateRecordsQuery.test.tsx index 931ddb3ae41..482da0540e2 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/__tests__/useAggregateRecordsQuery.test.tsx +++ b/packages/twenty-front/src/modules/object-record/hooks/__tests__/useAggregateRecordsQuery.test.tsx @@ -53,6 +53,7 @@ const mockObjectMetadataItem: ObjectMetadataItem = { isLabelSyncedWithName: true, isRemote: false, isSystem: false, + isUIReadOnly: false, }; const Wrapper = getJestMetadataAndApolloMocksWrapper({ diff --git a/packages/twenty-front/src/modules/object-record/object-sort-dropdown/utils/__tests__/turnSortsIntoOrderBy.test.ts b/packages/twenty-front/src/modules/object-record/object-sort-dropdown/utils/__tests__/turnSortsIntoOrderBy.test.ts index cc4fec4bd5d..bd9ce8266ab 100644 --- a/packages/twenty-front/src/modules/object-record/object-sort-dropdown/utils/__tests__/turnSortsIntoOrderBy.test.ts +++ b/packages/twenty-front/src/modules/object-record/object-sort-dropdown/utils/__tests__/turnSortsIntoOrderBy.test.ts @@ -31,6 +31,7 @@ const objectMetadataItemWithPositionField: ObjectMetadataItem = { icon: 'icon', isActive: true, isSystem: false, + isUIReadOnly: false, isCustom: false, isRemote: false, isSearchable: false, diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/read-only/useIsRecordFieldReadOnly.ts b/packages/twenty-front/src/modules/object-record/read-only/hooks/useIsRecordFieldReadOnly.ts similarity index 73% rename from packages/twenty-front/src/modules/object-record/record-field/ui/hooks/read-only/useIsRecordFieldReadOnly.ts rename to packages/twenty-front/src/modules/object-record/read-only/hooks/useIsRecordFieldReadOnly.ts index 4c28aeb90fe..2b75ec87ce7 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/read-only/useIsRecordFieldReadOnly.ts +++ b/packages/twenty-front/src/modules/object-record/read-only/hooks/useIsRecordFieldReadOnly.ts @@ -1,8 +1,8 @@ import { useObjectMetadataItemById } from '@/object-metadata/hooks/useObjectMetadataItemById'; import { getObjectPermissionsForObject } from '@/object-metadata/utils/getObjectPermissionsForObject'; import { useObjectPermissions } from '@/object-record/hooks/useObjectPermissions'; -import { useIsRecordReadOnly } from '@/object-record/record-field/ui/hooks/read-only/useIsRecordReadOnly'; -import { isRecordFieldReadOnly } from '@/object-record/record-field/ui/hooks/read-only/utils/isRecordFieldReadOnly'; +import { useIsRecordReadOnly } from '@/object-record/read-only/hooks/useIsRecordReadOnly'; +import { isRecordFieldReadOnly } from '@/object-record/read-only/utils/isRecordFieldReadOnly'; export type UseFieldIsReadOnlyParams = { fieldMetadataId: string; @@ -42,10 +42,6 @@ export const useIsRecordFieldReadOnly = ({ return isRecordFieldReadOnly({ isRecordReadOnly, objectPermissions, - fieldMetadataId, - objectNameSingular: objectMetadataItem.nameSingular, - fieldName: fieldMetadataItem.name, - fieldType: fieldMetadataItem.type, - isCustom: fieldMetadataItem.isCustom ?? false, + fieldMetadataItem, }); }; diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/read-only/useIsRecordReadOnly.ts b/packages/twenty-front/src/modules/object-record/read-only/hooks/useIsRecordReadOnly.ts similarity index 72% rename from packages/twenty-front/src/modules/object-record/record-field/ui/hooks/read-only/useIsRecordReadOnly.ts rename to packages/twenty-front/src/modules/object-record/read-only/hooks/useIsRecordReadOnly.ts index 23d097a4cd2..c18541c3a5f 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/read-only/useIsRecordReadOnly.ts +++ b/packages/twenty-front/src/modules/object-record/read-only/hooks/useIsRecordReadOnly.ts @@ -1,6 +1,7 @@ +import { useObjectMetadataItemById } from '@/object-metadata/hooks/useObjectMetadataItemById'; import { getObjectPermissionsForObject } from '@/object-metadata/utils/getObjectPermissionsForObject'; import { useObjectPermissions } from '@/object-record/hooks/useObjectPermissions'; -import { isRecordReadOnly } from '@/object-record/record-field/ui/hooks/read-only/utils/isRecordReadOnly'; +import { isRecordReadOnly } from '@/object-record/read-only/utils/isRecordReadOnly'; import { useIsRecordDeleted } from '@/object-record/record-field/ui/hooks/useIsRecordDeleted'; type UseIsRecordReadOnlyParams = { @@ -12,6 +13,10 @@ export const useIsRecordReadOnly = ({ recordId, objectMetadataId, }: UseIsRecordReadOnlyParams) => { + const { objectMetadataItem } = useObjectMetadataItemById({ + objectId: objectMetadataId, + }); + const { objectPermissionsByObjectMetadataId } = useObjectPermissions(); const objectPermissions = getObjectPermissionsForObject( @@ -24,5 +29,6 @@ export const useIsRecordReadOnly = ({ return isRecordReadOnly({ objectPermissions, isRecordDeleted, + objectMetadataItem, }); }; diff --git a/packages/twenty-front/src/modules/object-record/read-only/utils/__tests__/isObjectMetadataReadOnly.test.ts b/packages/twenty-front/src/modules/object-record/read-only/utils/__tests__/isObjectMetadataReadOnly.test.ts new file mode 100644 index 00000000000..50f23399b73 --- /dev/null +++ b/packages/twenty-front/src/modules/object-record/read-only/utils/__tests__/isObjectMetadataReadOnly.test.ts @@ -0,0 +1,67 @@ +import { isObjectMetadataReadOnly } from '@/object-record/read-only/utils/isObjectMetadataReadOnly'; + +describe('isObjectMetadataReadOnly', () => { + it('should return false if object can be updated and is not UI read only and is not remote', () => { + const result = isObjectMetadataReadOnly({ + objectPermissions: { + canUpdateObjectRecords: true, + objectMetadataId: '123', + restrictedFields: {}, + }, + objectMetadataItem: { + isUIReadOnly: false, + isRemote: false, + }, + }); + + expect(result).toBe(false); + }); + + it('should return true if object cannot be updated and is not UI read only and is not remote', () => { + const result = isObjectMetadataReadOnly({ + objectPermissions: { + canUpdateObjectRecords: false, + objectMetadataId: '123', + restrictedFields: {}, + }, + objectMetadataItem: { + isUIReadOnly: false, + isRemote: false, + }, + }); + + expect(result).toBe(true); + }); + + it('should return true if object metadata is UI read only', () => { + const result = isObjectMetadataReadOnly({ + objectPermissions: { + canUpdateObjectRecords: true, + objectMetadataId: '123', + restrictedFields: {}, + }, + objectMetadataItem: { + isUIReadOnly: true, + isRemote: false, + }, + }); + + expect(result).toBe(true); + }); + + it('should return true if object metadata is remote', () => { + const result = isObjectMetadataReadOnly({ + objectPermissions: { + canUpdateObjectRecords: true, + objectMetadataId: '123', + restrictedFields: {}, + }, + objectMetadataItem: { + isUIReadOnly: false, + isRemote: true, + }, + }); + + expect(result).toBe(true); + }); +}); diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/read-only/utils/__tests__/isRecordFieldReadOnly.test.ts b/packages/twenty-front/src/modules/object-record/read-only/utils/__tests__/isRecordFieldReadOnly.test.ts similarity index 62% rename from packages/twenty-front/src/modules/object-record/record-field/ui/hooks/read-only/utils/__tests__/isRecordFieldReadOnly.test.ts rename to packages/twenty-front/src/modules/object-record/read-only/utils/__tests__/isRecordFieldReadOnly.test.ts index 90d7b16f266..3410a0ffeb7 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/read-only/utils/__tests__/isRecordFieldReadOnly.test.ts +++ b/packages/twenty-front/src/modules/object-record/read-only/utils/__tests__/isRecordFieldReadOnly.test.ts @@ -1,4 +1,4 @@ -import { isRecordFieldReadOnly } from '@/object-record/record-field/ui/hooks/read-only/utils/isRecordFieldReadOnly'; +import { isRecordFieldReadOnly } from '@/object-record/read-only/utils/isRecordFieldReadOnly'; import { FieldMetadataType } from '~/generated-metadata/graphql'; describe('isRecordFieldReadOnly', () => { @@ -12,16 +12,18 @@ describe('isRecordFieldReadOnly', () => { isRecordReadOnly: false, objectPermissions: mockObjectPermissions, fieldMetadataId: 'field-123', - objectNameSingular: 'person', - fieldName: 'firstName', - fieldType: FieldMetadataType.TEXT, - isCustom: false, + fieldMetadataType: FieldMetadataType.TEXT, + isUIReadOnly: false, }; it('should return true when record is read-only', () => { const result = isRecordFieldReadOnly({ ...mockParams, isRecordReadOnly: true, + fieldMetadataItem: { + id: 'field-123', + isUIReadOnly: false, + }, }); expect(result).toBe(true); @@ -34,6 +36,10 @@ describe('isRecordFieldReadOnly', () => { ...mockObjectPermissions, canUpdateObjectRecords: false, }, + fieldMetadataItem: { + id: 'field-123', + isUIReadOnly: false, + }, }); expect(result).toBe(true); @@ -48,36 +54,22 @@ describe('isRecordFieldReadOnly', () => { 'field-123': { canUpdate: false }, }, }, + fieldMetadataItem: { + id: 'field-123', + isUIReadOnly: false, + }, }); expect(result).toBe(true); }); - it('should return true for system read-only fields like createdAt', () => { + it('should return true when field is marked as UI read-only', () => { const result = isRecordFieldReadOnly({ ...mockParams, - fieldName: 'createdAt', - fieldType: FieldMetadataType.DATE_TIME, - }); - - expect(result).toBe(true); - }); - - it('should return true for calendar event objects (system read-only)', () => { - const result = isRecordFieldReadOnly({ - ...mockParams, - objectNameSingular: 'calendarEvent', - }); - - expect(result).toBe(true); - }); - - it('should return true for workflow non-name fields (system read-only)', () => { - const result = isRecordFieldReadOnly({ - ...mockParams, - objectNameSingular: 'workflow', - fieldName: 'status', - isCustom: false, + fieldMetadataItem: { + id: 'field-123', + isUIReadOnly: true, + }, }); expect(result).toBe(true); @@ -86,6 +78,10 @@ describe('isRecordFieldReadOnly', () => { it('should return false when all conditions allow editing', () => { const result = isRecordFieldReadOnly({ ...mockParams, + fieldMetadataItem: { + id: 'field-123', + isUIReadOnly: false, + }, }); expect(result).toBe(false); diff --git a/packages/twenty-front/src/modules/object-record/read-only/utils/__tests__/isRecordReadonly.test.ts b/packages/twenty-front/src/modules/object-record/read-only/utils/__tests__/isRecordReadonly.test.ts new file mode 100644 index 00000000000..c96dec97837 --- /dev/null +++ b/packages/twenty-front/src/modules/object-record/read-only/utils/__tests__/isRecordReadonly.test.ts @@ -0,0 +1,83 @@ +import { isRecordReadOnly } from '@/object-record/read-only/utils/isRecordReadOnly'; + +describe('isRecordReadOnly', () => { + it('should return false if record is not deleted, has update permissions and object metadata is not read only', () => { + const result = isRecordReadOnly({ + objectPermissions: { + canUpdateObjectRecords: true, + objectMetadataId: '123', + }, + isRecordDeleted: false, + objectMetadataItem: { + isUIReadOnly: false, + isRemote: false, + }, + }); + + expect(result).toBe(false); + }); + + it('should return true if record is not deleted but lacks update permissions and object metadata is not read only', () => { + const result = isRecordReadOnly({ + objectPermissions: { + canUpdateObjectRecords: false, + objectMetadataId: '123', + }, + isRecordDeleted: false, + objectMetadataItem: { + isUIReadOnly: false, + isRemote: false, + }, + }); + + expect(result).toBe(true); + }); + + it('should return true if record is deleted even with update permissions and object metadata is not read only', () => { + const result = isRecordReadOnly({ + objectPermissions: { + canUpdateObjectRecords: true, + objectMetadataId: '123', + }, + isRecordDeleted: true, + objectMetadataItem: { + isUIReadOnly: false, + isRemote: false, + }, + }); + + expect(result).toBe(true); + }); + + it('should return true if record is not deleted and has update permissions but object metadata is UI read only', () => { + const result = isRecordReadOnly({ + objectPermissions: { + canUpdateObjectRecords: false, + objectMetadataId: '123', + }, + isRecordDeleted: true, + objectMetadataItem: { + isUIReadOnly: true, + isRemote: false, + }, + }); + + expect(result).toBe(true); + }); + + it('should return true if record is not deleted and has update permissions but object metadata is remote', () => { + const result = isRecordReadOnly({ + objectPermissions: { + canUpdateObjectRecords: true, + objectMetadataId: '123', + }, + isRecordDeleted: false, + objectMetadataItem: { + isUIReadOnly: false, + isRemote: true, + }, + }); + + expect(result).toBe(true); + }); +}); diff --git a/packages/twenty-front/src/modules/object-record/read-only/utils/internal/isFieldMetadataReadOnlyByPermissions.ts b/packages/twenty-front/src/modules/object-record/read-only/utils/internal/isFieldMetadataReadOnlyByPermissions.ts new file mode 100644 index 00000000000..d3857a4e931 --- /dev/null +++ b/packages/twenty-front/src/modules/object-record/read-only/utils/internal/isFieldMetadataReadOnlyByPermissions.ts @@ -0,0 +1,20 @@ +import { type ObjectPermission } from '~/generated/graphql'; + +type IsFieldMetadataReadOnlyByPermissionParams = { + objectPermissions: ObjectPermission; + fieldMetadataId: string; +}; + +export const isFieldMetadataReadOnlyByPermissions = ({ + objectPermissions, + fieldMetadataId, +}: IsFieldMetadataReadOnlyByPermissionParams) => { + if (objectPermissions.canUpdateObjectRecords === false) { + return true; + } + + const fieldMetadataIsRestrictedForUpdate = + objectPermissions.restrictedFields?.[fieldMetadataId]?.canUpdate === false; + + return fieldMetadataIsRestrictedForUpdate; +}; diff --git a/packages/twenty-front/src/modules/object-record/read-only/utils/isFieldMetadataReadOnly.ts b/packages/twenty-front/src/modules/object-record/read-only/utils/isFieldMetadataReadOnly.ts new file mode 100644 index 00000000000..adc92f1556e --- /dev/null +++ b/packages/twenty-front/src/modules/object-record/read-only/utils/isFieldMetadataReadOnly.ts @@ -0,0 +1,33 @@ +import { type FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; +import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; +import { isFieldMetadataReadOnlyByPermissions } from '@/object-record/read-only/utils/internal/isFieldMetadataReadOnlyByPermissions'; +import { isObjectMetadataReadOnly } from '@/object-record/read-only/utils/isObjectMetadataReadOnly'; +import { type ObjectPermission } from '~/generated/graphql'; + +type IsFieldMetadataReadOnlyParams = { + objectPermissions: ObjectPermission; + objectMetadataItem: Pick; + fieldMetadataItem: Pick; +}; + +export const isFieldMetadataReadOnly = ({ + objectPermissions, + objectMetadataItem, + fieldMetadataItem, +}: IsFieldMetadataReadOnlyParams) => { + const objectMetadataReadOnly = isObjectMetadataReadOnly({ + objectPermissions, + objectMetadataItem, + }); + + const fieldReadOnlyByPermissions = isFieldMetadataReadOnlyByPermissions({ + objectPermissions, + fieldMetadataId: fieldMetadataItem.id, + }); + + return ( + objectMetadataReadOnly || + fieldMetadataItem.isUIReadOnly || + fieldReadOnlyByPermissions + ); +}; diff --git a/packages/twenty-front/src/modules/object-record/read-only/utils/isObjectMetadataReadOnly.ts b/packages/twenty-front/src/modules/object-record/read-only/utils/isObjectMetadataReadOnly.ts new file mode 100644 index 00000000000..e2a936b970c --- /dev/null +++ b/packages/twenty-front/src/modules/object-record/read-only/utils/isObjectMetadataReadOnly.ts @@ -0,0 +1,18 @@ +import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; +import { type ObjectPermission } from '~/generated/graphql'; + +type IsObjectMetadataReadOnlyParams = { + objectPermissions: ObjectPermission; + objectMetadataItem: Pick; +}; + +export const isObjectMetadataReadOnly = ({ + objectPermissions, + objectMetadataItem, +}: IsObjectMetadataReadOnlyParams) => { + return ( + !objectPermissions.canUpdateObjectRecords || + objectMetadataItem.isUIReadOnly || + objectMetadataItem.isRemote + ); +}; diff --git a/packages/twenty-front/src/modules/object-record/read-only/utils/isRecordFieldReadOnly.ts b/packages/twenty-front/src/modules/object-record/read-only/utils/isRecordFieldReadOnly.ts new file mode 100644 index 00000000000..e913b03143c --- /dev/null +++ b/packages/twenty-front/src/modules/object-record/read-only/utils/isRecordFieldReadOnly.ts @@ -0,0 +1,26 @@ +import { type FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; +import { isFieldMetadataReadOnlyByPermissions } from '@/object-record/read-only/utils/internal/isFieldMetadataReadOnlyByPermissions'; +import { type ObjectPermission } from '~/generated/graphql'; + +type IsRecordFieldReadOnlyParams = { + isRecordReadOnly: boolean; + fieldMetadataItem: Pick; + objectPermissions: ObjectPermission; +}; + +export const isRecordFieldReadOnly = ({ + objectPermissions, + isRecordReadOnly, + fieldMetadataItem, +}: IsRecordFieldReadOnlyParams) => { + const fieldReadOnlyByPermissions = isFieldMetadataReadOnlyByPermissions({ + objectPermissions, + fieldMetadataId: fieldMetadataItem.id, + }); + + return ( + isRecordReadOnly || + fieldMetadataItem.isUIReadOnly || + fieldReadOnlyByPermissions + ); +}; diff --git a/packages/twenty-front/src/modules/object-record/read-only/utils/isRecordReadOnly.ts b/packages/twenty-front/src/modules/object-record/read-only/utils/isRecordReadOnly.ts new file mode 100644 index 00000000000..029506ba627 --- /dev/null +++ b/packages/twenty-front/src/modules/object-record/read-only/utils/isRecordReadOnly.ts @@ -0,0 +1,23 @@ +import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; +import { isObjectMetadataReadOnly } from '@/object-record/read-only/utils/isObjectMetadataReadOnly'; +import { type ObjectPermission } from '~/generated/graphql'; + +export type IsObjectReadOnlyParams = { + objectPermissions: ObjectPermission; + objectMetadataItem: Pick; + isRecordDeleted: boolean; +}; + +export const isRecordReadOnly = ({ + objectPermissions, + isRecordDeleted, + objectMetadataItem, +}: IsObjectReadOnlyParams) => { + return ( + isRecordDeleted || + isObjectMetadataReadOnly({ + objectPermissions, + objectMetadataItem, + }) + ); +}; diff --git a/packages/twenty-front/src/modules/object-record/record-board/record-board-card/components/RecordBoardCardBody.tsx b/packages/twenty-front/src/modules/object-record/record-board/record-board-card/components/RecordBoardCardBody.tsx index 0f7f5641336..d146d57eacb 100644 --- a/packages/twenty-front/src/modules/object-record/record-board/record-board-card/components/RecordBoardCardBody.tsx +++ b/packages/twenty-front/src/modules/object-record/record-board/record-board-card/components/RecordBoardCardBody.tsx @@ -1,3 +1,4 @@ +import { isRecordFieldReadOnly } from '@/object-record/read-only/utils/isRecordFieldReadOnly'; import { RecordBoardContext } from '@/object-record/record-board/contexts/RecordBoardContext'; import { RecordBoardCardBodyContainer } from '@/object-record/record-board/record-board-card/components/RecordBoardCardBodyContainer'; import { StopPropagationContainer } from '@/object-record/record-board/record-board-card/components/StopPropagationContainer'; @@ -10,7 +11,6 @@ import { type RecordUpdateHook, type RecordUpdateHookParams, } from '@/object-record/record-field/ui/contexts/FieldContext'; -import { isRecordFieldReadOnly } from '@/object-record/record-field/ui/hooks/read-only/utils/isRecordFieldReadOnly'; import { RecordFieldComponentInstanceContext } from '@/object-record/record-field/ui/states/contexts/RecordFieldComponentInstanceContext'; import { type FieldMetadata } from '@/object-record/record-field/ui/types/FieldMetadata'; import { getFieldButtonIcon } from '@/object-record/record-field/ui/utils/getFieldButtonIcon'; @@ -45,12 +45,10 @@ export const RecordBoardCardBody = ({ isRecordFieldReadOnly: isRecordFieldReadOnly({ isRecordReadOnly, objectPermissions, - fieldMetadataId: fieldDefinition.fieldMetadataId, - fieldName: fieldDefinition.metadata.fieldName, - fieldType: fieldDefinition.type, - isCustom: fieldDefinition.metadata.isCustom, - objectNameSingular: - fieldDefinition.metadata.objectMetadataNameSingular ?? '', + fieldMetadataItem: { + id: fieldDefinition.fieldMetadataId, + isUIReadOnly: fieldDefinition.metadata.isUIReadOnly ?? false, + }, }), }), ); diff --git a/packages/twenty-front/src/modules/object-record/record-board/record-board-card/components/RecordBoardCardDraggableContainer.tsx b/packages/twenty-front/src/modules/object-record/record-board/record-board-card/components/RecordBoardCardDraggableContainer.tsx index 007b32b9c9b..04a9a6d09b2 100644 --- a/packages/twenty-front/src/modules/object-record/record-board/record-board-card/components/RecordBoardCardDraggableContainer.tsx +++ b/packages/twenty-front/src/modules/object-record/record-board/record-board-card/components/RecordBoardCardDraggableContainer.tsx @@ -2,6 +2,7 @@ import styled from '@emotion/styled'; import { Draggable } from '@hello-pangea/dnd'; import { useContext } from 'react'; +import { useIsRecordReadOnly } from '@/object-record/read-only/hooks/useIsRecordReadOnly'; import { RecordBoardContext } from '@/object-record/record-board/contexts/RecordBoardContext'; import { RecordBoardCard } from '@/object-record/record-board/record-board-card/components/RecordBoardCard'; import { RecordBoardCardHotkeysEffect } from '@/object-record/record-board/record-board-card/components/RecordBoardCardHotkeysEffect'; @@ -9,7 +10,6 @@ import { RecordBoardCardMultiDragPreview } from '@/object-record/record-board/re import { RecordBoardCardContext } from '@/object-record/record-board/record-board-card/contexts/RecordBoardCardContext'; import { RecordBoardColumnContext } from '@/object-record/record-board/record-board-column/contexts/RecordBoardColumnContext'; import { isRecordBoardCardFocusedComponentFamilyState } from '@/object-record/record-board/states/isRecordBoardCardFocusedComponentFamilyState'; -import { useIsRecordReadOnly } from '@/object-record/record-field/ui/hooks/read-only/useIsRecordReadOnly'; import { useRecoilComponentFamilyValue } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentFamilyValue'; const StyledDraggableContainer = styled.div` diff --git a/packages/twenty-front/src/modules/object-record/record-board/record-board-column/utils/__tests__/buildRecordGqlFieldsAggregateForView.test.ts b/packages/twenty-front/src/modules/object-record/record-board/record-board-column/utils/__tests__/buildRecordGqlFieldsAggregateForView.test.ts index bc7e3319687..e3122bb71d9 100644 --- a/packages/twenty-front/src/modules/object-record/record-board/record-board-column/utils/__tests__/buildRecordGqlFieldsAggregateForView.test.ts +++ b/packages/twenty-front/src/modules/object-record/record-board/record-board-column/utils/__tests__/buildRecordGqlFieldsAggregateForView.test.ts @@ -35,6 +35,7 @@ describe('buildRecordGqlFieldsAggregateForView', () => { isCustom: false, isActive: true, isSystem: false, + isUIReadOnly: false, isRemote: false, isSearchable: false, labelIdentifierFieldMetadataId: '06b33746-5293-4d07-9f7f-ebf5ad396064', diff --git a/packages/twenty-front/src/modules/object-record/record-field-list/components/RecordFieldList.tsx b/packages/twenty-front/src/modules/object-record/record-field-list/components/RecordFieldList.tsx index f1d595d831f..30265bbae43 100644 --- a/packages/twenty-front/src/modules/object-record/record-field-list/components/RecordFieldList.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field-list/components/RecordFieldList.tsx @@ -3,6 +3,8 @@ import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadata import { type CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { formatFieldMetadataItemAsColumnDefinition } from '@/object-metadata/utils/formatFieldMetadataItemAsColumnDefinition'; import { useObjectPermissions } from '@/object-record/hooks/useObjectPermissions'; +import { useIsRecordReadOnly } from '@/object-record/read-only/hooks/useIsRecordReadOnly'; +import { isRecordFieldReadOnly } from '@/object-record/read-only/utils/isRecordFieldReadOnly'; import { RecordFieldListCellEditModePortal } from '@/object-record/record-field-list/anchored-portal/components/RecordFieldListCellEditModePortal'; import { RecordFieldListCellHoveredPortal } from '@/object-record/record-field-list/anchored-portal/components/RecordFieldListCellHoveredPortal'; import { useFieldListFieldMetadataItems } from '@/object-record/record-field-list/hooks/useFieldListFieldMetadataItems'; @@ -11,8 +13,6 @@ import { RecordDetailRelationSection } from '@/object-record/record-field-list/r import { RecordFieldListComponentInstanceContext } from '@/object-record/record-field-list/states/contexts/RecordFieldListComponentInstanceContext'; import { recordFieldListHoverPositionComponentState } from '@/object-record/record-field-list/states/recordFieldListHoverPositionComponentState'; import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext'; -import { useIsRecordReadOnly } from '@/object-record/record-field/ui/hooks/read-only/useIsRecordReadOnly'; -import { isRecordFieldReadOnly } from '@/object-record/record-field/ui/hooks/read-only/utils/isRecordFieldReadOnly'; import { RecordFieldComponentInstanceContext } from '@/object-record/record-field/ui/states/contexts/RecordFieldComponentInstanceContext'; import { RecordInlineCell } from '@/object-record/record-inline-cell/components/RecordInlineCell'; import { PropertyBox } from '@/object-record/record-inline-cell/property-box/components/PropertyBox'; @@ -123,11 +123,10 @@ export const RecordFieldList = ({ objectPermissionsByObjectMetadataId, objectMetadataId: objectMetadataItem.id, }), - fieldMetadataId: fieldMetadataItem.id, - objectNameSingular, - fieldName: fieldMetadataItem.name, - fieldType: fieldMetadataItem.type, - isCustom: fieldMetadataItem.isCustom ?? false, + fieldMetadataItem: { + id: fieldMetadataItem.id, + isUIReadOnly: fieldMetadataItem.isUIReadOnly ?? false, + }, }), }} > @@ -172,11 +171,10 @@ export const RecordFieldList = ({ objectPermissionsByObjectMetadataId, objectMetadataId: objectMetadataItem.id, }), - fieldMetadataId: fieldMetadataItem.id, - objectNameSingular, - fieldName: fieldMetadataItem.name, - fieldType: fieldMetadataItem.type, - isCustom: fieldMetadataItem.isCustom ?? false, + fieldMetadataItem: { + id: fieldMetadataItem.id, + isUIReadOnly: fieldMetadataItem.isUIReadOnly ?? false, + }, }), onMouseEnter: () => handleMouseEnter( @@ -233,11 +231,10 @@ export const RecordFieldList = ({ objectPermissionsByObjectMetadataId, objectMetadataId: objectMetadataItem.id, }), - fieldMetadataId: fieldMetadataItem.id, - objectNameSingular, - fieldName: fieldMetadataItem.name, - fieldType: fieldMetadataItem.type, - isCustom: fieldMetadataItem.isCustom ?? false, + fieldMetadataItem: { + id: fieldMetadataItem.id, + isUIReadOnly: fieldMetadataItem.isUIReadOnly ?? false, + }, }), }} > diff --git a/packages/twenty-front/src/modules/object-record/record-field-list/record-detail-section/relation/components/RecordDetailRelationSectionDropdown.tsx b/packages/twenty-front/src/modules/object-record/record-field-list/record-detail-section/relation/components/RecordDetailRelationSectionDropdown.tsx index 7e2154ff5b8..de2c0f016c2 100644 --- a/packages/twenty-front/src/modules/object-record/record-field-list/record-detail-section/relation/components/RecordDetailRelationSectionDropdown.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field-list/record-detail-section/relation/components/RecordDetailRelationSectionDropdown.tsx @@ -1,10 +1,10 @@ import { useContext } from 'react'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; +import { useIsRecordReadOnly } from '@/object-record/read-only/hooks/useIsRecordReadOnly'; import { RecordDetailRelationSectionDropdownToMany } from '@/object-record/record-field-list/record-detail-section/relation/components/RecordDetailRelationSectionDropdownToMany'; import { RecordDetailRelationSectionDropdownToOne } from '@/object-record/record-field-list/record-detail-section/relation/components/RecordDetailRelationSectionDropdownToOne'; import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext'; -import { useIsRecordReadOnly } from '@/object-record/record-field/ui/hooks/read-only/useIsRecordReadOnly'; import { type FieldRelationMetadata } from '@/object-record/record-field/ui/types/FieldMetadata'; import { RelationType } from '~/generated-metadata/graphql'; diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/components/FieldContextProvider.tsx b/packages/twenty-front/src/modules/object-record/record-field/ui/components/FieldContextProvider.tsx index 6d69733ae00..f938da17bee 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/components/FieldContextProvider.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/components/FieldContextProvider.tsx @@ -1,12 +1,12 @@ import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; import { formatFieldMetadataItemAsColumnDefinition } from '@/object-metadata/utils/formatFieldMetadataItemAsColumnDefinition'; import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; +import { useIsRecordFieldReadOnly } from '@/object-record/read-only/hooks/useIsRecordFieldReadOnly'; import { FieldContext, type RecordUpdateHook, type RecordUpdateHookParams, } from '@/object-record/record-field/ui/contexts/FieldContext'; -import { useIsRecordFieldReadOnly } from '@/object-record/record-field/ui/hooks/read-only/useIsRecordFieldReadOnly'; import { type ReactNode } from 'react'; export const FieldContextProvider = ({ diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/read-only/utils/__tests__/isObjectReadOnly.test.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/read-only/utils/__tests__/isObjectReadOnly.test.ts deleted file mode 100644 index ae407cd26c7..00000000000 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/read-only/utils/__tests__/isObjectReadOnly.test.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { isObjectReadOnly } from '@/object-record/record-field/ui/hooks/read-only/utils/isObjectReadOnly'; - -describe('isObjectReadOnly', () => { - it('should return true if object is not read only', () => { - const result = isObjectReadOnly({ - objectPermissions: { - canUpdateObjectRecords: true, - objectMetadataId: '123', - }, - }); - - expect(result).toBe(false); - }); - - it('should return false if object is read only', () => { - const result = isObjectReadOnly({ - objectPermissions: { - canUpdateObjectRecords: false, - objectMetadataId: '123', - }, - }); - - expect(result).toBe(true); - }); -}); diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/read-only/utils/__tests__/isRecordReadonly.test.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/read-only/utils/__tests__/isRecordReadonly.test.ts deleted file mode 100644 index 2fc7276eb78..00000000000 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/read-only/utils/__tests__/isRecordReadonly.test.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { isRecordReadOnly } from '@/object-record/record-field/ui/hooks/read-only/utils/isRecordReadOnly'; - -describe('isRecordReadOnly', () => { - it('should return false if record is not deleted and has update permissions', () => { - const result = isRecordReadOnly({ - objectPermissions: { - canUpdateObjectRecords: true, - objectMetadataId: '123', - }, - isRecordDeleted: false, - }); - - expect(result).toBe(false); - }); - - it('should return true if record is not deleted but lacks update permissions', () => { - const result = isRecordReadOnly({ - objectPermissions: { - canUpdateObjectRecords: false, - objectMetadataId: '123', - }, - isRecordDeleted: false, - }); - - expect(result).toBe(true); - }); - - it('should return true if record is deleted even with update permissions', () => { - const result = isRecordReadOnly({ - objectPermissions: { - canUpdateObjectRecords: true, - objectMetadataId: '123', - }, - isRecordDeleted: true, - }); - - expect(result).toBe(true); - }); - - it('should return true if record is deleted and lacks update permissions', () => { - const result = isRecordReadOnly({ - objectPermissions: { - canUpdateObjectRecords: false, - objectMetadataId: '123', - }, - isRecordDeleted: true, - }); - - expect(result).toBe(true); - }); -}); diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/read-only/utils/internal/isFieldReadOnlyByPermissions.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/read-only/utils/internal/isFieldReadOnlyByPermissions.ts deleted file mode 100644 index 843cf86e27a..00000000000 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/read-only/utils/internal/isFieldReadOnlyByPermissions.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { isObjectReadOnly } from '@/object-record/record-field/ui/hooks/read-only/utils/isObjectReadOnly'; -import { type ObjectPermission } from '~/generated/graphql'; - -export type IsFieldReadOnlyByPermissionParams = { - objectPermissions: ObjectPermission; - fieldMetadataId: string; -}; - -export const isFieldReadOnlyByPermissions = ({ - objectPermissions, - fieldMetadataId, -}: IsFieldReadOnlyByPermissionParams) => { - if (isObjectReadOnly({ objectPermissions }) === true) { - return true; - } - - const fieldMetadataIsRestrictedForUpdate = - objectPermissions.restrictedFields[fieldMetadataId]?.canUpdate === false; - - return fieldMetadataIsRestrictedForUpdate; -}; diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/read-only/utils/internal/isFieldReadOnlyBySystem.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/read-only/utils/internal/isFieldReadOnlyBySystem.ts deleted file mode 100644 index 697aa3a049a..00000000000 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/read-only/utils/internal/isFieldReadOnlyBySystem.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; -import { isWorkflowSubObjectMetadata } from '@/object-metadata/utils/isWorkflowSubObjectMetadata'; -import { isWorkflowRunJsonField } from '@/object-record/record-field/ui/meta-types/utils/isWorkflowRunJsonField'; -import { isFieldActor } from '@/object-record/record-field/ui/types/guards/isFieldActor'; -import { isFieldRichText } from '@/object-record/record-field/ui/types/guards/isFieldRichText'; - -import { isDefined } from 'twenty-shared/utils'; -import { FieldMetadataType } from '~/generated-metadata/graphql'; - -export type IsFieldReadOnlyBySystemParams = { - objectNameSingular: string; - fieldName?: string; - fieldType?: FieldMetadataType; - isCustom?: boolean; -}; - -export const isFieldReadOnlyBySystem = ({ - objectNameSingular, - fieldName, - fieldType, - isCustom, -}: IsFieldReadOnlyBySystemParams) => { - if ( - isWorkflowRunJsonField({ - objectMetadataNameSingular: objectNameSingular, - fieldName, - }) - ) { - return false; - } - - if (isWorkflowSubObjectMetadata(objectNameSingular) && !isCustom) { - return true; - } - - if (objectNameSingular === CoreObjectNameSingular.CalendarEvent) { - return true; - } - - if ( - objectNameSingular === CoreObjectNameSingular.Workflow && - fieldName !== 'name' && - !isCustom - ) { - return true; - } - - if ( - objectNameSingular !== CoreObjectNameSingular.Note && - fieldName === 'noteTargets' - ) { - return true; - } - - if ( - objectNameSingular !== CoreObjectNameSingular.Task && - fieldName === 'taskTargets' - ) { - return true; - } - - const isFieldDateOrDateTime = - fieldType === FieldMetadataType.DATE || - fieldType === FieldMetadataType.DATE_TIME; - const isFieldCreatedAtOrUpdatedAt = - fieldName === 'createdAt' || fieldName === 'updatedAt'; - - if (isFieldDateOrDateTime && isFieldCreatedAtOrUpdatedAt) { - return true; - } - - if ( - isDefined(fieldType) && - (isFieldActor({ type: fieldType }) || isFieldRichText({ type: fieldType })) - ) { - return true; - } - - return false; -}; diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/read-only/utils/isObjectReadOnly.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/read-only/utils/isObjectReadOnly.ts deleted file mode 100644 index 8da1baf1448..00000000000 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/read-only/utils/isObjectReadOnly.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { type ObjectPermission } from '~/generated/graphql'; - -type IsObjectReadOnlyParams = { - objectPermissions: ObjectPermission; -}; - -export const isObjectReadOnly = ({ - objectPermissions, -}: IsObjectReadOnlyParams) => { - return !objectPermissions.canUpdateObjectRecords; -}; diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/read-only/utils/isRecordFieldReadOnly.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/read-only/utils/isRecordFieldReadOnly.ts deleted file mode 100644 index c06f39b6624..00000000000 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/read-only/utils/isRecordFieldReadOnly.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { - isFieldReadOnlyByPermissions, - type IsFieldReadOnlyByPermissionParams, -} from '@/object-record/record-field/ui/hooks/read-only/utils/internal/isFieldReadOnlyByPermissions'; -import { - isFieldReadOnlyBySystem, - type IsFieldReadOnlyBySystemParams, -} from '@/object-record/record-field/ui/hooks/read-only/utils/internal/isFieldReadOnlyBySystem'; - -type IsRecordFieldReadOnlyParams = { - isRecordReadOnly: boolean; -} & IsFieldReadOnlyByPermissionParams & - IsFieldReadOnlyBySystemParams; - -export const isRecordFieldReadOnly = ({ - isRecordReadOnly, - objectPermissions, - fieldMetadataId, - objectNameSingular, - fieldName, - fieldType, - isCustom, -}: IsRecordFieldReadOnlyParams) => { - const fieldReadOnlyByPermissions = isFieldReadOnlyByPermissions({ - objectPermissions, - fieldMetadataId, - }); - - const fieldReadOnlyBySystem = isFieldReadOnlyBySystem({ - objectNameSingular, - fieldName, - fieldType, - isCustom, - }); - - return ( - isRecordReadOnly || fieldReadOnlyByPermissions || fieldReadOnlyBySystem - ); -}; diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/read-only/utils/isRecordReadOnly.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/read-only/utils/isRecordReadOnly.ts deleted file mode 100644 index cbf94b98605..00000000000 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/read-only/utils/isRecordReadOnly.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { type ObjectPermission } from '~/generated/graphql'; - -type IsObjectReadOnlyParams = { - objectPermissions: ObjectPermission; - isRecordDeleted: boolean; -}; - -export const isRecordReadOnly = ({ - objectPermissions, - isRecordDeleted, -}: IsObjectReadOnlyParams) => { - return isRecordDeleted || !objectPermissions.canUpdateObjectRecords; -}; diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/usePersistField.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/usePersistField.ts index df2aff60670..dfcce9029a2 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/usePersistField.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/usePersistField.ts @@ -29,7 +29,6 @@ import { recordStoreFamilySelector } from '@/object-record/record-store/states/s import { useObjectMetadataItemById } from '@/object-metadata/hooks/useObjectMetadataItemById'; import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; -import { isWorkflowRunJsonField } from '@/object-record/record-field/ui/meta-types/utils/isWorkflowRunJsonField'; import { isFieldArray } from '@/object-record/record-field/ui/types/guards/isFieldArray'; import { isFieldArrayValue } from '@/object-record/record-field/ui/types/guards/isFieldArrayValue'; import { isFieldRichText } from '@/object-record/record-field/ui/types/guards/isFieldRichText'; @@ -143,13 +142,10 @@ export const usePersistField = ({ const fieldIsArray = isFieldArray(fieldDefinition) && isFieldArrayValue(valueToPersist); - const isUnpersistableRawJsonField = isWorkflowRunJsonField({ - objectMetadataNameSingular: - fieldDefinition.metadata.objectMetadataNameSingular, - fieldName: fieldDefinition.metadata.fieldName, - }); + const fieldIsUIReadOnly = + fieldDefinition.metadata.isUIReadOnly ?? false; - if (fieldIsRawJson && isUnpersistableRawJsonField) { + if (fieldIsRawJson && fieldIsUIReadOnly) { return; } diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/components/RawJsonFieldInput.tsx b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/components/RawJsonFieldInput.tsx index 98a408971e1..438c57b3008 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/components/RawJsonFieldInput.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/components/RawJsonFieldInput.tsx @@ -1,7 +1,6 @@ import styled from '@emotion/styled'; import { FieldInputEventContext } from '@/object-record/record-field/ui/contexts/FieldInputEventContext'; -import { isWorkflowRunJsonField } from '@/object-record/record-field/ui/meta-types/utils/isWorkflowRunJsonField'; import { RecordFieldComponentInstanceContext } from '@/object-record/record-field/ui/states/contexts/RecordFieldComponentInstanceContext'; import { useHotkeysOnFocusedElement } from '@/ui/utilities/hotkey/hooks/useHotkeysOnFocusedElement'; @@ -142,11 +141,7 @@ export const RawJsonFieldInput = () => { dependencies: [handleShiftTab, draftValue], }); - const showEditingButton = !isWorkflowRunJsonField({ - objectMetadataNameSingular: - fieldDefinition.metadata.objectMetadataNameSingular, - fieldName: fieldDefinition.metadata.fieldName, - }); + const showEditingButton = !fieldDefinition.metadata.isUIReadOnly; const handleStartEditing = () => { setIsEditing(true); diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/utils/isWorkflowRunJsonField.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/utils/isWorkflowRunJsonField.ts deleted file mode 100644 index 6ca35e439f1..00000000000 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/utils/isWorkflowRunJsonField.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; - -// FIXME: This is temporary. We'll soon introduce a new display mode for all fields and we'll have to remove this code. -export const isWorkflowRunJsonField = ({ - objectMetadataNameSingular, - fieldName, -}: { - fieldName: string | undefined; - objectMetadataNameSingular: string | undefined; -}) => { - return ( - objectMetadataNameSingular === CoreObjectNameSingular.WorkflowRun && - fieldName === 'state' - ); -}; diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/types/FieldDefinition.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/types/FieldDefinition.ts index fa76a8ea098..4193e58abc3 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/types/FieldDefinition.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/types/FieldDefinition.ts @@ -15,4 +15,5 @@ export type FieldDefinition = { infoTooltipContent?: string; defaultValue?: any; editButtonIcon?: IconComponent; + isUIReadOnly?: boolean; }; diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/types/FieldMetadata.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/types/FieldMetadata.ts index fe19973d1c1..86f99e0fbff 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/types/FieldMetadata.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/types/FieldMetadata.ts @@ -15,6 +15,7 @@ type BaseFieldMetadata = { fieldName: string; objectMetadataNameSingular?: string; isCustom?: boolean; + isUIReadOnly?: boolean; }; export type FieldUuidMetadata = BaseFieldMetadata & { diff --git a/packages/twenty-front/src/modules/object-record/record-filter/utils/__tests__/turnAnyFieldFilterIntoRecordGqlFilter.test.ts b/packages/twenty-front/src/modules/object-record/record-filter/utils/__tests__/turnAnyFieldFilterIntoRecordGqlFilter.test.ts index de48dd9da6d..a6368763fa3 100644 --- a/packages/twenty-front/src/modules/object-record/record-filter/utils/__tests__/turnAnyFieldFilterIntoRecordGqlFilter.test.ts +++ b/packages/twenty-front/src/modules/object-record/record-filter/utils/__tests__/turnAnyFieldFilterIntoRecordGqlFilter.test.ts @@ -132,6 +132,7 @@ const mockObjectMetadataItem: ObjectMetadataItem = { isRemote: false, isSearchable: true, isSystem: false, + isUIReadOnly: false, labelIdentifierFieldMetadataId: 'mock-id', labelPlural: 'Tests', labelSingular: 'Test', diff --git a/packages/twenty-front/src/modules/object-record/record-index/export/hooks/__tests__/useRecordIndexLazyFetchRecords.test.ts b/packages/twenty-front/src/modules/object-record/record-index/export/hooks/__tests__/useRecordIndexLazyFetchRecords.test.ts index 236369f3972..46c46ddddae 100644 --- a/packages/twenty-front/src/modules/object-record/record-index/export/hooks/__tests__/useRecordIndexLazyFetchRecords.test.ts +++ b/packages/twenty-front/src/modules/object-record/record-index/export/hooks/__tests__/useRecordIndexLazyFetchRecords.test.ts @@ -224,6 +224,7 @@ describe('useRecordData', () => { fieldName: 'updatedAt', isCustom: false, isNullable: false, + isUIReadOnly: false, objectMetadataNameSingular: 'person', options: null, placeHolder: 'Last update', diff --git a/packages/twenty-front/src/modules/object-record/record-inline-cell/components/RecordInlineCellAnchoredPortal.tsx b/packages/twenty-front/src/modules/object-record/record-inline-cell/components/RecordInlineCellAnchoredPortal.tsx index 4bda96376b6..a818b863ac2 100644 --- a/packages/twenty-front/src/modules/object-record/record-inline-cell/components/RecordInlineCellAnchoredPortal.tsx +++ b/packages/twenty-front/src/modules/object-record/record-inline-cell/components/RecordInlineCellAnchoredPortal.tsx @@ -2,13 +2,13 @@ import { type FieldMetadataItem } from '@/object-metadata/types/FieldMetadataIte import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { formatFieldMetadataItemAsColumnDefinition } from '@/object-metadata/utils/formatFieldMetadataItemAsColumnDefinition'; import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; +import { useIsRecordFieldReadOnly } from '@/object-record/read-only/hooks/useIsRecordFieldReadOnly'; import { FieldContext, type RecordUpdateHook, type RecordUpdateHookParams, } from '@/object-record/record-field/ui/contexts/FieldContext'; import { FieldFocusContextProvider } from '@/object-record/record-field/ui/contexts/FieldFocusContextProvider'; -import { useIsRecordFieldReadOnly } from '@/object-record/record-field/ui/hooks/read-only/useIsRecordFieldReadOnly'; import { RecordFieldComponentInstanceContext } from '@/object-record/record-field/ui/states/contexts/RecordFieldComponentInstanceContext'; import { RecordInlineCellAnchoredPortalContext } from '@/object-record/record-inline-cell/components/RecordInlineCellAnchoredPortalContext'; import { RecordInlineCellCloseOnCommandMenuOpeningEffect } from '@/object-record/record-inline-cell/components/RecordInlineCellCloseOnCommandMenuOpeningEffect'; diff --git a/packages/twenty-front/src/modules/object-record/record-show/components/ObjectRecordShowPageBreadcrumb.tsx b/packages/twenty-front/src/modules/object-record/record-show/components/ObjectRecordShowPageBreadcrumb.tsx index 0c2abfb108e..125f558c1e3 100644 --- a/packages/twenty-front/src/modules/object-record/record-show/components/ObjectRecordShowPageBreadcrumb.tsx +++ b/packages/twenty-front/src/modules/object-record/record-show/components/ObjectRecordShowPageBreadcrumb.tsx @@ -1,8 +1,8 @@ import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; import { type FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; import { useFindOneRecord } from '@/object-record/hooks/useFindOneRecord'; +import { useIsRecordFieldReadOnly } from '@/object-record/read-only/hooks/useIsRecordFieldReadOnly'; import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext'; -import { useIsRecordFieldReadOnly } from '@/object-record/record-field/ui/hooks/read-only/useIsRecordFieldReadOnly'; import { useRecordShowContainerActions } from '@/object-record/record-show/hooks/useRecordShowContainerActions'; import { useRecordShowPage } from '@/object-record/record-show/hooks/useRecordShowPage'; import { useRecordShowPagePagination } from '@/object-record/record-show/hooks/useRecordShowPagePagination'; diff --git a/packages/twenty-front/src/modules/object-record/record-show/components/SummaryCard.tsx b/packages/twenty-front/src/modules/object-record/record-show/components/SummaryCard.tsx index 48dd0b709bd..74ebfa2e100 100644 --- a/packages/twenty-front/src/modules/object-record/record-show/components/SummaryCard.tsx +++ b/packages/twenty-front/src/modules/object-record/record-show/components/SummaryCard.tsx @@ -2,8 +2,8 @@ import { useGetStandardObjectIcon } from '@/object-metadata/hooks/useGetStandard import { useLabelIdentifierFieldMetadataItem } from '@/object-metadata/hooks/useLabelIdentifierFieldMetadataItem'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { useIsRecordFieldReadOnly } from '@/object-record/read-only/hooks/useIsRecordFieldReadOnly'; import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext'; -import { useIsRecordFieldReadOnly } from '@/object-record/record-field/ui/hooks/read-only/useIsRecordFieldReadOnly'; import { useRecordShowContainerActions } from '@/object-record/record-show/hooks/useRecordShowContainerActions'; import { useRecordShowContainerData } from '@/object-record/record-show/hooks/useRecordShowContainerData'; import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; diff --git a/packages/twenty-front/src/modules/object-record/record-table/empty-state/components/RecordTableEmptyStateDisplay.tsx b/packages/twenty-front/src/modules/object-record/record-table/empty-state/components/RecordTableEmptyStateDisplay.tsx index 1502d68edf0..3a5bf3c410e 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/empty-state/components/RecordTableEmptyStateDisplay.tsx +++ b/packages/twenty-front/src/modules/object-record/record-table/empty-state/components/RecordTableEmptyStateDisplay.tsx @@ -1,4 +1,5 @@ -import { isObjectMetadataReadOnly } from '@/object-metadata/utils/isObjectMetadataReadOnly'; +import { useObjectPermissionsForObject } from '@/object-record/hooks/useObjectPermissionsForObject'; +import { isObjectMetadataReadOnly } from '@/object-record/read-only/utils/isObjectMetadataReadOnly'; import { useRecordTableContextOrThrow } from '@/object-record/record-table/contexts/RecordTableContext'; import { type IconComponent } from 'twenty-ui/display'; import { Button } from 'twenty-ui/input'; @@ -35,7 +36,13 @@ export const RecordTableEmptyStateDisplay = ( props: RecordTableEmptyStateDisplayProps, ) => { const { objectMetadataItem } = useRecordTableContextOrThrow(); - const isReadOnly = isObjectMetadataReadOnly(objectMetadataItem); + const objectPermissions = useObjectPermissionsForObject( + objectMetadataItem.id, + ); + const isReadOnly = isObjectMetadataReadOnly({ + objectPermissions, + objectMetadataItem, + }); return ( diff --git a/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/components/RecordTableCellFieldContextGeneric.tsx b/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/components/RecordTableCellFieldContextGeneric.tsx index 1b754dd7471..6add7edf275 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/components/RecordTableCellFieldContextGeneric.tsx +++ b/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/components/RecordTableCellFieldContextGeneric.tsx @@ -1,7 +1,7 @@ import { getObjectPermissionsForObject } from '@/object-metadata/utils/getObjectPermissionsForObject'; import { isLabelIdentifierField } from '@/object-metadata/utils/isLabelIdentifierField'; +import { isRecordFieldReadOnly } from '@/object-record/read-only/utils/isRecordFieldReadOnly'; import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext'; -import { isRecordFieldReadOnly } from '@/object-record/record-field/ui/hooks/read-only/utils/isRecordFieldReadOnly'; import { isFieldRelationFromManyObjects } from '@/object-record/record-field/ui/types/guards/isFieldRelationFromManyObjects'; import { isFieldRelationToOneObject } from '@/object-record/record-field/ui/types/guards/isFieldRelationToOneObject'; import { useRecordIndexContextOrThrow } from '@/object-record/record-index/contexts/RecordIndexContext'; @@ -63,11 +63,10 @@ export const RecordTableCellFieldContextGeneric = ({ isRecordFieldReadOnly: isRecordFieldReadOnly({ isRecordReadOnly: isRecordReadOnly ?? false, objectPermissions, - fieldMetadataId: columnDefinition.fieldMetadataId, - objectNameSingular: objectMetadataItem.nameSingular, - fieldName: columnDefinition.metadata.fieldName, - fieldType: columnDefinition.type, - isCustom: objectMetadataItem.isCustom, + fieldMetadataItem: { + id: columnDefinition.fieldMetadataId, + isUIReadOnly: columnDefinition.metadata.isUIReadOnly ?? false, + }, }), isForbidden: !hasObjectReadPermissions, }} diff --git a/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/components/RecordTableCellFieldContextLabelIdentifier.tsx b/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/components/RecordTableCellFieldContextLabelIdentifier.tsx index 853150cb1f1..fa03483291b 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/components/RecordTableCellFieldContextLabelIdentifier.tsx +++ b/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/components/RecordTableCellFieldContextLabelIdentifier.tsx @@ -1,6 +1,6 @@ import { getObjectPermissionsForObject } from '@/object-metadata/utils/getObjectPermissionsForObject'; +import { isRecordFieldReadOnly } from '@/object-record/read-only/utils/isRecordFieldReadOnly'; import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext'; -import { isRecordFieldReadOnly } from '@/object-record/record-field/ui/hooks/read-only/utils/isRecordFieldReadOnly'; import { useRecordIndexContextOrThrow } from '@/object-record/record-index/contexts/RecordIndexContext'; import { useOpenRecordFromIndexView } from '@/object-record/record-index/hooks/useOpenRecordFromIndexView'; import { recordIndexOpenRecordInState } from '@/object-record/record-index/states/recordIndexOpenRecordInState'; @@ -70,13 +70,12 @@ export const RecordTableCellFieldContextLabelIdentifier = ({ isLabelIdentifierCompact, displayedMaxRows: 1, isRecordFieldReadOnly: isRecordFieldReadOnly({ - objectPermissions, - objectNameSingular: objectMetadataItem.nameSingular, - fieldName: columnDefinition.metadata.fieldName, - fieldType: columnDefinition.type, - isCustom: objectMetadataItem.isCustom, - fieldMetadataId: columnDefinition.fieldMetadataId, isRecordReadOnly: isRecordReadOnly ?? false, + objectPermissions, + fieldMetadataItem: { + id: columnDefinition.fieldMetadataId, + isUIReadOnly: columnDefinition.metadata.isUIReadOnly ?? false, + }, }), maxWidth: columnDefinition.size, onRecordChipClick: () => { diff --git a/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/components/RecordTableCellPortalWrapper.tsx b/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/components/RecordTableCellPortalWrapper.tsx index a0e223b69dc..eae21201f2b 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/components/RecordTableCellPortalWrapper.tsx +++ b/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/components/RecordTableCellPortalWrapper.tsx @@ -1,6 +1,6 @@ import { useContextStoreObjectMetadataItemOrThrow } from '@/context-store/hooks/useContextStoreObjectMetadataItemOrThrow'; import { getBasePathToShowPage } from '@/object-metadata/utils/getBasePathToShowPage'; -import { useIsRecordReadOnly } from '@/object-record/record-field/ui/hooks/read-only/useIsRecordReadOnly'; +import { useIsRecordReadOnly } from '@/object-record/read-only/hooks/useIsRecordReadOnly'; import { recordIndexAllRecordIdsComponentSelector } from '@/object-record/record-index/states/selectors/recordIndexAllRecordIdsComponentSelector'; import { RecordTableCellContext } from '@/object-record/record-table/contexts/RecordTableCellContext'; import { RecordTableRowContextProvider } from '@/object-record/record-table/contexts/RecordTableRowContext'; diff --git a/packages/twenty-front/src/modules/object-record/record-table/record-table-header/components/RecordTableHeaderCell.tsx b/packages/twenty-front/src/modules/object-record/record-table/record-table-header/components/RecordTableHeaderCell.tsx index 846d83de6a0..1d1109162e1 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/record-table-header/components/RecordTableHeaderCell.tsx +++ b/packages/twenty-front/src/modules/object-record/record-table/record-table-header/components/RecordTableHeaderCell.tsx @@ -2,8 +2,8 @@ import styled from '@emotion/styled'; import { useCallback, useMemo, useState } from 'react'; import { useRecoilCallback } from 'recoil'; +import { isObjectMetadataReadOnly } from '@/object-record/read-only/utils/isObjectMetadataReadOnly'; import { useUpdateRecordField } from '@/object-record/record-field/hooks/useUpdateRecordField'; -import { isObjectReadOnly } from '@/object-record/record-field/ui/hooks/read-only/utils/isObjectReadOnly'; import { type FieldMetadata } from '@/object-record/record-field/ui/types/FieldMetadata'; import { useRecordTableContextOrThrow } from '@/object-record/record-table/contexts/RecordTableContext'; import { useCreateNewIndexRecord } from '@/object-record/record-table/hooks/useCreateNewIndexRecord'; @@ -241,8 +241,9 @@ export const RecordTableHeaderCell = ({ createNewIndexRecord(); }; - const isReadOnly = isObjectReadOnly({ + const isReadOnly = isObjectMetadataReadOnly({ objectPermissions, + objectMetadataItem, }); const hasObjectUpdatePermissions = objectPermissions.canUpdateObjectRecords; diff --git a/packages/twenty-front/src/modules/object-record/record-table/record-table-row/components/RecordTableTr.tsx b/packages/twenty-front/src/modules/object-record/record-table/record-table-row/components/RecordTableTr.tsx index d0b0ab6e22e..78388803198 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/record-table-row/components/RecordTableTr.tsx +++ b/packages/twenty-front/src/modules/object-record/record-table/record-table-row/components/RecordTableTr.tsx @@ -1,5 +1,5 @@ import { getBasePathToShowPage } from '@/object-metadata/utils/getBasePathToShowPage'; -import { useIsRecordReadOnly } from '@/object-record/record-field/ui/hooks/read-only/useIsRecordReadOnly'; +import { useIsRecordReadOnly } from '@/object-record/read-only/hooks/useIsRecordReadOnly'; import { useRecordTableContextOrThrow } from '@/object-record/record-table/contexts/RecordTableContext'; import { RecordTableRowContextProvider } from '@/object-record/record-table/contexts/RecordTableRowContext'; import { isRowSelectedComponentFamilyState } from '@/object-record/record-table/record-table-row/states/isRowSelectedComponentFamilyState'; diff --git a/packages/twenty-front/src/modules/object-record/utils/__tests__/generateAggregateQuery.test.ts b/packages/twenty-front/src/modules/object-record/utils/__tests__/generateAggregateQuery.test.ts index a1bf0311500..21107f5ad35 100644 --- a/packages/twenty-front/src/modules/object-record/utils/__tests__/generateAggregateQuery.test.ts +++ b/packages/twenty-front/src/modules/object-record/utils/__tests__/generateAggregateQuery.test.ts @@ -22,6 +22,7 @@ describe('generateAggregateQuery', () => { isLabelSyncedWithName: true, isRemote: false, isSystem: false, + isUIReadOnly: false, }; const mockRecordGqlFields = { @@ -63,6 +64,7 @@ describe('generateAggregateQuery', () => { isLabelSyncedWithName: true, isRemote: false, isSystem: false, + isUIReadOnly: false, }; const mockRecordGqlFields = { diff --git a/packages/twenty-front/src/modules/settings/roles/role-permissions/object-level-permissions/field-permissions/components/SettingsRolePermissionsObjectLevelObjectFieldPermissionTableRow.tsx b/packages/twenty-front/src/modules/settings/roles/role-permissions/object-level-permissions/field-permissions/components/SettingsRolePermissionsObjectLevelObjectFieldPermissionTableRow.tsx index 8a315dbfdb2..78a9fd8be35 100644 --- a/packages/twenty-front/src/modules/settings/roles/role-permissions/object-level-permissions/field-permissions/components/SettingsRolePermissionsObjectLevelObjectFieldPermissionTableRow.tsx +++ b/packages/twenty-front/src/modules/settings/roles/role-permissions/object-level-permissions/field-permissions/components/SettingsRolePermissionsObjectLevelObjectFieldPermissionTableRow.tsx @@ -15,11 +15,7 @@ import { useMemo } from 'react'; import { isDefined } from 'twenty-shared/utils'; import { useIcons } from 'twenty-ui/display'; import { v4 } from 'uuid'; -import { - FieldMetadataType, - type FieldPermission, - RelationType, -} from '~/generated/graphql'; +import { type FieldPermission, RelationType } from '~/generated/graphql'; export const StyledObjectFieldTableRow = styled(TableRow)` grid-template-columns: 180px 1fr 60px 60px; @@ -75,21 +71,6 @@ export const SettingsRolePermissionsObjectLevelObjectFieldPermissionTableRow = const { upsertFieldPermissionInDraftRole } = useUpsertFieldPermissionInDraftRole(roleId); - const fieldIsCreatedBy = - fieldMetadataItem.name === 'createdBy' && - fieldMetadataItem.type === FieldMetadataType.ACTOR; - - const fieldIsDeletedAt = - fieldMetadataItem.name === 'deletedAt' && - fieldMetadataItem.type === FieldMetadataType.DATE_TIME; - - const fieldIsLabelIdentifier = - fieldMetadataItem.id === - objectMetadataItem.labelIdentifierFieldMetadataId; - - const fieldMustBeReadableAndUpdatable = - fieldIsLabelIdentifier || fieldIsCreatedBy || fieldIsDeletedAt; - const handleSeeChange = () => { if (isDefined(fieldPermissionForThisFieldMetadataItem)) { if ( @@ -196,7 +177,7 @@ export const SettingsRolePermissionsObjectLevelObjectFieldPermissionTableRow = ) : ( { const { alphaSortedActiveNonSystemObjectMetadataItems: objectMetadataItems } = useFilteredObjectMetadataItems(); const objectMetadataItemsThatCanHavePermission = objectMetadataItems.filter( - (objectMetadataItem) => - !isWorkflowRelatedObjectMetadata(objectMetadataItem.nameSingular), + (objectMetadataItem) => !objectMetadataItem.isUIReadOnly, ); return { diff --git a/packages/twenty-front/src/modules/views/utils/mapViewFieldsToColumnDefinitions.ts b/packages/twenty-front/src/modules/views/utils/mapViewFieldsToColumnDefinitions.ts index 00c3fb0187a..cfa629785fc 100644 --- a/packages/twenty-front/src/modules/views/utils/mapViewFieldsToColumnDefinitions.ts +++ b/packages/twenty-front/src/modules/views/utils/mapViewFieldsToColumnDefinitions.ts @@ -47,6 +47,7 @@ export const mapViewFieldsToColumnDefinitions = ({ isLabelIdentifier, isVisible: isLabelIdentifier || viewField.isVisible, viewFieldId: viewField.id, + isUIReadOnly: correspondingColumnDefinition.metadata.isUIReadOnly, isSortable: correspondingColumnDefinition.isSortable, isFilterable: correspondingColumnDefinition.isFilterable, defaultValue: correspondingColumnDefinition.defaultValue, diff --git a/packages/twenty-front/src/modules/workflow/components/__stories__/WorkflowFieldsMultiSelect.stories.ts b/packages/twenty-front/src/modules/workflow/components/__stories__/WorkflowFieldsMultiSelect.stories.ts index 3c09c8d7f5e..7212e64d12b 100644 --- a/packages/twenty-front/src/modules/workflow/components/__stories__/WorkflowFieldsMultiSelect.stories.ts +++ b/packages/twenty-front/src/modules/workflow/components/__stories__/WorkflowFieldsMultiSelect.stories.ts @@ -25,6 +25,7 @@ const fields = [ isCustom: false, isActive: true, isSystem: false, + isUIReadOnly: false, isNullable: false, createdAt: '', updatedAt: '', @@ -38,6 +39,7 @@ const fields = [ isCustom: false, isActive: true, isSystem: false, + isUIReadOnly: false, isNullable: true, createdAt: '', updatedAt: '', @@ -51,6 +53,7 @@ const fields = [ isCustom: false, isActive: true, isSystem: false, + isUIReadOnly: false, isNullable: true, createdAt: '', updatedAt: '', @@ -66,6 +69,7 @@ const mockObjectMetadataItem: ObjectMetadataItem = { description: 'A company', icon: 'IconBuilding', isSystem: false, + isUIReadOnly: false, isCustom: false, isActive: true, createdAt: '', diff --git a/packages/twenty-front/src/testing/mock-data/generated/mock-metadata-query-result.ts b/packages/twenty-front/src/testing/mock-data/generated/mock-metadata-query-result.ts index c469b01933b..58971b671ca 100644 --- a/packages/twenty-front/src/testing/mock-data/generated/mock-metadata-query-result.ts +++ b/packages/twenty-front/src/testing/mock-data/generated/mock-metadata-query-result.ts @@ -29,6 +29,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:47.000Z", "updatedAt": "2025-06-09T18:53:47.000Z", "labelIdentifierFieldMetadataId": "69f9f64c-30ab-4a19-93a2-29596b6046c0", @@ -51,6 +52,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -72,6 +74,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -93,6 +96,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -114,6 +118,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -164,6 +169,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -189,6 +195,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -210,6 +217,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -231,6 +239,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -252,6 +261,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -273,6 +283,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -296,6 +307,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -319,6 +331,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -342,6 +355,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -392,6 +406,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -442,6 +457,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -490,6 +506,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -544,6 +561,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:47.000Z", "updatedAt": "2025-06-09T18:53:47.000Z", "labelIdentifierFieldMetadataId": "c9708416-60bf-43c8-989e-3adfd7ed4977", @@ -566,6 +584,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -587,6 +606,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -610,6 +630,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -633,6 +654,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -656,6 +678,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -706,6 +729,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -756,6 +780,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -806,6 +831,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -856,6 +882,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:50.890Z", @@ -906,6 +933,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:51.337Z", @@ -956,6 +984,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:52.520Z", @@ -1012,6 +1041,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:52.492Z", "updatedAt": "2025-06-09T18:53:52.516Z", "labelIdentifierFieldMetadataId": "74f7f0ad-6f42-430f-ac26-4ec0ea4b29cf", @@ -1034,6 +1064,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:52.520Z", @@ -1082,6 +1113,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:52.492Z", @@ -1103,6 +1135,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:52.492Z", @@ -1124,6 +1157,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:52.492Z", @@ -1145,6 +1179,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:52.492Z", @@ -1166,6 +1201,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:52.492Z", @@ -1187,6 +1223,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:52.492Z", @@ -1211,6 +1248,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:52.492Z", @@ -1232,6 +1270,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:52.520Z", @@ -1280,6 +1319,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:52.520Z", @@ -1328,6 +1368,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:52.520Z", @@ -1376,6 +1417,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": false, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:52.545Z", @@ -1397,6 +1439,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": true, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:52.933Z", @@ -1422,6 +1465,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": true, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:52.934Z", @@ -1447,6 +1491,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": true, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:52.936Z", @@ -1471,6 +1516,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": true, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:52.937Z", @@ -1495,6 +1541,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": true, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:52.938Z", @@ -1518,6 +1565,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": true, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:52.938Z", @@ -1541,6 +1589,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:52.521Z", @@ -1595,6 +1644,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:47.000Z", "updatedAt": "2025-06-09T18:53:47.000Z", "labelIdentifierFieldMetadataId": "8156ee7f-7d5e-49a2-acd6-8891d448d60a", @@ -1617,6 +1667,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -1638,6 +1689,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -1659,6 +1711,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -1680,6 +1733,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -1701,6 +1755,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -1724,6 +1779,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -1747,6 +1803,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -1776,6 +1833,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:47.000Z", "updatedAt": "2025-06-09T18:53:47.000Z", "labelIdentifierFieldMetadataId": "a33dc2c3-cc88-4e23-9865-34c92c3a5dc3", @@ -1798,6 +1856,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -1819,6 +1878,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -1862,6 +1922,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -1883,6 +1944,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -1904,6 +1966,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -1927,6 +1990,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -1950,6 +2014,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -1973,6 +2038,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -2029,6 +2095,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:47.000Z", "updatedAt": "2025-06-09T18:53:47.000Z", "labelIdentifierFieldMetadataId": "2dda0482-1274-43cf-887c-196aca5732ac", @@ -2051,6 +2118,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -2072,6 +2140,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -2093,6 +2162,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -2114,6 +2184,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -2135,6 +2206,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -2156,6 +2228,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -2177,6 +2250,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -2198,6 +2272,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -2221,6 +2296,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -2244,6 +2320,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -2267,6 +2344,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -2317,6 +2395,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -2367,6 +2446,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -2417,6 +2497,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -2467,6 +2548,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -2517,6 +2599,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -2567,6 +2650,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -2617,6 +2701,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -2667,6 +2752,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -2717,6 +2803,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:50.886Z", @@ -2767,6 +2854,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:51.337Z", @@ -2817,6 +2905,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:52.520Z", @@ -2873,6 +2962,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:47.000Z", "updatedAt": "2025-06-09T18:53:47.000Z", "labelIdentifierFieldMetadataId": "76d4c949-95d0-4968-90eb-bc84ce7fd172", @@ -2895,6 +2985,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -2916,6 +3007,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -2939,6 +3031,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -2962,6 +3055,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -2985,6 +3079,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -3039,6 +3134,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:47.000Z", "updatedAt": "2025-06-09T18:53:47.000Z", "labelIdentifierFieldMetadataId": "f77a936e-89bd-4e28-bddf-2448753b2575", @@ -3061,6 +3157,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -3082,6 +3179,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -3103,6 +3201,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -3124,6 +3223,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -3145,6 +3245,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -3166,6 +3267,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -3189,6 +3291,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -3212,6 +3315,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -3235,6 +3339,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -3291,6 +3396,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:50.879Z", "updatedAt": "2025-06-09T18:53:50.881Z", "labelIdentifierFieldMetadataId": "cd48fb0f-0a7c-4515-8475-91d7cff13940", @@ -3313,6 +3419,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:50.879Z", @@ -3334,6 +3441,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:50.879Z", @@ -3355,6 +3463,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:50.879Z", @@ -3379,6 +3488,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:50.879Z", @@ -3400,6 +3510,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:50.886Z", @@ -3448,6 +3559,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:50.879Z", @@ -3469,6 +3581,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:50.879Z", @@ -3490,6 +3603,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:50.879Z", @@ -3511,6 +3625,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:50.887Z", @@ -3559,6 +3674,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:50.889Z", @@ -3607,6 +3723,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:50.890Z", @@ -3655,6 +3772,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:50.890Z", @@ -3703,6 +3821,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": false, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:50.914Z", @@ -3730,6 +3849,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:47.000Z", "updatedAt": "2025-06-09T18:53:47.000Z", "labelIdentifierFieldMetadataId": "b25e9bc9-e04f-482a-8e8c-0dfaa1549936", @@ -3752,6 +3872,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -3802,6 +3923,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -3823,6 +3945,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -3844,6 +3967,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -3865,6 +3989,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -3888,6 +4013,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -3911,6 +4037,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -3934,6 +4061,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -3984,6 +4112,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -4034,6 +4163,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -4090,6 +4220,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:47.000Z", "updatedAt": "2025-06-09T18:53:47.000Z", "labelIdentifierFieldMetadataId": "3c00f509-e1df-49c3-a672-f522262c0940", @@ -4112,6 +4243,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -4133,6 +4265,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -4154,6 +4287,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -4175,6 +4309,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -4204,6 +4339,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -4225,6 +4361,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -4246,6 +4383,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -4267,6 +4405,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -4288,6 +4427,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -4324,6 +4464,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -4430,6 +4571,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -4451,6 +4593,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -4472,6 +4615,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -4495,6 +4639,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -4518,6 +4663,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -4541,6 +4687,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -4589,6 +4736,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -4637,6 +4785,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -4685,6 +4834,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -4733,6 +4883,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -4781,6 +4932,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -4835,6 +4987,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:47.000Z", "updatedAt": "2025-06-09T18:53:47.000Z", "labelIdentifierFieldMetadataId": "216837d2-ba42-44a8-9889-fb3bfb74bf3e", @@ -4857,6 +5010,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -4878,6 +5032,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -4899,6 +5054,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -4922,6 +5078,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -4945,6 +5102,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -4968,6 +5126,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -5018,6 +5177,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -5068,6 +5228,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -5118,6 +5279,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -5168,6 +5330,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -5218,6 +5381,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -5268,6 +5432,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -5318,6 +5483,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -5368,6 +5534,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -5418,6 +5585,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -5468,6 +5636,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -5518,6 +5687,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:50.887Z", @@ -5568,6 +5738,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:51.337Z", @@ -5618,6 +5789,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:52.520Z", @@ -5674,6 +5846,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:47.000Z", "updatedAt": "2025-06-09T18:53:47.000Z", "labelIdentifierFieldMetadataId": "299a6546-47f3-4966-86ac-980e2d3afaa6", @@ -5696,6 +5869,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -5717,6 +5891,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -5738,6 +5913,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -5759,6 +5935,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -5782,6 +5959,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -5805,6 +5983,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -5828,6 +6007,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -5882,6 +6062,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:47.000Z", "updatedAt": "2025-06-09T18:53:47.000Z", "labelIdentifierFieldMetadataId": "7b15c355-4375-4db1-a639-b3162aebad1a", @@ -5904,6 +6085,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -5925,6 +6107,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -5946,6 +6129,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -5967,6 +6151,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -5988,6 +6173,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -6011,6 +6197,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -6034,6 +6221,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -6057,6 +6245,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -6107,6 +6296,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -6157,6 +6347,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -6207,6 +6398,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -6257,6 +6449,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -6307,6 +6500,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -6357,6 +6551,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:50.889Z", @@ -6407,6 +6602,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:51.337Z", @@ -6457,6 +6653,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:52.520Z", @@ -6513,6 +6710,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:47.000Z", "updatedAt": "2025-06-09T18:53:47.000Z", "labelIdentifierFieldMetadataId": "857e3ba1-7711-4f0f-87ea-efaba1a67881", @@ -6535,6 +6733,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -6556,6 +6755,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -6577,6 +6777,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -6613,6 +6814,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -6634,6 +6836,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -6657,6 +6860,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -6680,6 +6884,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -6703,6 +6908,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -6753,6 +6959,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -6809,6 +7016,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:47.000Z", "updatedAt": "2025-06-09T18:53:47.000Z", "labelIdentifierFieldMetadataId": "031a2143-2246-4e12-88b3-f7555a664d94", @@ -6831,6 +7039,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -6852,6 +7061,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -6873,6 +7083,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -6894,6 +7105,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -6915,6 +7127,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -6936,6 +7149,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -6957,6 +7171,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -6978,6 +7193,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -6999,6 +7215,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -7022,6 +7239,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -7045,6 +7263,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -7068,6 +7287,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -7124,6 +7344,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:47.000Z", "updatedAt": "2025-06-09T18:53:47.000Z", "labelIdentifierFieldMetadataId": "4c378eec-ec8c-49e1-9eb9-ad217b8f7f6a", @@ -7146,6 +7367,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -7167,6 +7389,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -7188,6 +7411,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -7212,6 +7436,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -7233,6 +7458,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -7276,6 +7502,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -7301,6 +7528,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -7322,6 +7550,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -7343,6 +7572,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -7366,6 +7596,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -7389,6 +7620,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -7412,6 +7644,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -7460,6 +7693,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -7508,6 +7742,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -7556,6 +7791,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -7606,6 +7842,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -7660,6 +7897,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:47.000Z", "updatedAt": "2025-06-09T18:53:47.000Z", "labelIdentifierFieldMetadataId": "33e3ed71-cf2f-4790-bb11-cf3dd96fa822", @@ -7682,6 +7920,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -7703,6 +7942,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -7726,6 +7966,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -7749,6 +7990,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -7772,6 +8014,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -7822,6 +8065,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -7872,6 +8116,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -7922,6 +8167,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -7972,6 +8218,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:50.890Z", @@ -8022,6 +8269,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:51.338Z", @@ -8072,6 +8320,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:52.521Z", @@ -8128,6 +8377,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:47.000Z", "updatedAt": "2025-06-09T18:53:47.000Z", "labelIdentifierFieldMetadataId": "fe67b947-69c7-4d2b-b98c-e2d497be567b", @@ -8150,6 +8400,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -8171,6 +8422,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -8192,6 +8444,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -8213,6 +8466,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -8234,6 +8488,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -8255,6 +8510,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -8276,6 +8532,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -8297,6 +8554,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -8318,6 +8576,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -8339,6 +8598,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -8360,6 +8620,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -8381,6 +8642,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -8406,6 +8668,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -8427,6 +8690,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -8450,6 +8714,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -8473,6 +8738,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -8496,6 +8762,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -8544,6 +8811,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -8598,6 +8866,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:47.000Z", "updatedAt": "2025-06-09T18:53:47.000Z", "labelIdentifierFieldMetadataId": "a381b5f6-e2fd-46e0-aee1-8783a7ca90c4", @@ -8620,6 +8889,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -8641,6 +8911,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -8662,6 +8933,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -8685,6 +8957,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -8708,6 +8981,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -8731,6 +9005,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -8787,6 +9062,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:47.000Z", "updatedAt": "2025-06-09T18:53:47.000Z", "labelIdentifierFieldMetadataId": "8d2741b1-0afa-4478-bdc0-146617c512b3", @@ -8820,6 +9096,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -8844,6 +9121,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": true, "createdAt": "2025-06-09T18:53:47.000Z", @@ -8868,6 +9146,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -8893,6 +9172,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -8918,6 +9198,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -8939,6 +9220,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -8965,6 +9247,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -8986,6 +9269,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -9007,6 +9291,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -9028,6 +9313,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -9053,6 +9339,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -9074,6 +9361,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -9095,6 +9383,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -9118,6 +9407,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -9141,6 +9431,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -9164,6 +9455,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -9214,6 +9506,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -9262,6 +9555,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -9310,6 +9604,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -9358,6 +9653,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -9406,6 +9702,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -9454,6 +9751,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -9502,6 +9800,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -9550,6 +9849,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -9598,6 +9898,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": true, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:53.490Z", @@ -9619,6 +9920,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": true, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:53.492Z", @@ -9645,6 +9947,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": true, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:53.493Z", @@ -9688,6 +9991,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": true, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:53.494Z", @@ -9746,6 +10050,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:47.000Z", "updatedAt": "2025-06-09T18:53:47.000Z", "labelIdentifierFieldMetadataId": "77a41ed6-0723-4f53-a062-568e87fb961e", @@ -9768,6 +10073,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -9789,6 +10095,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -9813,6 +10120,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -9834,6 +10142,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -9891,6 +10200,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -9912,6 +10222,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -9937,6 +10248,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -9958,6 +10270,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -9979,6 +10292,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -10002,6 +10316,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -10025,6 +10340,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -10048,6 +10364,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -10098,6 +10415,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -10148,6 +10466,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -10196,6 +10515,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -10244,6 +10564,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -10292,6 +10613,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -10340,6 +10662,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -10394,6 +10717,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:51.326Z", "updatedAt": "2025-06-09T18:53:51.330Z", "labelIdentifierFieldMetadataId": "efd57cdc-99d2-4d4c-8389-be7d3ed9718d", @@ -10416,6 +10740,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:51.326Z", @@ -10437,6 +10762,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:51.326Z", @@ -10458,6 +10784,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:51.326Z", @@ -10479,6 +10806,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:51.326Z", @@ -10500,6 +10828,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:51.326Z", @@ -10521,6 +10850,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:51.326Z", @@ -10545,6 +10875,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:51.326Z", @@ -10566,6 +10897,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:51.337Z", @@ -10614,6 +10946,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:51.337Z", @@ -10662,6 +10995,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:51.337Z", @@ -10710,6 +11044,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:51.337Z", @@ -10758,6 +11093,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:51.338Z", @@ -10806,6 +11142,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": false, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:51.348Z", @@ -10827,6 +11164,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": true, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:51.796Z", @@ -10891,6 +11229,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": true, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:51.819Z", @@ -10955,6 +11294,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": true, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:51.822Z", @@ -10976,6 +11316,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": true, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:51.824Z", @@ -10997,6 +11338,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": true, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:51.825Z", @@ -11027,6 +11369,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": true, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:51.826Z", @@ -11053,6 +11396,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": true, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:51.827Z", @@ -11077,6 +11421,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": true, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:51.831Z", @@ -11098,6 +11443,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": true, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:51.836Z", @@ -11119,6 +11465,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": true, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:51.837Z", @@ -11144,6 +11491,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": true, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:51.838Z", @@ -11168,6 +11516,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": true, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:51.838Z", @@ -11192,6 +11541,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": true, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:51.839Z", @@ -11244,6 +11594,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": true, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:51.841Z", @@ -11265,6 +11616,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": true, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:51.841Z", @@ -11286,6 +11638,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": true, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:51.842Z", @@ -11313,6 +11666,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:47.000Z", "updatedAt": "2025-06-09T18:53:47.000Z", "labelIdentifierFieldMetadataId": "77b3d19e-d170-442a-b98a-80cc5b4e10ea", @@ -11335,6 +11689,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -11371,6 +11726,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -11392,6 +11748,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -11413,6 +11770,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -11436,6 +11794,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -11459,6 +11818,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -11482,6 +11842,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -11538,6 +11899,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:47.000Z", "updatedAt": "2025-06-09T18:53:47.000Z", "labelIdentifierFieldMetadataId": "e65d6c53-5bc1-41a4-90c1-dfbf72b87b69", @@ -11567,6 +11929,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -11588,6 +11951,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": true, "createdAt": "2025-06-09T18:53:47.000Z", @@ -11613,6 +11977,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -11634,6 +11999,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -11659,6 +12025,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -11684,6 +12051,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -11708,6 +12076,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -11738,6 +12107,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -11759,6 +12129,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -11780,6 +12151,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -11805,6 +12177,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -11826,6 +12199,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -11847,6 +12221,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -11870,6 +12245,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -11893,6 +12269,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -11916,6 +12293,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -11964,6 +12342,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -12014,6 +12393,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -12062,6 +12442,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -12110,6 +12491,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -12158,6 +12540,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -12206,6 +12589,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -12254,6 +12638,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -12302,6 +12687,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": true, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:53.213Z", @@ -12323,6 +12709,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": true, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:53.215Z", @@ -12348,6 +12735,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": true, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:53.216Z", @@ -12391,6 +12779,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": true, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:53.218Z", @@ -12418,6 +12807,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:47.000Z", "updatedAt": "2025-06-09T18:53:47.000Z", "labelIdentifierFieldMetadataId": "a5b14907-7ca6-4452-9a1b-8fa76d087f62", @@ -12440,6 +12830,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -12461,6 +12852,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -12482,6 +12874,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -12503,6 +12896,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -12524,6 +12918,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -12545,6 +12940,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -12566,6 +12962,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -12587,6 +12984,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -12608,6 +13006,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -12629,6 +13028,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -12652,6 +13052,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -12675,6 +13076,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -12698,6 +13100,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -12748,6 +13151,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -12796,6 +13200,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -12850,6 +13255,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:47.000Z", "updatedAt": "2025-06-09T18:53:47.000Z", "labelIdentifierFieldMetadataId": "7b1da965-b3b3-4c08-aa75-1c6147704ffd", @@ -12872,6 +13278,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -12895,6 +13302,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -12918,6 +13326,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -12939,6 +13348,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -12960,6 +13370,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -12984,6 +13395,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -13009,6 +13421,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -13030,6 +13443,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -13051,6 +13465,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -13074,6 +13489,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -13122,6 +13538,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -13170,6 +13587,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -13218,6 +13636,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -13272,6 +13691,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:47.000Z", "updatedAt": "2025-06-09T18:53:47.000Z", "labelIdentifierFieldMetadataId": "a6ccb8df-d31d-4340-ab8c-02308701ae1c", @@ -13294,6 +13714,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -13315,6 +13736,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -13336,6 +13758,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -13357,6 +13780,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -13378,6 +13802,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -13484,6 +13909,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -13505,6 +13931,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -13528,6 +13955,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -13551,6 +13979,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -13574,6 +14003,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -13630,6 +14060,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:47.000Z", "updatedAt": "2025-06-09T18:53:47.000Z", "labelIdentifierFieldMetadataId": "b79c052a-0957-4abb-98ab-dbb708e63b39", @@ -13652,6 +14083,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -13673,6 +14105,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -13694,6 +14127,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -13715,6 +14149,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -13765,6 +14200,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -13786,6 +14222,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -13807,6 +14244,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -13830,6 +14268,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -13853,6 +14292,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -13876,6 +14316,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -13926,6 +14367,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -13974,6 +14416,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -14022,6 +14465,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -14076,6 +14520,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:47.000Z", "updatedAt": "2025-06-09T18:53:47.000Z", "labelIdentifierFieldMetadataId": "deb66502-6542-48b7-8b9b-e94928ea87c3", @@ -14098,6 +14543,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -14119,6 +14565,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -14140,6 +14587,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -14161,6 +14609,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -14211,6 +14660,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -14232,6 +14682,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -14255,6 +14706,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -14278,6 +14730,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -14301,6 +14754,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -14351,6 +14805,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -14401,6 +14856,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -14457,6 +14913,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:47.000Z", "updatedAt": "2025-06-09T18:53:47.000Z", "labelIdentifierFieldMetadataId": "f0a45b6e-522e-4eb5-9602-a0d43114956a", @@ -14479,6 +14936,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -14500,6 +14958,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -14521,6 +14980,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -14561,6 +15021,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -14582,6 +15043,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -14607,6 +15069,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -14628,6 +15091,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -14651,6 +15115,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -14674,6 +15139,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -14697,6 +15163,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -14745,6 +15212,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -14793,6 +15261,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -14841,6 +15310,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -14889,6 +15359,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -14943,6 +15414,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:47.000Z", "updatedAt": "2025-06-09T18:53:47.000Z", "labelIdentifierFieldMetadataId": "d149e3a5-66e0-4190-bc31-6561572b0596", @@ -14965,6 +15437,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -14986,6 +15459,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -15010,6 +15484,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -15031,6 +15506,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -15052,6 +15528,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -15073,6 +15550,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -15094,6 +15572,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -15115,6 +15594,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -15136,6 +15616,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -15186,6 +15667,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -15229,6 +15711,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -15250,6 +15733,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -15271,6 +15755,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -15294,6 +15779,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -15317,6 +15803,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -15340,6 +15827,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -15388,6 +15876,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -15436,6 +15925,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -15484,6 +15974,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -15532,6 +16023,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -15580,6 +16072,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -15628,6 +16121,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -15676,6 +16170,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -15724,6 +16219,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -15778,6 +16274,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:47.000Z", "updatedAt": "2025-06-09T18:53:47.000Z", "labelIdentifierFieldMetadataId": "84ee59e8-d09a-4466-a2d1-b552b734fb54", @@ -15800,6 +16297,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -15821,6 +16319,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -15844,6 +16343,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -15865,6 +16365,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -15886,6 +16387,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -15907,6 +16409,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -15930,6 +16433,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -15953,6 +16457,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -15982,6 +16487,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:47.000Z", "updatedAt": "2025-06-09T18:53:47.000Z", "labelIdentifierFieldMetadataId": "3c1ca883-cdb3-4c28-ae99-0281af9fa608", @@ -16004,6 +16510,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -16025,6 +16532,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -16046,6 +16554,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -16067,6 +16576,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -16090,6 +16600,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -16113,6 +16624,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -16136,6 +16648,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -16192,6 +16705,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:47.000Z", "updatedAt": "2025-06-09T18:53:47.000Z", "labelIdentifierFieldMetadataId": "79a6fb69-4a24-40e3-a296-2bfd2ac7f5b9", @@ -16214,6 +16728,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -16235,6 +16750,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -16256,6 +16772,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -16277,6 +16794,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -16300,6 +16818,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -16323,6 +16842,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -16346,6 +16866,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -16402,6 +16923,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:47.000Z", "updatedAt": "2025-06-09T18:53:47.000Z", "labelIdentifierFieldMetadataId": "d311620d-aa17-4a67-9ba7-fb32465cdabe", @@ -16424,6 +16946,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -16445,6 +16968,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -16466,6 +16990,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -16487,6 +17012,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -16510,6 +17036,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -16533,6 +17060,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -16556,6 +17084,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -16606,6 +17135,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -16662,6 +17192,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:47.000Z", "updatedAt": "2025-06-09T18:53:47.000Z", "labelIdentifierFieldMetadataId": "7fe20fd5-9f22-457f-882b-7ce8082ee379", @@ -16684,6 +17215,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -16705,6 +17237,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -16762,6 +17295,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -16826,6 +17360,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -16862,6 +17397,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -16883,6 +17419,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -16933,6 +17470,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -16954,6 +17492,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -16975,6 +17514,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -16996,6 +17536,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -17017,6 +17558,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -17038,6 +17580,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -17059,6 +17602,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -17082,6 +17626,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -17105,6 +17650,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -17128,6 +17674,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -17178,6 +17725,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -17232,6 +17780,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:47.000Z", "updatedAt": "2025-06-09T18:53:47.000Z", "labelIdentifierFieldMetadataId": "0fa7d940-3972-4a1c-bfb6-4582443c3f78", @@ -17254,6 +17803,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -17297,6 +17847,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -17318,6 +17869,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -17354,6 +17906,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -17375,6 +17928,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -17418,6 +17972,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -17439,6 +17994,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -17460,6 +18016,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -17481,6 +18038,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -17502,6 +18060,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -17523,6 +18082,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -17580,6 +18140,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -17644,6 +18205,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -17665,6 +18227,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -17686,6 +18249,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -17707,6 +18271,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -17730,6 +18295,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -17753,6 +18319,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -17776,6 +18343,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -17826,6 +18394,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -17874,6 +18443,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -17928,6 +18498,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isRemote": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "createdAt": "2025-06-09T18:53:47.000Z", "updatedAt": "2025-06-09T18:53:47.000Z", "labelIdentifierFieldMetadataId": "2f6b43d0-140a-4176-bc3c-ccd75685b0e9", @@ -17950,6 +18521,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -17971,6 +18543,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -17992,6 +18565,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -18013,6 +18587,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -18034,6 +18609,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -18055,6 +18631,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -18078,6 +18655,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": false, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -18101,6 +18679,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": false, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -18124,6 +18703,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -18174,6 +18754,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", @@ -18222,6 +18803,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = "isCustom": false, "isActive": true, "isSystem": true, + "isUIReadOnly": false, "isNullable": true, "isUnique": false, "createdAt": "2025-06-09T18:53:47.000Z", diff --git a/packages/twenty-front/tsconfig.dev.json b/packages/twenty-front/tsconfig.dev.json index 381c9887dbc..01bcadc7817 100644 --- a/packages/twenty-front/tsconfig.dev.json +++ b/packages/twenty-front/tsconfig.dev.json @@ -10,7 +10,7 @@ "src/**/*.ts", "src/**/*.tsx", "lingui.config.ts", - "jest.config.ts", + "jest.config.mjs", "vite.config.ts", "setupTests.ts" ], diff --git a/packages/twenty-front/tsconfig.spec.json b/packages/twenty-front/tsconfig.spec.json index 33363c2dd37..33cf9584c72 100644 --- a/packages/twenty-front/tsconfig.spec.json +++ b/packages/twenty-front/tsconfig.spec.json @@ -10,7 +10,7 @@ }, "include": [ "**/__mocks__/**/*", - "jest.config.ts", + "jest.config.mjs", "setupTests.ts", "src/**/*.d.ts", "src/**/*.spec.ts", diff --git a/packages/twenty-server/jest.config.ts b/packages/twenty-server/jest.config.mjs similarity index 100% rename from packages/twenty-server/jest.config.ts rename to packages/twenty-server/jest.config.mjs diff --git a/packages/twenty-server/src/database/typeorm/core/migrations/common/1755000000000-addIsUIReadOnlyToFieldMetadata.ts b/packages/twenty-server/src/database/typeorm/core/migrations/common/1755000000000-addIsUIReadOnlyToFieldMetadata.ts new file mode 100644 index 00000000000..f8d21750d1b --- /dev/null +++ b/packages/twenty-server/src/database/typeorm/core/migrations/common/1755000000000-addIsUIReadOnlyToFieldMetadata.ts @@ -0,0 +1,27 @@ +import { type MigrationInterface, type QueryRunner } from 'typeorm'; + +export class AddIsUIReadOnlyToFieldMetadata1755000000000 + implements MigrationInterface +{ + name = 'AddIsUIReadOnlyToFieldMetadata1755000000000'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "core"."fieldMetadata" ADD "isUIReadOnly" boolean NOT NULL DEFAULT false`, + ); + + await queryRunner.query( + `ALTER TABLE "core"."objectMetadata" ADD "isUIReadOnly" boolean NOT NULL DEFAULT false`, + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "core"."fieldMetadata" DROP COLUMN "isUIReadOnly"`, + ); + + await queryRunner.query( + `ALTER TABLE "core"."objectMetadata" DROP COLUMN "isUIReadOnly"`, + ); + } +} diff --git a/packages/twenty-server/src/engine/metadata-modules/field-metadata/dtos/field-metadata.dto.ts b/packages/twenty-server/src/engine/metadata-modules/field-metadata/dtos/field-metadata.dto.ts index 8d1fbaf2826..9257450de0d 100644 --- a/packages/twenty-server/src/engine/metadata-modules/field-metadata/dtos/field-metadata.dto.ts +++ b/packages/twenty-server/src/engine/metadata-modules/field-metadata/dtos/field-metadata.dto.ts @@ -108,6 +108,11 @@ export class FieldMetadataDTO { @FilterableField({ nullable: true }) isSystem?: boolean; + @IsBoolean() + @IsOptional() + @FilterableField({ nullable: true }) + isUIReadOnly?: boolean; + @IsBoolean() @IsOptional() @Field({ nullable: true }) diff --git a/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.entity.ts b/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.entity.ts index d35c8e4d9f2..d45f3dbcde8 100644 --- a/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.entity.ts @@ -103,6 +103,9 @@ export class FieldMetadataEntity< @Column({ default: false }) isSystem: boolean; + @Column({ default: false }) + isUIReadOnly: boolean; + // Is this really nullable ? @Column({ nullable: true, default: true, type: 'boolean' }) isNullable: boolean | null; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/__mocks__/get-flat-field-metadata.mock.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/__mocks__/get-flat-field-metadata.mock.ts index 21764bfb5d5..fa39a6ab91d 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/__mocks__/get-flat-field-metadata.mock.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/__mocks__/get-flat-field-metadata.mock.ts @@ -30,6 +30,7 @@ export const getFlatFieldMetadataMock = ( label: 'flat field metadata label', isNullable: true, isUnique: false, + isUIReadOnly: false, isLabelSyncedWithName: false, isSystem: false, standardId: null, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/get-default-flat-field-metadata-from-create-field-input.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/get-default-flat-field-metadata-from-create-field-input.util.ts index bab4cadfa52..e0b75c6f218 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/get-default-flat-field-metadata-from-create-field-input.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/get-default-flat-field-metadata-from-create-field-input.util.ts @@ -53,5 +53,6 @@ export const getDefaultFlatFieldMetadata = ({ settings: settings ?? null, createdAt, updatedAt: createdAt, + isUIReadOnly: createFieldInput.isUIReadOnly ?? false, } as const satisfies FlatFieldMetadata; }; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/__mocks__/get-flat-object-metadata.mock.ts b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/__mocks__/get-flat-object-metadata.mock.ts index 8c98243d99e..c3ec6ad4faf 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/__mocks__/get-flat-object-metadata.mock.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/__mocks__/get-flat-object-metadata.mock.ts @@ -25,6 +25,7 @@ export const getFlatObjectMetadataMock = ( isRemote: false, isSearchable: true, isSystem: false, + isUIReadOnly: false, labelIdentifierFieldMetadataId: faker.string.uuid(), labelPlural: 'default flat object metadata label plural', labelSingular: 'default flat object metadata label singular', diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/from-create-object-input-to-flat-object-metadata-and-flat-field-metadatas-to-create.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/from-create-object-input-to-flat-object-metadata-and-flat-field-metadatas-to-create.util.ts index c68543d630b..264adca5f16 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/from-create-object-input-to-flat-object-metadata-and-flat-field-metadatas-to-create.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/from-create-object-input-to-flat-object-metadata-and-flat-field-metadatas-to-create.util.ts @@ -63,6 +63,7 @@ export const fromCreateObjectInputToFlatObjectMetadataAndFlatFieldMetadatasToCre isLabelSyncedWithName: createObjectInput.isLabelSyncedWithName ?? false, isRemote: createObjectInput.isRemote ?? false, isSearchable: true, + isUIReadOnly: false, isSystem: false, labelIdentifierFieldMetadataId: baseCustomFlatFieldMetadatas.nameField.id, labelPlural: capitalize(createObjectInput.labelPlural), diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/dtos/object-metadata.dto.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/dtos/object-metadata.dto.ts index c5bb93b6362..74b54d4f83f 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/dtos/object-metadata.dto.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/dtos/object-metadata.dto.ts @@ -71,6 +71,9 @@ export class ObjectMetadataDTO { @FilterableField() isSystem: boolean; + @FilterableField() + isUIReadOnly: boolean; + @FilterableField() isSearchable: boolean; diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.entity.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.entity.ts index 71fdf3a9b25..d43f8f11759 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.entity.ts @@ -76,6 +76,9 @@ export class ObjectMetadataEntity implements Required { @Column({ default: false }) isSystem: boolean; + @Column({ default: false }) + isUIReadOnly: boolean; + @Column({ default: true }) isAuditLogged: boolean; diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/build-default-fields-for-custom-object.util.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/build-default-fields-for-custom-object.util.ts index 993c20328f8..12f97b3697c 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/build-default-fields-for-custom-object.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/build-default-fields-for-custom-object.util.ts @@ -22,6 +22,7 @@ export const buildDefaultFieldsForCustomObject = ( isActive: true, isCustom: false, isSystem: true, + isUIReadOnly: true, workspaceId, defaultValue: 'uuid', }, @@ -36,6 +37,7 @@ export const buildDefaultFieldsForCustomObject = ( isNullable: false, isActive: true, isCustom: false, + isUIReadOnly: false, workspaceId, defaultValue: "'Untitled'", }, @@ -50,6 +52,7 @@ export const buildDefaultFieldsForCustomObject = ( isNullable: false, isActive: true, isCustom: false, + isUIReadOnly: false, workspaceId, defaultValue: 'now', }, @@ -65,6 +68,7 @@ export const buildDefaultFieldsForCustomObject = ( isActive: true, isCustom: false, isSystem: false, + isUIReadOnly: false, workspaceId, defaultValue: 'now', }, @@ -80,6 +84,7 @@ export const buildDefaultFieldsForCustomObject = ( isActive: true, isCustom: false, isSystem: false, + isUIReadOnly: true, workspaceId, defaultValue: null, }, @@ -95,6 +100,7 @@ export const buildDefaultFieldsForCustomObject = ( isActive: true, isCustom: false, isSystem: false, + isUIReadOnly: true, workspaceId, defaultValue: { name: "''", source: "'MANUAL'" }, }, @@ -110,6 +116,7 @@ export const buildDefaultFieldsForCustomObject = ( isActive: true, isCustom: false, isSystem: true, + isUIReadOnly: false, workspaceId, defaultValue: 0, }, diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/build-default-flat-field-metadatas-for-custom-object.util.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/build-default-flat-field-metadatas-for-custom-object.util.ts index 0add0a1bd66..6074394a114 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/build-default-flat-field-metadatas-for-custom-object.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/build-default-flat-field-metadatas-for-custom-object.util.ts @@ -35,6 +35,7 @@ export const buildDefaultFlatFieldMetadatasForCustomObject = ({ isActive: true, isCustom: false, isSystem: true, + isUIReadOnly: true, defaultValue: 'uuid', createdAt, @@ -65,6 +66,7 @@ export const buildDefaultFlatFieldMetadatasForCustomObject = ({ isActive: true, isCustom: false, isSystem: false, + isUIReadOnly: false, defaultValue: "'Untitled'", createdAt, @@ -95,6 +97,7 @@ export const buildDefaultFlatFieldMetadatasForCustomObject = ({ isActive: true, isCustom: false, isSystem: false, + isUIReadOnly: true, defaultValue: 'now', createdAt, @@ -125,6 +128,7 @@ export const buildDefaultFlatFieldMetadatasForCustomObject = ({ isActive: true, isCustom: false, isSystem: false, + isUIReadOnly: true, defaultValue: 'now', createdAt, @@ -155,6 +159,7 @@ export const buildDefaultFlatFieldMetadatasForCustomObject = ({ isActive: true, isCustom: false, isSystem: false, + isUIReadOnly: true, defaultValue: null, createdAt, @@ -185,6 +190,7 @@ export const buildDefaultFlatFieldMetadatasForCustomObject = ({ isActive: true, isCustom: false, isSystem: false, + isUIReadOnly: true, defaultValue: { name: "''", source: "'MANUAL'" }, createdAt, @@ -215,6 +221,7 @@ export const buildDefaultFlatFieldMetadatasForCustomObject = ({ isActive: true, isCustom: false, isSystem: true, + isUIReadOnly: true, defaultValue: 0, createdAt, @@ -245,6 +252,7 @@ export const buildDefaultFlatFieldMetadatasForCustomObject = ({ isActive: true, isCustom: false, isSystem: true, + isUIReadOnly: true, defaultValue: null, createdAt, diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/build-default-relation-flat-field-metadatas-for-custom-object.util.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/build-default-relation-flat-field-metadatas-for-custom-object.util.ts index 3d6484fee29..f6a0359839f 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/build-default-relation-flat-field-metadatas-for-custom-object.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/build-default-relation-flat-field-metadatas-for-custom-object.util.ts @@ -75,6 +75,7 @@ const generateSourceFlatFieldMetadata = ({ isCustom: false, isLabelSyncedWithName: false, isNullable: true, + isUIReadOnly: false, isSystem: true, isUnique: false, label: capitalize(targetFlatObjectMetadata.namePlural), @@ -133,6 +134,7 @@ const generateTargetFlatFieldMetadata = ({ isCustom: false, isActive: true, isSystem: true, + isUIReadOnly: false, type: FieldMetadataType.RELATION, icon: 'IconBuildingSkyscraper', isNullable: true, diff --git a/packages/twenty-server/src/engine/twenty-orm/base.workspace-entity.ts b/packages/twenty-server/src/engine/twenty-orm/base.workspace-entity.ts index 540dd8e3667..4c95f1b2ed6 100644 --- a/packages/twenty-server/src/engine/twenty-orm/base.workspace-entity.ts +++ b/packages/twenty-server/src/engine/twenty-orm/base.workspace-entity.ts @@ -4,6 +4,7 @@ import { FieldMetadataType } from 'twenty-shared/types'; import { DateDisplayFormat } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata-settings.interface'; import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; +import { WorkspaceIsFieldUIReadOnly } from 'src/engine/twenty-orm/decorators/workspace-is-field-ui-readonly.decorator'; import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator'; import { WorkspaceIsPrimaryField } from 'src/engine/twenty-orm/decorators/workspace-is-primary-field.decorator'; import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; @@ -19,6 +20,7 @@ export abstract class BaseWorkspaceEntity { icon: 'Icon123', }) @WorkspaceIsPrimaryField() + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsSystem() id: string; @@ -33,6 +35,7 @@ export abstract class BaseWorkspaceEntity { displayFormat: DateDisplayFormat.RELATIVE, }, }) + @WorkspaceIsFieldUIReadOnly() createdAt: string; @WorkspaceField({ @@ -46,6 +49,7 @@ export abstract class BaseWorkspaceEntity { displayFormat: DateDisplayFormat.RELATIVE, }, }) + @WorkspaceIsFieldUIReadOnly() updatedAt: string; @WorkspaceField({ @@ -59,5 +63,6 @@ export abstract class BaseWorkspaceEntity { }, }) @WorkspaceIsNullable() + @WorkspaceIsFieldUIReadOnly() deletedAt: string | null; } diff --git a/packages/twenty-server/src/engine/twenty-orm/custom.workspace-entity.ts b/packages/twenty-server/src/engine/twenty-orm/custom.workspace-entity.ts index f0ff3f07bc6..a78ca25ed48 100644 --- a/packages/twenty-server/src/engine/twenty-orm/custom.workspace-entity.ts +++ b/packages/twenty-server/src/engine/twenty-orm/custom.workspace-entity.ts @@ -12,6 +12,7 @@ import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity import { WorkspaceCustomEntity } from 'src/engine/twenty-orm/decorators/workspace-custom-entity.decorator'; import { WorkspaceFieldIndex } from 'src/engine/twenty-orm/decorators/workspace-field-index.decorator'; import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; +import { WorkspaceIsFieldUIReadOnly } from 'src/engine/twenty-orm/decorators/workspace-is-field-ui-readonly.decorator'; import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator'; import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; import { WorkspaceRelation } from 'src/engine/twenty-orm/decorators/workspace-relation.decorator'; @@ -52,6 +53,7 @@ export class CustomWorkspaceEntity extends BaseWorkspaceEntity { defaultValue: 0, }) @WorkspaceIsSystem() + @WorkspaceIsFieldUIReadOnly() position: number; @WorkspaceField({ @@ -61,6 +63,7 @@ export class CustomWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconCreativeCommonsSa', description: msg`The creator of the record`, }) + @WorkspaceIsFieldUIReadOnly() createdBy: ActorMetadata; @WorkspaceRelation({ @@ -158,6 +161,7 @@ export class CustomWorkspaceEntity extends BaseWorkspaceEntity { }) @WorkspaceIsNullable() @WorkspaceIsSystem() + @WorkspaceIsFieldUIReadOnly() @WorkspaceFieldIndex({ indexType: IndexType.GIN }) searchVector: string; } diff --git a/packages/twenty-server/src/engine/twenty-orm/decorators/workspace-entity.decorator.ts b/packages/twenty-server/src/engine/twenty-orm/decorators/workspace-entity.decorator.ts index 13581ac05b5..f4b0aff7464 100644 --- a/packages/twenty-server/src/engine/twenty-orm/decorators/workspace-entity.decorator.ts +++ b/packages/twenty-server/src/engine/twenty-orm/decorators/workspace-entity.decorator.ts @@ -42,6 +42,11 @@ export function WorkspaceEntity( 'workspace:is-searchable-metadata-args', target, ) ?? false; + const isUIReadOnly = + TypedReflect.getMetadata( + 'workspace:is-object-ui-readonly-metadata-args', + target, + ) ?? false; const objectName = convertClassNameToObjectMetadataName(target.name); @@ -60,6 +65,7 @@ export function WorkspaceEntity( shortcut: options.shortcut, isAuditLogged, isSystem, + isUIReadOnly, gate, duplicateCriteria, isSearchable, diff --git a/packages/twenty-server/src/engine/twenty-orm/decorators/workspace-field.decorator.ts b/packages/twenty-server/src/engine/twenty-orm/decorators/workspace-field.decorator.ts index cd37ac99d2b..c30e38c3613 100644 --- a/packages/twenty-server/src/engine/twenty-orm/decorators/workspace-field.decorator.ts +++ b/packages/twenty-server/src/engine/twenty-orm/decorators/workspace-field.decorator.ts @@ -52,6 +52,12 @@ export function WorkspaceField( object, propertyKey.toString(), ) ?? false; + const isUIReadOnly = + TypedReflect.getMetadata( + 'workspace:is-field-ui-readonly-metadata-args', + object, + propertyKey.toString(), + ) ?? false; const gate = TypedReflect.getMetadata( 'workspace:gate-metadata-args', object, @@ -91,6 +97,7 @@ export function WorkspaceField( isPrimary, isNullable, isSystem, + isUIReadOnly, gate, isDeprecated, isUnique, diff --git a/packages/twenty-server/src/engine/twenty-orm/decorators/workspace-is-field-ui-readonly.decorator.ts b/packages/twenty-server/src/engine/twenty-orm/decorators/workspace-is-field-ui-readonly.decorator.ts new file mode 100644 index 00000000000..67493e9fe6e --- /dev/null +++ b/packages/twenty-server/src/engine/twenty-orm/decorators/workspace-is-field-ui-readonly.decorator.ts @@ -0,0 +1,16 @@ +import { TypedReflect } from 'src/utils/typed-reflect'; + +export function WorkspaceIsFieldUIReadOnly() { + return function (target: object, propertyKey?: string | symbol): void { + if (propertyKey === undefined) { + throw new Error('This decorator should be used with a field not a class'); + } + + TypedReflect.defineMetadata( + 'workspace:is-field-ui-readonly-metadata-args', + true, + target, + propertyKey.toString(), + ); + }; +} diff --git a/packages/twenty-server/src/engine/twenty-orm/decorators/workspace-is-object-ui-readonly.decorator.ts b/packages/twenty-server/src/engine/twenty-orm/decorators/workspace-is-object-ui-readonly.decorator.ts new file mode 100644 index 00000000000..c6874dbdf96 --- /dev/null +++ b/packages/twenty-server/src/engine/twenty-orm/decorators/workspace-is-object-ui-readonly.decorator.ts @@ -0,0 +1,11 @@ +import { TypedReflect } from 'src/utils/typed-reflect'; + +export function WorkspaceIsObjectUIReadOnly() { + return function (target: object): void { + TypedReflect.defineMetadata( + 'workspace:is-object-ui-readonly-metadata-args', + true, + target, + ); + }; +} diff --git a/packages/twenty-server/src/engine/twenty-orm/decorators/workspace-relation.decorator.ts b/packages/twenty-server/src/engine/twenty-orm/decorators/workspace-relation.decorator.ts index 4fefe0c9fac..1f728c0af80 100644 --- a/packages/twenty-server/src/engine/twenty-orm/decorators/workspace-relation.decorator.ts +++ b/packages/twenty-server/src/engine/twenty-orm/decorators/workspace-relation.decorator.ts @@ -58,6 +58,12 @@ export function WorkspaceRelation( object, propertyKey.toString(), ) ?? false; + const isUIReadOnly = + TypedReflect.getMetadata( + 'workspace:is-field-ui-readonly-metadata-args', + object, + propertyKey.toString(), + ) ?? false; const gate = TypedReflect.getMetadata( 'workspace:gate-metadata-args', object, @@ -89,6 +95,7 @@ export function WorkspaceRelation( isPrimary, isNullable, isSystem, + isUIReadOnly, gate, isLabelSyncedWithName, }); diff --git a/packages/twenty-server/src/engine/twenty-orm/interfaces/workspace-entity-metadata-args.interface.ts b/packages/twenty-server/src/engine/twenty-orm/interfaces/workspace-entity-metadata-args.interface.ts index 986c9b90a60..0b61258b4f2 100644 --- a/packages/twenty-server/src/engine/twenty-orm/interfaces/workspace-entity-metadata-args.interface.ts +++ b/packages/twenty-server/src/engine/twenty-orm/interfaces/workspace-entity-metadata-args.interface.ts @@ -53,6 +53,11 @@ export interface WorkspaceEntityMetadataArgs { */ readonly isSystem: boolean; + /** + * Is UI read-only object. + */ + readonly isUIReadOnly: boolean; + /** * Entity gate. */ diff --git a/packages/twenty-server/src/engine/twenty-orm/interfaces/workspace-field-metadata-args.interface.ts b/packages/twenty-server/src/engine/twenty-orm/interfaces/workspace-field-metadata-args.interface.ts index c46d4268493..b157a02c882 100644 --- a/packages/twenty-server/src/engine/twenty-orm/interfaces/workspace-field-metadata-args.interface.ts +++ b/packages/twenty-server/src/engine/twenty-orm/interfaces/workspace-field-metadata-args.interface.ts @@ -71,6 +71,11 @@ export interface WorkspaceFieldMetadataArgs { */ readonly isSystem: boolean; + /** + * Is UI read-only field. + */ + readonly isUIReadOnly: boolean; + /** * Is nullable field. */ diff --git a/packages/twenty-server/src/engine/twenty-orm/interfaces/workspace-relation-metadata-args.interface.ts b/packages/twenty-server/src/engine/twenty-orm/interfaces/workspace-relation-metadata-args.interface.ts index e5af85631f6..c37b731da66 100644 --- a/packages/twenty-server/src/engine/twenty-orm/interfaces/workspace-relation-metadata-args.interface.ts +++ b/packages/twenty-server/src/engine/twenty-orm/interfaces/workspace-relation-metadata-args.interface.ts @@ -70,6 +70,11 @@ export interface WorkspaceRelationMetadataArgs { */ readonly isSystem: boolean; + /** + * Is UI read-only field. + */ + readonly isUIReadOnly: boolean; + /** * Is nullable field. */ diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/__snapshots__/workspace-migration-builder.spec.ts.snap b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/__snapshots__/workspace-migration-builder.spec.ts.snap index 71f601d3671..fa8b58c877f 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/__snapshots__/workspace-migration-builder.spec.ts.snap +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/__snapshots__/workspace-migration-builder.spec.ts.snap @@ -28,6 +28,7 @@ exports[`Workspace migration builder field actions test suite It should build an "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isUIReadOnly": false, "isUnique": false, "label": "flat field metadata label", "name": "flatFieldMetadataName", @@ -66,6 +67,7 @@ exports[`Workspace migration builder field actions test suite It should build an "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isUIReadOnly": false, "isUnique": false, "label": "flat field metadata label", "name": "flatFieldMetadataName", @@ -95,6 +97,7 @@ exports[`Workspace migration builder field actions test suite It should build an "isRemote": false, "isSearchable": true, "isSystem": false, + "isUIReadOnly": false, "labelIdentifierFieldMetadataId": Any, "labelPlural": "Rockets", "labelSingular": "Rocket", @@ -115,6 +118,7 @@ exports[`Workspace migration builder field actions test suite It should build an "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isUIReadOnly": false, "isUnique": false, "label": "flat field metadata label", "name": "flatFieldMetadataName", @@ -152,6 +156,7 @@ exports[`Workspace migration builder field actions test suite It should build an "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isUIReadOnly": false, "isUnique": false, "label": "flat field metadata label", "name": "flatFieldMetadataName", @@ -181,6 +186,7 @@ exports[`Workspace migration builder field actions test suite It should build an "isRemote": false, "isSearchable": true, "isSystem": false, + "isUIReadOnly": false, "labelIdentifierFieldMetadataId": Any, "labelPlural": "Rockets", "labelSingular": "Rocket", @@ -201,6 +207,7 @@ exports[`Workspace migration builder field actions test suite It should build an "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isUIReadOnly": false, "isUnique": false, "label": "flat field metadata label", "name": "flatFieldMetadataName", @@ -230,6 +237,7 @@ exports[`Workspace migration builder field actions test suite It should build an "isRemote": false, "isSearchable": true, "isSystem": false, + "isUIReadOnly": false, "labelIdentifierFieldMetadataId": Any, "labelPlural": "Pets", "labelSingular": "Pet", @@ -250,6 +258,7 @@ exports[`Workspace migration builder field actions test suite It should build an "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isUIReadOnly": false, "isUnique": false, "label": "flat field metadata label", "name": "flatFieldMetadataName", @@ -416,6 +425,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": false, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "Id", "name": "id", @@ -447,6 +457,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": false, "isSystem": false, + "isUIReadOnly": false, "isUnique": false, "label": "Name", "name": "name", @@ -478,6 +489,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": false, "isSystem": false, + "isUIReadOnly": false, "isUnique": false, "label": "Creation date", "name": "createdAt", @@ -509,6 +521,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": false, "isSystem": false, + "isUIReadOnly": false, "isUnique": false, "label": "Last update", "name": "updatedAt", @@ -540,6 +553,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isUIReadOnly": false, "isUnique": false, "label": "Deleted at", "name": "deletedAt", @@ -574,6 +588,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": false, "isSystem": false, + "isUIReadOnly": false, "isUnique": false, "label": "Created by", "name": "createdBy", @@ -605,6 +620,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": false, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "Position", "name": "position", @@ -640,6 +656,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "Rocket", "name": "rocket", @@ -667,6 +684,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "TimelineActivities", "name": "timelineActivities", @@ -704,6 +722,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "Rocket", "name": "rocket", @@ -731,6 +750,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "Favorites", "name": "favorites", @@ -768,6 +788,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "Rocket", "name": "rocket", @@ -795,6 +816,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "Attachments", "name": "attachments", @@ -832,6 +854,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "Rocket", "name": "rocket", @@ -859,6 +882,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "NoteTargets", "name": "noteTargets", @@ -896,6 +920,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "Rocket", "name": "rocket", @@ -923,6 +948,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "TaskTargets", "name": "taskTargets", @@ -956,6 +982,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "Search vector", "name": "searchVector", @@ -988,6 +1015,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isRemote": false, "isSearchable": true, "isSystem": false, + "isUIReadOnly": false, "labelIdentifierFieldMetadataId": Any, "labelPlural": "Rockets", "labelSingular": "Rocket", @@ -1028,6 +1056,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "Pet", "name": "pet", @@ -1055,6 +1084,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "NoteTargets", "name": "noteTargets", @@ -1088,6 +1118,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": false, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "Id", "name": "id", @@ -1119,6 +1150,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": false, "isSystem": false, + "isUIReadOnly": false, "isUnique": false, "label": "Name", "name": "name", @@ -1150,6 +1182,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": false, "isSystem": false, + "isUIReadOnly": false, "isUnique": false, "label": "Creation date", "name": "createdAt", @@ -1181,6 +1214,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": false, "isSystem": false, + "isUIReadOnly": false, "isUnique": false, "label": "Last update", "name": "updatedAt", @@ -1212,6 +1246,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isUIReadOnly": false, "isUnique": false, "label": "Deleted at", "name": "deletedAt", @@ -1246,6 +1281,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": false, "isSystem": false, + "isUIReadOnly": false, "isUnique": false, "label": "Created by", "name": "createdBy", @@ -1277,6 +1313,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": false, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "Position", "name": "position", @@ -1312,6 +1349,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "Pet", "name": "pet", @@ -1339,6 +1377,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "TimelineActivities", "name": "timelineActivities", @@ -1376,6 +1415,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "Pet", "name": "pet", @@ -1403,6 +1443,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "Favorites", "name": "favorites", @@ -1440,6 +1481,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "Pet", "name": "pet", @@ -1467,6 +1509,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "Attachments", "name": "attachments", @@ -1504,6 +1547,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "Pet", "name": "pet", @@ -1531,6 +1575,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "TaskTargets", "name": "taskTargets", @@ -1564,6 +1609,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "Search vector", "name": "searchVector", @@ -1595,6 +1641,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isUIReadOnly": false, "isUnique": false, "label": "Species", "name": "species", @@ -1669,6 +1716,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isUIReadOnly": false, "isUnique": false, "label": "Traits", "name": "traits", @@ -1743,6 +1791,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": false, "isSystem": false, + "isUIReadOnly": false, "isUnique": false, "label": "Comments", "name": "comments", @@ -1774,6 +1823,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isUIReadOnly": false, "isUnique": false, "label": "Age", "name": "age", @@ -1814,6 +1864,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isUIReadOnly": false, "isUnique": false, "label": "Location", "name": "location", @@ -1850,6 +1901,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isUIReadOnly": false, "isUnique": false, "label": "Vet phone", "name": "vetPhone", @@ -1884,6 +1936,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isUIReadOnly": false, "isUnique": false, "label": "Vet email", "name": "vetEmail", @@ -1915,6 +1968,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isUIReadOnly": false, "isUnique": false, "label": "Birthday", "name": "birthday", @@ -1946,6 +2000,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isUIReadOnly": false, "isUnique": false, "label": "Is good with kids", "name": "isGoodWithKids", @@ -1981,6 +2036,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isUIReadOnly": false, "isUnique": false, "label": "Pictures", "name": "pictures", @@ -2015,6 +2071,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isUIReadOnly": false, "isUnique": false, "label": "Average cost of kibble per month", "name": "averageCostOfKibblePerMonth", @@ -2049,6 +2106,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isUIReadOnly": false, "isUnique": false, "label": "Makes its owner think of", "name": "makesOwnerThinkOf", @@ -2080,6 +2138,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isUIReadOnly": false, "isUnique": false, "label": "Sound swag (bark style, meow style, etc.)", "name": "soundSwag", @@ -2142,6 +2201,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isUIReadOnly": false, "isUnique": false, "label": "Bio", "name": "bio", @@ -2173,6 +2233,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isUIReadOnly": false, "isUnique": false, "label": "Interesting facts", "name": "interestingFacts", @@ -2204,6 +2265,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isUIReadOnly": false, "isUnique": false, "label": "Extra data", "name": "extraData", @@ -2236,6 +2298,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isRemote": false, "isSearchable": true, "isSystem": false, + "isUIReadOnly": false, "labelIdentifierFieldMetadataId": Any, "labelPlural": "Pets", "labelSingular": "Pet", @@ -2272,6 +2335,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": false, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "Id", "name": "id", @@ -2303,6 +2367,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": false, "isSystem": false, + "isUIReadOnly": false, "isUnique": false, "label": "Name", "name": "name", @@ -2334,6 +2399,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": false, "isSystem": false, + "isUIReadOnly": false, "isUnique": false, "label": "Creation date", "name": "createdAt", @@ -2365,6 +2431,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": false, "isSystem": false, + "isUIReadOnly": false, "isUnique": false, "label": "Last update", "name": "updatedAt", @@ -2396,6 +2463,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isUIReadOnly": false, "isUnique": false, "label": "Deleted at", "name": "deletedAt", @@ -2430,6 +2498,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": false, "isSystem": false, + "isUIReadOnly": false, "isUnique": false, "label": "Created by", "name": "createdBy", @@ -2461,6 +2530,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": false, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "Position", "name": "position", @@ -2496,6 +2566,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "Rocket", "name": "rocket", @@ -2523,6 +2594,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "TimelineActivities", "name": "timelineActivities", @@ -2560,6 +2632,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "Rocket", "name": "rocket", @@ -2587,6 +2660,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "Favorites", "name": "favorites", @@ -2624,6 +2698,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "Rocket", "name": "rocket", @@ -2651,6 +2726,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "Attachments", "name": "attachments", @@ -2688,6 +2764,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "Rocket", "name": "rocket", @@ -2715,6 +2792,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "NoteTargets", "name": "noteTargets", @@ -2752,6 +2830,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "Rocket", "name": "rocket", @@ -2779,6 +2858,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "TaskTargets", "name": "taskTargets", @@ -2812,6 +2892,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isUIReadOnly": false, "isUnique": false, "label": "Search vector", "name": "searchVector", @@ -2844,6 +2925,7 @@ exports[`Workspace migration builder object actions test suite It should build a "isRemote": false, "isSearchable": true, "isSystem": false, + "isUIReadOnly": false, "labelIdentifierFieldMetadataId": Any, "labelPlural": "Rockets", "labelSingular": "Rocket", diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/factories/standard-field.factory.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/factories/standard-field.factory.ts index 8947a7f585d..0194343cf23 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/factories/standard-field.factory.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/factories/standard-field.factory.ts @@ -153,6 +153,7 @@ export class StandardFieldFactory { isCustom: workspaceFieldMetadataArgs.isDeprecated ? true : false, isSystem: workspaceFieldMetadataArgs.isSystem ?? false, isActive: workspaceFieldMetadataArgs.isActive ?? true, + isUIReadOnly: workspaceFieldMetadataArgs.isUIReadOnly ?? false, asExpression: workspaceFieldMetadataArgs.asExpression, generatedType: workspaceFieldMetadataArgs.generatedType, isLabelSyncedWithName: workspaceFieldMetadataArgs.isLabelSyncedWithName, @@ -195,6 +196,7 @@ export class StandardFieldFactory { isSystem: workspaceEntityMetadataArgs?.isSystem || workspaceRelationMetadataArgs.isSystem, + isUIReadOnly: workspaceRelationMetadataArgs.isUIReadOnly, isNullable: true, isUnique: false, isActive: workspaceRelationMetadataArgs.isActive ?? true, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/utils/compute-standard-fields.util.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/utils/compute-standard-fields.util.ts index 601eec76f56..6052b59a3c0 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/utils/compute-standard-fields.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/utils/compute-standard-fields.util.ts @@ -49,6 +49,7 @@ export const computeStandardFields = ( isNullable: true, isLabelSyncedWithName: true, isUnique: null, + isUIReadOnly: false, options: null, relationTargetFieldMetadata: null, relationTargetFieldMetadataId: null, diff --git a/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts b/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts index e33fea47365..294a8549ae3 100644 --- a/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts +++ b/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts @@ -11,6 +11,7 @@ import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-enti import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; import { WorkspaceIsNotAuditLogged } from 'src/engine/twenty-orm/decorators/workspace-is-not-audit-logged.decorator'; import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator'; +import { WorkspaceIsObjectUIReadOnly } from 'src/engine/twenty-orm/decorators/workspace-is-object-ui-readonly.decorator'; import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; import { WorkspaceRelation } from 'src/engine/twenty-orm/decorators/workspace-relation.decorator'; import { CALENDAR_EVENT_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids'; @@ -30,6 +31,7 @@ import { CalendarEventParticipantWorkspaceEntity } from 'src/modules/calendar/co }) @WorkspaceIsSystem() @WorkspaceIsNotAuditLogged() +@WorkspaceIsObjectUIReadOnly() export class CalendarEventWorkspaceEntity extends BaseWorkspaceEntity { @WorkspaceField({ standardId: CALENDAR_EVENT_STANDARD_FIELD_IDS.title, diff --git a/packages/twenty-server/src/modules/company/standard-objects/company.workspace-entity.ts b/packages/twenty-server/src/modules/company/standard-objects/company.workspace-entity.ts index 5cca4dc4046..9a4589b5ec0 100644 --- a/packages/twenty-server/src/modules/company/standard-objects/company.workspace-entity.ts +++ b/packages/twenty-server/src/modules/company/standard-objects/company.workspace-entity.ts @@ -17,6 +17,7 @@ import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-enti import { WorkspaceFieldIndex } from 'src/engine/twenty-orm/decorators/workspace-field-index.decorator'; import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; import { WorkspaceIsDeprecated } from 'src/engine/twenty-orm/decorators/workspace-is-deprecated.decorator'; +import { WorkspaceIsFieldUIReadOnly } from 'src/engine/twenty-orm/decorators/workspace-is-field-ui-readonly.decorator'; import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator'; import { WorkspaceIsSearchable } from 'src/engine/twenty-orm/decorators/workspace-is-searchable.decorator'; import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; @@ -157,6 +158,7 @@ export class CompanyWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconCreativeCommonsSa', description: msg`The creator of the record`, }) + @WorkspaceIsFieldUIReadOnly() createdBy: ActorMetadata; // Relations @@ -197,6 +199,7 @@ export class CompanyWorkspaceEntity extends BaseWorkspaceEntity { inverseSideTarget: () => TaskTargetWorkspaceEntity, onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() taskTargets: Relation; @WorkspaceRelation({ @@ -208,6 +211,7 @@ export class CompanyWorkspaceEntity extends BaseWorkspaceEntity { inverseSideTarget: () => NoteTargetWorkspaceEntity, onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() noteTargets: Relation; @WorkspaceRelation({ diff --git a/packages/twenty-server/src/modules/note/standard-objects/note.workspace-entity.ts b/packages/twenty-server/src/modules/note/standard-objects/note.workspace-entity.ts index f6389d26842..d177fa88b5e 100644 --- a/packages/twenty-server/src/modules/note/standard-objects/note.workspace-entity.ts +++ b/packages/twenty-server/src/modules/note/standard-objects/note.workspace-entity.ts @@ -13,6 +13,7 @@ import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator'; import { WorkspaceFieldIndex } from 'src/engine/twenty-orm/decorators/workspace-field-index.decorator'; import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; +import { WorkspaceIsFieldUIReadOnly } from 'src/engine/twenty-orm/decorators/workspace-is-field-ui-readonly.decorator'; import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator'; import { WorkspaceIsSearchable } from 'src/engine/twenty-orm/decorators/workspace-is-searchable.decorator'; import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; @@ -86,6 +87,7 @@ export class NoteWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconCreativeCommonsSa', description: msg`The creator of the record`, }) + @WorkspaceIsFieldUIReadOnly() createdBy: ActorMetadata; @WorkspaceRelation({ diff --git a/packages/twenty-server/src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts b/packages/twenty-server/src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts index 41e44a8a877..c76b17698f2 100644 --- a/packages/twenty-server/src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts +++ b/packages/twenty-server/src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts @@ -14,6 +14,7 @@ import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-enti import { WorkspaceFieldIndex } from 'src/engine/twenty-orm/decorators/workspace-field-index.decorator'; import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; import { WorkspaceIsDeprecated } from 'src/engine/twenty-orm/decorators/workspace-is-deprecated.decorator'; +import { WorkspaceIsFieldUIReadOnly } from 'src/engine/twenty-orm/decorators/workspace-is-field-ui-readonly.decorator'; import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator'; import { WorkspaceIsSearchable } from 'src/engine/twenty-orm/decorators/workspace-is-searchable.decorator'; import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; @@ -122,6 +123,7 @@ export class OpportunityWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconCreativeCommonsSa', description: msg`The creator of the record`, }) + @WorkspaceIsFieldUIReadOnly() createdBy: ActorMetadata; @WorkspaceRelation({ @@ -178,6 +180,7 @@ export class OpportunityWorkspaceEntity extends BaseWorkspaceEntity { inverseSideTarget: () => TaskTargetWorkspaceEntity, onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() taskTargets: Relation; @WorkspaceRelation({ @@ -189,6 +192,7 @@ export class OpportunityWorkspaceEntity extends BaseWorkspaceEntity { inverseSideTarget: () => NoteTargetWorkspaceEntity, onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() noteTargets: Relation; @WorkspaceRelation({ diff --git a/packages/twenty-server/src/modules/person/standard-objects/person.workspace-entity.ts b/packages/twenty-server/src/modules/person/standard-objects/person.workspace-entity.ts index b1785d81919..874ae607b50 100644 --- a/packages/twenty-server/src/modules/person/standard-objects/person.workspace-entity.ts +++ b/packages/twenty-server/src/modules/person/standard-objects/person.workspace-entity.ts @@ -18,6 +18,7 @@ import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-enti import { WorkspaceFieldIndex } from 'src/engine/twenty-orm/decorators/workspace-field-index.decorator'; import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; import { WorkspaceIsDeprecated } from 'src/engine/twenty-orm/decorators/workspace-is-deprecated.decorator'; +import { WorkspaceIsFieldUIReadOnly } from 'src/engine/twenty-orm/decorators/workspace-is-field-ui-readonly.decorator'; import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator'; import { WorkspaceIsSearchable } from 'src/engine/twenty-orm/decorators/workspace-is-searchable.decorator'; import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; @@ -174,6 +175,7 @@ export class PersonWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconCreativeCommonsSa', description: msg`The creator of the record`, }) + @WorkspaceIsFieldUIReadOnly() createdBy: ActorMetadata; // Relations @@ -214,6 +216,7 @@ export class PersonWorkspaceEntity extends BaseWorkspaceEntity { inverseSideTarget: () => TaskTargetWorkspaceEntity, onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() taskTargets: Relation; @WorkspaceRelation({ @@ -225,6 +228,7 @@ export class PersonWorkspaceEntity extends BaseWorkspaceEntity { inverseSideTarget: () => NoteTargetWorkspaceEntity, onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() noteTargets: Relation; @WorkspaceRelation({ diff --git a/packages/twenty-server/src/modules/task/standard-objects/task.workspace-entity.ts b/packages/twenty-server/src/modules/task/standard-objects/task.workspace-entity.ts index b1f60394123..6ae4f0f84fe 100644 --- a/packages/twenty-server/src/modules/task/standard-objects/task.workspace-entity.ts +++ b/packages/twenty-server/src/modules/task/standard-objects/task.workspace-entity.ts @@ -13,6 +13,7 @@ import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator'; import { WorkspaceFieldIndex } from 'src/engine/twenty-orm/decorators/workspace-field-index.decorator'; import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; +import { WorkspaceIsFieldUIReadOnly } from 'src/engine/twenty-orm/decorators/workspace-is-field-ui-readonly.decorator'; import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator'; import { WorkspaceIsSearchable } from 'src/engine/twenty-orm/decorators/workspace-is-searchable.decorator'; import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; @@ -125,6 +126,7 @@ export class TaskWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconCreativeCommonsSa', description: msg`The creator of the record`, }) + @WorkspaceIsFieldUIReadOnly() createdBy: ActorMetadata; @WorkspaceRelation({ diff --git a/packages/twenty-server/src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts b/packages/twenty-server/src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts index 50433a3e3d6..03d9248479a 100644 --- a/packages/twenty-server/src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts +++ b/packages/twenty-server/src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts @@ -15,6 +15,7 @@ import { WorkspaceFieldIndex } from 'src/engine/twenty-orm/decorators/workspace- import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; import { WorkspaceIsNotAuditLogged } from 'src/engine/twenty-orm/decorators/workspace-is-not-audit-logged.decorator'; import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator'; +import { WorkspaceIsObjectUIReadOnly } from 'src/engine/twenty-orm/decorators/workspace-is-object-ui-readonly.decorator'; import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; import { WorkspaceJoinColumn } from 'src/engine/twenty-orm/decorators/workspace-join-column.decorator'; import { WorkspaceRelation } from 'src/engine/twenty-orm/decorators/workspace-relation.decorator'; @@ -80,6 +81,7 @@ export const SEARCH_FIELDS_FOR_WORKFLOW_RUNS: FieldTypeAndNameMetadata[] = [ icon: STANDARD_OBJECT_ICONS.workflowRun, }) @WorkspaceIsNotAuditLogged() +@WorkspaceIsObjectUIReadOnly() export class WorkflowRunWorkspaceEntity extends BaseWorkspaceEntity { @WorkspaceField({ standardId: WORKFLOW_RUN_STANDARD_FIELD_IDS.name, diff --git a/packages/twenty-server/src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts b/packages/twenty-server/src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts index f72231c388b..62d8698a277 100644 --- a/packages/twenty-server/src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts +++ b/packages/twenty-server/src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts @@ -13,6 +13,7 @@ import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-enti import { WorkspaceFieldIndex } from 'src/engine/twenty-orm/decorators/workspace-field-index.decorator'; import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator'; +import { WorkspaceIsObjectUIReadOnly } from 'src/engine/twenty-orm/decorators/workspace-is-object-ui-readonly.decorator'; import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; import { WorkspaceJoinColumn } from 'src/engine/twenty-orm/decorators/workspace-join-column.decorator'; import { WorkspaceRelation } from 'src/engine/twenty-orm/decorators/workspace-relation.decorator'; @@ -79,6 +80,7 @@ export const SEARCH_FIELDS_FOR_WORKFLOW_VERSIONS: FieldTypeAndNameMetadata[] = [ icon: STANDARD_OBJECT_ICONS.workflowVersion, labelIdentifierStandardId: WORKFLOW_VERSION_STANDARD_FIELD_IDS.name, }) +@WorkspaceIsObjectUIReadOnly() export class WorkflowVersionWorkspaceEntity extends BaseWorkspaceEntity { @WorkspaceField({ standardId: WORKFLOW_VERSION_STANDARD_FIELD_IDS.name, diff --git a/packages/twenty-server/src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts b/packages/twenty-server/src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts index a7ff47095d9..71c77c6c8e3 100644 --- a/packages/twenty-server/src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts +++ b/packages/twenty-server/src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts @@ -13,6 +13,7 @@ import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator'; import { WorkspaceFieldIndex } from 'src/engine/twenty-orm/decorators/workspace-field-index.decorator'; import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; +import { WorkspaceIsFieldUIReadOnly } from 'src/engine/twenty-orm/decorators/workspace-is-field-ui-readonly.decorator'; import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator'; import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; import { WorkspaceRelation } from 'src/engine/twenty-orm/decorators/workspace-relation.decorator'; @@ -90,6 +91,7 @@ export class WorkflowWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconVersions', }) @WorkspaceIsNullable() + @WorkspaceIsFieldUIReadOnly() lastPublishedVersionId: string | null; @WorkspaceField({ @@ -101,6 +103,7 @@ export class WorkflowWorkspaceEntity extends BaseWorkspaceEntity { options: WorkflowStatusOptions, }) @WorkspaceIsNullable() + @WorkspaceIsFieldUIReadOnly() statuses: WorkflowStatus[] | null; @WorkspaceField({ @@ -140,6 +143,7 @@ export class WorkflowWorkspaceEntity extends BaseWorkspaceEntity { inverseSideTarget: () => WorkflowVersionWorkspaceEntity, onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() versions: Relation; @WorkspaceRelation({ @@ -151,6 +155,7 @@ export class WorkflowWorkspaceEntity extends BaseWorkspaceEntity { inverseSideTarget: () => WorkflowRunWorkspaceEntity, onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() runs: Relation; @WorkspaceRelation({ @@ -162,6 +167,7 @@ export class WorkflowWorkspaceEntity extends BaseWorkspaceEntity { onDelete: RelationOnDeleteAction.CASCADE, }) @WorkspaceIsSystem() + @WorkspaceIsFieldUIReadOnly() automatedTriggers: Relation; @WorkspaceRelation({ @@ -194,5 +200,6 @@ export class WorkflowWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconCreativeCommonsSa', description: msg`The creator of the record`, }) + @WorkspaceIsFieldUIReadOnly() createdBy: ActorMetadata; } diff --git a/packages/twenty-server/src/utils/__test__/get-field-metadata-entity.mock.ts b/packages/twenty-server/src/utils/__test__/get-field-metadata-entity.mock.ts index 3622abbe1b5..41dc448ce79 100644 --- a/packages/twenty-server/src/utils/__test__/get-field-metadata-entity.mock.ts +++ b/packages/twenty-server/src/utils/__test__/get-field-metadata-entity.mock.ts @@ -25,6 +25,7 @@ export const getMockFieldMetadataEntity = < isCustom: true, isLabelSyncedWithName: false, isNullable: null, + isUIReadOnly: false, isSystem: false, isUnique: null, object: {} as ObjectMetadataEntity, diff --git a/packages/twenty-server/src/utils/__test__/get-object-metadata-entity.mock.ts b/packages/twenty-server/src/utils/__test__/get-object-metadata-entity.mock.ts index 6bf1b3303e7..7ff981f99fe 100644 --- a/packages/twenty-server/src/utils/__test__/get-object-metadata-entity.mock.ts +++ b/packages/twenty-server/src/utils/__test__/get-object-metadata-entity.mock.ts @@ -35,6 +35,7 @@ export const getMockObjectMetadataEntity = ( isRemote: false, isSearchable: true, isSystem: false, + isUIReadOnly: false, labelPlural: 'Default mock plural label', labelSingular: 'Default mock plural singular', objectPermissions: [], diff --git a/packages/twenty-server/src/utils/typed-reflect.ts b/packages/twenty-server/src/utils/typed-reflect.ts index 3dcb537e1a7..0e9cb9d82b4 100644 --- a/packages/twenty-server/src/utils/typed-reflect.ts +++ b/packages/twenty-server/src/utils/typed-reflect.ts @@ -10,6 +10,8 @@ export interface ReflectMetadataTypeMap { ['workspace:is-nullable-metadata-args']: true; ['workspace:gate-metadata-args']: Gate; ['workspace:is-system-metadata-args']: true; + ['workspace:is-field-ui-readonly-metadata-args']: true; + ['workspace:is-object-ui-readonly-metadata-args']: true; ['workspace:is-audit-logged-metadata-args']: false; ['workspace:is-primary-field-metadata-args']: true; ['workspace:is-deprecated-field-metadata-args']: true; diff --git a/packages/twenty-shared/jest.config.ts b/packages/twenty-shared/jest.config.mjs similarity index 86% rename from packages/twenty-shared/jest.config.ts rename to packages/twenty-shared/jest.config.mjs index 3b0175716c0..52a03ef33b6 100644 --- a/packages/twenty-shared/jest.config.ts +++ b/packages/twenty-shared/jest.config.mjs @@ -1,6 +1,4 @@ -import { JestConfigWithTsJest } from 'ts-jest'; - -const jestConfig: JestConfigWithTsJest = { +const jestConfig = { silent: true, displayName: 'twenty-shared', preset: '../../jest.preset.js', @@ -36,9 +34,9 @@ const jestConfig: JestConfigWithTsJest = { coverageDirectory: './coverage', coverageThreshold: { global: { - statements: 100, - lines: 100, - functions: 100, + statements: 80, + lines: 90, + functions: 75, }, }, }; diff --git a/packages/twenty-shared/tsconfig.spec.json b/packages/twenty-shared/tsconfig.spec.json index 34e5637623a..76fb79b46c6 100644 --- a/packages/twenty-shared/tsconfig.spec.json +++ b/packages/twenty-shared/tsconfig.spec.json @@ -5,7 +5,7 @@ }, "include": [ "**/__mocks__/**/*", - "jest.config.ts", + "jest.config.mjs", "src/**/*.d.ts", "src/**/*.spec.ts", "src/**/*.spec.tsx", diff --git a/packages/twenty-ui/jest.config.ts b/packages/twenty-ui/jest.config.mjs similarity index 66% rename from packages/twenty-ui/jest.config.ts rename to packages/twenty-ui/jest.config.mjs index dc25fe2faf3..12170ef44c3 100644 --- a/packages/twenty-ui/jest.config.ts +++ b/packages/twenty-ui/jest.config.mjs @@ -1,9 +1,15 @@ -import { JestConfigWithTsJest, pathsToModuleNameMapper } from 'ts-jest'; +import { readFileSync } from 'fs'; +import { dirname, resolve } from 'path'; +import { pathsToModuleNameMapper } from 'ts-jest'; +import { fileURLToPath } from 'url'; -// eslint-disable-next-line @typescript-eslint/no-var-requires -const tsConfig = require('./tsconfig.json'); +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); -const jestConfig: JestConfigWithTsJest = { +const tsConfigPath = resolve(__dirname, './tsconfig.json'); +const tsConfig = JSON.parse(readFileSync(tsConfigPath, 'utf8')); + +const jestConfig = { displayName: 'twenty-ui', preset: '../../jest.preset.js', setupFilesAfterEnv: ['./setupTests.ts'], diff --git a/packages/twenty-ui/tsconfig.dev.json b/packages/twenty-ui/tsconfig.dev.json index 988bc502247..21cac2b7f26 100644 --- a/packages/twenty-ui/tsconfig.dev.json +++ b/packages/twenty-ui/tsconfig.dev.json @@ -5,7 +5,7 @@ "types": ["jest", "node"] }, "include": [ - "jest.config.ts", + "jest.config.mjs", "setupTests.ts", "src/*.d.ts", "src/**/*.d.ts", diff --git a/packages/twenty-ui/tsconfig.spec.json b/packages/twenty-ui/tsconfig.spec.json index c4d42e49803..926b2e3fda3 100644 --- a/packages/twenty-ui/tsconfig.spec.json +++ b/packages/twenty-ui/tsconfig.spec.json @@ -9,7 +9,7 @@ } }, "include": [ - "jest.config.ts", + "jest.config.mjs", "setupTests.ts", "src/**/*.d.ts", "src/**/*.spec.ts", diff --git a/packages/twenty-zapier/jest.config.ts b/packages/twenty-zapier/jest.config.mjs similarity index 90% rename from packages/twenty-zapier/jest.config.ts rename to packages/twenty-zapier/jest.config.mjs index 39406fb49f2..7f05b6b8460 100644 --- a/packages/twenty-zapier/jest.config.ts +++ b/packages/twenty-zapier/jest.config.mjs @@ -1,4 +1,4 @@ -module.exports = { +export default { preset: 'ts-jest', testEnvironment: 'node', transform: { diff --git a/packages/twenty-zapier/tsconfig.json b/packages/twenty-zapier/tsconfig.json index 72ac9b8071d..f572dc731fa 100644 --- a/packages/twenty-zapier/tsconfig.json +++ b/packages/twenty-zapier/tsconfig.json @@ -11,6 +11,6 @@ "skipLibCheck": true, }, "exclude": [ - "jest.config.ts" + "jest.config.mjs" ] } diff --git a/tools/eslint-rules/jest.config.ts b/tools/eslint-rules/jest.config.mjs similarity index 93% rename from tools/eslint-rules/jest.config.ts rename to tools/eslint-rules/jest.config.mjs index d7b271c6882..58d5fe708db 100644 --- a/tools/eslint-rules/jest.config.ts +++ b/tools/eslint-rules/jest.config.mjs @@ -1,4 +1,4 @@ -/* eslint-disable */ + export default { displayName: 'eslint-rules', silent: false, diff --git a/tools/eslint-rules/tsconfig.spec.json b/tools/eslint-rules/tsconfig.spec.json index ac7972d7be3..472492077a7 100644 --- a/tools/eslint-rules/tsconfig.spec.json +++ b/tools/eslint-rules/tsconfig.spec.json @@ -3,5 +3,5 @@ "compilerOptions": { "types": ["jest", "node"] }, - "include": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.d.ts"] + "include": ["jest.config.mjs", "**/*.test.ts", "**/*.spec.ts", "**/*.d.ts"] }