From c6ea7ae288eb14e032eeffa1f6c3a92ffecff7ec Mon Sep 17 00:00:00 2001 From: "Abdullah." <125115953+mabdullahabaid@users.noreply.github.com> Date: Tue, 23 Dec 2025 03:22:30 +0500 Subject: [PATCH] Allow custom fields to be editable for system objects and prevent the error for timeline activity on system object pages. (#16268) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Solves #16015 - Added a check in `useTimelineActivities.ts` to see if the system object page we're viewing has timelineActivity being tracked before querying to get the activity history. - Removed @WorkspaceIsObjectUIReadOnly decorator from system objects and added @WorkspaceIsFieldUIReadOnly to standard and system fields to allow custom field edits as requested in the issue. - Did not add calendarEvents or other system objects to timelineActivity just yet since keeping track of timeline activity for every one of them felt counter-intuitive and bloated. In order to determine which objects need timelineActivity, I think we need to fix the broken views of system objects first, such as the one in the attached screenshots - a good number of them are broken. The check I added to `useTimelineActivities.ts` hook displays timeline activity as empty for the time - error would not be shown as suggested by Thomas. image
image - Editing custom fields on calendar events (and other objects without position fields) crashed with TypeError: Cannot convert undefined or null to object in sortCachedObjectEdges. This happened because some cached queries had empty orderBy arrays ([]), and the optimistic effect tried to sort with them. Objects without position fields returned empty orderBy arrays when there were no sorts, while objects with position fields automatically got [{ position: 'AscNullsFirst' }]. The backend always adds { id: 'AscNullsFirst' } as a fallback, but the frontend didn't match this. So, I added { id: 'AscNullsFirst' } to the Frontend as default orderBy when there are no sorts and no position field. --- > [!NOTE] > Apply per-field UI read-only to system/standard fields and skip timeline activity fetching when the target object isn’t related; refine record-table cell open/navigation behavior. > > - Server: Replace object-level UI read-only with per-field `isUIReadOnly` across many standard objects (e.g., `calendarEvent`, `workspaceMember`, messaging, calendar, favorites, attachments, workflows, etc.), and mirror this via `@WorkspaceIsFieldUIReadOnly` on workspace entities. > - Frontend: In `useTimelineActivities.ts`, check object metadata for a relation to `timelineActivity` and `skip` the query when absent, preventing errors on system object pages. > - Frontend: Simplify/adjust record-table cell logic—remove unused args, allow navigation from first column when non-empty, block editing for read-only records (while still allowing navigation), and update button handlers/hover styles accordingly. > > Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit dac1262d70d97ce84b39730454dd3579c494994a. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot). --------- Co-authored-by: Félix Malfait --- .../hooks/useTimelineActivities.ts | 13 ++++++++ .../components/RecordTableCellEditButton.tsx | 2 +- .../RecordTableCellHoveredPortalContent.tsx | 25 +++++++++------ .../hooks/useOpenRecordTableCell.ts | 32 +++---------------- .../hooks/useOpenRecordTableCellFromCell.ts | 26 +-------------- ...hment-standard-flat-field-metadata.util.ts | 10 ++++++ ...klist-standard-flat-field-metadata.util.ts | 2 ++ ...ation-standard-flat-field-metadata.util.ts | 4 +++ ...annel-standard-flat-field-metadata.util.ts | 13 ++++++++ ...ipant-standard-flat-field-metadata.util.ts | 7 ++++ ...event-standard-flat-field-metadata.util.ts | 14 ++++++++ ...count-standard-flat-field-metadata.util.ts | 13 ++++++++ ...older-standard-flat-field-metadata.util.ts | 3 ++ ...orite-standard-flat-field-metadata.util.ts | 13 ++++++++ ...ation-standard-flat-field-metadata.util.ts | 6 ++++ ...annel-standard-flat-field-metadata.util.ts | 19 +++++++++++ ...older-standard-flat-field-metadata.util.ts | 8 +++++ ...ipant-standard-flat-field-metadata.util.ts | 6 ++++ ...ssage-standard-flat-field-metadata.util.ts | 8 +++++ ...hread-standard-flat-field-metadata.util.ts | 2 ++ ...arget-standard-flat-field-metadata.util.ts | 4 +++ ...arget-standard-flat-field-metadata.util.ts | 4 +++ ...ivity-standard-flat-field-metadata.util.ts | 16 ++++++++++ ...igger-standard-flat-field-metadata.util.ts | 3 ++ ...w-run-standard-flat-field-metadata.util.ts | 15 +++++++++ ...rsion-standard-flat-field-metadata.util.ts | 10 ++++++ ...ember-standard-flat-field-metadata.util.ts | 21 ++++++++++++ ...eate-standard-flat-object-metadata.util.ts | 3 -- .../attachment.workspace-entity.ts | 12 +++++++ .../blocklist.workspace-entity.ts | 3 ++ ...nnel-event-association.workspace-entity.ts | 5 +++ .../calendar-channel.workspace-entity.ts | 14 ++++++++ ...ndar-event-participant.workspace-entity.ts | 8 +++++ .../calendar-event.workspace-entity.ts | 17 ++++++++-- .../connected-account.workspace-entity.ts | 14 ++++++++ .../favorite-folder.workspace-entity.ts | 6 +++- .../favorite.workspace-entity.ts | 14 ++++++++ ...el-message-association.workspace-entity.ts | 8 ++++- .../message-channel.workspace-entity.ts | 20 ++++++++++++ .../message-folder.workspace-entity.ts | 9 ++++++ .../message-participant.workspace-entity.ts | 7 ++++ .../message-thread.workspace-entity.ts | 2 ++ .../message.workspace-entity.ts | 8 +++++ .../note-target.workspace-entity.ts | 5 +++ .../task-target.workspace-entity.ts | 5 +++ ...jects-with-timeline-activities.constant.ts | 4 +++ ...meline-activity-from-internal-event.job.ts | 6 ++-- .../timeline-activity.workspace-entity.ts | 17 ++++++++++ ...flow-automated-trigger.workspace-entity.ts | 4 +++ .../workflow-run.workspace-entity.ts | 16 ++++++++-- .../workflow-version.workspace-entity.ts | 13 ++++++-- .../workspace-member.workspace-entity.ts | 23 +++++++++++++ 52 files changed, 465 insertions(+), 77 deletions(-) create mode 100644 packages/twenty-server/src/modules/timeline/constants/system-objects-with-timeline-activities.constant.ts diff --git a/packages/twenty-front/src/modules/activities/timeline-activities/hooks/useTimelineActivities.ts b/packages/twenty-front/src/modules/activities/timeline-activities/hooks/useTimelineActivities.ts index 581fcd81ee7..6de5f3bb5bd 100644 --- a/packages/twenty-front/src/modules/activities/timeline-activities/hooks/useTimelineActivities.ts +++ b/packages/twenty-front/src/modules/activities/timeline-activities/hooks/useTimelineActivities.ts @@ -2,6 +2,7 @@ import { useLinkedObjectsTitle } from '@/activities/timeline-activities/hooks/us import { type TimelineActivity } from '@/activities/timeline-activities/types/TimelineActivity'; import { type ActivityTargetableObject } from '@/activities/types/ActivityTargetableEntity'; import { getActivityTargetObjectFieldIdName } from '@/activities/utils/getActivityTargetObjectFieldIdName'; +import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { useGenerateDepthRecordGqlFieldsFromObject } from '@/object-record/graphql/record-gql-fields/hooks/useGenerateDepthRecordGqlFieldsFromObject'; import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords'; @@ -23,6 +24,17 @@ export const useTimelineActivities = ( nameSingular: targetableObject.targetObjectNameSingular, }); + const { objectMetadataItem: timelineActivityMetadata } = + useObjectMetadataItem({ + objectNameSingular: CoreObjectNameSingular.TimelineActivity, + }); + + const hasTimelineActivityField = timelineActivityMetadata.fields.some( + (field) => + field.relation?.targetObjectMetadata?.nameSingular === + targetableObject.targetObjectNameSingular, + ); + const { recordGqlFields: depthOneRecordGqlFields } = useGenerateDepthRecordGqlFieldsFromObject({ objectNameSingular: CoreObjectNameSingular.TimelineActivity, @@ -34,6 +46,7 @@ export const useTimelineActivities = ( loading: loadingTimelineActivities, fetchMoreRecords, } = useFindManyRecords({ + skip: !hasTimelineActivityField, objectNameSingular: CoreObjectNameSingular.TimelineActivity, filter: { [targetableObjectFieldIdName]: { diff --git a/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/components/RecordTableCellEditButton.tsx b/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/components/RecordTableCellEditButton.tsx index fc362d1c7b5..b31442109db 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/components/RecordTableCellEditButton.tsx +++ b/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/components/RecordTableCellEditButton.tsx @@ -26,7 +26,7 @@ export const RecordTableCellEditButton = () => { const handleMainButtonClick = () => { if (!isFieldInputOnly && isFirstColumn) { - openTableCell(undefined, false, true); + openTableCell(undefined, true); } else { openTableCell(); } diff --git a/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/components/RecordTableCellHoveredPortalContent.tsx b/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/components/RecordTableCellHoveredPortalContent.tsx index 6d9e9e0a216..7131df76709 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/components/RecordTableCellHoveredPortalContent.tsx +++ b/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/components/RecordTableCellHoveredPortalContent.tsx @@ -18,27 +18,28 @@ import { BORDER_COMMON } from 'twenty-ui/theme'; import { useIsMobile } from 'twenty-ui/utilities'; const StyledRecordTableCellHoveredPortalContent = styled.div<{ - isReadOnly: boolean; + showInteractiveStyle: boolean; isRowActive: boolean; }>` align-items: center; background: ${({ theme }) => theme.background.transparent.secondary}; background-color: ${({ theme, isRowActive }) => isRowActive ? theme.accent.quaternary : theme.background.primary}; - border-radius: ${({ isReadOnly }) => - !isReadOnly ? BORDER_COMMON.radius.sm : 'none'}; + border-radius: ${({ showInteractiveStyle }) => + showInteractiveStyle ? BORDER_COMMON.radius.sm : 'none'}; box-sizing: border-box; - cursor: ${({ isReadOnly }) => (isReadOnly ? 'default' : 'pointer')}; + cursor: ${({ showInteractiveStyle }) => + showInteractiveStyle ? 'pointer' : 'default'}; display: flex; height: ${RECORD_TABLE_ROW_HEIGHT}px; - outline: ${({ theme, isReadOnly, isRowActive }) => + outline: ${({ theme, showInteractiveStyle, isRowActive }) => isRowActive ? 'none' - : isReadOnly - ? `1px solid ${theme.border.color.medium}` - : `1px solid ${theme.font.color.extraLight}`}; + : showInteractiveStyle + ? `1px solid ${theme.font.color.extraLight}` + : `1px solid ${theme.border.color.medium}`}; user-select: none; `; @@ -57,7 +58,11 @@ export const RecordTableCellHoveredPortalContent = () => { const isFieldInputOnly = useIsFieldInputOnly(); const showButton = - !isFieldInputOnly && !isReadOnly && !(isMobile && isFirstColumn); + !isFieldInputOnly && + (!isReadOnly || isFirstColumn) && + !(isMobile && isFirstColumn); + + const showInteractiveStyle = !isReadOnly || (isFirstColumn && showButton); const { rowIndex } = useRecordTableRowContextOrThrow(); @@ -68,7 +73,7 @@ export const RecordTableCellHoveredPortalContent = () => { return ( {isFieldInputOnly ? ( diff --git a/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/useOpenRecordTableCell.ts b/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/useOpenRecordTableCell.ts index d900f9e07b0..5eabe4fd996 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/useOpenRecordTableCell.ts +++ b/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/useOpenRecordTableCell.ts @@ -1,10 +1,9 @@ -import { useRecoilCallback, useSetRecoilState } from 'recoil'; +import { useRecoilCallback } from 'recoil'; import { useInitDraftValue } from '@/object-record/record-field/ui/hooks/useInitDraftValue'; import { type FieldDefinition } from '@/object-record/record-field/ui/types/FieldDefinition'; import { type FieldMetadata } from '@/object-record/record-field/ui/types/FieldMetadata'; import { isFieldValueEmpty } from '@/object-record/record-field/ui/utils/isFieldValueEmpty'; -import { viewableRecordIdState } from '@/object-record/record-right-drawer/states/viewableRecordIdState'; import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { FOCUS_CLICK_OUTSIDE_LISTENER_ID } from '@/object-record/record-table/constants/FocusClickOutsideListenerId'; import { RECORD_TABLE_CELL_INPUT_ID_PREFIX } from '@/object-record/record-table/constants/RecordTableCellInputIdPrefix'; @@ -16,7 +15,6 @@ import { getSnapshotValue } from '@/ui/utilities/state/utils/getSnapshotValue'; import { useOpenFieldInputEditMode } from '@/object-record/record-field/ui/hooks/useOpenFieldInputEditMode'; import { recordIndexOpenRecordInState } from '@/object-record/record-index/states/recordIndexOpenRecordInState'; -import { viewableRecordNameSingularState } from '@/object-record/record-right-drawer/states/viewableRecordNameSingularState'; import { RECORD_TABLE_CLICK_OUTSIDE_LISTENER_ID } from '@/object-record/record-table/constants/RecordTableClickOutsideListenerId'; import { recordTableCellEditModePositionComponentState } from '@/object-record/record-table/states/recordTableCellEditModePositionComponentState'; import { getDropdownFocusIdForRecordField } from '@/object-record/utils/getDropdownFocusIdForRecordField'; @@ -37,11 +35,8 @@ export type OpenTableCellArgs = { initialValue?: string; cellPosition: TableCellPosition; isReadOnly: boolean; - pathToShowPage: string; - objectNameSingular: string; fieldDefinition: FieldDefinition; recordId: string; - isActionButtonClick: boolean; isNavigating: boolean; }; @@ -64,11 +59,6 @@ export const useOpenRecordTableCell = (recordTableId: string) => { const initDraftValue = useInitDraftValue(); - const setViewableRecordId = useSetRecoilState(viewableRecordIdState); - const setViewableRecordNameSingular = useSetRecoilState( - viewableRecordNameSingularState, - ); - const { setActiveDropdownFocusIdAndMemorizePrevious } = useSetActiveDropdownFocusIdAndMemorizePrevious(); @@ -94,16 +84,10 @@ export const useOpenRecordTableCell = (recordTableId: string) => { initialValue, cellPosition, isReadOnly, - objectNameSingular, fieldDefinition, recordId, - isActionButtonClick, isNavigating, }: OpenTableCellArgs) => { - if (isReadOnly) { - return; - } - set(clickOutsideListenerIsActivatedState, false); const isFirstColumnCell = cellPosition.column === 0; @@ -121,10 +105,7 @@ export const useOpenRecordTableCell = (recordTableId: string) => { fieldValue, }); - if ( - (isFirstColumnCell && !isEmpty && !isActionButtonClick) || - isNavigating - ) { + if ((isFirstColumnCell && !isEmpty) || isNavigating) { leaveTableFocus(); const openRecordIn = snapshot @@ -141,11 +122,8 @@ export const useOpenRecordTableCell = (recordTableId: string) => { return; } - if (isFirstColumnCell && !isEmpty && isActionButtonClick) { - leaveTableFocus(); - setViewableRecordId(recordId); - setViewableRecordNameSingular(objectNameSingular); - + // Block editing for read-only records, but allow navigation (handled above) + if (isReadOnly) { return; } @@ -200,8 +178,6 @@ export const useOpenRecordTableCell = (recordTableId: string) => { leaveTableFocus, activateRecordTableRow, unfocusRecordTableRow, - setViewableRecordId, - setViewableRecordNameSingular, openRecordFromIndexView, ], ); diff --git a/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/useOpenRecordTableCellFromCell.ts b/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/useOpenRecordTableCellFromCell.ts index 3ae4582736d..6ff50028a2f 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/useOpenRecordTableCellFromCell.ts +++ b/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/useOpenRecordTableCellFromCell.ts @@ -1,23 +1,9 @@ import { useContext } from 'react'; import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext'; -import { type FieldDefinition } from '@/object-record/record-field/ui/types/FieldDefinition'; -import { type FieldMetadata } from '@/object-record/record-field/ui/types/FieldMetadata'; -import { useRecordTableRowContextOrThrow } from '@/object-record/record-table/contexts/RecordTableRowContext'; -import { type TableCellPosition } from '@/object-record/record-table/types/TableCellPosition'; - import { useRecordTableBodyContextOrThrow } from '@/object-record/record-table/contexts/RecordTableBodyContext'; import { RecordTableCellContext } from '@/object-record/record-table/contexts/RecordTableCellContext'; -export type OpenTableCellArgs = { - initialValue?: string; - cellPosition: TableCellPosition; - isReadOnly: boolean; - pathToShowPage: string; - fieldDefinition: FieldDefinition; - recordId: string; -}; - export const useOpenRecordTableCellFromCell = () => { const { recordId, @@ -25,27 +11,17 @@ export const useOpenRecordTableCellFromCell = () => { isRecordFieldReadOnly: isReadOnly, } = useContext(FieldContext); - const { pathToShowPage, objectNameSingular } = - useRecordTableRowContextOrThrow(); - const { onOpenTableCell } = useRecordTableBodyContextOrThrow(); const { cellPosition } = useContext(RecordTableCellContext); - const openTableCell = ( - initialValue?: string, - isActionButtonClick = false, - isNavigating = false, - ) => { + const openTableCell = (initialValue?: string, isNavigating = false) => { onOpenTableCell({ cellPosition, recordId, fieldDefinition, isReadOnly, - pathToShowPage, - objectNameSingular, initialValue, - isActionButtonClick, isNavigating, }); }; diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-attachment-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-attachment-standard-flat-field-metadata.util.ts index f497a6d450a..8ae5c968e3d 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-attachment-standard-flat-field-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-attachment-standard-flat-field-metadata.util.ts @@ -118,6 +118,7 @@ export const buildAttachmentStandardFlatFieldMetadatas = ({ description: 'Attachment name', icon: 'IconFileUpload', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -134,6 +135,7 @@ export const buildAttachmentStandardFlatFieldMetadatas = ({ description: 'Attachment full path', icon: 'IconLink', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -150,6 +152,7 @@ export const buildAttachmentStandardFlatFieldMetadatas = ({ description: 'Attachment file category', icon: 'IconList', isNullable: false, + isUIReadOnly: true, defaultValue: "'OTHER'", options: [ { value: 'ARCHIVE', label: 'Archive', position: 0, color: 'gray' }, @@ -217,6 +220,7 @@ export const buildAttachmentStandardFlatFieldMetadatas = ({ description: 'Attachment task', icon: 'IconNotes', isNullable: true, + isUIReadOnly: true, targetObjectName: 'task', targetFieldName: 'attachments', settings: { @@ -241,6 +245,7 @@ export const buildAttachmentStandardFlatFieldMetadatas = ({ description: 'Attachment note', icon: 'IconNotes', isNullable: true, + isUIReadOnly: true, targetObjectName: 'note', targetFieldName: 'attachments', settings: { @@ -265,6 +270,7 @@ export const buildAttachmentStandardFlatFieldMetadatas = ({ description: 'Attachment person', icon: 'IconUser', isNullable: true, + isUIReadOnly: true, targetObjectName: 'person', targetFieldName: 'attachments', settings: { @@ -289,6 +295,7 @@ export const buildAttachmentStandardFlatFieldMetadatas = ({ description: 'Attachment company', icon: 'IconBuildingSkyscraper', isNullable: true, + isUIReadOnly: true, targetObjectName: 'company', targetFieldName: 'attachments', settings: { @@ -313,6 +320,7 @@ export const buildAttachmentStandardFlatFieldMetadatas = ({ description: 'Attachment opportunity', icon: 'IconBuildingSkyscraper', isNullable: true, + isUIReadOnly: true, targetObjectName: 'opportunity', targetFieldName: 'attachments', settings: { @@ -337,6 +345,7 @@ export const buildAttachmentStandardFlatFieldMetadatas = ({ description: 'Attachment dashboard', icon: 'IconLayout', isNullable: true, + isUIReadOnly: true, targetObjectName: 'dashboard', targetFieldName: 'attachments', settings: { @@ -361,6 +370,7 @@ export const buildAttachmentStandardFlatFieldMetadatas = ({ description: 'Attachment workflow', icon: 'IconSettingsAutomation', isNullable: true, + isUIReadOnly: true, targetObjectName: 'workflow', targetFieldName: 'attachments', settings: { diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-blocklist-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-blocklist-standard-flat-field-metadata.util.ts index 046201c73d6..6adefa69252 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-blocklist-standard-flat-field-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-blocklist-standard-flat-field-metadata.util.ts @@ -118,6 +118,7 @@ export const buildBlocklistStandardFlatFieldMetadatas = ({ description: 'Handle', icon: 'IconAt', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -137,6 +138,7 @@ export const buildBlocklistStandardFlatFieldMetadatas = ({ description: 'WorkspaceMember', icon: 'IconCircleUser', isNullable: false, + isUIReadOnly: true, targetObjectName: 'workspaceMember', targetFieldName: 'blocklist', settings: { diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-calendar-channel-event-association-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-calendar-channel-event-association-standard-flat-field-metadata.util.ts index 8773532b7ed..fc34652a94f 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-calendar-channel-event-association-standard-flat-field-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-calendar-channel-event-association-standard-flat-field-metadata.util.ts @@ -112,6 +112,7 @@ export const buildCalendarChannelEventAssociationStandardFlatFieldMetadatas = ({ description: 'Event external ID', icon: 'IconCalendar', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -128,6 +129,7 @@ export const buildCalendarChannelEventAssociationStandardFlatFieldMetadatas = ({ description: 'Recurring Event ID', icon: 'IconHistory', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -145,6 +147,7 @@ export const buildCalendarChannelEventAssociationStandardFlatFieldMetadatas = ({ description: 'Channel ID', icon: 'IconCalendar', isNullable: false, + isUIReadOnly: true, targetObjectName: 'calendarChannel', targetFieldName: 'calendarChannelEventAssociations', settings: { @@ -169,6 +172,7 @@ export const buildCalendarChannelEventAssociationStandardFlatFieldMetadatas = ({ description: 'Event ID', icon: 'IconCalendar', isNullable: false, + isUIReadOnly: true, targetObjectName: 'calendarEvent', targetFieldName: 'calendarChannelEventAssociations', settings: { diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-calendar-channel-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-calendar-channel-standard-flat-field-metadata.util.ts index d2c2d80becc..8bb969f06a3 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-calendar-channel-standard-flat-field-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-calendar-channel-standard-flat-field-metadata.util.ts @@ -112,6 +112,7 @@ export const buildCalendarChannelStandardFlatFieldMetadatas = ({ description: 'Handle', icon: 'IconAt', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -128,6 +129,7 @@ export const buildCalendarChannelStandardFlatFieldMetadatas = ({ description: 'Visibility', icon: 'IconEyeglass', isNullable: false, + isUIReadOnly: true, defaultValue: "'SHARE_EVERYTHING'", options: [ { value: 'METADATA', label: 'Metadata', position: 0, color: 'green' }, @@ -154,6 +156,7 @@ export const buildCalendarChannelStandardFlatFieldMetadatas = ({ description: 'Is Contact Auto Creation Enabled', icon: 'IconUserCircle', isNullable: false, + isUIReadOnly: true, defaultValue: true, }, standardObjectMetadataRelatedEntityIds, @@ -172,6 +175,7 @@ export const buildCalendarChannelStandardFlatFieldMetadatas = ({ 'Automatically create records for people you participated with in an event.', icon: 'IconUserCircle', isNullable: false, + isUIReadOnly: true, defaultValue: "'AS_PARTICIPANT_AND_ORGANIZER'", options: [ { @@ -210,6 +214,7 @@ export const buildCalendarChannelStandardFlatFieldMetadatas = ({ description: 'Is Sync Enabled', icon: 'IconRefresh', isNullable: false, + isUIReadOnly: true, defaultValue: true, }, standardObjectMetadataRelatedEntityIds, @@ -228,6 +233,7 @@ export const buildCalendarChannelStandardFlatFieldMetadatas = ({ 'Sync Cursor. Used for syncing events from the calendar provider', icon: 'IconReload', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -244,6 +250,7 @@ export const buildCalendarChannelStandardFlatFieldMetadatas = ({ description: 'Sync status', icon: 'IconStatusChange', isNullable: true, + isUIReadOnly: true, options: [ { value: 'ONGOING', label: 'Ongoing', position: 1, color: 'yellow' }, { @@ -282,6 +289,7 @@ export const buildCalendarChannelStandardFlatFieldMetadatas = ({ description: 'Sync stage', icon: 'IconStatusChange', isNullable: false, + isUIReadOnly: true, defaultValue: "'PENDING_CONFIGURATION'", options: [ { @@ -344,6 +352,7 @@ export const buildCalendarChannelStandardFlatFieldMetadatas = ({ description: 'Sync stage started at', icon: 'IconHistory', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -360,6 +369,7 @@ export const buildCalendarChannelStandardFlatFieldMetadatas = ({ description: 'Last sync date', icon: 'IconHistory', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -376,6 +386,7 @@ export const buildCalendarChannelStandardFlatFieldMetadatas = ({ description: 'Throttle Failure Count', icon: 'IconX', isNullable: false, + isUIReadOnly: true, defaultValue: 0, }, standardObjectMetadataRelatedEntityIds, @@ -394,6 +405,7 @@ export const buildCalendarChannelStandardFlatFieldMetadatas = ({ description: 'Connected Account', icon: 'IconUserCircle', isNullable: false, + isUIReadOnly: true, targetObjectName: 'connectedAccount', targetFieldName: 'calendarChannels', settings: { @@ -418,6 +430,7 @@ export const buildCalendarChannelStandardFlatFieldMetadatas = ({ description: 'Calendar Channel Event Associations', icon: 'IconCalendar', isNullable: false, + isUIReadOnly: true, targetObjectName: 'calendarChannelEventAssociation', targetFieldName: 'calendarChannel', settings: { diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-calendar-event-participant-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-calendar-event-participant-standard-flat-field-metadata.util.ts index 9b305d079f7..eb02310426f 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-calendar-event-participant-standard-flat-field-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-calendar-event-participant-standard-flat-field-metadata.util.ts @@ -112,6 +112,7 @@ export const buildCalendarEventParticipantStandardFlatFieldMetadatas = ({ description: 'Handle', icon: 'IconMail', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -128,6 +129,7 @@ export const buildCalendarEventParticipantStandardFlatFieldMetadatas = ({ description: 'Display Name', icon: 'IconUser', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -144,6 +146,7 @@ export const buildCalendarEventParticipantStandardFlatFieldMetadatas = ({ description: 'Is Organizer', icon: 'IconUser', isNullable: false, + isUIReadOnly: true, defaultValue: false, }, standardObjectMetadataRelatedEntityIds, @@ -161,6 +164,7 @@ export const buildCalendarEventParticipantStandardFlatFieldMetadatas = ({ description: 'Response Status', icon: 'IconUser', isNullable: false, + isUIReadOnly: true, defaultValue: "'NEEDS_ACTION'", options: [ { @@ -195,6 +199,7 @@ export const buildCalendarEventParticipantStandardFlatFieldMetadatas = ({ description: 'Event ID', icon: 'IconCalendar', isNullable: false, + isUIReadOnly: true, targetObjectName: 'calendarEvent', targetFieldName: 'calendarEventParticipants', settings: { @@ -219,6 +224,7 @@ export const buildCalendarEventParticipantStandardFlatFieldMetadatas = ({ description: 'Person', icon: 'IconUser', isNullable: true, + isUIReadOnly: true, targetObjectName: 'person', targetFieldName: 'calendarEventParticipants', settings: { @@ -243,6 +249,7 @@ export const buildCalendarEventParticipantStandardFlatFieldMetadatas = ({ description: 'Workspace Member', icon: 'IconUser', isNullable: true, + isUIReadOnly: true, targetObjectName: 'workspaceMember', targetFieldName: 'calendarEventParticipants', settings: { diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-calendar-event-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-calendar-event-standard-flat-field-metadata.util.ts index df488b7b500..d98e56c13f8 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-calendar-event-standard-flat-field-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-calendar-event-standard-flat-field-metadata.util.ts @@ -108,6 +108,7 @@ export const buildCalendarEventStandardFlatFieldMetadatas = ({ description: 'Title', icon: 'IconH1', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -124,6 +125,7 @@ export const buildCalendarEventStandardFlatFieldMetadatas = ({ description: 'Is canceled', icon: 'IconCalendarCancel', isNullable: false, + isUIReadOnly: true, defaultValue: false, }, standardObjectMetadataRelatedEntityIds, @@ -141,6 +143,7 @@ export const buildCalendarEventStandardFlatFieldMetadatas = ({ description: 'Is Full Day', icon: 'IconHours24', isNullable: false, + isUIReadOnly: true, defaultValue: false, }, standardObjectMetadataRelatedEntityIds, @@ -158,6 +161,7 @@ export const buildCalendarEventStandardFlatFieldMetadatas = ({ description: 'Start Date', icon: 'IconCalendarClock', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -174,6 +178,7 @@ export const buildCalendarEventStandardFlatFieldMetadatas = ({ description: 'End Date', icon: 'IconCalendarClock', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -190,6 +195,7 @@ export const buildCalendarEventStandardFlatFieldMetadatas = ({ description: 'Creation DateTime', icon: 'IconCalendarPlus', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -206,6 +212,7 @@ export const buildCalendarEventStandardFlatFieldMetadatas = ({ description: 'Update DateTime', icon: 'IconCalendarCog', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -222,6 +229,7 @@ export const buildCalendarEventStandardFlatFieldMetadatas = ({ description: 'Description', icon: 'IconFileDescription', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -238,6 +246,7 @@ export const buildCalendarEventStandardFlatFieldMetadatas = ({ description: 'Location', icon: 'IconMapPin', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -254,6 +263,7 @@ export const buildCalendarEventStandardFlatFieldMetadatas = ({ description: 'iCal UID', icon: 'IconKey', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -270,6 +280,7 @@ export const buildCalendarEventStandardFlatFieldMetadatas = ({ description: 'Conference Solution', icon: 'IconScreenShare', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -286,6 +297,7 @@ export const buildCalendarEventStandardFlatFieldMetadatas = ({ description: 'Meet Link', icon: 'IconLink', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -303,6 +315,7 @@ export const buildCalendarEventStandardFlatFieldMetadatas = ({ description: 'Calendar Channel Event Associations', icon: 'IconCalendar', isNullable: false, + isUIReadOnly: true, targetObjectName: 'calendarChannelEventAssociation', targetFieldName: 'calendarEvent', settings: { @@ -325,6 +338,7 @@ export const buildCalendarEventStandardFlatFieldMetadatas = ({ description: 'Event Participants', icon: 'IconUserCircle', isNullable: false, + isUIReadOnly: true, targetObjectName: 'calendarEventParticipant', targetFieldName: 'calendarEvent', settings: { diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-connected-account-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-connected-account-standard-flat-field-metadata.util.ts index 3f09e6ec768..d7154e81244 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-connected-account-standard-flat-field-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-connected-account-standard-flat-field-metadata.util.ts @@ -112,6 +112,7 @@ export const buildConnectedAccountStandardFlatFieldMetadatas = ({ description: 'The account handle (email, username, phone number, etc.)', icon: 'IconMail', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -128,6 +129,7 @@ export const buildConnectedAccountStandardFlatFieldMetadatas = ({ description: 'The account provider', icon: 'IconSettings', isNullable: false, + isUIReadOnly: true, defaultValue: "'google'", }, standardObjectMetadataRelatedEntityIds, @@ -145,6 +147,7 @@ export const buildConnectedAccountStandardFlatFieldMetadatas = ({ description: 'Messaging provider access token', icon: 'IconKey', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -161,6 +164,7 @@ export const buildConnectedAccountStandardFlatFieldMetadatas = ({ description: 'Messaging provider refresh token', icon: 'IconKey', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -177,6 +181,7 @@ export const buildConnectedAccountStandardFlatFieldMetadatas = ({ description: 'Last sync history ID', icon: 'IconHistory', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -193,6 +198,7 @@ export const buildConnectedAccountStandardFlatFieldMetadatas = ({ description: 'Auth failed at', icon: 'IconX', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -209,6 +215,7 @@ export const buildConnectedAccountStandardFlatFieldMetadatas = ({ description: 'Last credentials refreshed at', icon: 'IconHistory', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -225,6 +232,7 @@ export const buildConnectedAccountStandardFlatFieldMetadatas = ({ description: 'Handle Aliases', icon: 'IconMail', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -241,6 +249,7 @@ export const buildConnectedAccountStandardFlatFieldMetadatas = ({ description: 'Scopes', icon: 'IconSettings', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -257,6 +266,7 @@ export const buildConnectedAccountStandardFlatFieldMetadatas = ({ description: 'JSON object containing custom connection parameters', icon: 'IconSettings', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -274,6 +284,7 @@ export const buildConnectedAccountStandardFlatFieldMetadatas = ({ description: 'Account Owner', icon: 'IconUserCircle', isNullable: false, + isUIReadOnly: true, targetObjectName: 'workspaceMember', targetFieldName: 'connectedAccounts', settings: { @@ -298,6 +309,7 @@ export const buildConnectedAccountStandardFlatFieldMetadatas = ({ description: 'Message Channels', icon: 'IconMessage', isNullable: false, + isUIReadOnly: true, targetObjectName: 'messageChannel', targetFieldName: 'connectedAccount', settings: { @@ -320,6 +332,7 @@ export const buildConnectedAccountStandardFlatFieldMetadatas = ({ description: 'Calendar Channels', icon: 'IconCalendar', isNullable: false, + isUIReadOnly: true, targetObjectName: 'calendarChannel', targetFieldName: 'connectedAccount', settings: { diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-favorite-folder-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-favorite-folder-standard-flat-field-metadata.util.ts index 8ec1990ca16..40aa84514fc 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-favorite-folder-standard-flat-field-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-favorite-folder-standard-flat-field-metadata.util.ts @@ -115,6 +115,7 @@ export const buildFavoriteFolderStandardFlatFieldMetadatas = ({ icon: 'IconList', isSystem: true, isNullable: false, + isUIReadOnly: true, defaultValue: 0, }, standardObjectMetadataRelatedEntityIds, @@ -132,6 +133,7 @@ export const buildFavoriteFolderStandardFlatFieldMetadatas = ({ description: 'Name of the favorite folder', icon: 'IconText', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -151,6 +153,7 @@ export const buildFavoriteFolderStandardFlatFieldMetadatas = ({ description: 'Favorites in this folder', icon: 'IconHeart', isNullable: false, + isUIReadOnly: true, targetObjectName: 'favorite', targetFieldName: 'favoriteFolder', settings: { diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-favorite-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-favorite-standard-flat-field-metadata.util.ts index 47b610130ca..1df919182bb 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-favorite-standard-flat-field-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-favorite-standard-flat-field-metadata.util.ts @@ -113,6 +113,7 @@ export const buildFavoriteStandardFlatFieldMetadatas = ({ icon: 'IconList', isSystem: true, isNullable: false, + isUIReadOnly: true, defaultValue: 0, }, standardObjectMetadataRelatedEntityIds, @@ -130,6 +131,7 @@ export const buildFavoriteStandardFlatFieldMetadatas = ({ description: 'ViewId', icon: 'IconView', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -149,6 +151,7 @@ export const buildFavoriteStandardFlatFieldMetadatas = ({ description: 'Favorite workspace member', icon: 'IconCircleUser', isNullable: true, + isUIReadOnly: true, targetObjectName: 'workspaceMember', targetFieldName: 'favorites', settings: { @@ -173,6 +176,7 @@ export const buildFavoriteStandardFlatFieldMetadatas = ({ description: 'Favorite person', icon: 'IconUser', isNullable: true, + isUIReadOnly: true, targetObjectName: 'person', targetFieldName: 'favorites', settings: { @@ -197,6 +201,7 @@ export const buildFavoriteStandardFlatFieldMetadatas = ({ description: 'Favorite company', icon: 'IconBuildingSkyscraper', isNullable: true, + isUIReadOnly: true, targetObjectName: 'company', targetFieldName: 'favorites', settings: { @@ -221,6 +226,7 @@ export const buildFavoriteStandardFlatFieldMetadatas = ({ description: 'Favorite opportunity', icon: 'IconTargetArrow', isNullable: true, + isUIReadOnly: true, targetObjectName: 'opportunity', targetFieldName: 'favorites', settings: { @@ -245,6 +251,7 @@ export const buildFavoriteStandardFlatFieldMetadatas = ({ description: 'Favorite workflow', icon: 'IconSettingsAutomation', isNullable: true, + isUIReadOnly: true, targetObjectName: 'workflow', targetFieldName: 'favorites', settings: { @@ -269,6 +276,7 @@ export const buildFavoriteStandardFlatFieldMetadatas = ({ description: 'Favorite workflow version', icon: 'IconSettingsAutomation', isNullable: true, + isUIReadOnly: true, targetObjectName: 'workflowVersion', targetFieldName: 'favorites', settings: { @@ -293,6 +301,7 @@ export const buildFavoriteStandardFlatFieldMetadatas = ({ description: 'Favorite workflow run', icon: 'IconSettingsAutomation', isNullable: true, + isUIReadOnly: true, targetObjectName: 'workflowRun', targetFieldName: 'favorites', settings: { @@ -317,6 +326,7 @@ export const buildFavoriteStandardFlatFieldMetadatas = ({ description: 'Favorite task', icon: 'IconCheckbox', isNullable: true, + isUIReadOnly: true, targetObjectName: 'task', targetFieldName: 'favorites', settings: { @@ -341,6 +351,7 @@ export const buildFavoriteStandardFlatFieldMetadatas = ({ description: 'Favorite note', icon: 'IconNotes', isNullable: true, + isUIReadOnly: true, targetObjectName: 'note', targetFieldName: 'favorites', settings: { @@ -365,6 +376,7 @@ export const buildFavoriteStandardFlatFieldMetadatas = ({ description: 'Favorite dashboard', icon: 'IconLayoutDashboard', isNullable: true, + isUIReadOnly: true, targetObjectName: 'dashboard', targetFieldName: 'favorites', settings: { @@ -389,6 +401,7 @@ export const buildFavoriteStandardFlatFieldMetadatas = ({ description: 'The folder this favorite belongs to', icon: 'IconFolder', isNullable: true, + isUIReadOnly: true, targetObjectName: 'favoriteFolder', targetFieldName: 'favorites', settings: { diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-channel-message-association-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-channel-message-association-standard-flat-field-metadata.util.ts index 1750b19eced..9caabef4c05 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-channel-message-association-standard-flat-field-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-channel-message-association-standard-flat-field-metadata.util.ts @@ -117,6 +117,7 @@ export const buildMessageChannelMessageAssociationStandardFlatFieldMetadatas = description: 'Message id from the messaging provider', icon: 'IconHash', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -133,6 +134,7 @@ export const buildMessageChannelMessageAssociationStandardFlatFieldMetadatas = description: 'Thread id from the messaging provider', icon: 'IconHash', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -149,6 +151,7 @@ export const buildMessageChannelMessageAssociationStandardFlatFieldMetadatas = description: 'Message Direction', icon: 'IconDirection', isNullable: false, + isUIReadOnly: true, defaultValue: `'${MessageDirection.INCOMING}'`, options: [ { @@ -181,6 +184,7 @@ export const buildMessageChannelMessageAssociationStandardFlatFieldMetadatas = description: 'Message Channel Id', icon: 'IconHash', isNullable: true, + isUIReadOnly: true, targetObjectName: 'messageChannel', targetFieldName: 'messageChannelMessageAssociations', settings: { @@ -205,6 +209,7 @@ export const buildMessageChannelMessageAssociationStandardFlatFieldMetadatas = description: 'Message Thread Id', icon: 'IconHash', isNullable: true, + isUIReadOnly: true, targetObjectName: 'messageThread', targetFieldName: 'messageChannelMessageAssociations', settings: { @@ -229,6 +234,7 @@ export const buildMessageChannelMessageAssociationStandardFlatFieldMetadatas = description: 'Message Id', icon: 'IconHash', isNullable: true, + isUIReadOnly: true, targetObjectName: 'message', targetFieldName: 'messageChannelMessageAssociations', settings: { diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-channel-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-channel-standard-flat-field-metadata.util.ts index 842e3f1f613..655b51f9bf0 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-channel-standard-flat-field-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-channel-standard-flat-field-metadata.util.ts @@ -113,6 +113,7 @@ export const buildMessageChannelStandardFlatFieldMetadatas = ({ description: 'Visibility', icon: 'IconEyeglass', isNullable: false, + isUIReadOnly: true, defaultValue: "'SHARE_EVERYTHING'", options: [ { value: 'METADATA', label: 'Metadata', position: 0, color: 'green' }, @@ -140,6 +141,7 @@ export const buildMessageChannelStandardFlatFieldMetadatas = ({ description: 'Handle', icon: 'IconAt', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -156,6 +158,7 @@ export const buildMessageChannelStandardFlatFieldMetadatas = ({ description: 'Channel Type', icon: 'IconMessage', isNullable: false, + isUIReadOnly: true, defaultValue: `'${MessageChannelType.EMAIL}'`, options: [ { @@ -187,6 +190,7 @@ export const buildMessageChannelStandardFlatFieldMetadatas = ({ description: 'Is Contact Auto Creation Enabled', icon: 'IconUserCircle', isNullable: false, + isUIReadOnly: true, defaultValue: true, }, standardObjectMetadataRelatedEntityIds, @@ -205,6 +209,7 @@ export const buildMessageChannelStandardFlatFieldMetadatas = ({ 'Automatically create People records when receiving or sending emails', icon: 'IconUserCircle', isNullable: false, + isUIReadOnly: true, defaultValue: "'SENT'", options: [ { @@ -232,6 +237,7 @@ export const buildMessageChannelStandardFlatFieldMetadatas = ({ description: 'Message folder import policy', icon: 'IconFolder', isNullable: false, + isUIReadOnly: true, defaultValue: "'ALL_FOLDERS'", options: [ { @@ -263,6 +269,7 @@ export const buildMessageChannelStandardFlatFieldMetadatas = ({ description: 'Exclude non professional emails', icon: 'IconBriefcase', isNullable: false, + isUIReadOnly: true, defaultValue: true, }, standardObjectMetadataRelatedEntityIds, @@ -280,6 +287,7 @@ export const buildMessageChannelStandardFlatFieldMetadatas = ({ description: 'Exclude group emails', icon: 'IconUsersGroup', isNullable: false, + isUIReadOnly: true, defaultValue: true, }, standardObjectMetadataRelatedEntityIds, @@ -297,6 +305,7 @@ export const buildMessageChannelStandardFlatFieldMetadatas = ({ description: 'Pending action for group emails', icon: 'IconUsersGroup', isNullable: false, + isUIReadOnly: true, defaultValue: "'NONE'", options: [ { @@ -329,6 +338,7 @@ export const buildMessageChannelStandardFlatFieldMetadatas = ({ description: 'Is Sync Enabled', icon: 'IconRefresh', isNullable: false, + isUIReadOnly: true, defaultValue: true, }, standardObjectMetadataRelatedEntityIds, @@ -346,6 +356,7 @@ export const buildMessageChannelStandardFlatFieldMetadatas = ({ description: 'Last sync cursor', icon: 'IconHistory', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -362,6 +373,7 @@ export const buildMessageChannelStandardFlatFieldMetadatas = ({ description: 'Last sync date', icon: 'IconHistory', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -378,6 +390,7 @@ export const buildMessageChannelStandardFlatFieldMetadatas = ({ description: 'Sync status', icon: 'IconStatusChange', isNullable: true, + isUIReadOnly: true, options: [ { value: 'ONGOING', label: 'Ongoing', position: 1, color: 'yellow' }, { @@ -416,6 +429,7 @@ export const buildMessageChannelStandardFlatFieldMetadatas = ({ description: 'Sync stage', icon: 'IconStatusChange', isNullable: false, + isUIReadOnly: true, defaultValue: "'PENDING_CONFIGURATION'", options: [ { @@ -478,6 +492,7 @@ export const buildMessageChannelStandardFlatFieldMetadatas = ({ description: 'Sync stage started at', icon: 'IconHistory', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -494,6 +509,7 @@ export const buildMessageChannelStandardFlatFieldMetadatas = ({ description: 'Throttle Failure Count', icon: 'IconX', isNullable: false, + isUIReadOnly: true, defaultValue: 0, }, standardObjectMetadataRelatedEntityIds, @@ -512,6 +528,7 @@ export const buildMessageChannelStandardFlatFieldMetadatas = ({ description: 'Connected Account', icon: 'IconUserCircle', isNullable: false, + isUIReadOnly: true, targetObjectName: 'connectedAccount', targetFieldName: 'messageChannels', settings: { @@ -536,6 +553,7 @@ export const buildMessageChannelStandardFlatFieldMetadatas = ({ description: 'Messages from the channel.', icon: 'IconMessage', isNullable: true, + isUIReadOnly: true, targetObjectName: 'messageChannelMessageAssociation', targetFieldName: 'messageChannel', settings: { @@ -558,6 +576,7 @@ export const buildMessageChannelStandardFlatFieldMetadatas = ({ description: 'Message Folders', icon: 'IconFolder', isNullable: true, + isUIReadOnly: true, targetObjectName: 'messageFolder', targetFieldName: 'messageChannel', settings: { diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-folder-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-folder-standard-flat-field-metadata.util.ts index 42cd96bf42e..39b580c7917 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-folder-standard-flat-field-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-folder-standard-flat-field-metadata.util.ts @@ -109,6 +109,7 @@ export const buildMessageFolderStandardFlatFieldMetadatas = ({ description: 'Folder name', icon: 'IconFolder', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -125,6 +126,7 @@ export const buildMessageFolderStandardFlatFieldMetadatas = ({ description: 'Sync Cursor', icon: 'IconHash', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -141,6 +143,7 @@ export const buildMessageFolderStandardFlatFieldMetadatas = ({ description: 'Is Sent Folder', icon: 'IconCheck', isNullable: false, + isUIReadOnly: true, defaultValue: false, }, standardObjectMetadataRelatedEntityIds, @@ -158,6 +161,7 @@ export const buildMessageFolderStandardFlatFieldMetadatas = ({ description: 'Is Synced', icon: 'IconCheck', isNullable: false, + isUIReadOnly: true, defaultValue: false, }, standardObjectMetadataRelatedEntityIds, @@ -175,6 +179,7 @@ export const buildMessageFolderStandardFlatFieldMetadatas = ({ description: 'Parent Folder ID', icon: 'IconFolder', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -191,6 +196,7 @@ export const buildMessageFolderStandardFlatFieldMetadatas = ({ description: 'External ID', icon: 'IconHash', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -207,6 +213,7 @@ export const buildMessageFolderStandardFlatFieldMetadatas = ({ description: 'Pending action for folder sync', icon: 'IconReload', isNullable: false, + isUIReadOnly: true, defaultValue: "'NONE'", options: [ { @@ -234,6 +241,7 @@ export const buildMessageFolderStandardFlatFieldMetadatas = ({ description: 'Message Channel', icon: 'IconMessage', isNullable: false, + isUIReadOnly: true, targetObjectName: 'messageChannel', targetFieldName: 'messageFolders', settings: { diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-participant-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-participant-standard-flat-field-metadata.util.ts index 6939554f8b0..ffba0fc095d 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-participant-standard-flat-field-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-participant-standard-flat-field-metadata.util.ts @@ -113,6 +113,7 @@ export const buildMessageParticipantStandardFlatFieldMetadatas = ({ description: 'Role', icon: 'IconAt', isNullable: false, + isUIReadOnly: true, defaultValue: `'${MessageParticipantRole.FROM}'`, options: [ { @@ -156,6 +157,7 @@ export const buildMessageParticipantStandardFlatFieldMetadatas = ({ description: 'Handle', icon: 'IconAt', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -172,6 +174,7 @@ export const buildMessageParticipantStandardFlatFieldMetadatas = ({ description: 'Display Name', icon: 'IconUser', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -189,6 +192,7 @@ export const buildMessageParticipantStandardFlatFieldMetadatas = ({ description: 'Message', icon: 'IconMessage', isNullable: false, + isUIReadOnly: true, targetObjectName: 'message', targetFieldName: 'messageParticipants', settings: { @@ -213,6 +217,7 @@ export const buildMessageParticipantStandardFlatFieldMetadatas = ({ description: 'Person', icon: 'IconUser', isNullable: true, + isUIReadOnly: true, targetObjectName: 'person', targetFieldName: 'messageParticipants', settings: { @@ -237,6 +242,7 @@ export const buildMessageParticipantStandardFlatFieldMetadatas = ({ description: 'Workspace member', icon: 'IconCircleUser', isNullable: true, + isUIReadOnly: true, targetObjectName: 'workspaceMember', targetFieldName: 'messageParticipants', settings: { diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-standard-flat-field-metadata.util.ts index a9a041ed8bb..59f95f28570 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-standard-flat-field-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-standard-flat-field-metadata.util.ts @@ -109,6 +109,7 @@ export const buildMessageStandardFlatFieldMetadatas = ({ description: 'Message id from the message header', icon: 'IconHash', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -125,6 +126,7 @@ export const buildMessageStandardFlatFieldMetadatas = ({ description: 'Message Direction', icon: 'IconDirection', isNullable: false, + isUIReadOnly: true, defaultValue: "'INCOMING'", options: [ { value: 'INCOMING', label: 'Incoming', position: 0, color: 'green' }, @@ -146,6 +148,7 @@ export const buildMessageStandardFlatFieldMetadatas = ({ description: 'Subject', icon: 'IconMessage', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -162,6 +165,7 @@ export const buildMessageStandardFlatFieldMetadatas = ({ description: 'Text', icon: 'IconMessage', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -178,6 +182,7 @@ export const buildMessageStandardFlatFieldMetadatas = ({ description: 'The date the message was received', icon: 'IconCalendar', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -195,6 +200,7 @@ export const buildMessageStandardFlatFieldMetadatas = ({ description: 'Message Thread Id', icon: 'IconHash', isNullable: true, + isUIReadOnly: true, targetObjectName: 'messageThread', targetFieldName: 'messages', settings: { @@ -219,6 +225,7 @@ export const buildMessageStandardFlatFieldMetadatas = ({ description: 'Message Participants', icon: 'IconUserCircle', isNullable: true, + isUIReadOnly: true, targetObjectName: 'messageParticipant', targetFieldName: 'message', settings: { @@ -241,6 +248,7 @@ export const buildMessageStandardFlatFieldMetadatas = ({ description: 'Messages from the channel.', icon: 'IconMessage', isNullable: true, + isUIReadOnly: true, targetObjectName: 'messageChannelMessageAssociation', targetFieldName: 'message', settings: { diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-thread-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-thread-standard-flat-field-metadata.util.ts index 77f92889056..bc15e555f8d 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-thread-standard-flat-field-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-thread-standard-flat-field-metadata.util.ts @@ -109,6 +109,7 @@ export const buildMessageThreadStandardFlatFieldMetadatas = ({ description: 'Messages from the thread.', icon: 'IconMessage', isNullable: true, + isUIReadOnly: true, targetObjectName: 'message', targetFieldName: 'messageThread', settings: { @@ -131,6 +132,7 @@ export const buildMessageThreadStandardFlatFieldMetadatas = ({ description: 'Messages from the channel.', icon: 'IconMessage', isNullable: true, + isUIReadOnly: true, targetObjectName: 'messageChannelMessageAssociation', targetFieldName: 'messageThread', settings: { diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-note-target-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-note-target-standard-flat-field-metadata.util.ts index 7a94f3c02e8..39ea8f02c53 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-note-target-standard-flat-field-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-note-target-standard-flat-field-metadata.util.ts @@ -119,6 +119,7 @@ export const buildNoteTargetStandardFlatFieldMetadatas = ({ description: 'NoteTarget note', icon: 'IconNotes', isNullable: true, + isUIReadOnly: true, targetObjectName: 'note', targetFieldName: 'noteTargets', settings: { @@ -143,6 +144,7 @@ export const buildNoteTargetStandardFlatFieldMetadatas = ({ description: 'NoteTarget person', icon: 'IconUser', isNullable: true, + isUIReadOnly: true, targetObjectName: 'person', targetFieldName: 'noteTargets', settings: { @@ -167,6 +169,7 @@ export const buildNoteTargetStandardFlatFieldMetadatas = ({ description: 'NoteTarget company', icon: 'IconBuildingSkyscraper', isNullable: true, + isUIReadOnly: true, targetObjectName: 'company', targetFieldName: 'noteTargets', settings: { @@ -191,6 +194,7 @@ export const buildNoteTargetStandardFlatFieldMetadatas = ({ description: 'NoteTarget opportunity', icon: 'IconTargetArrow', isNullable: true, + isUIReadOnly: true, targetObjectName: 'opportunity', targetFieldName: 'noteTargets', settings: { diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-task-target-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-task-target-standard-flat-field-metadata.util.ts index 0e51740b3e5..016cdbae49a 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-task-target-standard-flat-field-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-task-target-standard-flat-field-metadata.util.ts @@ -119,6 +119,7 @@ export const buildTaskTargetStandardFlatFieldMetadatas = ({ description: 'TaskTarget task', icon: 'IconCheckbox', isNullable: true, + isUIReadOnly: true, targetObjectName: 'task', targetFieldName: 'taskTargets', settings: { @@ -143,6 +144,7 @@ export const buildTaskTargetStandardFlatFieldMetadatas = ({ description: 'TaskTarget person', icon: 'IconUser', isNullable: true, + isUIReadOnly: true, targetObjectName: 'person', targetFieldName: 'taskTargets', settings: { @@ -167,6 +169,7 @@ export const buildTaskTargetStandardFlatFieldMetadatas = ({ description: 'TaskTarget company', icon: 'IconBuildingSkyscraper', isNullable: true, + isUIReadOnly: true, targetObjectName: 'company', targetFieldName: 'taskTargets', settings: { @@ -191,6 +194,7 @@ export const buildTaskTargetStandardFlatFieldMetadatas = ({ description: 'TaskTarget opportunity', icon: 'IconTargetArrow', isNullable: true, + isUIReadOnly: true, targetObjectName: 'opportunity', targetFieldName: 'taskTargets', settings: { diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-timeline-activity-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-timeline-activity-standard-flat-field-metadata.util.ts index 4f31c566292..6371da19f07 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-timeline-activity-standard-flat-field-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-timeline-activity-standard-flat-field-metadata.util.ts @@ -116,6 +116,7 @@ export const buildTimelineActivityStandardFlatFieldMetadatas = ({ description: 'Creation date', icon: 'IconCalendar', isNullable: false, + isUIReadOnly: true, defaultValue: 'now', }, standardObjectMetadataRelatedEntityIds, @@ -133,6 +134,7 @@ export const buildTimelineActivityStandardFlatFieldMetadatas = ({ description: 'Event name', icon: 'IconAbc', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -149,6 +151,7 @@ export const buildTimelineActivityStandardFlatFieldMetadatas = ({ description: 'Json value for event details', icon: 'IconListDetails', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -165,6 +168,7 @@ export const buildTimelineActivityStandardFlatFieldMetadatas = ({ description: 'Cached record name', icon: 'IconAbc', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -181,6 +185,7 @@ export const buildTimelineActivityStandardFlatFieldMetadatas = ({ description: 'Linked Record id', icon: 'IconAbc', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -197,6 +202,7 @@ export const buildTimelineActivityStandardFlatFieldMetadatas = ({ description: 'Linked Object Metadata Id', icon: 'IconAbc', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -216,6 +222,7 @@ export const buildTimelineActivityStandardFlatFieldMetadatas = ({ description: 'Event workspace member', icon: 'IconCircleUser', isNullable: true, + isUIReadOnly: true, targetObjectName: 'workspaceMember', targetFieldName: 'timelineActivities', settings: { @@ -240,6 +247,7 @@ export const buildTimelineActivityStandardFlatFieldMetadatas = ({ description: 'Event person', icon: 'IconUser', isNullable: true, + isUIReadOnly: true, targetObjectName: 'person', targetFieldName: 'timelineActivities', settings: { @@ -264,6 +272,7 @@ export const buildTimelineActivityStandardFlatFieldMetadatas = ({ description: 'Event company', icon: 'IconBuildingSkyscraper', isNullable: true, + isUIReadOnly: true, targetObjectName: 'company', targetFieldName: 'timelineActivities', settings: { @@ -288,6 +297,7 @@ export const buildTimelineActivityStandardFlatFieldMetadatas = ({ description: 'Event opportunity', icon: 'IconTargetArrow', isNullable: true, + isUIReadOnly: true, targetObjectName: 'opportunity', targetFieldName: 'timelineActivities', settings: { @@ -312,6 +322,7 @@ export const buildTimelineActivityStandardFlatFieldMetadatas = ({ description: 'Event note', icon: 'IconTargetArrow', isNullable: true, + isUIReadOnly: true, targetObjectName: 'note', targetFieldName: 'timelineActivities', settings: { @@ -336,6 +347,7 @@ export const buildTimelineActivityStandardFlatFieldMetadatas = ({ description: 'Event task', icon: 'IconTargetArrow', isNullable: true, + isUIReadOnly: true, targetObjectName: 'task', targetFieldName: 'timelineActivities', settings: { @@ -360,6 +372,7 @@ export const buildTimelineActivityStandardFlatFieldMetadatas = ({ description: 'Event workflow', icon: 'IconTargetArrow', isNullable: true, + isUIReadOnly: true, targetObjectName: 'workflow', targetFieldName: 'timelineActivities', settings: { @@ -384,6 +397,7 @@ export const buildTimelineActivityStandardFlatFieldMetadatas = ({ description: 'Event workflow version', icon: 'IconTargetArrow', isNullable: true, + isUIReadOnly: true, targetObjectName: 'workflowVersion', targetFieldName: 'timelineActivities', settings: { @@ -408,6 +422,7 @@ export const buildTimelineActivityStandardFlatFieldMetadatas = ({ description: 'Event workflow run', icon: 'IconTargetArrow', isNullable: true, + isUIReadOnly: true, targetObjectName: 'workflowRun', targetFieldName: 'timelineActivities', settings: { @@ -432,6 +447,7 @@ export const buildTimelineActivityStandardFlatFieldMetadatas = ({ description: 'Event dashboard', icon: 'IconTargetArrow', isNullable: true, + isUIReadOnly: true, targetObjectName: 'dashboard', targetFieldName: 'timelineActivities', settings: { diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-workflow-automated-trigger-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-workflow-automated-trigger-standard-flat-field-metadata.util.ts index 772d730fb1b..705639b44d2 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-workflow-automated-trigger-standard-flat-field-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-workflow-automated-trigger-standard-flat-field-metadata.util.ts @@ -112,6 +112,7 @@ export const buildWorkflowAutomatedTriggerStandardFlatFieldMetadatas = ({ description: 'The workflow automated trigger type', icon: 'IconSettingsAutomation', isNullable: false, + isUIReadOnly: true, options: [ { value: 'DATABASE_EVENT', @@ -137,6 +138,7 @@ export const buildWorkflowAutomatedTriggerStandardFlatFieldMetadatas = ({ description: 'The workflow automated trigger settings', icon: 'IconSettings', isNullable: false, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -154,6 +156,7 @@ export const buildWorkflowAutomatedTriggerStandardFlatFieldMetadatas = ({ description: 'WorkflowAutomatedTrigger workflow', icon: 'IconSettingsAutomation', isNullable: false, + isUIReadOnly: true, targetObjectName: 'workflow', targetFieldName: 'automatedTriggers', settings: { diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-workflow-run-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-workflow-run-standard-flat-field-metadata.util.ts index 989f8a2912b..ae624e2e8b6 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-workflow-run-standard-flat-field-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-workflow-run-standard-flat-field-metadata.util.ts @@ -111,6 +111,7 @@ export const buildWorkflowRunStandardFlatFieldMetadatas = ({ description: 'Name of the workflow run', icon: 'IconSettingsAutomation', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -127,6 +128,7 @@ export const buildWorkflowRunStandardFlatFieldMetadatas = ({ description: 'Workflow run enqueued at', icon: 'IconHistory', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -143,6 +145,7 @@ export const buildWorkflowRunStandardFlatFieldMetadatas = ({ description: 'Workflow run started at', icon: 'IconHistory', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -159,6 +162,7 @@ export const buildWorkflowRunStandardFlatFieldMetadatas = ({ description: 'Workflow run ended at', icon: 'IconHistory', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -175,6 +179,7 @@ export const buildWorkflowRunStandardFlatFieldMetadatas = ({ description: 'Workflow run status', icon: 'IconStatusChange', isNullable: false, + isUIReadOnly: true, defaultValue: "'NOT_STARTED'", options: [ { @@ -206,6 +211,7 @@ export const buildWorkflowRunStandardFlatFieldMetadatas = ({ description: 'The executor of the workflow', icon: 'IconCreativeCommonsSa', isNullable: false, + isUIReadOnly: true, defaultValue: { source: "'MANUAL'", name: "'System'", @@ -227,6 +233,7 @@ export const buildWorkflowRunStandardFlatFieldMetadatas = ({ description: 'State of the workflow run', icon: 'IconHierarchy2', isNullable: false, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -243,6 +250,7 @@ export const buildWorkflowRunStandardFlatFieldMetadatas = ({ description: 'Context of the workflow run', icon: 'IconHierarchy2', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -259,6 +267,7 @@ export const buildWorkflowRunStandardFlatFieldMetadatas = ({ description: 'Output of the workflow run', icon: 'IconHierarchy2', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -276,6 +285,7 @@ export const buildWorkflowRunStandardFlatFieldMetadatas = ({ icon: 'IconHierarchy2', isSystem: true, isNullable: false, + isUIReadOnly: true, defaultValue: 0, }, standardObjectMetadataRelatedEntityIds, @@ -294,6 +304,7 @@ export const buildWorkflowRunStandardFlatFieldMetadatas = ({ icon: 'IconUser', isSystem: true, isNullable: true, + isUIReadOnly: true, settings: { generatedType: 'STORED', asExpression: getTsVectorColumnExpressionFromFields( @@ -317,6 +328,7 @@ export const buildWorkflowRunStandardFlatFieldMetadatas = ({ description: 'Workflow version linked to the run.', icon: 'IconVersions', isNullable: false, + isUIReadOnly: true, targetObjectName: 'workflowVersion', targetFieldName: 'runs', settings: { @@ -341,6 +353,7 @@ export const buildWorkflowRunStandardFlatFieldMetadatas = ({ description: 'Workflow linked to the run.', icon: 'IconSettingsAutomation', isNullable: false, + isUIReadOnly: true, targetObjectName: 'workflow', targetFieldName: 'runs', settings: { @@ -366,6 +379,7 @@ export const buildWorkflowRunStandardFlatFieldMetadatas = ({ icon: 'IconHeart', isSystem: true, isNullable: false, + isUIReadOnly: true, targetObjectName: 'favorite', targetFieldName: 'workflowRun', settings: { @@ -389,6 +403,7 @@ export const buildWorkflowRunStandardFlatFieldMetadatas = ({ icon: 'IconTimelineEvent', isSystem: true, isNullable: false, + isUIReadOnly: true, targetObjectName: 'timelineActivity', targetFieldName: 'targetWorkflowRun', settings: { diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-workflow-version-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-workflow-version-standard-flat-field-metadata.util.ts index 1010f5d0ad1..594e0f05c40 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-workflow-version-standard-flat-field-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-workflow-version-standard-flat-field-metadata.util.ts @@ -114,6 +114,7 @@ export const buildWorkflowVersionStandardFlatFieldMetadatas = ({ description: 'The workflow version name', icon: 'IconSettingsAutomation', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -130,6 +131,7 @@ export const buildWorkflowVersionStandardFlatFieldMetadatas = ({ description: 'Json object to provide trigger', icon: 'IconSettingsAutomation', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -146,6 +148,7 @@ export const buildWorkflowVersionStandardFlatFieldMetadatas = ({ description: 'Json object to provide steps', icon: 'IconSettingsAutomation', isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -162,6 +165,7 @@ export const buildWorkflowVersionStandardFlatFieldMetadatas = ({ description: 'The workflow version status', icon: 'IconStatusChange', isNullable: false, + isUIReadOnly: true, defaultValue: "'DRAFT'", options: [ { value: 'DRAFT', label: 'Draft', position: 0, color: 'yellow' }, @@ -191,6 +195,7 @@ export const buildWorkflowVersionStandardFlatFieldMetadatas = ({ icon: 'IconHierarchy2', isSystem: true, isNullable: false, + isUIReadOnly: true, defaultValue: 0, }, standardObjectMetadataRelatedEntityIds, @@ -209,6 +214,7 @@ export const buildWorkflowVersionStandardFlatFieldMetadatas = ({ icon: 'IconUser', isSystem: true, isNullable: true, + isUIReadOnly: true, settings: { generatedType: 'STORED', asExpression: getTsVectorColumnExpressionFromFields( @@ -232,6 +238,7 @@ export const buildWorkflowVersionStandardFlatFieldMetadatas = ({ description: 'WorkflowVersion workflow', icon: 'IconSettingsAutomation', isNullable: true, + isUIReadOnly: true, targetObjectName: 'workflow', targetFieldName: 'versions', settings: { @@ -256,6 +263,7 @@ export const buildWorkflowVersionStandardFlatFieldMetadatas = ({ description: 'Workflow runs linked to the version.', icon: 'IconRun', isNullable: true, + isUIReadOnly: true, targetObjectName: 'workflowRun', targetFieldName: 'workflowVersion', settings: { @@ -279,6 +287,7 @@ export const buildWorkflowVersionStandardFlatFieldMetadatas = ({ icon: 'IconHeart', isSystem: true, isNullable: false, + isUIReadOnly: true, targetObjectName: 'favorite', targetFieldName: 'workflowVersion', settings: { @@ -302,6 +311,7 @@ export const buildWorkflowVersionStandardFlatFieldMetadatas = ({ icon: 'IconTimelineEvent', isSystem: true, isNullable: false, + isUIReadOnly: true, targetObjectName: 'timelineActivity', targetFieldName: 'targetWorkflowVersion', settings: { diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-workspace-member-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-workspace-member-standard-flat-field-metadata.util.ts index b62679d886f..2d5006172a5 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-workspace-member-standard-flat-field-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-workspace-member-standard-flat-field-metadata.util.ts @@ -118,6 +118,7 @@ export const buildWorkspaceMemberStandardFlatFieldMetadatas = ({ icon: 'IconHierarchy2', isSystem: true, isNullable: false, + isUIReadOnly: true, defaultValue: 0, }, standardObjectMetadataRelatedEntityIds, @@ -135,6 +136,7 @@ export const buildWorkspaceMemberStandardFlatFieldMetadatas = ({ description: 'Workspace member name', icon: 'IconCircleUser', isNullable: false, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -152,6 +154,7 @@ export const buildWorkspaceMemberStandardFlatFieldMetadatas = ({ icon: 'IconColorSwatch', isSystem: true, isNullable: false, + isUIReadOnly: true, defaultValue: "'System'", }, standardObjectMetadataRelatedEntityIds, @@ -170,6 +173,7 @@ export const buildWorkspaceMemberStandardFlatFieldMetadatas = ({ icon: 'IconLanguage', isSystem: true, isNullable: false, + isUIReadOnly: true, defaultValue: "'en'", }, standardObjectMetadataRelatedEntityIds, @@ -188,6 +192,7 @@ export const buildWorkspaceMemberStandardFlatFieldMetadatas = ({ icon: 'IconFileUpload', isSystem: true, isNullable: true, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -205,6 +210,7 @@ export const buildWorkspaceMemberStandardFlatFieldMetadatas = ({ icon: 'IconMail', isSystem: true, isNullable: true, + isUIReadOnly: true, isUnique: true, }, standardObjectMetadataRelatedEntityIds, @@ -223,6 +229,7 @@ export const buildWorkspaceMemberStandardFlatFieldMetadatas = ({ icon: 'IconCalendar', isSystem: true, isNullable: false, + isUIReadOnly: true, defaultValue: 7, settings: { dataType: NumberDataType.INT, @@ -244,6 +251,7 @@ export const buildWorkspaceMemberStandardFlatFieldMetadatas = ({ icon: 'IconCircleUsers', isSystem: true, isNullable: false, + isUIReadOnly: true, }, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps, @@ -261,6 +269,7 @@ export const buildWorkspaceMemberStandardFlatFieldMetadatas = ({ icon: 'IconTimezone', isSystem: true, isNullable: false, + isUIReadOnly: true, defaultValue: "'system'", }, standardObjectMetadataRelatedEntityIds, @@ -279,6 +288,7 @@ export const buildWorkspaceMemberStandardFlatFieldMetadatas = ({ icon: 'IconCalendarEvent', isSystem: true, isNullable: false, + isUIReadOnly: true, defaultValue: "'SYSTEM'", options: [ { value: 'SYSTEM', label: 'System', position: 0, color: 'turquoise' }, @@ -313,6 +323,7 @@ export const buildWorkspaceMemberStandardFlatFieldMetadatas = ({ icon: 'IconClock2', isSystem: true, isNullable: false, + isUIReadOnly: true, defaultValue: "'SYSTEM'", options: [ { value: 'SYSTEM', label: 'System', position: 0, color: 'sky' }, @@ -336,6 +347,7 @@ export const buildWorkspaceMemberStandardFlatFieldMetadatas = ({ icon: 'IconNumbers', isSystem: true, isNullable: false, + isUIReadOnly: true, defaultValue: `'${WorkspaceMemberNumberFormatEnum.SYSTEM}'`, options: [ { @@ -386,6 +398,7 @@ export const buildWorkspaceMemberStandardFlatFieldMetadatas = ({ icon: 'IconUser', isSystem: true, isNullable: true, + isUIReadOnly: true, settings: { generatedType: 'STORED', asExpression: getTsVectorColumnExpressionFromFields( @@ -409,6 +422,7 @@ export const buildWorkspaceMemberStandardFlatFieldMetadatas = ({ description: 'Tasks assigned to the workspace member', icon: 'IconCheckbox', isNullable: false, + isUIReadOnly: true, targetObjectName: 'task', targetFieldName: 'assignee', settings: { @@ -431,6 +445,7 @@ export const buildWorkspaceMemberStandardFlatFieldMetadatas = ({ description: 'Favorites linked to the workspace member', icon: 'IconHeart', isNullable: false, + isUIReadOnly: true, targetObjectName: 'favorite', targetFieldName: 'forWorkspaceMember', settings: { @@ -453,6 +468,7 @@ export const buildWorkspaceMemberStandardFlatFieldMetadatas = ({ description: 'Account owner for companies', icon: 'IconBriefcase', isNullable: false, + isUIReadOnly: true, targetObjectName: 'company', targetFieldName: 'accountOwner', settings: { @@ -475,6 +491,7 @@ export const buildWorkspaceMemberStandardFlatFieldMetadatas = ({ description: 'Connected accounts', icon: 'IconAt', isNullable: false, + isUIReadOnly: true, targetObjectName: 'connectedAccount', targetFieldName: 'accountOwner', settings: { @@ -497,6 +514,7 @@ export const buildWorkspaceMemberStandardFlatFieldMetadatas = ({ description: 'Message Participants', icon: 'IconUserCircle', isNullable: false, + isUIReadOnly: true, targetObjectName: 'messageParticipant', targetFieldName: 'workspaceMember', settings: { @@ -519,6 +537,7 @@ export const buildWorkspaceMemberStandardFlatFieldMetadatas = ({ description: 'Blocklisted handles', icon: 'IconForbid2', isNullable: false, + isUIReadOnly: true, targetObjectName: 'blocklist', targetFieldName: 'workspaceMember', settings: { @@ -541,6 +560,7 @@ export const buildWorkspaceMemberStandardFlatFieldMetadatas = ({ description: 'Calendar Event Participants', icon: 'IconCalendar', isNullable: false, + isUIReadOnly: true, targetObjectName: 'calendarEventParticipant', targetFieldName: 'workspaceMember', settings: { @@ -564,6 +584,7 @@ export const buildWorkspaceMemberStandardFlatFieldMetadatas = ({ icon: 'IconTimelineEvent', isSystem: true, isNullable: true, + isUIReadOnly: true, targetObjectName: 'timelineActivity', targetFieldName: 'workspaceMember', settings: { diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/object-metadata/create-standard-flat-object-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/object-metadata/create-standard-flat-object-metadata.util.ts index f3845053c22..6321cdb74e0 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/object-metadata/create-standard-flat-object-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/object-metadata/create-standard-flat-object-metadata.util.ts @@ -175,7 +175,6 @@ export const STANDARD_FLAT_OBJECT_METADATA_BUILDERS_BY_OBJECT_NAME = { icon: 'IconCalendar', isSystem: true, isAuditLogged: false, - isUIReadOnly: true, labelIdentifierFieldMetadataName: 'title', }, workspaceId, @@ -777,7 +776,6 @@ export const STANDARD_FLAT_OBJECT_METADATA_BUILDERS_BY_OBJECT_NAME = { icon: 'IconHistoryToggle', isSystem: true, isAuditLogged: false, - isUIReadOnly: true, labelIdentifierFieldMetadataName: 'name', }, workspaceId, @@ -808,7 +806,6 @@ export const STANDARD_FLAT_OBJECT_METADATA_BUILDERS_BY_OBJECT_NAME = { description: 'A workflow version', icon: 'IconVersions', isSystem: true, - isUIReadOnly: true, labelIdentifierFieldMetadataName: 'name', }, workspaceId, diff --git a/packages/twenty-server/src/modules/attachment/standard-objects/attachment.workspace-entity.ts b/packages/twenty-server/src/modules/attachment/standard-objects/attachment.workspace-entity.ts index 510543ce1cc..cfb6a4384f1 100644 --- a/packages/twenty-server/src/modules/attachment/standard-objects/attachment.workspace-entity.ts +++ b/packages/twenty-server/src/modules/attachment/standard-objects/attachment.workspace-entity.ts @@ -50,6 +50,7 @@ export class AttachmentWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Attachment name`, icon: 'IconFileUpload', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() name: string | null; @@ -60,6 +61,7 @@ export class AttachmentWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Attachment full path`, icon: 'IconLink', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() fullPath: string | null; @@ -70,6 +72,7 @@ export class AttachmentWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Attachment type (deprecated - use fileCategory)`, icon: 'IconList', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() @WorkspaceIsDeprecated() type: string | null; @@ -132,6 +135,7 @@ export class AttachmentWorkspaceEntity extends BaseWorkspaceEntity { ], defaultValue: "'OTHER'", }) + @WorkspaceIsFieldUIReadOnly() fileCategory: string; @WorkspaceField({ @@ -154,6 +158,7 @@ export class AttachmentWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'authoredAttachments', onDelete: RelationOnDeleteAction.SET_NULL, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() @WorkspaceIsDeprecated() author: Relation | null; @@ -171,6 +176,7 @@ export class AttachmentWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'attachments', onDelete: RelationOnDeleteAction.SET_NULL, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() task: Relation | null; @@ -187,6 +193,7 @@ export class AttachmentWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'attachments', onDelete: RelationOnDeleteAction.SET_NULL, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() note: Relation | null; @@ -203,6 +210,7 @@ export class AttachmentWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'attachments', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() person: Relation | null; @@ -219,6 +227,7 @@ export class AttachmentWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'attachments', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() company: Relation | null; @@ -235,6 +244,7 @@ export class AttachmentWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'attachments', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() opportunity: Relation | null; @@ -251,6 +261,7 @@ export class AttachmentWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'attachments', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() dashboard: Relation | null; @@ -267,6 +278,7 @@ export class AttachmentWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'attachments', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() workflow: Relation | null; diff --git a/packages/twenty-server/src/modules/blocklist/standard-objects/blocklist.workspace-entity.ts b/packages/twenty-server/src/modules/blocklist/standard-objects/blocklist.workspace-entity.ts index 0508cee2b33..714f8b1a4fd 100644 --- a/packages/twenty-server/src/modules/blocklist/standard-objects/blocklist.workspace-entity.ts +++ b/packages/twenty-server/src/modules/blocklist/standard-objects/blocklist.workspace-entity.ts @@ -8,6 +8,7 @@ import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/i import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.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 { WorkspaceJoinColumn } from 'src/engine/twenty-orm/decorators/workspace-join-column.decorator'; @@ -35,6 +36,7 @@ export class BlocklistWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Handle`, icon: 'IconAt', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() handle: string | null; @@ -48,6 +50,7 @@ export class BlocklistWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'blocklist', onDelete: RelationOnDeleteAction.SET_NULL, }) + @WorkspaceIsFieldUIReadOnly() workspaceMember: Relation; @WorkspaceJoinColumn('workspaceMember') diff --git a/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-channel-event-association.workspace-entity.ts b/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-channel-event-association.workspace-entity.ts index 093df891e80..e94c4c71d5c 100644 --- a/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-channel-event-association.workspace-entity.ts +++ b/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-channel-event-association.workspace-entity.ts @@ -8,6 +8,7 @@ import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/i import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.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 { 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 { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; @@ -43,6 +44,7 @@ export class CalendarChannelEventAssociationWorkspaceEntity extends BaseWorkspac description: msg`Event external ID`, icon: 'IconCalendar', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() eventExternalId: string | null; @@ -54,6 +56,7 @@ export class CalendarChannelEventAssociationWorkspaceEntity extends BaseWorkspac description: msg`Recurring Event ID`, icon: 'IconHistory', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() recurringEventExternalId: string | null; @@ -68,6 +71,7 @@ export class CalendarChannelEventAssociationWorkspaceEntity extends BaseWorkspac inverseSideFieldKey: 'calendarChannelEventAssociations', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() calendarChannel: Relation; @WorkspaceJoinColumn('calendarChannel') @@ -84,6 +88,7 @@ export class CalendarChannelEventAssociationWorkspaceEntity extends BaseWorkspac inverseSideFieldKey: 'calendarChannelEventAssociations', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() calendarEvent: Relation; @WorkspaceJoinColumn('calendarEvent') diff --git a/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts b/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts index 73ddfff6b3f..fc60eb69279 100644 --- a/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts +++ b/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts @@ -10,6 +10,7 @@ import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/i import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.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 { 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 { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; @@ -87,6 +88,7 @@ export class CalendarChannelWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Handle`, icon: 'IconAt', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() handle: string | null; @@ -129,6 +131,7 @@ export class CalendarChannelWorkspaceEntity extends BaseWorkspaceEntity { }, ], }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() syncStatus: CalendarChannelSyncStatus | null; @@ -190,6 +193,7 @@ export class CalendarChannelWorkspaceEntity extends BaseWorkspaceEntity { ], defaultValue: `'${CalendarChannelSyncStage.PENDING_CONFIGURATION}'`, }) + @WorkspaceIsFieldUIReadOnly() syncStage: CalendarChannelSyncStage; @WorkspaceField({ @@ -214,6 +218,7 @@ export class CalendarChannelWorkspaceEntity extends BaseWorkspaceEntity { ], defaultValue: `'${CalendarChannelVisibility.SHARE_EVERYTHING}'`, }) + @WorkspaceIsFieldUIReadOnly() visibility: string; @WorkspaceField({ @@ -225,6 +230,7 @@ export class CalendarChannelWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconUserCircle', defaultValue: true, }) + @WorkspaceIsFieldUIReadOnly() isContactAutoCreationEnabled: boolean; @WorkspaceField({ @@ -262,6 +268,7 @@ export class CalendarChannelWorkspaceEntity extends BaseWorkspaceEntity { ], defaultValue: `'${CalendarChannelContactAutoCreationPolicy.AS_PARTICIPANT_AND_ORGANIZER}'`, }) + @WorkspaceIsFieldUIReadOnly() contactAutoCreationPolicy: CalendarChannelContactAutoCreationPolicy; @WorkspaceField({ @@ -272,6 +279,7 @@ export class CalendarChannelWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconRefresh', defaultValue: true, }) + @WorkspaceIsFieldUIReadOnly() isSyncEnabled: boolean; @WorkspaceField({ @@ -281,6 +289,7 @@ export class CalendarChannelWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Sync Cursor. Used for syncing events from the calendar provider`, icon: 'IconReload', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() syncCursor: string | null; @@ -291,6 +300,7 @@ export class CalendarChannelWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Last sync date`, icon: 'IconHistory', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() syncedAt: string | null; @@ -301,6 +311,7 @@ export class CalendarChannelWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Sync stage started at`, icon: 'IconHistory', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() syncStageStartedAt: string | null; @@ -312,6 +323,7 @@ export class CalendarChannelWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconX', defaultValue: 0, }) + @WorkspaceIsFieldUIReadOnly() throttleFailureCount: number; @WorkspaceRelation({ @@ -324,6 +336,7 @@ export class CalendarChannelWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'calendarChannels', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() connectedAccount: Relation; @WorkspaceJoinColumn('connectedAccount') @@ -339,6 +352,7 @@ export class CalendarChannelWorkspaceEntity extends BaseWorkspaceEntity { inverseSideTarget: () => CalendarChannelEventAssociationWorkspaceEntity, onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() calendarChannelEventAssociations: Relation< CalendarChannelEventAssociationWorkspaceEntity[] >; diff --git a/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts b/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts index 035a6cca0b0..8e1b00364a8 100644 --- a/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts +++ b/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts @@ -8,6 +8,7 @@ import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/i import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.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 { 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 { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; @@ -47,6 +48,7 @@ export class CalendarEventParticipantWorkspaceEntity extends BaseWorkspaceEntity description: msg`Handle`, icon: 'IconMail', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() handle: string | null; @@ -57,6 +59,7 @@ export class CalendarEventParticipantWorkspaceEntity extends BaseWorkspaceEntity description: msg`Display Name`, icon: 'IconUser', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() displayName: string | null; @@ -68,6 +71,7 @@ export class CalendarEventParticipantWorkspaceEntity extends BaseWorkspaceEntity icon: 'IconUser', defaultValue: false, }) + @WorkspaceIsFieldUIReadOnly() isOrganizer: boolean; @WorkspaceField({ @@ -104,6 +108,7 @@ export class CalendarEventParticipantWorkspaceEntity extends BaseWorkspaceEntity ], defaultValue: `'${CalendarEventParticipantResponseStatus.NEEDS_ACTION}'`, }) + @WorkspaceIsFieldUIReadOnly() responseStatus: string; @WorkspaceRelation({ @@ -116,6 +121,7 @@ export class CalendarEventParticipantWorkspaceEntity extends BaseWorkspaceEntity inverseSideFieldKey: 'calendarEventParticipants', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() calendarEvent: Relation; @WorkspaceJoinColumn('calendarEvent') @@ -131,6 +137,7 @@ export class CalendarEventParticipantWorkspaceEntity extends BaseWorkspaceEntity inverseSideFieldKey: 'calendarEventParticipants', onDelete: RelationOnDeleteAction.SET_NULL, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() person: Relation | null; @@ -147,6 +154,7 @@ export class CalendarEventParticipantWorkspaceEntity extends BaseWorkspaceEntity inverseSideFieldKey: 'calendarEventParticipants', onDelete: RelationOnDeleteAction.SET_NULL, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() workspaceMember: Relation | 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 500e4ad968a..ed9210daafe 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 @@ -12,9 +12,9 @@ import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/i import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.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 { 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'; @@ -34,7 +34,6 @@ import { CalendarEventParticipantWorkspaceEntity } from 'src/modules/calendar/co }) @WorkspaceIsSystem() @WorkspaceIsNotAuditLogged() -@WorkspaceIsObjectUIReadOnly() export class CalendarEventWorkspaceEntity extends BaseWorkspaceEntity { @WorkspaceField({ standardId: CALENDAR_EVENT_STANDARD_FIELD_IDS.title, @@ -43,6 +42,7 @@ export class CalendarEventWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Title`, icon: 'IconH1', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() title: string | null; @@ -54,6 +54,7 @@ export class CalendarEventWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconCalendarCancel', defaultValue: false, }) + @WorkspaceIsFieldUIReadOnly() isCanceled: boolean; @WorkspaceField({ @@ -64,6 +65,7 @@ export class CalendarEventWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconHours24', defaultValue: false, }) + @WorkspaceIsFieldUIReadOnly() isFullDay: boolean; @WorkspaceField({ @@ -73,6 +75,7 @@ export class CalendarEventWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Start Date`, icon: 'IconCalendarClock', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() startsAt: string | null; @@ -83,6 +86,7 @@ export class CalendarEventWorkspaceEntity extends BaseWorkspaceEntity { description: msg`End Date`, icon: 'IconCalendarClock', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() endsAt: string | null; @@ -93,6 +97,7 @@ export class CalendarEventWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Creation DateTime`, icon: 'IconCalendarPlus', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() externalCreatedAt: string | null; @@ -103,6 +108,7 @@ export class CalendarEventWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Update DateTime`, icon: 'IconCalendarCog', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() externalUpdatedAt: string | null; @@ -113,6 +119,7 @@ export class CalendarEventWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Description`, icon: 'IconFileDescription', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() description: string | null; @@ -123,6 +130,7 @@ export class CalendarEventWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Location`, icon: 'IconMapPin', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() location: string | null; @@ -133,6 +141,7 @@ export class CalendarEventWorkspaceEntity extends BaseWorkspaceEntity { description: msg`iCal UID`, icon: 'IconKey', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() iCalUid: string | null; @@ -143,6 +152,7 @@ export class CalendarEventWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Conference Solution`, icon: 'IconScreenShare', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() conferenceSolution: string | null; @@ -153,6 +163,7 @@ export class CalendarEventWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Meet Link`, icon: 'IconLink', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() conferenceLink: LinksMetadata; @@ -166,6 +177,7 @@ export class CalendarEventWorkspaceEntity extends BaseWorkspaceEntity { inverseSideTarget: () => CalendarChannelEventAssociationWorkspaceEntity, onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() calendarChannelEventAssociations: Relation< CalendarChannelEventAssociationWorkspaceEntity[] >; @@ -179,6 +191,7 @@ export class CalendarEventWorkspaceEntity extends BaseWorkspaceEntity { inverseSideTarget: () => CalendarEventParticipantWorkspaceEntity, onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() calendarEventParticipants: Relation< CalendarEventParticipantWorkspaceEntity[] >; diff --git a/packages/twenty-server/src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts b/packages/twenty-server/src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts index edef1d09bf6..726a1e8f19a 100644 --- a/packages/twenty-server/src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts +++ b/packages/twenty-server/src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts @@ -13,6 +13,7 @@ import { type ImapSmtpCaldavParams } from 'src/engine/core-modules/imap-smtp-cal import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.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 { WorkspaceJoinColumn } from 'src/engine/twenty-orm/decorators/workspace-join-column.decorator'; @@ -42,6 +43,7 @@ export class ConnectedAccountWorkspaceEntity extends BaseWorkspaceEntity { description: msg`The account handle (email, username, phone number, etc.)`, icon: 'IconMail', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() handle: string | null; @@ -53,6 +55,7 @@ export class ConnectedAccountWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconSettings', defaultValue: `'${ConnectedAccountProvider.GOOGLE}'`, }) + @WorkspaceIsFieldUIReadOnly() provider: ConnectedAccountProvider; // field metadata should be a SELECT @WorkspaceField({ @@ -62,6 +65,7 @@ export class ConnectedAccountWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Messaging provider access token`, icon: 'IconKey', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() accessToken: string | null; @@ -72,6 +76,7 @@ export class ConnectedAccountWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Messaging provider refresh token`, icon: 'IconKey', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() refreshToken: string | null; @@ -82,6 +87,7 @@ export class ConnectedAccountWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Last credentials refreshed at`, icon: 'IconHistory', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() lastCredentialsRefreshedAt: Date | null; @@ -92,6 +98,7 @@ export class ConnectedAccountWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Last sync history ID`, icon: 'IconHistory', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() lastSyncHistoryId: string | null; @@ -102,6 +109,7 @@ export class ConnectedAccountWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Auth failed at`, icon: 'IconX', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() authFailedAt: Date | null; @@ -112,6 +120,7 @@ export class ConnectedAccountWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Handle Aliases`, icon: 'IconMail', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() handleAliases: string | null; @@ -122,6 +131,7 @@ export class ConnectedAccountWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Scopes`, icon: 'IconSettings', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() scopes: string[] | null; @@ -132,6 +142,7 @@ export class ConnectedAccountWorkspaceEntity extends BaseWorkspaceEntity { description: msg`JSON object containing custom connection parameters`, icon: 'IconSettings', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() connectionParameters: ImapSmtpCaldavParams | null; @@ -145,6 +156,7 @@ export class ConnectedAccountWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'connectedAccounts', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() accountOwner: Relation; @WorkspaceJoinColumn('accountOwner') @@ -159,6 +171,7 @@ export class ConnectedAccountWorkspaceEntity extends BaseWorkspaceEntity { inverseSideTarget: () => MessageChannelWorkspaceEntity, onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() messageChannels: Relation; @WorkspaceRelation({ @@ -170,5 +183,6 @@ export class ConnectedAccountWorkspaceEntity extends BaseWorkspaceEntity { inverseSideTarget: () => CalendarChannelWorkspaceEntity, onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() calendarChannels: Relation; } diff --git a/packages/twenty-server/src/modules/favorite-folder/standard-objects/favorite-folder.workspace-entity.ts b/packages/twenty-server/src/modules/favorite-folder/standard-objects/favorite-folder.workspace-entity.ts index a812cf90bb3..2d6e0af5b14 100644 --- a/packages/twenty-server/src/modules/favorite-folder/standard-objects/favorite-folder.workspace-entity.ts +++ b/packages/twenty-server/src/modules/favorite-folder/standard-objects/favorite-folder.workspace-entity.ts @@ -8,11 +8,12 @@ import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/i import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.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'; import { FAVORITE_FOLDER_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids'; import { FavoriteWorkspaceEntity } from 'src/modules/favorite/standard-objects/favorite.workspace-entity'; -import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator'; @WorkspaceEntity({ standardId: STANDARD_OBJECT_IDS.favoriteFolder, @@ -33,6 +34,7 @@ export class FavoriteFolderWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconList', defaultValue: 0, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsSystem() position: number; @@ -43,6 +45,7 @@ export class FavoriteFolderWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Name of the favorite folder`, icon: 'IconText', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() name: string | null; @@ -56,5 +59,6 @@ export class FavoriteFolderWorkspaceEntity extends BaseWorkspaceEntity { inverseSideTarget: () => FavoriteWorkspaceEntity, onDelete: RelationOnDeleteAction.SET_NULL, }) + @WorkspaceIsFieldUIReadOnly() favorites: Relation; } diff --git a/packages/twenty-server/src/modules/favorite/standard-objects/favorite.workspace-entity.ts b/packages/twenty-server/src/modules/favorite/standard-objects/favorite.workspace-entity.ts index 5fe50593bbc..40e229d7413 100644 --- a/packages/twenty-server/src/modules/favorite/standard-objects/favorite.workspace-entity.ts +++ b/packages/twenty-server/src/modules/favorite/standard-objects/favorite.workspace-entity.ts @@ -10,6 +10,7 @@ import { CustomWorkspaceEntity } from 'src/engine/twenty-orm/custom.workspace-en import { WorkspaceDynamicRelation } from 'src/engine/twenty-orm/decorators/workspace-dynamic-relation.decorator'; import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.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 { WorkspaceJoinColumn } from 'src/engine/twenty-orm/decorators/workspace-join-column.decorator'; @@ -47,6 +48,7 @@ export class FavoriteWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconList', defaultValue: 0, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsSystem() position: number; @@ -61,6 +63,7 @@ export class FavoriteWorkspaceEntity extends BaseWorkspaceEntity { inverseSideTarget: () => WorkspaceMemberWorkspaceEntity, onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() forWorkspaceMember: Relation; @@ -77,6 +80,7 @@ export class FavoriteWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'favorites', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() person: Relation | null; @@ -93,6 +97,7 @@ export class FavoriteWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'favorites', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() company: Relation | null; @@ -109,6 +114,7 @@ export class FavoriteWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'favorites', onDelete: RelationOnDeleteAction.SET_NULL, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() favoriteFolder: Relation | null; @@ -125,6 +131,7 @@ export class FavoriteWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'favorites', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() opportunity: Relation | null; @@ -141,6 +148,7 @@ export class FavoriteWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'favorites', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() workflow: Relation | null; @@ -157,6 +165,7 @@ export class FavoriteWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'favorites', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() workflowVersion: Relation | null; @@ -173,6 +182,7 @@ export class FavoriteWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'favorites', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() workflowRun: Relation | null; @@ -189,6 +199,7 @@ export class FavoriteWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'favorites', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() task: Relation | null; @@ -205,6 +216,7 @@ export class FavoriteWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'favorites', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() note: Relation | null; @@ -221,6 +233,7 @@ export class FavoriteWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'favorites', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() dashboard: Relation | null; @@ -234,6 +247,7 @@ export class FavoriteWorkspaceEntity extends BaseWorkspaceEntity { description: msg`ViewId`, icon: 'IconView', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() viewId: string; diff --git a/packages/twenty-server/src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity.ts b/packages/twenty-server/src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity.ts index 98cc79b85bf..da250a22f93 100644 --- a/packages/twenty-server/src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity.ts +++ b/packages/twenty-server/src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity.ts @@ -1,6 +1,6 @@ import { msg } from '@lingui/core/macro'; -import { FieldMetadataType, RelationOnDeleteAction } from 'twenty-shared/types'; import { STANDARD_OBJECT_IDS } from 'twenty-shared/metadata'; +import { FieldMetadataType, RelationOnDeleteAction } from 'twenty-shared/types'; import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface'; import { type Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface'; @@ -9,6 +9,7 @@ import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator'; import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; import { WorkspaceIndex } from 'src/engine/twenty-orm/decorators/workspace-index.decorator'; +import { WorkspaceIsFieldUIReadOnly } from 'src/engine/twenty-orm/decorators/workspace-is-field-ui-readonly.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 { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; @@ -47,6 +48,7 @@ export class MessageChannelMessageAssociationWorkspaceEntity extends BaseWorkspa description: msg`Message id from the messaging provider`, icon: 'IconHash', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() messageExternalId: string | null; @@ -58,6 +60,7 @@ export class MessageChannelMessageAssociationWorkspaceEntity extends BaseWorkspa description: msg`Thread id from the messaging provider`, icon: 'IconHash', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() messageThreadExternalId: string | null; @@ -83,6 +86,7 @@ export class MessageChannelMessageAssociationWorkspaceEntity extends BaseWorkspa ], defaultValue: `'${MessageDirection.INCOMING}'`, }) + @WorkspaceIsFieldUIReadOnly() direction: MessageDirection; @WorkspaceRelation({ @@ -96,6 +100,7 @@ export class MessageChannelMessageAssociationWorkspaceEntity extends BaseWorkspa inverseSideFieldKey: 'messageChannelMessageAssociations', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() messageChannel: Relation | null; @@ -112,6 +117,7 @@ export class MessageChannelMessageAssociationWorkspaceEntity extends BaseWorkspa inverseSideFieldKey: 'messageChannelMessageAssociations', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() message: Relation | null; diff --git a/packages/twenty-server/src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts b/packages/twenty-server/src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts index d2f4ce6d0d1..b722d28f6ed 100644 --- a/packages/twenty-server/src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts +++ b/packages/twenty-server/src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts @@ -10,6 +10,7 @@ import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/i import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.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 { 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 { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; @@ -137,6 +138,7 @@ export class MessageChannelWorkspaceEntity extends BaseWorkspaceEntity { ], defaultValue: `'${MessageChannelVisibility.SHARE_EVERYTHING}'`, }) + @WorkspaceIsFieldUIReadOnly() visibility: string; @WorkspaceField({ @@ -146,6 +148,7 @@ export class MessageChannelWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Handle`, icon: 'IconAt', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() handle: string | null; @@ -171,6 +174,7 @@ export class MessageChannelWorkspaceEntity extends BaseWorkspaceEntity { ], defaultValue: `'${MessageChannelType.EMAIL}'`, }) + @WorkspaceIsFieldUIReadOnly() type: string; // TODO: Deprecate this field and migrate data to contactAutoCreationFor @@ -182,6 +186,7 @@ export class MessageChannelWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconUserCircle', defaultValue: true, }) + @WorkspaceIsFieldUIReadOnly() isContactAutoCreationEnabled: boolean; @WorkspaceField({ @@ -212,6 +217,7 @@ export class MessageChannelWorkspaceEntity extends BaseWorkspaceEntity { ], defaultValue: `'${MessageChannelContactAutoCreationPolicy.SENT}'`, }) + @WorkspaceIsFieldUIReadOnly() contactAutoCreationPolicy: MessageChannelContactAutoCreationPolicy; @WorkspaceField({ @@ -236,6 +242,7 @@ export class MessageChannelWorkspaceEntity extends BaseWorkspaceEntity { ], defaultValue: `'${MessageFolderImportPolicy.ALL_FOLDERS}'`, }) + @WorkspaceIsFieldUIReadOnly() messageFolderImportPolicy: MessageFolderImportPolicy; @WorkspaceField({ @@ -246,6 +253,7 @@ export class MessageChannelWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconBriefcase', defaultValue: true, }) + @WorkspaceIsFieldUIReadOnly() excludeNonProfessionalEmails: boolean; @WorkspaceField({ @@ -256,6 +264,7 @@ export class MessageChannelWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconUsersGroup', defaultValue: true, }) + @WorkspaceIsFieldUIReadOnly() excludeGroupEmails: boolean; @WorkspaceField({ @@ -286,6 +295,7 @@ export class MessageChannelWorkspaceEntity extends BaseWorkspaceEntity { ], defaultValue: `'${MessageChannelPendingGroupEmailsAction.NONE}'`, }) + @WorkspaceIsFieldUIReadOnly() pendingGroupEmailsAction: MessageChannelPendingGroupEmailsAction; @WorkspaceField({ @@ -296,6 +306,7 @@ export class MessageChannelWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconRefresh', defaultValue: true, }) + @WorkspaceIsFieldUIReadOnly() isSyncEnabled: boolean; @WorkspaceField({ @@ -305,6 +316,7 @@ export class MessageChannelWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Last sync cursor`, icon: 'IconHistory', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() syncCursor: string | null; @@ -315,6 +327,7 @@ export class MessageChannelWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Last sync date`, icon: 'IconHistory', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() syncedAt: string | null; @@ -357,6 +370,7 @@ export class MessageChannelWorkspaceEntity extends BaseWorkspaceEntity { }, ], }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() syncStatus: MessageChannelSyncStatus | null; @@ -418,6 +432,7 @@ export class MessageChannelWorkspaceEntity extends BaseWorkspaceEntity { ], defaultValue: `'${MessageChannelSyncStage.PENDING_CONFIGURATION}'`, }) + @WorkspaceIsFieldUIReadOnly() syncStage: MessageChannelSyncStage; @WorkspaceField({ @@ -427,6 +442,7 @@ export class MessageChannelWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Sync stage started at`, icon: 'IconHistory', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() syncStageStartedAt: string | null; @@ -438,6 +454,7 @@ export class MessageChannelWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconX', defaultValue: 0, }) + @WorkspaceIsFieldUIReadOnly() throttleFailureCount: number; @WorkspaceRelation({ @@ -450,6 +467,7 @@ export class MessageChannelWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'messageChannels', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() connectedAccount: Relation; @WorkspaceJoinColumn('connectedAccount') @@ -465,6 +483,7 @@ export class MessageChannelWorkspaceEntity extends BaseWorkspaceEntity { inverseSideTarget: () => MessageChannelMessageAssociationWorkspaceEntity, onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() messageChannelMessageAssociations: Relation< MessageChannelMessageAssociationWorkspaceEntity[] @@ -479,6 +498,7 @@ export class MessageChannelWorkspaceEntity extends BaseWorkspaceEntity { inverseSideTarget: () => MessageFolderWorkspaceEntity, onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() messageFolders: Relation; } diff --git a/packages/twenty-server/src/modules/messaging/common/standard-objects/message-folder.workspace-entity.ts b/packages/twenty-server/src/modules/messaging/common/standard-objects/message-folder.workspace-entity.ts index b031428e38c..e99c06d721a 100644 --- a/packages/twenty-server/src/modules/messaging/common/standard-objects/message-folder.workspace-entity.ts +++ b/packages/twenty-server/src/modules/messaging/common/standard-objects/message-folder.workspace-entity.ts @@ -11,6 +11,7 @@ import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator'; import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; import { WorkspaceIndex } from 'src/engine/twenty-orm/decorators/workspace-index.decorator'; +import { WorkspaceIsFieldUIReadOnly } from 'src/engine/twenty-orm/decorators/workspace-is-field-ui-readonly.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 { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; @@ -52,6 +53,7 @@ export class MessageFolderWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Folder name`, icon: 'IconFolder', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() name: string | null; @@ -65,6 +67,7 @@ export class MessageFolderWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'messageFolders', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() messageChannel: Relation; @WorkspaceField({ @@ -74,6 +77,7 @@ export class MessageFolderWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Sync Cursor`, icon: 'IconHash', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() syncCursor: string | null; @@ -85,6 +89,7 @@ export class MessageFolderWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconCheck', defaultValue: false, }) + @WorkspaceIsFieldUIReadOnly() isSentFolder: boolean; @WorkspaceField({ @@ -95,6 +100,7 @@ export class MessageFolderWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconCheck', defaultValue: false, }) + @WorkspaceIsFieldUIReadOnly() isSynced: boolean; @WorkspaceField({ @@ -105,6 +111,7 @@ export class MessageFolderWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconFolder', defaultValue: null, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() parentFolderId: string | null; @@ -116,6 +123,7 @@ export class MessageFolderWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconHash', defaultValue: null, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() externalId: string | null; @@ -141,6 +149,7 @@ export class MessageFolderWorkspaceEntity extends BaseWorkspaceEntity { ], defaultValue: `'${MessageFolderPendingSyncAction.NONE}'`, }) + @WorkspaceIsFieldUIReadOnly() pendingSyncAction: MessageFolderPendingSyncAction; @WorkspaceJoinColumn('messageChannel') diff --git a/packages/twenty-server/src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts b/packages/twenty-server/src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts index 3b435fddc3c..a372e2c0e45 100644 --- a/packages/twenty-server/src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts +++ b/packages/twenty-server/src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts @@ -12,6 +12,7 @@ import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/i import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.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 { 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 { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; @@ -70,6 +71,7 @@ export class MessageParticipantWorkspaceEntity extends BaseWorkspaceEntity { ], defaultValue: `'${MessageParticipantRole.FROM}'`, }) + @WorkspaceIsFieldUIReadOnly() role: MessageParticipantRole; @WorkspaceField({ @@ -79,6 +81,7 @@ export class MessageParticipantWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Handle`, icon: 'IconAt', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() handle: string | null; @@ -89,6 +92,7 @@ export class MessageParticipantWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Display Name`, icon: 'IconUser', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() displayName: string | null; @@ -102,6 +106,7 @@ export class MessageParticipantWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'messageParticipants', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() message: Relation; @WorkspaceJoinColumn('message') @@ -117,6 +122,7 @@ export class MessageParticipantWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'messageParticipants', onDelete: RelationOnDeleteAction.SET_NULL, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() person: Relation | null; @@ -133,6 +139,7 @@ export class MessageParticipantWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'messageParticipants', onDelete: RelationOnDeleteAction.SET_NULL, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() workspaceMember: Relation | null; diff --git a/packages/twenty-server/src/modules/messaging/common/standard-objects/message-thread.workspace-entity.ts b/packages/twenty-server/src/modules/messaging/common/standard-objects/message-thread.workspace-entity.ts index e7926561552..c1708a286c9 100644 --- a/packages/twenty-server/src/modules/messaging/common/standard-objects/message-thread.workspace-entity.ts +++ b/packages/twenty-server/src/modules/messaging/common/standard-objects/message-thread.workspace-entity.ts @@ -7,6 +7,7 @@ import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/i import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator'; +import { WorkspaceIsFieldUIReadOnly } from 'src/engine/twenty-orm/decorators/workspace-is-field-ui-readonly.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 { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; @@ -36,6 +37,7 @@ export class MessageThreadWorkspaceEntity extends BaseWorkspaceEntity { inverseSideTarget: () => MessageWorkspaceEntity, onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() messages: Relation; } diff --git a/packages/twenty-server/src/modules/messaging/common/standard-objects/message.workspace-entity.ts b/packages/twenty-server/src/modules/messaging/common/standard-objects/message.workspace-entity.ts index f34996a6af9..490a8adb031 100644 --- a/packages/twenty-server/src/modules/messaging/common/standard-objects/message.workspace-entity.ts +++ b/packages/twenty-server/src/modules/messaging/common/standard-objects/message.workspace-entity.ts @@ -8,6 +8,7 @@ import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/i import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.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 { 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 { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; @@ -39,6 +40,7 @@ export class MessageWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Message id from the message header`, icon: 'IconHash', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() headerMessageId: string | null; @@ -49,6 +51,7 @@ export class MessageWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Subject`, icon: 'IconMessage', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() subject: string | null; @@ -59,6 +62,7 @@ export class MessageWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Text`, icon: 'IconMessage', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() text: string | null; @@ -69,6 +73,7 @@ export class MessageWorkspaceEntity extends BaseWorkspaceEntity { description: msg`The date the message was received`, icon: 'IconCalendar', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() receivedAt: Date | null; @@ -82,6 +87,7 @@ export class MessageWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'messages', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() messageThread: Relation | null; @@ -97,6 +103,7 @@ export class MessageWorkspaceEntity extends BaseWorkspaceEntity { inverseSideTarget: () => MessageParticipantWorkspaceEntity, onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() messageParticipants: Relation; @@ -109,6 +116,7 @@ export class MessageWorkspaceEntity extends BaseWorkspaceEntity { inverseSideTarget: () => MessageChannelMessageAssociationWorkspaceEntity, onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() messageChannelMessageAssociations: Relation< MessageChannelMessageAssociationWorkspaceEntity[] diff --git a/packages/twenty-server/src/modules/note/standard-objects/note-target.workspace-entity.ts b/packages/twenty-server/src/modules/note/standard-objects/note-target.workspace-entity.ts index c66eaa82db6..e30c375e30f 100644 --- a/packages/twenty-server/src/modules/note/standard-objects/note-target.workspace-entity.ts +++ b/packages/twenty-server/src/modules/note/standard-objects/note-target.workspace-entity.ts @@ -9,6 +9,7 @@ import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity import { CustomWorkspaceEntity } from 'src/engine/twenty-orm/custom.workspace-entity'; import { WorkspaceDynamicRelation } from 'src/engine/twenty-orm/decorators/workspace-dynamic-relation.decorator'; import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.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 { WorkspaceJoinColumn } from 'src/engine/twenty-orm/decorators/workspace-join-column.decorator'; @@ -41,6 +42,7 @@ export class NoteTargetWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'noteTargets', onDelete: RelationOnDeleteAction.SET_NULL, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() note: Relation | null; @@ -57,6 +59,7 @@ export class NoteTargetWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'noteTargets', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() person: Relation | null; @@ -73,6 +76,7 @@ export class NoteTargetWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'noteTargets', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() company: Relation | null; @@ -89,6 +93,7 @@ export class NoteTargetWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'noteTargets', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() opportunity: Relation | null; diff --git a/packages/twenty-server/src/modules/task/standard-objects/task-target.workspace-entity.ts b/packages/twenty-server/src/modules/task/standard-objects/task-target.workspace-entity.ts index c6c7f602651..d055436b8b2 100644 --- a/packages/twenty-server/src/modules/task/standard-objects/task-target.workspace-entity.ts +++ b/packages/twenty-server/src/modules/task/standard-objects/task-target.workspace-entity.ts @@ -9,6 +9,7 @@ import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity import { CustomWorkspaceEntity } from 'src/engine/twenty-orm/custom.workspace-entity'; import { WorkspaceDynamicRelation } from 'src/engine/twenty-orm/decorators/workspace-dynamic-relation.decorator'; import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.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 { WorkspaceJoinColumn } from 'src/engine/twenty-orm/decorators/workspace-join-column.decorator'; @@ -41,6 +42,7 @@ export class TaskTargetWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'taskTargets', onDelete: RelationOnDeleteAction.SET_NULL, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() task: Relation | null; @@ -57,6 +59,7 @@ export class TaskTargetWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'taskTargets', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() person: Relation | null; @@ -73,6 +76,7 @@ export class TaskTargetWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'taskTargets', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() company: Relation | null; @@ -89,6 +93,7 @@ export class TaskTargetWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'taskTargets', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() opportunity: Relation | null; diff --git a/packages/twenty-server/src/modules/timeline/constants/system-objects-with-timeline-activities.constant.ts b/packages/twenty-server/src/modules/timeline/constants/system-objects-with-timeline-activities.constant.ts new file mode 100644 index 00000000000..6f5a6fbddb6 --- /dev/null +++ b/packages/twenty-server/src/modules/timeline/constants/system-objects-with-timeline-activities.constant.ts @@ -0,0 +1,4 @@ +export const SYSTEM_OBJECTS_WITH_TIMELINE_ACTIVITIES = [ + 'noteTarget', + 'taskTarget', +]; diff --git a/packages/twenty-server/src/modules/timeline/jobs/upsert-timeline-activity-from-internal-event.job.ts b/packages/twenty-server/src/modules/timeline/jobs/upsert-timeline-activity-from-internal-event.job.ts index ce4f985c2c6..4e46f7643b8 100644 --- a/packages/twenty-server/src/modules/timeline/jobs/upsert-timeline-activity-from-internal-event.job.ts +++ b/packages/twenty-server/src/modules/timeline/jobs/upsert-timeline-activity-from-internal-event.job.ts @@ -8,6 +8,7 @@ import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queu import { GlobalWorkspaceOrmManager } from 'src/engine/twenty-orm/global-workspace-datasource/global-workspace-orm.manager'; import { buildSystemAuthContext } from 'src/engine/twenty-orm/utils/build-system-auth-context.util'; import { WorkspaceEventBatch } from 'src/engine/workspace-event-emitter/types/workspace-event-batch.type'; +import { SYSTEM_OBJECTS_WITH_TIMELINE_ACTIVITIES } from 'src/modules/timeline/constants/system-objects-with-timeline-activities.constant'; import { TimelineActivityService } from 'src/modules/timeline/services/timeline-activity.service'; import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; @@ -28,8 +29,9 @@ export class UpsertTimelineActivityFromInternalEvent { if ( workspaceEventBatch.objectMetadata.isSystem && - workspaceEventBatch.objectMetadata.nameSingular !== 'noteTarget' && - workspaceEventBatch.objectMetadata.nameSingular !== 'taskTarget' + !SYSTEM_OBJECTS_WITH_TIMELINE_ACTIVITIES.includes( + workspaceEventBatch.objectMetadata.nameSingular, + ) ) { return; } diff --git a/packages/twenty-server/src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts b/packages/twenty-server/src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts index 606d72bb3b0..d79700c423d 100644 --- a/packages/twenty-server/src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts +++ b/packages/twenty-server/src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts @@ -11,6 +11,7 @@ import { CustomWorkspaceEntity } from 'src/engine/twenty-orm/custom.workspace-en import { WorkspaceDynamicRelation } from 'src/engine/twenty-orm/decorators/workspace-dynamic-relation.decorator'; import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.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 { 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 { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; @@ -50,6 +51,7 @@ export class TimelineActivityWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconCalendar', defaultValue: 'now', }) + @WorkspaceIsFieldUIReadOnly() happensAt: Date; @WorkspaceField({ @@ -59,6 +61,7 @@ export class TimelineActivityWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Event name`, icon: 'IconAbc', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() name: string | null; @@ -69,6 +72,7 @@ export class TimelineActivityWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Json value for event details`, icon: 'IconListDetails', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() properties: JSON | null; @@ -80,6 +84,7 @@ export class TimelineActivityWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Cached record name`, icon: 'IconAbc', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() linkedRecordCachedName: string | null; @@ -90,6 +95,7 @@ export class TimelineActivityWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Linked Record id`, icon: 'IconAbc', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() linkedRecordId: string | null; @@ -100,6 +106,7 @@ export class TimelineActivityWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Linked Object Metadata Id`, icon: 'IconAbc', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() linkedObjectMetadataId: string | null; @@ -114,6 +121,7 @@ export class TimelineActivityWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'timelineActivities', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() workspaceMember: Relation | null; @@ -132,6 +140,7 @@ export class TimelineActivityWorkspaceEntity extends BaseWorkspaceEntity { isMorphRelation: true, morphId: TIMELINE_ACTIVITY_STANDARD_FIELD_IDS.targetMorphId, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() targetPerson: Relation | null; @@ -150,6 +159,7 @@ export class TimelineActivityWorkspaceEntity extends BaseWorkspaceEntity { isMorphRelation: true, morphId: TIMELINE_ACTIVITY_STANDARD_FIELD_IDS.targetMorphId, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() targetCompany: Relation | null; @@ -168,6 +178,7 @@ export class TimelineActivityWorkspaceEntity extends BaseWorkspaceEntity { isMorphRelation: true, morphId: TIMELINE_ACTIVITY_STANDARD_FIELD_IDS.targetMorphId, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() targetOpportunity: Relation | null; @@ -186,6 +197,7 @@ export class TimelineActivityWorkspaceEntity extends BaseWorkspaceEntity { isMorphRelation: true, morphId: TIMELINE_ACTIVITY_STANDARD_FIELD_IDS.targetMorphId, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() targetNote: Relation | null; @@ -204,6 +216,7 @@ export class TimelineActivityWorkspaceEntity extends BaseWorkspaceEntity { isMorphRelation: true, morphId: TIMELINE_ACTIVITY_STANDARD_FIELD_IDS.targetMorphId, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() targetTask: Relation | null; @@ -222,6 +235,7 @@ export class TimelineActivityWorkspaceEntity extends BaseWorkspaceEntity { isMorphRelation: true, morphId: TIMELINE_ACTIVITY_STANDARD_FIELD_IDS.targetMorphId, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() targetWorkflow: Relation | null; @@ -240,6 +254,7 @@ export class TimelineActivityWorkspaceEntity extends BaseWorkspaceEntity { isMorphRelation: true, morphId: TIMELINE_ACTIVITY_STANDARD_FIELD_IDS.targetMorphId, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() targetWorkflowVersion: Relation | null; @@ -258,6 +273,7 @@ export class TimelineActivityWorkspaceEntity extends BaseWorkspaceEntity { isMorphRelation: true, morphId: TIMELINE_ACTIVITY_STANDARD_FIELD_IDS.targetMorphId, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() targetWorkflowRun: Relation | null; @@ -276,6 +292,7 @@ export class TimelineActivityWorkspaceEntity extends BaseWorkspaceEntity { isMorphRelation: true, morphId: TIMELINE_ACTIVITY_STANDARD_FIELD_IDS.targetMorphId, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() targetDashboard: Relation | null; diff --git a/packages/twenty-server/src/modules/workflow/common/standard-objects/workflow-automated-trigger.workspace-entity.ts b/packages/twenty-server/src/modules/workflow/common/standard-objects/workflow-automated-trigger.workspace-entity.ts index 0c67573d383..be28f75f5f7 100644 --- a/packages/twenty-server/src/modules/workflow/common/standard-objects/workflow-automated-trigger.workspace-entity.ts +++ b/packages/twenty-server/src/modules/workflow/common/standard-objects/workflow-automated-trigger.workspace-entity.ts @@ -8,6 +8,7 @@ import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfa import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.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 { 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'; @@ -53,6 +54,7 @@ export class WorkflowAutomatedTriggerWorkspaceEntity extends BaseWorkspaceEntity }, ], }) + @WorkspaceIsFieldUIReadOnly() type: AutomatedTriggerType; @WorkspaceField({ @@ -61,6 +63,7 @@ export class WorkflowAutomatedTriggerWorkspaceEntity extends BaseWorkspaceEntity label: msg`Settings`, description: msg`The workflow automated trigger settings`, }) + @WorkspaceIsFieldUIReadOnly() settings: AutomatedTriggerSettings; @WorkspaceRelation({ @@ -73,6 +76,7 @@ export class WorkflowAutomatedTriggerWorkspaceEntity extends BaseWorkspaceEntity inverseSideFieldKey: 'automatedTriggers', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() workflow: Relation; @WorkspaceJoinColumn('workflow') 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 cbe2e01afb8..2e659b88b43 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 @@ -18,9 +18,9 @@ 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 { 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'; @@ -94,7 +94,6 @@ export const SEARCH_FIELDS_FOR_WORKFLOW_RUNS: FieldTypeAndNameMetadata[] = [ }) @WorkspaceIsSystem() @WorkspaceIsNotAuditLogged() -@WorkspaceIsObjectUIReadOnly() export class WorkflowRunWorkspaceEntity extends BaseWorkspaceEntity { @WorkspaceField({ standardId: WORKFLOW_RUN_STANDARD_FIELD_IDS.name, @@ -103,6 +102,7 @@ export class WorkflowRunWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Name of the workflow run`, icon: 'IconSettingsAutomation', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() name: string | null; @@ -113,6 +113,7 @@ export class WorkflowRunWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Workflow run enqueued at`, icon: 'IconHistory', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() enqueuedAt: Date | null; @@ -123,6 +124,7 @@ export class WorkflowRunWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Workflow run started at`, icon: 'IconHistory', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() startedAt: string | null; @@ -133,6 +135,7 @@ export class WorkflowRunWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Workflow run ended at`, icon: 'IconHistory', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() endedAt: string | null; @@ -188,6 +191,7 @@ export class WorkflowRunWorkspaceEntity extends BaseWorkspaceEntity { ], defaultValue: "'NOT_STARTED'", }) + @WorkspaceIsFieldUIReadOnly() status: WorkflowRunStatus; @WorkspaceField({ @@ -197,6 +201,7 @@ export class WorkflowRunWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconCreativeCommonsSa', description: msg`The executor of the workflow`, }) + @WorkspaceIsFieldUIReadOnly() createdBy: ActorMetadata; @WorkspaceField({ @@ -206,6 +211,7 @@ export class WorkflowRunWorkspaceEntity extends BaseWorkspaceEntity { description: msg`State of the workflow run`, icon: 'IconHierarchy2', }) + @WorkspaceIsFieldUIReadOnly() state: WorkflowRunState; @WorkspaceField({ @@ -216,6 +222,7 @@ export class WorkflowRunWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconHierarchy2', defaultValue: 0, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsSystem() position: number; @@ -230,6 +237,7 @@ export class WorkflowRunWorkspaceEntity extends BaseWorkspaceEntity { SEARCH_FIELDS_FOR_WORKFLOW_RUNS, ), }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() @WorkspaceIsSystem() @WorkspaceFieldIndex({ indexType: IndexType.GIN }) @@ -246,6 +254,7 @@ export class WorkflowRunWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'runs', onDelete: RelationOnDeleteAction.SET_NULL, }) + @WorkspaceIsFieldUIReadOnly() workflowVersion: Relation; @WorkspaceJoinColumn('workflowVersion') @@ -261,6 +270,7 @@ export class WorkflowRunWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'runs', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() workflow: Relation; @WorkspaceJoinColumn('workflow') @@ -275,6 +285,7 @@ export class WorkflowRunWorkspaceEntity extends BaseWorkspaceEntity { inverseSideTarget: () => FavoriteWorkspaceEntity, onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsSystem() favorites: Relation; @@ -287,6 +298,7 @@ export class WorkflowRunWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'targetWorkflowRun', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsSystem() timelineActivities: Relation; } 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 fc7b33e3c66..e82c860de63 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 @@ -12,8 +12,8 @@ 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 { 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'; @@ -81,7 +81,6 @@ export const SEARCH_FIELDS_FOR_WORKFLOW_VERSIONS: FieldTypeAndNameMetadata[] = [ labelIdentifierStandardId: WORKFLOW_VERSION_STANDARD_FIELD_IDS.name, }) @WorkspaceIsSystem() -@WorkspaceIsObjectUIReadOnly() export class WorkflowVersionWorkspaceEntity extends BaseWorkspaceEntity { @WorkspaceField({ standardId: WORKFLOW_VERSION_STANDARD_FIELD_IDS.name, @@ -90,6 +89,7 @@ export class WorkflowVersionWorkspaceEntity extends BaseWorkspaceEntity { description: msg`The workflow version name`, icon: 'IconSettingsAutomation', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() name: string | null; @@ -100,6 +100,7 @@ export class WorkflowVersionWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Json object to provide trigger`, icon: 'IconSettingsAutomation', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() trigger: WorkflowTrigger | null; @@ -110,6 +111,7 @@ export class WorkflowVersionWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Json object to provide steps`, icon: 'IconSettingsAutomation', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() steps: WorkflowAction[] | null; @@ -122,6 +124,7 @@ export class WorkflowVersionWorkspaceEntity extends BaseWorkspaceEntity { options: WorkflowVersionStatusOptions, defaultValue: "'DRAFT'", }) + @WorkspaceIsFieldUIReadOnly() status: WorkflowVersionStatus; @WorkspaceField({ @@ -132,6 +135,7 @@ export class WorkflowVersionWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconHierarchy2', defaultValue: 0, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsSystem() position: number; @@ -146,6 +150,7 @@ export class WorkflowVersionWorkspaceEntity extends BaseWorkspaceEntity { SEARCH_FIELDS_FOR_WORKFLOW_VERSIONS, ), }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() @WorkspaceIsSystem() @WorkspaceFieldIndex({ indexType: IndexType.GIN }) @@ -162,6 +167,7 @@ export class WorkflowVersionWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'versions', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() workflow: Relation; @@ -177,6 +183,7 @@ export class WorkflowVersionWorkspaceEntity extends BaseWorkspaceEntity { inverseSideTarget: () => WorkflowRunWorkspaceEntity, onDelete: RelationOnDeleteAction.SET_NULL, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() runs: Relation; @@ -189,6 +196,7 @@ export class WorkflowVersionWorkspaceEntity extends BaseWorkspaceEntity { inverseSideTarget: () => FavoriteWorkspaceEntity, onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsSystem() favorites: Relation; @@ -201,6 +209,7 @@ export class WorkflowVersionWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'targetWorkflowVersion', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsSystem() timelineActivities: Relation; } diff --git a/packages/twenty-server/src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts b/packages/twenty-server/src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts index 50f5ee9ed8c..8f4e6ec5b65 100644 --- a/packages/twenty-server/src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts +++ b/packages/twenty-server/src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts @@ -19,6 +19,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'; @@ -107,6 +108,7 @@ export class WorkspaceMemberWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconHierarchy2', defaultValue: 0, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsSystem() position: number; @@ -117,6 +119,7 @@ export class WorkspaceMemberWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Workspace member name`, icon: 'IconCircleUser', }) + @WorkspaceIsFieldUIReadOnly() name: FullNameMetadata; @WorkspaceField({ @@ -127,6 +130,7 @@ export class WorkspaceMemberWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconColorSwatch', defaultValue: "'System'", }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsSystem() colorScheme: string; @@ -138,6 +142,7 @@ export class WorkspaceMemberWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconLanguage', defaultValue: `'${SOURCE_LOCALE}'`, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsSystem() locale: keyof typeof APP_LOCALES; @@ -148,6 +153,7 @@ export class WorkspaceMemberWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Workspace member avatar`, icon: 'IconFileUpload', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() @WorkspaceIsSystem() avatarUrl: string | null; @@ -160,6 +166,7 @@ export class WorkspaceMemberWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Related user email address`, icon: 'IconMail', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() @WorkspaceIsSystem() userEmail: string | null; @@ -174,6 +181,7 @@ export class WorkspaceMemberWorkspaceEntity extends BaseWorkspaceEntity { dataType: NumberDataType.INT, }, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsSystem() calendarStartDay: number; @@ -184,6 +192,7 @@ export class WorkspaceMemberWorkspaceEntity extends BaseWorkspaceEntity { description: msg`Associated User Id`, icon: 'IconCircleUsers', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsSystem() userId: string; @@ -195,6 +204,7 @@ export class WorkspaceMemberWorkspaceEntity extends BaseWorkspaceEntity { description: msg`User time zone`, icon: 'IconTimezone', }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsSystem() timeZone: string; @@ -232,6 +242,7 @@ export class WorkspaceMemberWorkspaceEntity extends BaseWorkspaceEntity { ], defaultValue: `'${WorkspaceMemberDateFormatEnum.SYSTEM}'`, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsSystem() dateFormat: string; @@ -263,6 +274,7 @@ export class WorkspaceMemberWorkspaceEntity extends BaseWorkspaceEntity { ], defaultValue: `'${WorkspaceMemberTimeFormatEnum.SYSTEM}'`, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsSystem() timeFormat: string; @@ -277,6 +289,7 @@ export class WorkspaceMemberWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'assignee', onDelete: RelationOnDeleteAction.SET_NULL, }) + @WorkspaceIsFieldUIReadOnly() assignedTasks: Relation; @WorkspaceRelation({ @@ -289,6 +302,7 @@ export class WorkspaceMemberWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'forWorkspaceMember', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() favorites: Relation; @WorkspaceRelation({ @@ -301,6 +315,7 @@ export class WorkspaceMemberWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'accountOwner', onDelete: RelationOnDeleteAction.SET_NULL, }) + @WorkspaceIsFieldUIReadOnly() accountOwnerForCompanies: Relation; @WorkspaceRelation({ @@ -313,6 +328,7 @@ export class WorkspaceMemberWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'author', onDelete: RelationOnDeleteAction.SET_NULL, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsSystem() authoredAttachments: Relation; @@ -326,6 +342,7 @@ export class WorkspaceMemberWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'accountOwner', onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() connectedAccounts: Relation; @WorkspaceRelation({ @@ -338,6 +355,7 @@ export class WorkspaceMemberWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'workspaceMember', onDelete: RelationOnDeleteAction.SET_NULL, }) + @WorkspaceIsFieldUIReadOnly() messageParticipants: Relation; @WorkspaceRelation({ @@ -350,6 +368,7 @@ export class WorkspaceMemberWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'workspaceMember', onDelete: RelationOnDeleteAction.SET_NULL, }) + @WorkspaceIsFieldUIReadOnly() blocklist: Relation; @WorkspaceRelation({ @@ -362,6 +381,7 @@ export class WorkspaceMemberWorkspaceEntity extends BaseWorkspaceEntity { inverseSideFieldKey: 'workspaceMember', onDelete: RelationOnDeleteAction.SET_NULL, }) + @WorkspaceIsFieldUIReadOnly() calendarEventParticipants: Relation< CalendarEventParticipantWorkspaceEntity[] >; @@ -375,6 +395,7 @@ export class WorkspaceMemberWorkspaceEntity extends BaseWorkspaceEntity { inverseSideTarget: () => TimelineActivityWorkspaceEntity, onDelete: RelationOnDeleteAction.CASCADE, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() @WorkspaceIsSystem() timelineActivities: Relation; @@ -390,6 +411,7 @@ export class WorkspaceMemberWorkspaceEntity extends BaseWorkspaceEntity { SEARCH_FIELDS_FOR_WORKSPACE_MEMBER, ), }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsNullable() @WorkspaceIsSystem() @WorkspaceFieldIndex({ indexType: IndexType.GIN }) @@ -435,6 +457,7 @@ export class WorkspaceMemberWorkspaceEntity extends BaseWorkspaceEntity { ], defaultValue: `'${WorkspaceMemberNumberFormatEnum.SYSTEM}'`, }) + @WorkspaceIsFieldUIReadOnly() @WorkspaceIsSystem() numberFormat: string; }