import { msg } from '@lingui/core/macro'; import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface'; import { RelationMetadataType } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity'; 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 { 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'; import { WorkspaceRelation } from 'src/engine/twenty-orm/decorators/workspace-relation.decorator'; import { TASK_TARGET_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids'; import { STANDARD_OBJECT_ICONS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-icons'; import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids'; import { CompanyWorkspaceEntity } from 'src/modules/company/standard-objects/company.workspace-entity'; import { OpportunityWorkspaceEntity } from 'src/modules/opportunity/standard-objects/opportunity.workspace-entity'; import { PersonWorkspaceEntity } from 'src/modules/person/standard-objects/person.workspace-entity'; import { TaskWorkspaceEntity } from 'src/modules/task/standard-objects/task.workspace-entity'; @WorkspaceEntity({ standardId: STANDARD_OBJECT_IDS.taskTarget, namePlural: 'taskTargets', labelSingular: msg`Task Target`, labelPlural: msg`Task Targets`, description: msg`A task target`, icon: STANDARD_OBJECT_ICONS.taskTarget, }) @WorkspaceIsSystem() export class TaskTargetWorkspaceEntity extends BaseWorkspaceEntity { @WorkspaceRelation({ standardId: TASK_TARGET_STANDARD_FIELD_IDS.task, type: RelationMetadataType.MANY_TO_ONE, label: msg`Task`, description: msg`TaskTarget task`, icon: 'IconCheckbox', inverseSideTarget: () => TaskWorkspaceEntity, inverseSideFieldKey: 'taskTargets', }) @WorkspaceIsNullable() task: Relation | null; @WorkspaceJoinColumn('task') taskId: string | null; @WorkspaceRelation({ standardId: TASK_TARGET_STANDARD_FIELD_IDS.person, type: RelationMetadataType.MANY_TO_ONE, label: msg`Person`, description: msg`TaskTarget person`, icon: 'IconUser', inverseSideTarget: () => PersonWorkspaceEntity, inverseSideFieldKey: 'taskTargets', }) @WorkspaceIsNullable() person: Relation | null; @WorkspaceJoinColumn('person') personId: string | null; @WorkspaceRelation({ standardId: TASK_TARGET_STANDARD_FIELD_IDS.company, type: RelationMetadataType.MANY_TO_ONE, label: msg`Company`, description: msg`TaskTarget company`, icon: 'IconBuildingSkyscraper', inverseSideTarget: () => CompanyWorkspaceEntity, inverseSideFieldKey: 'taskTargets', }) @WorkspaceIsNullable() company: Relation | null; @WorkspaceJoinColumn('company') companyId: string | null; @WorkspaceRelation({ standardId: TASK_TARGET_STANDARD_FIELD_IDS.opportunity, type: RelationMetadataType.MANY_TO_ONE, label: msg`Opportunity`, description: msg`TaskTarget opportunity`, icon: 'IconTargetArrow', inverseSideTarget: () => OpportunityWorkspaceEntity, inverseSideFieldKey: 'taskTargets', }) @WorkspaceIsNullable() opportunity: Relation | null; @WorkspaceJoinColumn('opportunity') opportunityId: string | null; @WorkspaceDynamicRelation({ type: RelationMetadataType.MANY_TO_ONE, argsFactory: (oppositeObjectMetadata) => ({ standardId: TASK_TARGET_STANDARD_FIELD_IDS.custom, name: oppositeObjectMetadata.nameSingular, label: oppositeObjectMetadata.labelSingular, description: `TaskTarget ${oppositeObjectMetadata.labelSingular}`, joinColumn: `${oppositeObjectMetadata.nameSingular}Id`, icon: 'IconBuildingSkyscraper', }), inverseSideTarget: () => CustomWorkspaceEntity, inverseSideFieldKey: 'taskTargets', }) custom: Relation; }