Skip to content
Open
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand All @@ -23,6 +24,15 @@ export const useTimelineActivities = (
nameSingular: targetableObject.targetObjectNameSingular,
});

const { objectMetadataItem: timelineActivityMetadata } =
useObjectMetadataItem({
objectNameSingular: CoreObjectNameSingular.TimelineActivity,
});

const hasTimelineActivityField = timelineActivityMetadata.fields.some(
(field) => field.name === targetableObjectFieldIdName,
);

const { recordGqlFields: depthOneRecordGqlFields } =
useGenerateDepthRecordGqlFieldsFromObject({
objectNameSingular: CoreObjectNameSingular.TimelineActivity,
Expand All @@ -34,6 +44,7 @@ export const useTimelineActivities = (
loading: loadingTimelineActivities,
fetchMoreRecords,
} = useFindManyRecords<TimelineActivity>({
skip: !hasTimelineActivityField,
objectNameSingular: CoreObjectNameSingular.TimelineActivity,
filter: {
[targetableObjectFieldIdName]: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ const turnSortsIntoOrderByTestUseCases: TurnSortsIntoOrderTestContext[] = [
direction: ViewSortDirection.ASC,
},
],
expected: [],
expected: [{ id: 'AscNullsFirst' }],
objectMetadataItemOverrides: {
isRemote: true,
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,5 +51,11 @@ export const turnSortsIntoOrderBy = (
return [...sortsOrderBy, ...positionOrderBy].flat();
}

return sortsOrderBy.flat();
const defaultOrderBy = [
{
id: 'AscNullsFirst',
},
] satisfies RecordGqlOperationOrderBy;

return [...sortsOrderBy, ...defaultOrderBy].flat();
};
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ export class AttachmentWorkspaceEntity extends BaseWorkspaceEntity {
description: msg`Attachment name`,
icon: 'IconFileUpload',
})
@WorkspaceIsFieldUIReadOnly()
@WorkspaceIsNullable()
name: string | null;

Expand All @@ -59,6 +60,7 @@ export class AttachmentWorkspaceEntity extends BaseWorkspaceEntity {
description: msg`Attachment full path`,
icon: 'IconLink',
})
@WorkspaceIsFieldUIReadOnly()
@WorkspaceIsNullable()
fullPath: string | null;

Expand All @@ -70,6 +72,7 @@ export class AttachmentWorkspaceEntity extends BaseWorkspaceEntity {
description: msg`Attachment type (deprecated - use fileCategory)`,
icon: 'IconList',
})
@WorkspaceIsFieldUIReadOnly()
@WorkspaceIsNullable()
type: string | null;

Expand Down Expand Up @@ -131,6 +134,7 @@ export class AttachmentWorkspaceEntity extends BaseWorkspaceEntity {
],
defaultValue: "'OTHER'",
})
@WorkspaceIsFieldUIReadOnly()
fileCategory: string;

@WorkspaceField({
Expand All @@ -154,6 +158,7 @@ export class AttachmentWorkspaceEntity extends BaseWorkspaceEntity {
inverseSideFieldKey: 'authoredAttachments',
onDelete: RelationOnDeleteAction.SET_NULL,
})
@WorkspaceIsFieldUIReadOnly()
@WorkspaceIsNullable()
author: Relation<WorkspaceMemberWorkspaceEntity> | null;

Expand All @@ -170,6 +175,7 @@ export class AttachmentWorkspaceEntity extends BaseWorkspaceEntity {
inverseSideFieldKey: 'attachments',
onDelete: RelationOnDeleteAction.SET_NULL,
})
@WorkspaceIsFieldUIReadOnly()
@WorkspaceIsNullable()
task: Relation<TaskWorkspaceEntity> | null;

Expand All @@ -186,6 +192,7 @@ export class AttachmentWorkspaceEntity extends BaseWorkspaceEntity {
inverseSideFieldKey: 'attachments',
onDelete: RelationOnDeleteAction.SET_NULL,
})
@WorkspaceIsFieldUIReadOnly()
@WorkspaceIsNullable()
note: Relation<NoteWorkspaceEntity> | null;

Expand All @@ -202,6 +209,7 @@ export class AttachmentWorkspaceEntity extends BaseWorkspaceEntity {
inverseSideFieldKey: 'attachments',
onDelete: RelationOnDeleteAction.CASCADE,
})
@WorkspaceIsFieldUIReadOnly()
@WorkspaceIsNullable()
person: Relation<PersonWorkspaceEntity> | null;

Expand All @@ -218,6 +226,7 @@ export class AttachmentWorkspaceEntity extends BaseWorkspaceEntity {
inverseSideFieldKey: 'attachments',
onDelete: RelationOnDeleteAction.CASCADE,
})
@WorkspaceIsFieldUIReadOnly()
@WorkspaceIsNullable()
company: Relation<CompanyWorkspaceEntity> | null;

Expand All @@ -234,6 +243,7 @@ export class AttachmentWorkspaceEntity extends BaseWorkspaceEntity {
inverseSideFieldKey: 'attachments',
onDelete: RelationOnDeleteAction.CASCADE,
})
@WorkspaceIsFieldUIReadOnly()
@WorkspaceIsNullable()
opportunity: Relation<OpportunityWorkspaceEntity> | null;

Expand All @@ -250,6 +260,7 @@ export class AttachmentWorkspaceEntity extends BaseWorkspaceEntity {
inverseSideFieldKey: 'attachments',
onDelete: RelationOnDeleteAction.CASCADE,
})
@WorkspaceIsFieldUIReadOnly()
@WorkspaceIsNullable()
dashboard: Relation<DashboardWorkspaceEntity> | null;

Expand All @@ -266,6 +277,7 @@ export class AttachmentWorkspaceEntity extends BaseWorkspaceEntity {
inverseSideFieldKey: 'attachments',
onDelete: RelationOnDeleteAction.CASCADE,
})
@WorkspaceIsFieldUIReadOnly()
@WorkspaceIsNullable()
workflow: Relation<WorkflowWorkspaceEntity> | null;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -35,6 +36,7 @@ export class BlocklistWorkspaceEntity extends BaseWorkspaceEntity {
description: msg`Handle`,
icon: 'IconAt',
})
@WorkspaceIsFieldUIReadOnly()
@WorkspaceIsNullable()
handle: string | null;

Expand All @@ -48,6 +50,7 @@ export class BlocklistWorkspaceEntity extends BaseWorkspaceEntity {
inverseSideFieldKey: 'blocklist',
onDelete: RelationOnDeleteAction.SET_NULL,
})
@WorkspaceIsFieldUIReadOnly()
workspaceMember: Relation<WorkspaceMemberWorkspaceEntity>;

@WorkspaceJoinColumn('workspaceMember')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -43,6 +44,7 @@ export class CalendarChannelEventAssociationWorkspaceEntity extends BaseWorkspac
description: msg`Event external ID`,
icon: 'IconCalendar',
})
@WorkspaceIsFieldUIReadOnly()
@WorkspaceIsNullable()
eventExternalId: string | null;

Expand All @@ -54,6 +56,7 @@ export class CalendarChannelEventAssociationWorkspaceEntity extends BaseWorkspac
description: msg`Recurring Event ID`,
icon: 'IconHistory',
})
@WorkspaceIsFieldUIReadOnly()
@WorkspaceIsNullable()
recurringEventExternalId: string | null;

Expand All @@ -68,6 +71,7 @@ export class CalendarChannelEventAssociationWorkspaceEntity extends BaseWorkspac
inverseSideFieldKey: 'calendarChannelEventAssociations',
onDelete: RelationOnDeleteAction.CASCADE,
})
@WorkspaceIsFieldUIReadOnly()
calendarChannel: Relation<CalendarChannelWorkspaceEntity>;

@WorkspaceJoinColumn('calendarChannel')
Expand All @@ -84,6 +88,7 @@ export class CalendarChannelEventAssociationWorkspaceEntity extends BaseWorkspac
inverseSideFieldKey: 'calendarChannelEventAssociations',
onDelete: RelationOnDeleteAction.CASCADE,
})
@WorkspaceIsFieldUIReadOnly()
calendarEvent: Relation<CalendarEventWorkspaceEntity>;

@WorkspaceJoinColumn('calendarEvent')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -87,6 +88,7 @@ export class CalendarChannelWorkspaceEntity extends BaseWorkspaceEntity {
description: msg`Handle`,
icon: 'IconAt',
})
@WorkspaceIsFieldUIReadOnly()
@WorkspaceIsNullable()
handle: string | null;

Expand Down Expand Up @@ -129,6 +131,7 @@ export class CalendarChannelWorkspaceEntity extends BaseWorkspaceEntity {
},
],
})
@WorkspaceIsFieldUIReadOnly()
@WorkspaceIsNullable()
syncStatus: CalendarChannelSyncStatus | null;

Expand Down Expand Up @@ -190,6 +193,7 @@ export class CalendarChannelWorkspaceEntity extends BaseWorkspaceEntity {
],
defaultValue: `'${CalendarChannelSyncStage.PENDING_CONFIGURATION}'`,
})
@WorkspaceIsFieldUIReadOnly()
syncStage: CalendarChannelSyncStage;

@WorkspaceField({
Expand All @@ -214,6 +218,7 @@ export class CalendarChannelWorkspaceEntity extends BaseWorkspaceEntity {
],
defaultValue: `'${CalendarChannelVisibility.SHARE_EVERYTHING}'`,
})
@WorkspaceIsFieldUIReadOnly()
visibility: string;

@WorkspaceField({
Expand All @@ -225,6 +230,7 @@ export class CalendarChannelWorkspaceEntity extends BaseWorkspaceEntity {
icon: 'IconUserCircle',
defaultValue: true,
})
@WorkspaceIsFieldUIReadOnly()
isContactAutoCreationEnabled: boolean;

@WorkspaceField({
Expand Down Expand Up @@ -262,6 +268,7 @@ export class CalendarChannelWorkspaceEntity extends BaseWorkspaceEntity {
],
defaultValue: `'${CalendarChannelContactAutoCreationPolicy.AS_PARTICIPANT_AND_ORGANIZER}'`,
})
@WorkspaceIsFieldUIReadOnly()
contactAutoCreationPolicy: CalendarChannelContactAutoCreationPolicy;

@WorkspaceField({
Expand All @@ -272,6 +279,7 @@ export class CalendarChannelWorkspaceEntity extends BaseWorkspaceEntity {
icon: 'IconRefresh',
defaultValue: true,
})
@WorkspaceIsFieldUIReadOnly()
isSyncEnabled: boolean;

@WorkspaceField({
Expand All @@ -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;

Expand All @@ -291,6 +300,7 @@ export class CalendarChannelWorkspaceEntity extends BaseWorkspaceEntity {
description: msg`Last sync date`,
icon: 'IconHistory',
})
@WorkspaceIsFieldUIReadOnly()
@WorkspaceIsNullable()
syncedAt: string | null;

Expand All @@ -301,6 +311,7 @@ export class CalendarChannelWorkspaceEntity extends BaseWorkspaceEntity {
description: msg`Sync stage started at`,
icon: 'IconHistory',
})
@WorkspaceIsFieldUIReadOnly()
@WorkspaceIsNullable()
syncStageStartedAt: string | null;

Expand All @@ -312,6 +323,7 @@ export class CalendarChannelWorkspaceEntity extends BaseWorkspaceEntity {
icon: 'IconX',
defaultValue: 0,
})
@WorkspaceIsFieldUIReadOnly()
throttleFailureCount: number;

@WorkspaceRelation({
Expand All @@ -324,6 +336,7 @@ export class CalendarChannelWorkspaceEntity extends BaseWorkspaceEntity {
inverseSideFieldKey: 'calendarChannels',
onDelete: RelationOnDeleteAction.CASCADE,
})
@WorkspaceIsFieldUIReadOnly()
connectedAccount: Relation<ConnectedAccountWorkspaceEntity>;

@WorkspaceJoinColumn('connectedAccount')
Expand All @@ -339,6 +352,7 @@ export class CalendarChannelWorkspaceEntity extends BaseWorkspaceEntity {
inverseSideTarget: () => CalendarChannelEventAssociationWorkspaceEntity,
onDelete: RelationOnDeleteAction.CASCADE,
})
@WorkspaceIsFieldUIReadOnly()
calendarChannelEventAssociations: Relation<
CalendarChannelEventAssociationWorkspaceEntity[]
>;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -47,6 +48,7 @@ export class CalendarEventParticipantWorkspaceEntity extends BaseWorkspaceEntity
description: msg`Handle`,
icon: 'IconMail',
})
@WorkspaceIsFieldUIReadOnly()
@WorkspaceIsNullable()
handle: string | null;

Expand All @@ -57,6 +59,7 @@ export class CalendarEventParticipantWorkspaceEntity extends BaseWorkspaceEntity
description: msg`Display Name`,
icon: 'IconUser',
})
@WorkspaceIsFieldUIReadOnly()
@WorkspaceIsNullable()
displayName: string | null;

Expand All @@ -68,6 +71,7 @@ export class CalendarEventParticipantWorkspaceEntity extends BaseWorkspaceEntity
icon: 'IconUser',
defaultValue: false,
})
@WorkspaceIsFieldUIReadOnly()
isOrganizer: boolean;

@WorkspaceField({
Expand Down Expand Up @@ -104,6 +108,7 @@ export class CalendarEventParticipantWorkspaceEntity extends BaseWorkspaceEntity
],
defaultValue: `'${CalendarEventParticipantResponseStatus.NEEDS_ACTION}'`,
})
@WorkspaceIsFieldUIReadOnly()
responseStatus: string;

@WorkspaceRelation({
Expand All @@ -116,6 +121,7 @@ export class CalendarEventParticipantWorkspaceEntity extends BaseWorkspaceEntity
inverseSideFieldKey: 'calendarEventParticipants',
onDelete: RelationOnDeleteAction.CASCADE,
})
@WorkspaceIsFieldUIReadOnly()
calendarEvent: Relation<CalendarEventWorkspaceEntity>;

@WorkspaceJoinColumn('calendarEvent')
Expand All @@ -131,6 +137,7 @@ export class CalendarEventParticipantWorkspaceEntity extends BaseWorkspaceEntity
inverseSideFieldKey: 'calendarEventParticipants',
onDelete: RelationOnDeleteAction.SET_NULL,
})
@WorkspaceIsFieldUIReadOnly()
@WorkspaceIsNullable()
person: Relation<PersonWorkspaceEntity> | null;

Expand All @@ -147,6 +154,7 @@ export class CalendarEventParticipantWorkspaceEntity extends BaseWorkspaceEntity
inverseSideFieldKey: 'calendarEventParticipants',
onDelete: RelationOnDeleteAction.SET_NULL,
})
@WorkspaceIsFieldUIReadOnly()
@WorkspaceIsNullable()
workspaceMember: Relation<WorkspaceMemberWorkspaceEntity> | null;

Expand Down
Loading