diff --git a/packages/twenty-front/src/generated-metadata/graphql.ts b/packages/twenty-front/src/generated-metadata/graphql.ts index 7deb61626ca..a475046d517 100644 --- a/packages/twenty-front/src/generated-metadata/graphql.ts +++ b/packages/twenty-front/src/generated-metadata/graphql.ts @@ -782,6 +782,7 @@ export type CommandMenuItem = { applicationId?: Maybe; availabilityObjectMetadataId?: Maybe; availabilityType: CommandMenuItemAvailabilityType; + conditionalAvailabilityExpression?: Maybe; createdAt: Scalars['DateTime']; frontComponent?: Maybe; frontComponentId?: Maybe; @@ -1073,6 +1074,7 @@ export type CreateApprovedAccessDomainInput = { export type CreateCommandMenuItemInput = { availabilityObjectMetadataId?: InputMaybe; availabilityType?: InputMaybe; + conditionalAvailabilityExpression?: InputMaybe; frontComponentId?: InputMaybe; icon?: InputMaybe; isPinned?: InputMaybe; @@ -6032,12 +6034,12 @@ export type ListPlansQueryVariables = Exact<{ [key: string]: never; }>; export type ListPlansQuery = { __typename?: 'Query', listPlans: Array<{ __typename?: 'BillingPlan', planKey: BillingPlanKey, licensedProducts: Array<{ __typename?: 'BillingLicensedProduct', name: string, description: string, images?: Array | null, prices?: Array<{ __typename?: 'BillingPriceLicensed', stripePriceId: string, unitAmount: number, recurringInterval: SubscriptionInterval, priceUsageType: BillingUsageType }> | null, metadata: { __typename?: 'BillingProductMetadata', productKey: BillingProductKey, planKey: BillingPlanKey, priceUsageBased: BillingUsageType } }>, meteredProducts: Array<{ __typename?: 'BillingMeteredProduct', name: string, description: string, images?: Array | null, prices?: Array<{ __typename?: 'BillingPriceMetered', priceUsageType: BillingUsageType, recurringInterval: SubscriptionInterval, stripePriceId: string, tiers: Array<{ __typename?: 'BillingPriceTier', flatAmount?: number | null, unitAmount?: number | null, upTo?: number | null }> }> | null, metadata: { __typename?: 'BillingProductMetadata', productKey: BillingProductKey, planKey: BillingPlanKey, priceUsageBased: BillingUsageType } }> }> }; -export type CommandMenuItemFieldsFragment = { __typename?: 'CommandMenuItem', id: string, workflowVersionId?: string | null, frontComponentId?: string | null, label: string, icon?: string | null, isPinned: boolean, availabilityType: CommandMenuItemAvailabilityType, availabilityObjectMetadataId?: string | null, frontComponent?: { __typename?: 'FrontComponent', id: string, name: string, isHeadless: boolean } | null }; +export type CommandMenuItemFieldsFragment = { __typename?: 'CommandMenuItem', id: string, workflowVersionId?: string | null, frontComponentId?: string | null, label: string, icon?: string | null, isPinned: boolean, conditionalAvailabilityExpression?: string | null, availabilityType: CommandMenuItemAvailabilityType, availabilityObjectMetadataId?: string | null, frontComponent?: { __typename?: 'FrontComponent', id: string, name: string, isHeadless: boolean } | null }; export type FindManyCommandMenuItemsQueryVariables = Exact<{ [key: string]: never; }>; -export type FindManyCommandMenuItemsQuery = { __typename?: 'Query', commandMenuItems: Array<{ __typename?: 'CommandMenuItem', id: string, workflowVersionId?: string | null, frontComponentId?: string | null, label: string, icon?: string | null, isPinned: boolean, availabilityType: CommandMenuItemAvailabilityType, availabilityObjectMetadataId?: string | null, frontComponent?: { __typename?: 'FrontComponent', id: string, name: string, isHeadless: boolean } | null }> }; +export type FindManyCommandMenuItemsQuery = { __typename?: 'Query', commandMenuItems: Array<{ __typename?: 'CommandMenuItem', id: string, workflowVersionId?: string | null, frontComponentId?: string | null, label: string, icon?: string | null, isPinned: boolean, conditionalAvailabilityExpression?: string | null, availabilityType: CommandMenuItemAvailabilityType, availabilityObjectMetadataId?: string | null, frontComponent?: { __typename?: 'FrontComponent', id: string, name: string, isHeadless: boolean } | null }> }; export type PageLayoutFragmentFragment = { __typename?: 'PageLayout', id: string, name: string, objectMetadataId?: string | null, type: PageLayoutType, defaultTabToFocusOnMobileAndSidePanelId?: string | null, createdAt: string, updatedAt: string, tabs?: Array<{ __typename?: 'PageLayoutTab', id: string, applicationId: string, title: string, icon?: string | null, position: number, layoutMode?: PageLayoutTabLayoutMode | null, pageLayoutId: string, createdAt: string, updatedAt: string, widgets?: Array<{ __typename?: 'PageLayoutWidget', id: string, title: string, type: WidgetType, objectMetadataId?: string | null, createdAt: string, updatedAt: string, deletedAt?: string | null, pageLayoutTabId: string, gridPosition: { __typename?: 'GridPosition', column: number, columnSpan: number, row: number, rowSpan: number }, position?: { __typename?: 'PageLayoutWidgetCanvasPosition', layoutMode: PageLayoutTabLayoutMode } | { __typename?: 'PageLayoutWidgetGridPosition', layoutMode: PageLayoutTabLayoutMode, row: number, column: number, rowSpan: number, columnSpan: number } | { __typename?: 'PageLayoutWidgetVerticalListPosition', layoutMode: PageLayoutTabLayoutMode, index: number } | null, configuration: { __typename?: 'AggregateChartConfiguration', configurationType: WidgetConfigurationType, aggregateFieldMetadataId: string, aggregateOperation: AggregateOperations, label?: string | null, displayDataLabel?: boolean | null, format?: string | null, description?: string | null, filter?: any | null, prefix?: string | null, suffix?: string | null, timezone?: string | null, firstDayOfTheWeek?: number | null, ratioAggregateConfig?: { __typename?: 'RatioAggregateConfig', fieldMetadataId: string, optionValue: string } | null } | { __typename?: 'BarChartConfiguration', configurationType: WidgetConfigurationType, aggregateFieldMetadataId: string, aggregateOperation: AggregateOperations, primaryAxisGroupByFieldMetadataId: string, primaryAxisGroupBySubFieldName?: string | null, primaryAxisDateGranularity?: ObjectRecordGroupByDateGranularity | null, primaryAxisOrderBy?: GraphOrderBy | null, primaryAxisManualSortOrder?: Array | null, secondaryAxisGroupByFieldMetadataId?: string | null, secondaryAxisGroupBySubFieldName?: string | null, secondaryAxisGroupByDateGranularity?: ObjectRecordGroupByDateGranularity | null, secondaryAxisOrderBy?: GraphOrderBy | null, secondaryAxisManualSortOrder?: Array | null, omitNullValues?: boolean | null, axisNameDisplay?: AxisNameDisplay | null, displayDataLabel?: boolean | null, displayLegend?: boolean | null, rangeMin?: number | null, rangeMax?: number | null, color?: string | null, description?: string | null, filter?: any | null, groupMode?: BarChartGroupMode | null, layout: BarChartLayout, isCumulative?: boolean | null, splitMultiValueFields?: boolean | null, timezone?: string | null, firstDayOfTheWeek?: number | null } | { __typename?: 'CalendarConfiguration', configurationType: WidgetConfigurationType } | { __typename?: 'EmailsConfiguration', configurationType: WidgetConfigurationType } | { __typename?: 'FieldConfiguration', configurationType: WidgetConfigurationType } | { __typename?: 'FieldRichTextConfiguration', configurationType: WidgetConfigurationType } | { __typename?: 'FieldsConfiguration', configurationType: WidgetConfigurationType, viewId?: string | null } | { __typename?: 'FilesConfiguration', configurationType: WidgetConfigurationType } | { __typename?: 'FrontComponentConfiguration', configurationType: WidgetConfigurationType, frontComponentId: string } | { __typename?: 'GaugeChartConfiguration', configurationType: WidgetConfigurationType, aggregateFieldMetadataId: string, aggregateOperation: AggregateOperations, displayDataLabel?: boolean | null, color?: string | null, description?: string | null, filter?: any | null, timezone?: string | null, firstDayOfTheWeek?: number | null } | { __typename?: 'IframeConfiguration', configurationType: WidgetConfigurationType, url?: string | null } | { __typename?: 'LineChartConfiguration', configurationType: WidgetConfigurationType, aggregateFieldMetadataId: string, aggregateOperation: AggregateOperations, primaryAxisGroupByFieldMetadataId: string, primaryAxisGroupBySubFieldName?: string | null, primaryAxisDateGranularity?: ObjectRecordGroupByDateGranularity | null, primaryAxisOrderBy?: GraphOrderBy | null, primaryAxisManualSortOrder?: Array | null, secondaryAxisGroupByFieldMetadataId?: string | null, secondaryAxisGroupBySubFieldName?: string | null, secondaryAxisGroupByDateGranularity?: ObjectRecordGroupByDateGranularity | null, secondaryAxisOrderBy?: GraphOrderBy | null, secondaryAxisManualSortOrder?: Array | null, omitNullValues?: boolean | null, axisNameDisplay?: AxisNameDisplay | null, displayDataLabel?: boolean | null, displayLegend?: boolean | null, rangeMin?: number | null, rangeMax?: number | null, color?: string | null, description?: string | null, filter?: any | null, isStacked?: boolean | null, isCumulative?: boolean | null, splitMultiValueFields?: boolean | null, timezone?: string | null, firstDayOfTheWeek?: number | null } | { __typename?: 'NotesConfiguration', configurationType: WidgetConfigurationType } | { __typename?: 'PieChartConfiguration', configurationType: WidgetConfigurationType, groupByFieldMetadataId: string, aggregateFieldMetadataId: string, aggregateOperation: AggregateOperations, groupBySubFieldName?: string | null, dateGranularity?: ObjectRecordGroupByDateGranularity | null, orderBy?: GraphOrderBy | null, manualSortOrder?: Array | null, displayDataLabel?: boolean | null, showCenterMetric?: boolean | null, displayLegend?: boolean | null, hideEmptyCategory?: boolean | null, splitMultiValueFields?: boolean | null, color?: string | null, description?: string | null, filter?: any | null, timezone?: string | null, firstDayOfTheWeek?: number | null } | { __typename?: 'StandaloneRichTextConfiguration', configurationType: WidgetConfigurationType, body: { __typename?: 'RichTextV2Body', blocknote?: string | null, markdown?: string | null } } | { __typename?: 'TasksConfiguration', configurationType: WidgetConfigurationType } | { __typename?: 'TimelineConfiguration', configurationType: WidgetConfigurationType } | { __typename?: 'ViewConfiguration', configurationType: WidgetConfigurationType } | { __typename?: 'WorkflowConfiguration', configurationType: WidgetConfigurationType } | { __typename?: 'WorkflowRunConfiguration', configurationType: WidgetConfigurationType } | { __typename?: 'WorkflowVersionConfiguration', configurationType: WidgetConfigurationType } }> | null }> | null }; @@ -7510,6 +7512,7 @@ export const CommandMenuItemFieldsFragmentDoc = gql` label icon isPinned + conditionalAvailabilityExpression availabilityType availabilityObjectMetadataId } diff --git a/packages/twenty-front/src/hooks/__tests__/useNavigateApp.test.tsx b/packages/twenty-front/src/hooks/__tests__/useNavigateApp.test.tsx index a3c904e5445..dbf47630f26 100644 --- a/packages/twenty-front/src/hooks/__tests__/useNavigateApp.test.tsx +++ b/packages/twenty-front/src/hooks/__tests__/useNavigateApp.test.tsx @@ -1,8 +1,7 @@ import { renderHook } from '@testing-library/react'; import { MemoryRouter, useNavigate } from 'react-router-dom'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; -import { AppPath } from 'twenty-shared/types'; +import { CoreObjectNameSingular, AppPath } from 'twenty-shared/types'; import { useNavigateApp } from '~/hooks/useNavigateApp'; jest.mock('react-router-dom', () => ({ diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/DashboardActionsConfig.tsx b/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/DashboardActionsConfig.tsx index 608550202d1..411eccebf6d 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/DashboardActionsConfig.tsx +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/DashboardActionsConfig.tsx @@ -9,7 +9,7 @@ import { SingleRecordActionKeys } from '@/action-menu/actions/record-actions/sin import { inheritActionsFromDefaultConfig } from '@/action-menu/actions/record-actions/utils/inheritActionsFromDefaultConfig'; import { ActionScope } from '@/action-menu/actions/types/ActionScope'; import { ActionType } from '@/action-menu/actions/types/ActionType'; -import { ActionViewType } from '@/action-menu/actions/types/ActionViewType'; +import { ActionViewType } from 'twenty-shared/types'; import { PageLayoutSingleRecordActionKeys } from '@/page-layout/actions/PageLayoutSingleRecordActionKeys'; import { msg } from '@lingui/core/macro'; import { isDefined } from 'twenty-shared/utils'; diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/DefaultRecordActionsConfig.tsx b/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/DefaultRecordActionsConfig.tsx index b9705ec579d..0bd2eb9568b 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/DefaultRecordActionsConfig.tsx +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/DefaultRecordActionsConfig.tsx @@ -29,14 +29,19 @@ import { SingleRecordActionKeys } from '@/action-menu/actions/record-actions/sin import { type ActionConfig } from '@/action-menu/actions/types/ActionConfig'; import { ActionScope } from '@/action-menu/actions/types/ActionScope'; import { ActionType } from '@/action-menu/actions/types/ActionType'; -import { ActionViewType } from '@/action-menu/actions/types/ActionViewType'; +import { + ActionViewType, + CoreObjectNameSingular, + AppPath, + SettingsPath, +} from 'twenty-shared/types'; import { CoreObjectNamePlural } from '@/object-metadata/types/CoreObjectNamePlural'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; -import { BACKEND_BATCH_REQUEST_MAX_COUNT } from '@/object-record/constants/BackendBatchRequestMaxCount'; +import { + BACKEND_BATCH_REQUEST_MAX_COUNT, + MUTATION_MAX_MERGE_RECORDS, +} from 'twenty-shared/constants'; import { msg } from '@lingui/core/macro'; import { isNonEmptyString } from '@sniptt/guards'; -import { MUTATION_MAX_MERGE_RECORDS } from 'twenty-shared/constants'; -import { AppPath, SettingsPath } from 'twenty-shared/types'; import { IconArrowMerge, IconBuildingSkyscraper, diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.tsx b/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.tsx index ec9c903e405..5e6dbb1f08c 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.tsx +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.tsx @@ -17,7 +17,7 @@ import { WorkflowSingleRecordActionKeys } from '@/action-menu/actions/record-act import { inheritActionsFromDefaultConfig } from '@/action-menu/actions/record-actions/utils/inheritActionsFromDefaultConfig'; import { ActionScope } from '@/action-menu/actions/types/ActionScope'; import { ActionType } from '@/action-menu/actions/types/ActionType'; -import { ActionViewType } from '@/action-menu/actions/types/ActionViewType'; +import { ActionViewType, AppPath } from 'twenty-shared/types'; import { CoreObjectNamePlural } from '@/object-metadata/types/CoreObjectNamePlural'; import { type WorkflowStep, @@ -25,7 +25,6 @@ import { type WorkflowWithCurrentVersion, } from '@/workflow/types/Workflow'; import { msg } from '@lingui/core/macro'; -import { AppPath } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; import { IconCopy, diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/WorkflowRunsActionsConfig.tsx b/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/WorkflowRunsActionsConfig.tsx index 87f6a1767e4..8c0c1c2f1c7 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/WorkflowRunsActionsConfig.tsx +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/WorkflowRunsActionsConfig.tsx @@ -8,7 +8,7 @@ import { WorkflowRunSingleRecordActionKeys } from '@/action-menu/actions/record- import { inheritActionsFromDefaultConfig } from '@/action-menu/actions/record-actions/utils/inheritActionsFromDefaultConfig'; import { ActionScope } from '@/action-menu/actions/types/ActionScope'; import { ActionType } from '@/action-menu/actions/types/ActionType'; -import { ActionViewType } from '@/action-menu/actions/types/ActionViewType'; +import { ActionViewType } from 'twenty-shared/types'; import { msg } from '@lingui/core/macro'; import { IconPlayerStop, diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/WorkflowVersionsActionsConfig.tsx b/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/WorkflowVersionsActionsConfig.tsx index 5f7e1e17d28..a7a0d98a284 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/WorkflowVersionsActionsConfig.tsx +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/WorkflowVersionsActionsConfig.tsx @@ -11,10 +11,9 @@ import { WorkflowVersionSingleRecordActionKeys } from '@/action-menu/actions/rec import { inheritActionsFromDefaultConfig } from '@/action-menu/actions/record-actions/utils/inheritActionsFromDefaultConfig'; import { ActionScope } from '@/action-menu/actions/types/ActionScope'; import { ActionType } from '@/action-menu/actions/types/ActionType'; -import { ActionViewType } from '@/action-menu/actions/types/ActionViewType'; +import { ActionViewType, AppPath } from 'twenty-shared/types'; import { CoreObjectNamePlural } from '@/object-metadata/types/CoreObjectNamePlural'; import { msg } from '@lingui/core/macro'; -import { AppPath } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; import { IconHistoryToggle, diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/WorkspaceMembersActionsConfig.tsx b/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/WorkspaceMembersActionsConfig.tsx index b6476ec3c64..91848304c09 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/WorkspaceMembersActionsConfig.tsx +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/WorkspaceMembersActionsConfig.tsx @@ -5,9 +5,8 @@ import { SingleRecordActionKeys } from '@/action-menu/actions/record-actions/sin import { inheritActionsFromDefaultConfig } from '@/action-menu/actions/record-actions/utils/inheritActionsFromDefaultConfig'; import { ActionScope } from '@/action-menu/actions/types/ActionScope'; import { ActionType } from '@/action-menu/actions/types/ActionType'; -import { ActionViewType } from '@/action-menu/actions/types/ActionViewType'; +import { ActionViewType, AppPath, SettingsPath } from 'twenty-shared/types'; import { msg } from '@lingui/core/macro'; -import { AppPath, SettingsPath } from 'twenty-shared/types'; import { IconSettings } from 'twenty-ui/display'; export const WORKSPACE_MEMBERS_ACTIONS_CONFIG = inheritActionsFromDefaultConfig( diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/components/CreateRelatedRecordAction.tsx b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/components/CreateRelatedRecordAction.tsx index 1a9efdacfa2..755a87eb0f1 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/components/CreateRelatedRecordAction.tsx +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/components/CreateRelatedRecordAction.tsx @@ -2,7 +2,7 @@ import { Action } from '@/action-menu/actions/components/Action'; import { useSelectedRecordIdOrThrow } from '@/action-menu/actions/record-actions/single-record/hooks/useSelectedRecordIdOrThrow'; import { useOpenRecordInCommandMenu } from '@/command-menu/hooks/useOpenRecordInCommandMenu'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { type FieldMetadataItemRelation } from '@/object-metadata/types/FieldMetadataItemRelation'; import { useCreateOneRecord } from '@/object-record/hooks/useCreateOneRecord'; import { type ObjectRecord } from '@/object-record/types/ObjectRecord'; diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/dashboard-actions/components/DuplicateDashboardSingleRecordAction.tsx b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/dashboard-actions/components/DuplicateDashboardSingleRecordAction.tsx index c3b68fa2f30..8028c2aaf07 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/dashboard-actions/components/DuplicateDashboardSingleRecordAction.tsx +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/dashboard-actions/components/DuplicateDashboardSingleRecordAction.tsx @@ -1,11 +1,10 @@ import { Action } from '@/action-menu/actions/components/Action'; import { useSelectedRecordIdOrThrow } from '@/action-menu/actions/record-actions/single-record/hooks/useSelectedRecordIdOrThrow'; import { useDuplicateDashboard } from '@/dashboards/hooks/useDuplicateDashboard'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular, AppPath } from 'twenty-shared/types'; import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; import { useLingui } from '@lingui/react/macro'; import { isNonEmptyString } from '@sniptt/guards'; -import { AppPath } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; import { useNavigateApp } from '~/hooks/useNavigateApp'; diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/components/DuplicateWorkflowSingleRecordAction.tsx b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/components/DuplicateWorkflowSingleRecordAction.tsx index 12488f6b347..9ada90f3a93 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/components/DuplicateWorkflowSingleRecordAction.tsx +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/components/DuplicateWorkflowSingleRecordAction.tsx @@ -1,12 +1,11 @@ import { Action } from '@/action-menu/actions/components/Action'; import { useSelectedRecordIdOrThrow } from '@/action-menu/actions/record-actions/single-record/hooks/useSelectedRecordIdOrThrow'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular, AppPath } from 'twenty-shared/types'; import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; import { useDuplicateWorkflow } from '@/workflow/hooks/useDuplicateWorkflow'; import { useWorkflowWithCurrentVersion } from '@/workflow/hooks/useWorkflowWithCurrentVersion'; import { useLingui } from '@lingui/react/macro'; import { isNonEmptyString } from '@sniptt/guards'; -import { AppPath } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; import { useNavigateApp } from '~/hooks/useNavigateApp'; diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/components/SeeActiveVersionWorkflowSingleRecordAction.tsx b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/components/SeeActiveVersionWorkflowSingleRecordAction.tsx index e16b28fec5c..10e174205f6 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/components/SeeActiveVersionWorkflowSingleRecordAction.tsx +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/components/SeeActiveVersionWorkflowSingleRecordAction.tsx @@ -1,9 +1,8 @@ import { ActionLink } from '@/action-menu/actions/components/ActionLink'; import { ActionDisplay } from '@/action-menu/actions/display/components/ActionDisplay'; import { useSelectedRecordIdOrThrow } from '@/action-menu/actions/record-actions/single-record/hooks/useSelectedRecordIdOrThrow'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular, AppPath } from 'twenty-shared/types'; import { useActiveWorkflowVersion } from '@/workflow/hooks/useActiveWorkflowVersion'; -import { AppPath } from 'twenty-shared/types'; export const SeeActiveVersionWorkflowSingleRecordAction = () => { const recordId = useSelectedRecordIdOrThrow(); diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-run-actions/components/SeeVersionWorkflowRunSingleRecordAction.tsx b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-run-actions/components/SeeVersionWorkflowRunSingleRecordAction.tsx index 8c582291884..df10b96e0ea 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-run-actions/components/SeeVersionWorkflowRunSingleRecordAction.tsx +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-run-actions/components/SeeVersionWorkflowRunSingleRecordAction.tsx @@ -1,9 +1,8 @@ import { ActionLink } from '@/action-menu/actions/components/ActionLink'; import { useSelectedRecordIdOrThrow } from '@/action-menu/actions/record-actions/single-record/hooks/useSelectedRecordIdOrThrow'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular, AppPath } from 'twenty-shared/types'; import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; import { useAtomFamilyStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomFamilyStateValue'; -import { AppPath } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; export const SeeVersionWorkflowRunSingleRecordAction = () => { diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-run-actions/components/SeeWorkflowWorkflowRunSingleRecordAction.tsx b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-run-actions/components/SeeWorkflowWorkflowRunSingleRecordAction.tsx index b80aa519b1d..f6867f819e7 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-run-actions/components/SeeWorkflowWorkflowRunSingleRecordAction.tsx +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-run-actions/components/SeeWorkflowWorkflowRunSingleRecordAction.tsx @@ -1,9 +1,8 @@ import { ActionLink } from '@/action-menu/actions/components/ActionLink'; import { useSelectedRecordIdOrThrow } from '@/action-menu/actions/record-actions/single-record/hooks/useSelectedRecordIdOrThrow'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular, AppPath } from 'twenty-shared/types'; import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; import { useAtomFamilyStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomFamilyStateValue'; -import { AppPath } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; export const SeeWorkflowWorkflowRunSingleRecordAction = () => { diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-run-actions/components/StopWorkflowRunSingleRecordAction.tsx b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-run-actions/components/StopWorkflowRunSingleRecordAction.tsx index 2167cf6b9ef..6080f91bdb9 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-run-actions/components/StopWorkflowRunSingleRecordAction.tsx +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-run-actions/components/StopWorkflowRunSingleRecordAction.tsx @@ -4,7 +4,7 @@ import { contextStoreFilterGroupsComponentState } from '@/context-store/states/c import { contextStoreFiltersComponentState } from '@/context-store/states/contextStoreFiltersComponentState'; import { contextStoreTargetedRecordsRuleComponentState } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState'; import { computeContextStoreFilters } from '@/context-store/utils/computeContextStoreFilters'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { DEFAULT_QUERY_PAGE_SIZE } from '@/object-record/constants/DefaultQueryPageSize'; import { useLazyFetchAllRecords } from '@/object-record/hooks/useLazyFetchAllRecords'; import { useFilterValueDependencies } from '@/object-record/record-filter/hooks/useFilterValueDependencies'; diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-version-actions/components/SeeWorkflowWorkflowVersionSingleRecordAction.tsx b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-version-actions/components/SeeWorkflowWorkflowVersionSingleRecordAction.tsx index 3cf8c39d5d2..6400c824a46 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-version-actions/components/SeeWorkflowWorkflowVersionSingleRecordAction.tsx +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-version-actions/components/SeeWorkflowWorkflowVersionSingleRecordAction.tsx @@ -1,9 +1,8 @@ import { ActionLink } from '@/action-menu/actions/components/ActionLink'; import { useSelectedRecordIdOrThrow } from '@/action-menu/actions/record-actions/single-record/hooks/useSelectedRecordIdOrThrow'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular, AppPath } from 'twenty-shared/types'; import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; import { useAtomFamilyStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomFamilyStateValue'; -import { AppPath } from 'twenty-shared/types'; export const SeeWorkflowWorkflowVersionSingleRecordAction = () => { const recordId = useSelectedRecordIdOrThrow(); diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-version-actions/components/UseAsDraftWorkflowVersionSingleRecordAction.tsx b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-version-actions/components/UseAsDraftWorkflowVersionSingleRecordAction.tsx index b04f79ecc73..323a2a58b9b 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-version-actions/components/UseAsDraftWorkflowVersionSingleRecordAction.tsx +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-version-actions/components/UseAsDraftWorkflowVersionSingleRecordAction.tsx @@ -1,6 +1,6 @@ import { Action } from '@/action-menu/actions/components/Action'; import { useSelectedRecordIdOrThrow } from '@/action-menu/actions/record-actions/single-record/hooks/useSelectedRecordIdOrThrow'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular, AppPath } from 'twenty-shared/types'; import { useModal } from '@/ui/layout/modal/hooks/useModal'; import { OverrideWorkflowDraftConfirmationModal } from '@/workflow/components/OverrideWorkflowDraftConfirmationModal'; import { OVERRIDE_WORKFLOW_DRAFT_CONFIRMATION_MODAL_ID } from '@/workflow/constants/OverrideWorkflowDraftConfirmationModalId'; @@ -8,7 +8,6 @@ import { useCreateDraftFromWorkflowVersion } from '@/workflow/hooks/useCreateDra import { useWorkflowVersion } from '@/workflow/hooks/useWorkflowVersion'; import { useWorkflowWithCurrentVersion } from '@/workflow/hooks/useWorkflowWithCurrentVersion'; import { useState } from 'react'; -import { AppPath } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; import { useNavigateApp } from '~/hooks/useNavigateApp'; diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/constants/RecordAgnosticActionsConfig.tsx b/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/constants/RecordAgnosticActionsConfig.tsx index 042ad9db165..3339c063c2f 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/constants/RecordAgnosticActionsConfig.tsx +++ b/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/constants/RecordAgnosticActionsConfig.tsx @@ -3,9 +3,8 @@ import { RecordAgnosticActionsKeys } from '@/action-menu/actions/record-agnostic import { type ActionConfig } from '@/action-menu/actions/types/ActionConfig'; import { ActionScope } from '@/action-menu/actions/types/ActionScope'; import { ActionType } from '@/action-menu/actions/types/ActionType'; -import { ActionViewType } from '@/action-menu/actions/types/ActionViewType'; +import { ActionViewType, CommandMenuPages } from 'twenty-shared/types'; import { msg } from '@lingui/core/macro'; -import { CommandMenuPages } from 'twenty-shared/types'; import { IconHistory, IconSearch, IconSparkles } from 'twenty-ui/display'; export const RECORD_AGNOSTIC_ACTIONS_CONFIG: Record = { diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/hooks/__tests__/useRelatedRecordActions.test.tsx b/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/hooks/__tests__/useRelatedRecordActions.test.tsx index 5427427b123..95da8fa872b 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/hooks/__tests__/useRelatedRecordActions.test.tsx +++ b/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/hooks/__tests__/useRelatedRecordActions.test.tsx @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { renderHook } from '@testing-library/react'; import { useRelatedRecordActions } from '@/action-menu/actions/record-agnostic-actions/hooks/useRelatedRecordActions'; diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/hooks/useRelatedRecordActions.ts b/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/hooks/useRelatedRecordActions.ts index eb4b2ce00df..21751372713 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/hooks/useRelatedRecordActions.ts +++ b/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/hooks/useRelatedRecordActions.ts @@ -2,9 +2,8 @@ import { CreateRelatedRecordAction } from '@/action-menu/actions/record-actions/ import { type ActionConfig } from '@/action-menu/actions/types/ActionConfig'; import { ActionScope } from '@/action-menu/actions/types/ActionScope'; import { ActionType } from '@/action-menu/actions/types/ActionType'; -import { ActionViewType } from '@/action-menu/actions/types/ActionViewType'; +import { ActionViewType, CoreObjectNameSingular } from 'twenty-shared/types'; import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { isHiddenSystemField } from '@/object-metadata/utils/isHiddenSystemField'; import { isRecordReadOnly } from '@/object-record/read-only/utils/isRecordReadOnly'; diff --git a/packages/twenty-front/src/modules/action-menu/actions/states/forceRegisteredActionsMapComponentState.ts b/packages/twenty-front/src/modules/action-menu/actions/states/forceRegisteredActionsMapComponentState.ts deleted file mode 100644 index 01ed4e5f1e8..00000000000 --- a/packages/twenty-front/src/modules/action-menu/actions/states/forceRegisteredActionsMapComponentState.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; - -export const forceRegisteredActionsByKeyState = createAtomState< - Record ->({ - key: 'forceRegisteredActionsByKeyComponentState', - defaultValue: {}, -}); diff --git a/packages/twenty-front/src/modules/action-menu/actions/types/ActionConfig.ts b/packages/twenty-front/src/modules/action-menu/actions/types/ActionConfig.ts index a4ae40fc102..913866670f5 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/types/ActionConfig.ts +++ b/packages/twenty-front/src/modules/action-menu/actions/types/ActionConfig.ts @@ -1,6 +1,6 @@ import { type ActionScope } from '@/action-menu/actions/types/ActionScope'; import { type ActionType } from '@/action-menu/actions/types/ActionType'; -import { type ActionViewType } from '@/action-menu/actions/types/ActionViewType'; +import { type ActionViewType } from 'twenty-shared/types'; import { type ShouldBeRegisteredFunctionParams } from '@/action-menu/actions/types/ShouldBeRegisteredFunctionParams'; import { type MessageDescriptor } from '@lingui/core'; import { type IconComponent } from 'twenty-ui/display'; diff --git a/packages/twenty-front/src/modules/action-menu/actions/types/ShouldBeRegisteredFunctionParams.ts b/packages/twenty-front/src/modules/action-menu/actions/types/ShouldBeRegisteredFunctionParams.ts index c58696275d7..65041c1130a 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/types/ShouldBeRegisteredFunctionParams.ts +++ b/packages/twenty-front/src/modules/action-menu/actions/types/ShouldBeRegisteredFunctionParams.ts @@ -1,9 +1,11 @@ -import { type ActionViewType } from '@/action-menu/actions/types/ActionViewType'; import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { type RecordFilter } from '@/object-record/record-filter/types/RecordFilter'; import { type ObjectRecord } from '@/object-record/types/ObjectRecord'; import { type WorkflowWithCurrentVersion } from '@/workflow/types/Workflow'; -import { type ObjectPermissions } from 'twenty-shared/types'; +import { + type ActionViewType, + type ObjectPermissions, +} from 'twenty-shared/types'; import { type FeatureFlagKey } from '~/generated-metadata/graphql'; export type ShouldBeRegisteredFunctionParams = { @@ -28,6 +30,5 @@ export type ShouldBeRegisteredFunctionParams = { getTargetObjectWritePermission: ( objectMetadataItemNameSingular: string, ) => boolean; - forceRegisteredActionsByKey: Record; isFeatureFlagEnabled: (featureFlagKey: FeatureFlagKey) => boolean; }; diff --git a/packages/twenty-front/src/modules/action-menu/actions/utils/getActionConfig.ts b/packages/twenty-front/src/modules/action-menu/actions/utils/getActionConfig.ts index 2aa3b314039..07e9a549b8b 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/utils/getActionConfig.ts +++ b/packages/twenty-front/src/modules/action-menu/actions/utils/getActionConfig.ts @@ -5,7 +5,7 @@ import { WORKFLOW_RUNS_ACTIONS_CONFIG } from '@/action-menu/actions/record-actio import { WORKFLOW_VERSIONS_ACTIONS_CONFIG } from '@/action-menu/actions/record-actions/constants/WorkflowVersionsActionsConfig'; import { WORKSPACE_MEMBERS_ACTIONS_CONFIG } from '@/action-menu/actions/record-actions/constants/WorkspaceMembersActionsConfig'; import { type ActionConfig } from '@/action-menu/actions/types/ActionConfig'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { isDefined } from 'twenty-shared/utils'; diff --git a/packages/twenty-front/src/modules/action-menu/actions/utils/getActionViewType.ts b/packages/twenty-front/src/modules/action-menu/actions/utils/getActionViewType.ts index a114660cee0..4846065a09b 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/utils/getActionViewType.ts +++ b/packages/twenty-front/src/modules/action-menu/actions/utils/getActionViewType.ts @@ -1,4 +1,4 @@ -import { ActionViewType } from '@/action-menu/actions/types/ActionViewType'; +import { ActionViewType } from 'twenty-shared/types'; import { type ContextStoreTargetedRecordsRule } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState'; import { ContextStoreViewType } from '@/context-store/types/ContextStoreViewType'; diff --git a/packages/twenty-front/src/modules/action-menu/components/RecordShowRightDrawerOpenRecordButton.tsx b/packages/twenty-front/src/modules/action-menu/components/RecordShowRightDrawerOpenRecordButton.tsx index 134027f4376..960cd528745 100644 --- a/packages/twenty-front/src/modules/action-menu/components/RecordShowRightDrawerOpenRecordButton.tsx +++ b/packages/twenty-front/src/modules/action-menu/components/RecordShowRightDrawerOpenRecordButton.tsx @@ -6,7 +6,7 @@ import { commandMenuNavigationStackState } from '@/command-menu/states/commandMe import { CommandMenuPageComponentInstanceContext } from '@/command-menu/states/contexts/CommandMenuPageComponentInstanceContext'; import { MAIN_CONTEXT_STORE_INSTANCE_ID } from '@/context-store/constants/MainContextStoreInstanceId'; import { contextStoreRecordShowParentViewComponentState } from '@/context-store/states/contextStoreRecordShowParentViewComponentState'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular, AppPath } from 'twenty-shared/types'; import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; import { type ObjectRecord } from '@/object-record/types/ObjectRecord'; import { useCloseDropdown } from '@/ui/layout/dropdown/hooks/useCloseDropdown'; @@ -22,7 +22,6 @@ import { useSetAtomComponentState } from '@/ui/utilities/state/jotai/hooks/useSe import { t } from '@lingui/core/macro'; import { useStore } from 'jotai'; import { useCallback } from 'react'; -import { AppPath } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; import { IconBrowserMaximize } from 'twenty-ui/display'; import { Button } from 'twenty-ui/input'; diff --git a/packages/twenty-front/src/modules/action-menu/contexts/ActionMenuContextProvider.tsx b/packages/twenty-front/src/modules/action-menu/contexts/ActionMenuContextProvider.tsx index ceea09643ed..65cfdd04731 100644 --- a/packages/twenty-front/src/modules/action-menu/contexts/ActionMenuContextProvider.tsx +++ b/packages/twenty-front/src/modules/action-menu/contexts/ActionMenuContextProvider.tsx @@ -3,7 +3,7 @@ import { ActionMenuContextProviderDefault } from '@/action-menu/contexts/ActionM import { ActionMenuContextProviderWorkflowObjects } from '@/action-menu/contexts/ActionMenuContextProviderWorkflowObjects'; import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState'; import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; diff --git a/packages/twenty-front/src/modules/action-menu/contexts/ActionMenuContextProviderDefault.tsx b/packages/twenty-front/src/modules/action-menu/contexts/ActionMenuContextProviderDefault.tsx index 831e9a39c08..5693005ab36 100644 --- a/packages/twenty-front/src/modules/action-menu/contexts/ActionMenuContextProviderDefault.tsx +++ b/packages/twenty-front/src/modules/action-menu/contexts/ActionMenuContextProviderDefault.tsx @@ -6,6 +6,7 @@ import { } from '@/action-menu/contexts/ActionMenuContext'; import { useRegisteredActions } from '@/action-menu/hooks/useRegisteredActions'; import { useShouldActionBeRegisteredParams } from '@/action-menu/hooks/useShouldActionBeRegisteredParams'; +import { useCommandMenuContextApi } from '@/action-menu/hooks/useCommandMenuContextApi'; import { useCommandMenuItemFrontComponentActions } from '@/command-menu-item/hooks/useCommandMenuItemFrontComponentActions'; import { contextStoreTargetedRecordsRuleComponentState } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState'; import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; @@ -50,8 +51,10 @@ export const ActionMenuContextProviderDefault = ({ const runWorkflowRecordAgnosticActions = useRunWorkflowRecordAgnosticActions(); + const commandMenuContextApi = useCommandMenuContextApi(); + const commandMenuItemFrontComponentActions = - useCommandMenuItemFrontComponentActions(); + useCommandMenuItemFrontComponentActions(commandMenuContextApi); return ( { + const store = useStore(); + + const { isInRightDrawer } = useContext(ActionMenuContext); + + const contextStoreCurrentObjectMetadataItemId = useAtomComponentStateValue( + contextStoreCurrentObjectMetadataItemIdComponentState, + ); + + const contextStoreTargetedRecordsRule = useAtomComponentStateValue( + contextStoreTargetedRecordsRuleComponentState, + ); + + const isNavigationMenuItemEditingEnabled = useIsFeatureEnabled( + FeatureFlagKey.IS_NAVIGATION_MENU_ITEM_EDITING_ENABLED, + ); + + const { objectMetadataItems } = useObjectMetadataItems(); + + const objectMetadataItem = objectMetadataItems.find( + (item) => item.id === contextStoreCurrentObjectMetadataItemId, + ); + + const { sortedFavorites: favorites } = useFavorites(); + const { navigationMenuItems } = usePrefetchedNavigationMenuItemsData(); + + const recordId = + contextStoreTargetedRecordsRule.mode === 'selection' + ? contextStoreTargetedRecordsRule.selectedRecordIds[0] + : undefined; + + const isFavorite = (() => { + if (!isDefined(recordId)) return false; + + if (isNavigationMenuItemEditingEnabled && isDefined(objectMetadataItem)) { + return !!navigationMenuItems?.find( + (item) => + item.targetRecordId === recordId && + item.targetObjectMetadataId === objectMetadataItem.id, + ); + } + + return !!favorites?.find((favorite) => favorite.recordId === recordId); + })(); + + const selectedRecord = + useAtomFamilyStateValue(recordStoreFamilyState, recordId ?? '') || + undefined; + + const objectPermissionsFromHook = useObjectPermissionsForObject( + objectMetadataItem?.id ?? '', + ); + const objectPermissions = isDefined(objectMetadataItem) + ? objectPermissionsFromHook + : { + canReadObjectRecords: false, + canUpdateObjectRecords: false, + canSoftDeleteObjectRecords: false, + canDestroyObjectRecords: false, + restrictedFields: {}, + objectMetadataId: '', + rowLevelPermissionPredicates: [], + rowLevelPermissionPredicateGroups: [], + }; + + const isNoteOrTask = + objectMetadataItem?.nameSingular === CoreObjectNameSingular.Note || + objectMetadataItem?.nameSingular === CoreObjectNameSingular.Task; + + const isRemote = objectMetadataItem?.isRemote ?? false; + + const { recordIndexId } = useRecordIndexIdFromCurrentContextStore(); + + const hasAnySoftDeleteFilterOnView = useAtomComponentSelectorValue( + hasAnySoftDeleteFilterOnViewComponentSelector, + recordIndexId, + ); + + const isShowPage = + useAtomComponentStateValue(contextStoreCurrentViewTypeComponentState) === + ContextStoreViewType.ShowPage; + + const contextStoreNumberOfSelectedRecords = useAtomComponentStateValue( + contextStoreNumberOfSelectedRecordsComponentState, + ); + + const isSelectAll = contextStoreTargetedRecordsRule.mode === 'exclusion'; + + const currentWorkspace = useAtomStateValue(currentWorkspaceState); + + const featureFlags: Record = {}; + + for (const flag of currentWorkspace?.featureFlags ?? []) { + featureFlags[flag.key] = flag.value === true; + } + + const targetObjectReadPermissions: Record = {}; + const targetObjectWritePermissions: Record = {}; + + for (const metadataItem of objectMetadataItems) { + const permissions = store.get( + objectPermissionsFamilySelector.selectorFamily({ + objectNameSingular: metadataItem.nameSingular, + }), + ); + targetObjectReadPermissions[metadataItem.nameSingular] = + permissions.canRead; + targetObjectWritePermissions[metadataItem.nameSingular] = + permissions.canUpdate; + } + + return { + isShowPage, + isInRightDrawer, + isFavorite, + isRemote, + isNoteOrTask, + isSelectAll, + hasAnySoftDeleteFilterOnView, + numberOfSelectedRecords: contextStoreNumberOfSelectedRecords, + objectPermissions, + selectedRecord: selectedRecord as CommandMenuContextApi['selectedRecord'], + featureFlags, + targetObjectReadPermissions, + targetObjectWritePermissions, + }; +}; diff --git a/packages/twenty-front/src/modules/action-menu/hooks/useRegisteredActions.ts b/packages/twenty-front/src/modules/action-menu/hooks/useRegisteredActions.ts index f9be2a54aac..0ca2023b28e 100644 --- a/packages/twenty-front/src/modules/action-menu/hooks/useRegisteredActions.ts +++ b/packages/twenty-front/src/modules/action-menu/hooks/useRegisteredActions.ts @@ -1,6 +1,6 @@ import { useRecordAgnosticActions } from '@/action-menu/actions/record-agnostic-actions/hooks/useRecordAgnosticActions'; import { useRelatedRecordActions } from '@/action-menu/actions/record-agnostic-actions/hooks/useRelatedRecordActions'; -import { ActionViewType } from '@/action-menu/actions/types/ActionViewType'; +import { ActionViewType } from 'twenty-shared/types'; import { type ShouldBeRegisteredFunctionParams } from '@/action-menu/actions/types/ShouldBeRegisteredFunctionParams'; import { getActionConfig } from '@/action-menu/actions/utils/getActionConfig'; import { getActionViewType } from '@/action-menu/actions/utils/getActionViewType'; @@ -15,8 +15,7 @@ import { useIcons } from 'twenty-ui/display'; export const useRegisteredActions = ( shouldBeRegisteredParams: ShouldBeRegisteredFunctionParams, ) => { - const { objectMetadataItem, forceRegisteredActionsByKey } = - shouldBeRegisteredParams; + const { objectMetadataItem } = shouldBeRegisteredParams; const { getIcon } = useIcons(); @@ -83,15 +82,6 @@ export const useRegisteredActions = ( ) { return false; } - const forcedShouldBeRegistered = forceRegisteredActionsByKey[action.key]; - - if (isDefined(forcedShouldBeRegistered)) { - return ( - forcedShouldBeRegistered && - action.shouldBeRegistered(shouldBeRegisteredParams) - ); - } - return action.shouldBeRegistered(shouldBeRegisteredParams); }) .sort((a, b) => a.position - b.position); diff --git a/packages/twenty-front/src/modules/action-menu/hooks/useShouldActionBeRegisteredParams.ts b/packages/twenty-front/src/modules/action-menu/hooks/useShouldActionBeRegisteredParams.ts index 5859bc23852..1f0396767b9 100644 --- a/packages/twenty-front/src/modules/action-menu/hooks/useShouldActionBeRegisteredParams.ts +++ b/packages/twenty-front/src/modules/action-menu/hooks/useShouldActionBeRegisteredParams.ts @@ -1,4 +1,3 @@ -import { forceRegisteredActionsByKeyState } from '@/action-menu/actions/states/forceRegisteredActionsMapComponentState'; import { type ShouldBeRegisteredFunctionParams } from '@/action-menu/actions/types/ShouldBeRegisteredFunctionParams'; import { getActionViewType } from '@/action-menu/actions/utils/getActionViewType'; import { ActionMenuContext } from '@/action-menu/contexts/ActionMenuContext'; @@ -10,7 +9,7 @@ import { contextStoreTargetedRecordsRuleComponentState } from '@/context-store/s import { ContextStoreViewType } from '@/context-store/types/ContextStoreViewType'; import { useFavorites } from '@/favorites/hooks/useFavorites'; import { usePrefetchedNavigationMenuItemsData } from '@/navigation-menu-item/hooks/usePrefetchedNavigationMenuItemsData'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { useRecordIndexIdFromCurrentContextStore } from '@/object-record/record-index/hooks/useRecordIndexIdFromCurrentContextStore'; import { useObjectPermissionsForObject } from '@/object-record/hooks/useObjectPermissionsForObject'; @@ -135,10 +134,6 @@ export const useShouldActionBeRegisteredParams = ({ [store], ); - const forceRegisteredActionsByKey = useAtomStateValue( - forceRegisteredActionsByKeyState, - ); - const currentWorkspace = useAtomStateValue(currentWorkspaceState); const isFeatureFlagEnabled = (featureFlagKey: FeatureFlagKey) => { @@ -163,7 +158,6 @@ export const useShouldActionBeRegisteredParams = ({ viewType: viewType ?? undefined, getTargetObjectReadPermission: getObjectReadPermission, getTargetObjectWritePermission: getObjectWritePermission, - forceRegisteredActionsByKey, isFeatureFlagEnabled, }; }; diff --git a/packages/twenty-front/src/modules/action-menu/mock/action-menu-actions.mock.tsx b/packages/twenty-front/src/modules/action-menu/mock/action-menu-actions.mock.tsx index 8fb3a156674..a467ee63fba 100644 --- a/packages/twenty-front/src/modules/action-menu/mock/action-menu-actions.mock.tsx +++ b/packages/twenty-front/src/modules/action-menu/mock/action-menu-actions.mock.tsx @@ -5,11 +5,13 @@ import { SingleRecordActionKeys } from '@/action-menu/actions/record-actions/sin import { type ActionConfig } from '@/action-menu/actions/types/ActionConfig'; import { ActionScope } from '@/action-menu/actions/types/ActionScope'; import { ActionType } from '@/action-menu/actions/types/ActionType'; -import { ActionViewType } from '@/action-menu/actions/types/ActionViewType'; +import { + ActionViewType, + CoreObjectNameSingular, + AppPath, +} from 'twenty-shared/types'; import { CoreObjectNamePlural } from '@/object-metadata/types/CoreObjectNamePlural'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { msg } from '@lingui/core/macro'; -import { AppPath } from 'twenty-shared/types'; import { IconFileExport, IconHeart, diff --git a/packages/twenty-front/src/modules/activities/calendar/components/CalendarEventDetails.tsx b/packages/twenty-front/src/modules/activities/calendar/components/CalendarEventDetails.tsx index 8f8966cb1ac..9b405930361 100644 --- a/packages/twenty-front/src/modules/activities/calendar/components/CalendarEventDetails.tsx +++ b/packages/twenty-front/src/modules/activities/calendar/components/CalendarEventDetails.tsx @@ -5,7 +5,7 @@ import { useCallback, useState } from 'react'; import { CalendarEventParticipantsResponseStatus } from '@/activities/calendar/components/CalendarEventParticipantsResponseStatus'; import { type CalendarEvent } from '@/activities/calendar/types/CalendarEvent'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { type FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; import { formatFieldMetadataItemAsFieldDefinition } from '@/object-metadata/utils/formatFieldMetadataItemAsFieldDefinition'; import { useObjectPermissionsForObject } from '@/object-record/hooks/useObjectPermissionsForObject'; diff --git a/packages/twenty-front/src/modules/activities/calendar/components/CalendarEventsCard.tsx b/packages/twenty-front/src/modules/activities/calendar/components/CalendarEventsCard.tsx index e9e420d2a48..125260edc29 100644 --- a/packages/twenty-front/src/modules/activities/calendar/components/CalendarEventsCard.tsx +++ b/packages/twenty-front/src/modules/activities/calendar/components/CalendarEventsCard.tsx @@ -13,7 +13,7 @@ import { useCalendarEvents } from '@/activities/calendar/hooks/useCalendarEvents import { CustomResolverFetchMoreLoader } from '@/activities/components/CustomResolverFetchMoreLoader'; import { SkeletonLoader } from '@/activities/components/SkeletonLoader'; import { useCustomResolver } from '@/activities/hooks/useCustomResolver'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useTargetRecord } from '@/ui/layout/contexts/useTargetRecord'; import { H3Title } from 'twenty-ui/display'; import { diff --git a/packages/twenty-front/src/modules/activities/calendar/components/__stories__/Calendar.stories.tsx b/packages/twenty-front/src/modules/activities/calendar/components/__stories__/Calendar.stories.tsx index d1c6e086815..4df444cc723 100644 --- a/packages/twenty-front/src/modules/activities/calendar/components/__stories__/Calendar.stories.tsx +++ b/packages/twenty-front/src/modules/activities/calendar/components/__stories__/Calendar.stories.tsx @@ -4,7 +4,7 @@ import { HttpResponse, graphql } from 'msw'; import { CalendarEventsCard } from '@/activities/calendar/components/CalendarEventsCard'; import { getTimelineCalendarEventsFromCompanyId } from '@/activities/calendar/graphql/queries/getTimelineCalendarEventsFromCompanyId'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { LayoutRenderingProvider } from '@/ui/layout/contexts/LayoutRenderingContext'; import { ComponentDecorator } from 'twenty-ui/testing'; import { PageLayoutType } from '~/generated-metadata/graphql'; diff --git a/packages/twenty-front/src/modules/activities/components/ActivityRichTextEditor.tsx b/packages/twenty-front/src/modules/activities/components/ActivityRichTextEditor.tsx index c15354a89da..a8b5708b94e 100644 --- a/packages/twenty-front/src/modules/activities/components/ActivityRichTextEditor.tsx +++ b/packages/twenty-front/src/modules/activities/components/ActivityRichTextEditor.tsx @@ -8,7 +8,7 @@ import { canCreateActivityState } from '@/activities/states/canCreateActivitySta import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState'; import { getActivityTargetObjectFieldIdName } from '@/activities/utils/getActivityTargetObjectFieldIdName'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { modifyRecordFromCache } from '@/object-record/cache/utils/modifyRecordFromCache'; import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; import { isNonTextWritingKey } from '@/ui/utilities/hotkey/utils/isNonTextWritingKey'; diff --git a/packages/twenty-front/src/modules/activities/components/ParticipantChip.tsx b/packages/twenty-front/src/modules/activities/components/ParticipantChip.tsx index 44df0003d39..2adf7fea50f 100644 --- a/packages/twenty-front/src/modules/activities/components/ParticipantChip.tsx +++ b/packages/twenty-front/src/modules/activities/components/ParticipantChip.tsx @@ -2,7 +2,7 @@ import { styled } from '@linaria/react'; import React from 'react'; import { getDisplayNameFromParticipant } from '@/activities/emails/utils/getDisplayNameFromParticipant'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { RecordChip } from '@/object-record/components/RecordChip'; import { Avatar } from 'twenty-ui/display'; import { themeCssVariables } from 'twenty-ui/theme-constants'; diff --git a/packages/twenty-front/src/modules/activities/emails/components/EmailsCard.tsx b/packages/twenty-front/src/modules/activities/emails/components/EmailsCard.tsx index 399f669f2dc..d746889c842 100644 --- a/packages/twenty-front/src/modules/activities/emails/components/EmailsCard.tsx +++ b/packages/twenty-front/src/modules/activities/emails/components/EmailsCard.tsx @@ -9,7 +9,7 @@ import { getTimelineThreadsFromCompanyId } from '@/activities/emails/graphql/que import { getTimelineThreadsFromOpportunityId } from '@/activities/emails/graphql/queries/getTimelineThreadsFromOpportunityId'; import { getTimelineThreadsFromPersonId } from '@/activities/emails/graphql/queries/getTimelineThreadsFromPersonId'; import { useCustomResolver } from '@/activities/hooks/useCustomResolver'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useTargetRecord } from '@/ui/layout/contexts/useTargetRecord'; import { Trans } from '@lingui/react/macro'; import { H1Title, H1TitleFontColor } from 'twenty-ui/display'; diff --git a/packages/twenty-front/src/modules/activities/emails/components/MessageThreadSubscriberDropdownAddSubscriber.tsx b/packages/twenty-front/src/modules/activities/emails/components/MessageThreadSubscriberDropdownAddSubscriber.tsx index 82b07999f05..b99ce9651b5 100644 --- a/packages/twenty-front/src/modules/activities/emails/components/MessageThreadSubscriberDropdownAddSubscriber.tsx +++ b/packages/twenty-front/src/modules/activities/emails/components/MessageThreadSubscriberDropdownAddSubscriber.tsx @@ -1,6 +1,6 @@ import { MessageThreadSubscriberDropdownAddSubscriberMenuItem } from '@/activities/emails/components/MessageThreadSubscriberDropdownAddSubscriberMenuItem'; import { type MessageThreadSubscriber } from '@/activities/emails/types/MessageThreadSubscriber'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords'; import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer'; import { DropdownMenuSearchInput } from '@/ui/layout/dropdown/components/DropdownMenuSearchInput'; diff --git a/packages/twenty-front/src/modules/activities/emails/components/MessageThreadSubscriberDropdownAddSubscriberMenuItem.tsx b/packages/twenty-front/src/modules/activities/emails/components/MessageThreadSubscriberDropdownAddSubscriberMenuItem.tsx index 0047bc1ddb3..9762f176401 100644 --- a/packages/twenty-front/src/modules/activities/emails/components/MessageThreadSubscriberDropdownAddSubscriberMenuItem.tsx +++ b/packages/twenty-front/src/modules/activities/emails/components/MessageThreadSubscriberDropdownAddSubscriberMenuItem.tsx @@ -1,5 +1,5 @@ import { type MessageThreadSubscriber } from '@/activities/emails/types/MessageThreadSubscriber'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useCreateOneRecord } from '@/object-record/hooks/useCreateOneRecord'; import { type WorkspaceMember } from '@/workspace-member/types/WorkspaceMember'; import { IconPlus } from 'twenty-ui/display'; diff --git a/packages/twenty-front/src/modules/activities/emails/graphql/operation-signatures/factories/fetchAllThreadMessagesOperationSignatureFactory.ts b/packages/twenty-front/src/modules/activities/emails/graphql/operation-signatures/factories/fetchAllThreadMessagesOperationSignatureFactory.ts index 3fc4d5a430c..b023208c15f 100644 --- a/packages/twenty-front/src/modules/activities/emails/graphql/operation-signatures/factories/fetchAllThreadMessagesOperationSignatureFactory.ts +++ b/packages/twenty-front/src/modules/activities/emails/graphql/operation-signatures/factories/fetchAllThreadMessagesOperationSignatureFactory.ts @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { type RecordGqlOperationSignatureFactory } from '@/object-record/graphql/types/RecordGqlOperationSignatureFactory'; import { QUERY_MAX_RECORDS } from 'twenty-shared/constants'; diff --git a/packages/twenty-front/src/modules/activities/files/components/AttachmentRow.tsx b/packages/twenty-front/src/modules/activities/files/components/AttachmentRow.tsx index c20324ab971..e908f8e8a31 100644 --- a/packages/twenty-front/src/modules/activities/files/components/AttachmentRow.tsx +++ b/packages/twenty-front/src/modules/activities/files/components/AttachmentRow.tsx @@ -2,7 +2,7 @@ import { ActivityRow } from '@/activities/components/ActivityRow'; import { AttachmentDropdown } from '@/activities/files/components/AttachmentDropdown'; import { type Attachment } from '@/activities/files/types/Attachment'; import { downloadFile } from '@/activities/files/utils/downloadFile'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useDestroyOneRecord } from '@/object-record/hooks/useDestroyOneRecord'; import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; import { diff --git a/packages/twenty-front/src/modules/activities/files/hooks/useAttachments.tsx b/packages/twenty-front/src/modules/activities/files/hooks/useAttachments.tsx index 5b77b8d4f4d..702feca6b69 100644 --- a/packages/twenty-front/src/modules/activities/files/hooks/useAttachments.tsx +++ b/packages/twenty-front/src/modules/activities/files/hooks/useAttachments.tsx @@ -1,7 +1,7 @@ import { type Attachment } from '@/activities/files/types/Attachment'; import { type ActivityTargetableObject } from '@/activities/types/ActivityTargetableEntity'; import { getActivityTargetObjectFieldIdName } from '@/activities/utils/getActivityTargetObjectFieldIdName'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords'; import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled'; import { FeatureFlagKey } from '~/generated-metadata/graphql'; diff --git a/packages/twenty-front/src/modules/activities/files/hooks/useUploadAttachmentFile.tsx b/packages/twenty-front/src/modules/activities/files/hooks/useUploadAttachmentFile.tsx index 74c15be50fb..d02da78f801 100644 --- a/packages/twenty-front/src/modules/activities/files/hooks/useUploadAttachmentFile.tsx +++ b/packages/twenty-front/src/modules/activities/files/hooks/useUploadAttachmentFile.tsx @@ -3,7 +3,7 @@ import { getFileType } from '@/activities/files/utils/getFileType'; 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 { CoreObjectNameSingular } from 'twenty-shared/types'; import { useCreateOneRecord } from '@/object-record/hooks/useCreateOneRecord'; import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled'; import { useApolloClient } from '@apollo/client'; diff --git a/packages/twenty-front/src/modules/activities/graphql/operation-signatures/factories/createOneActivityOperationSignatureFactory.ts b/packages/twenty-front/src/modules/activities/graphql/operation-signatures/factories/createOneActivityOperationSignatureFactory.ts index dc700a9fc38..fce5e33ecf9 100644 --- a/packages/twenty-front/src/modules/activities/graphql/operation-signatures/factories/createOneActivityOperationSignatureFactory.ts +++ b/packages/twenty-front/src/modules/activities/graphql/operation-signatures/factories/createOneActivityOperationSignatureFactory.ts @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { type RecordGqlOperationSignatureFactory } from '@/object-record/graphql/types/RecordGqlOperationSignatureFactory'; type CreateOneActivityOperationSignatureFactory = { diff --git a/packages/twenty-front/src/modules/activities/graphql/operation-signatures/factories/findActivitiesOperationSignatureFactory.ts b/packages/twenty-front/src/modules/activities/graphql/operation-signatures/factories/findActivitiesOperationSignatureFactory.ts index 8ba765d1ee8..acc064a09ff 100644 --- a/packages/twenty-front/src/modules/activities/graphql/operation-signatures/factories/findActivitiesOperationSignatureFactory.ts +++ b/packages/twenty-front/src/modules/activities/graphql/operation-signatures/factories/findActivitiesOperationSignatureFactory.ts @@ -1,5 +1,5 @@ import { generateActivityTargetMorphFieldKeys } from '@/activities/utils/generateActivityTargetMorphFieldKeys'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { type RecordGqlOperationSignatureFactory } from '@/object-record/graphql/types/RecordGqlOperationSignatureFactory'; diff --git a/packages/twenty-front/src/modules/activities/graphql/operation-signatures/factories/findActivityTargetsOperationSignatureFactory.ts b/packages/twenty-front/src/modules/activities/graphql/operation-signatures/factories/findActivityTargetsOperationSignatureFactory.ts index 2c51884156d..b6a15042181 100644 --- a/packages/twenty-front/src/modules/activities/graphql/operation-signatures/factories/findActivityTargetsOperationSignatureFactory.ts +++ b/packages/twenty-front/src/modules/activities/graphql/operation-signatures/factories/findActivityTargetsOperationSignatureFactory.ts @@ -1,5 +1,5 @@ import { getJoinObjectNameSingular } from '@/activities/utils/getJoinObjectNameSingular'; -import { type CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { type CoreObjectNameSingular } from 'twenty-shared/types'; import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { generateDepthRecordGqlFieldsFromObject } from '@/object-record/graphql/record-gql-fields/utils/generateDepthRecordGqlFieldsFromObject'; import { type RecordGqlOperationSignatureFactory } from '@/object-record/graphql/types/RecordGqlOperationSignatureFactory'; diff --git a/packages/twenty-front/src/modules/activities/hooks/__tests__/useActivities.test.tsx b/packages/twenty-front/src/modules/activities/hooks/__tests__/useActivities.test.tsx index 67df24f1c42..0392cb59a81 100644 --- a/packages/twenty-front/src/modules/activities/hooks/__tests__/useActivities.test.tsx +++ b/packages/twenty-front/src/modules/activities/hooks/__tests__/useActivities.test.tsx @@ -1,7 +1,7 @@ import { renderHook } from '@testing-library/react'; import { useActivities } from '@/activities/hooks/useActivities'; import { type Task } from '@/activities/types/Task'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; jest.mock('@/activities/hooks/useActivityTargetsForTargetableObjects', () => ({ useActivityTargetsForTargetableObjects: jest.fn(), diff --git a/packages/twenty-front/src/modules/activities/hooks/__tests__/useCreateActivityInDB.test.tsx b/packages/twenty-front/src/modules/activities/hooks/__tests__/useCreateActivityInDB.test.tsx index 88aaa16ec23..9a1278453bf 100644 --- a/packages/twenty-front/src/modules/activities/hooks/__tests__/useCreateActivityInDB.test.tsx +++ b/packages/twenty-front/src/modules/activities/hooks/__tests__/useCreateActivityInDB.test.tsx @@ -4,7 +4,7 @@ import { act, renderHook } from '@testing-library/react'; import { createOneActivityOperationSignatureFactory } from '@/activities/graphql/operation-signatures/factories/createOneActivityOperationSignatureFactory'; import { useCreateActivityInDB } from '@/activities/hooks/useCreateActivityInDB'; import { type Task } from '@/activities/types/Task'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { generateCreateOneRecordMutation } from '@/object-metadata/utils/generateCreateOneRecordMutation'; import { getRecordFromRecordNode } from '@/object-record/cache/utils/getRecordFromRecordNode'; import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper'; diff --git a/packages/twenty-front/src/modules/activities/hooks/__tests__/useOpenCreateActivityDrawer.test.tsx b/packages/twenty-front/src/modules/activities/hooks/__tests__/useOpenCreateActivityDrawer.test.tsx index 0e4cd090309..3ba0bac5c04 100644 --- a/packages/twenty-front/src/modules/activities/hooks/__tests__/useOpenCreateActivityDrawer.test.tsx +++ b/packages/twenty-front/src/modules/activities/hooks/__tests__/useOpenCreateActivityDrawer.test.tsx @@ -3,7 +3,7 @@ import { act, renderHook } from '@testing-library/react'; import { useOpenCreateActivityDrawer } from '@/activities/hooks/useOpenCreateActivityDrawer'; import { activityTargetableEntityArrayState } from '@/activities/states/activityTargetableEntityArrayState'; import { isUpsertingActivityInDBState } from '@/activities/states/isCreatingActivityInDBState'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { viewableRecordIdState } from '@/object-record/record-right-drawer/states/viewableRecordIdState'; import { viewableRecordNameSingularState } from '@/object-record/record-right-drawer/states/viewableRecordNameSingularState'; import { jotaiStore } from '@/ui/utilities/state/jotai/jotaiStore'; diff --git a/packages/twenty-front/src/modules/activities/hooks/useActivities.ts b/packages/twenty-front/src/modules/activities/hooks/useActivities.ts index 9edee495914..184026cc3eb 100644 --- a/packages/twenty-front/src/modules/activities/hooks/useActivities.ts +++ b/packages/twenty-front/src/modules/activities/hooks/useActivities.ts @@ -7,10 +7,12 @@ import { type Note } from '@/activities/types/Note'; import { type NoteTarget } from '@/activities/types/NoteTarget'; import { type Task } from '@/activities/types/Task'; import { type TaskTarget } from '@/activities/types/TaskTarget'; -import { type CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { + type CoreObjectNameSingular, + type RecordGqlOperationOrderBy, +} from 'twenty-shared/types'; import { getRecordsFromRecordConnection } from '@/object-record/cache/utils/getRecordsFromRecordConnection'; import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; -import { type RecordGqlOperationOrderBy } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; export const useActivities = ({ diff --git a/packages/twenty-front/src/modules/activities/hooks/useActivityTargetsForTargetableObjects.ts b/packages/twenty-front/src/modules/activities/hooks/useActivityTargetsForTargetableObjects.ts index 67682e03367..cae08902f39 100644 --- a/packages/twenty-front/src/modules/activities/hooks/useActivityTargetsForTargetableObjects.ts +++ b/packages/twenty-front/src/modules/activities/hooks/useActivityTargetsForTargetableObjects.ts @@ -1,4 +1,7 @@ -import { type RecordGqlOperationOrderBy } from 'twenty-shared/types'; +import { + CoreObjectNameSingular, + type RecordGqlOperationOrderBy, +} from 'twenty-shared/types'; import { findActivityTargetsOperationSignatureFactory } from '@/activities/graphql/operation-signatures/factories/findActivityTargetsOperationSignatureFactory'; import { type ActivityTargetableObject } from '@/activities/types/ActivityTargetableEntity'; @@ -6,7 +9,6 @@ import { type NoteTarget } from '@/activities/types/NoteTarget'; import { type TaskTarget } from '@/activities/types/TaskTarget'; import { getActivityTargetsFilter } from '@/activities/utils/getActivityTargetsFilter'; import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; diff --git a/packages/twenty-front/src/modules/activities/hooks/useCreateActivityInDB.ts b/packages/twenty-front/src/modules/activities/hooks/useCreateActivityInDB.ts index 099cfe55676..3a6ddf37e80 100644 --- a/packages/twenty-front/src/modules/activities/hooks/useCreateActivityInDB.ts +++ b/packages/twenty-front/src/modules/activities/hooks/useCreateActivityInDB.ts @@ -6,7 +6,7 @@ import { type ActivityForEditor } from '@/activities/types/ActivityForEditor'; import { useApolloCoreClient } from '@/object-metadata/hooks/useApolloCoreClient'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems'; -import { type CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { type CoreObjectNameSingular } from 'twenty-shared/types'; import { getRecordConnectionFromRecords } from '@/object-record/cache/utils/getRecordConnectionFromRecords'; import { modifyRecordFromCache } from '@/object-record/cache/utils/modifyRecordFromCache'; import { useCreateManyRecords } from '@/object-record/hooks/useCreateManyRecords'; diff --git a/packages/twenty-front/src/modules/activities/hooks/useCustomResolver.ts b/packages/twenty-front/src/modules/activities/hooks/useCustomResolver.ts index f7ae9ee8d37..de485ef3dc3 100644 --- a/packages/twenty-front/src/modules/activities/hooks/useCustomResolver.ts +++ b/packages/twenty-front/src/modules/activities/hooks/useCustomResolver.ts @@ -8,7 +8,7 @@ import { useState } from 'react'; import { type ActivityTargetableObject } from '@/activities/types/ActivityTargetableEntity'; import { useApolloCoreClient } from '@/object-metadata/hooks/useApolloCoreClient'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; type CustomResolverQueryResult< diff --git a/packages/twenty-front/src/modules/activities/hooks/useOpenCreateActivityDrawer.ts b/packages/twenty-front/src/modules/activities/hooks/useOpenCreateActivityDrawer.ts index 44bd5ff5c05..7af9ba5e62e 100644 --- a/packages/twenty-front/src/modules/activities/hooks/useOpenCreateActivityDrawer.ts +++ b/packages/twenty-front/src/modules/activities/hooks/useOpenCreateActivityDrawer.ts @@ -1,5 +1,5 @@ import { activityTargetableEntityArrayState } from '@/activities/states/activityTargetableEntityArrayState'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { viewableRecordIdState } from '@/object-record/record-right-drawer/states/viewableRecordIdState'; import { viewableRecordNameSingularState } from '@/object-record/record-right-drawer/states/viewableRecordNameSingularState'; import { type WorkspaceMember } from '@/workspace-member/types/WorkspaceMember'; diff --git a/packages/twenty-front/src/modules/activities/hooks/usePrepareFindManyActivitiesQuery.ts b/packages/twenty-front/src/modules/activities/hooks/usePrepareFindManyActivitiesQuery.ts index 8915d56c5ff..b75c94763fd 100644 --- a/packages/twenty-front/src/modules/activities/hooks/usePrepareFindManyActivitiesQuery.ts +++ b/packages/twenty-front/src/modules/activities/hooks/usePrepareFindManyActivitiesQuery.ts @@ -7,7 +7,7 @@ import { type TaskTarget } from '@/activities/types/TaskTarget'; import { useApolloCoreClient } from '@/object-metadata/hooks/useApolloCoreClient'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useGetRecordFromCache } from '@/object-record/cache/hooks/useGetRecordFromCache'; import { useUpsertFindManyRecordsQueryInCache } from '@/object-record/cache/hooks/useUpsertFindManyRecordsQueryInCache'; import { getRecordFromCache } from '@/object-record/cache/utils/getRecordFromCache'; diff --git a/packages/twenty-front/src/modules/activities/hooks/useRefreshShowPageFindManyActivitiesQueries.ts b/packages/twenty-front/src/modules/activities/hooks/useRefreshShowPageFindManyActivitiesQueries.ts index e9cb297e4bd..db557c279a3 100644 --- a/packages/twenty-front/src/modules/activities/hooks/useRefreshShowPageFindManyActivitiesQueries.ts +++ b/packages/twenty-front/src/modules/activities/hooks/useRefreshShowPageFindManyActivitiesQueries.ts @@ -1,6 +1,6 @@ import { usePrepareFindManyActivitiesQuery } from '@/activities/hooks/usePrepareFindManyActivitiesQuery'; import { objectShowPageTargetableObjectState } from '@/activities/timeline-activities/states/objectShowPageTargetableObjectState'; -import { type CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { type CoreObjectNameSingular } from 'twenty-shared/types'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { isDefined } from 'twenty-shared/utils'; diff --git a/packages/twenty-front/src/modules/activities/hooks/useUpsertActivity.ts b/packages/twenty-front/src/modules/activities/hooks/useUpsertActivity.ts index d879a6e5b8c..58a2a0f1b2e 100644 --- a/packages/twenty-front/src/modules/activities/hooks/useUpsertActivity.ts +++ b/packages/twenty-front/src/modules/activities/hooks/useUpsertActivity.ts @@ -5,7 +5,7 @@ import { isUpsertingActivityInDBState } from '@/activities/states/isCreatingActi import { objectShowPageTargetableObjectState } from '@/activities/timeline-activities/states/objectShowPageTargetableObjectState'; import { type Note } from '@/activities/types/Note'; import { type Task } from '@/activities/types/Task'; -import { type CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { type CoreObjectNameSingular } from 'twenty-shared/types'; import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; import { isDefined } from 'twenty-shared/utils'; import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState'; diff --git a/packages/twenty-front/src/modules/activities/inline-cell/components/ActivityTargetsInlineCell.tsx b/packages/twenty-front/src/modules/activities/inline-cell/components/ActivityTargetsInlineCell.tsx index 693833a4814..fa3f83b55ff 100644 --- a/packages/twenty-front/src/modules/activities/inline-cell/components/ActivityTargetsInlineCell.tsx +++ b/packages/twenty-front/src/modules/activities/inline-cell/components/ActivityTargetsInlineCell.tsx @@ -5,7 +5,7 @@ import { ActivityTargetChips } from '@/activities/components/ActivityTargetChips import { useActivityTargetObjectRecords } from '@/activities/hooks/useActivityTargetObjectRecords'; import { useOpenActivityTargetCellEditMode } from '@/activities/inline-cell/hooks/useOpenActivityTargetCellEditMode'; import { useUpdateActivityTargetFromCell } from '@/activities/inline-cell/hooks/useUpdateActivityTargetFromCell'; -import { type CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { type CoreObjectNameSingular } from 'twenty-shared/types'; import { RecordFieldsScopeContextProvider } from '@/object-record/record-field-list/contexts/RecordFieldsScopeContext'; import { FieldContextProvider } from '@/object-record/record-field/ui/components/FieldContextProvider'; import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext'; diff --git a/packages/twenty-front/src/modules/activities/inline-cell/hooks/useOpenActivityTargetCellEditMode.ts b/packages/twenty-front/src/modules/activities/inline-cell/hooks/useOpenActivityTargetCellEditMode.ts index a99ec42bea8..fbd9de0514a 100644 --- a/packages/twenty-front/src/modules/activities/inline-cell/hooks/useOpenActivityTargetCellEditMode.ts +++ b/packages/twenty-front/src/modules/activities/inline-cell/hooks/useOpenActivityTargetCellEditMode.ts @@ -1,6 +1,6 @@ import { type ActivityTargetWithTargetRecord } from '@/activities/types/ActivityTargetObject'; import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useMultipleRecordPickerOpen } from '@/object-record/record-picker/multiple-record-picker/hooks/useMultipleRecordPickerOpen'; import { useMultipleRecordPickerPerformSearch } from '@/object-record/record-picker/multiple-record-picker/hooks/useMultipleRecordPickerPerformSearch'; import { multipleRecordPickerPickableMorphItemsComponentState } from '@/object-record/record-picker/multiple-record-picker/states/multipleRecordPickerPickableMorphItemsComponentState'; diff --git a/packages/twenty-front/src/modules/activities/inline-cell/hooks/useUpdateActivityTargetFromCell.ts b/packages/twenty-front/src/modules/activities/inline-cell/hooks/useUpdateActivityTargetFromCell.ts index 60b16af6387..2647e34f9da 100644 --- a/packages/twenty-front/src/modules/activities/inline-cell/hooks/useUpdateActivityTargetFromCell.ts +++ b/packages/twenty-front/src/modules/activities/inline-cell/hooks/useUpdateActivityTargetFromCell.ts @@ -4,7 +4,7 @@ import { type TaskTarget } from '@/activities/types/TaskTarget'; import { getActivityTargetFieldNameForObject } from '@/activities/utils/getActivityTargetFieldNameForObject'; import { getJoinObjectNameSingular } from '@/activities/utils/getJoinObjectNameSingular'; import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useCreateOneRecord } from '@/object-record/hooks/useCreateOneRecord'; import { useDeleteOneRecord } from '@/object-record/hooks/useDeleteOneRecord'; import { searchRecordStoreFamilyState } from '@/object-record/record-picker/multiple-record-picker/states/searchRecordStoreComponentFamilyState'; diff --git a/packages/twenty-front/src/modules/activities/notes/components/NoteTile.tsx b/packages/twenty-front/src/modules/activities/notes/components/NoteTile.tsx index 58c37dcd47e..363aea63095 100644 --- a/packages/twenty-front/src/modules/activities/notes/components/NoteTile.tsx +++ b/packages/twenty-front/src/modules/activities/notes/components/NoteTile.tsx @@ -6,7 +6,7 @@ import { useActivityTargetsComponentInstanceId } from '@/activities/inline-cell/ import { type Note } from '@/activities/types/Note'; import { getActivityPreview } from '@/activities/utils/getActivityPreview'; import { useOpenRecordInCommandMenu } from '@/command-menu/hooks/useOpenRecordInCommandMenu'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { RecordFieldsScopeContextProvider } from '@/object-record/record-field-list/contexts/RecordFieldsScopeContext'; import { FieldContextProvider } from '@/object-record/record-field/ui/components/FieldContextProvider'; import { themeCssVariables } from 'twenty-ui/theme-constants'; diff --git a/packages/twenty-front/src/modules/activities/notes/components/NotesCard.tsx b/packages/twenty-front/src/modules/activities/notes/components/NotesCard.tsx index dbfcb0f8777..c1e8aa99f0b 100644 --- a/packages/twenty-front/src/modules/activities/notes/components/NotesCard.tsx +++ b/packages/twenty-front/src/modules/activities/notes/components/NotesCard.tsx @@ -4,7 +4,7 @@ import { useOpenCreateActivityDrawer } from '@/activities/hooks/useOpenCreateAct import { NoteList } from '@/activities/notes/components/NoteList'; import { useNotes } from '@/activities/notes/hooks/useNotes'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useObjectPermissionsForObject } from '@/object-record/hooks/useObjectPermissionsForObject'; import { useTargetRecord } from '@/ui/layout/contexts/useTargetRecord'; import { styled } from '@linaria/react'; diff --git a/packages/twenty-front/src/modules/activities/notes/hooks/useNotes.ts b/packages/twenty-front/src/modules/activities/notes/hooks/useNotes.ts index 9b2d791fa3e..b2b95facf23 100644 --- a/packages/twenty-front/src/modules/activities/notes/hooks/useNotes.ts +++ b/packages/twenty-front/src/modules/activities/notes/hooks/useNotes.ts @@ -4,10 +4,12 @@ import { useActivities } from '@/activities/hooks/useActivities'; import { currentNotesQueryVariablesState } from '@/activities/notes/states/currentNotesQueryVariablesState'; import { FIND_MANY_TIMELINE_ACTIVITIES_ORDER_BY } from '@/activities/timeline-activities/constants/FindManyTimelineActivitiesOrderBy'; import { type Note } from '@/activities/types/Note'; -import { type RecordGqlOperationVariables } from 'twenty-shared/types'; +import { + CoreObjectNameSingular, + type RecordGqlOperationVariables, +} from 'twenty-shared/types'; import { isDeeplyEqual } from '~/utils/isDeeplyEqual'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { type ActivityTargetableObject } from '@/activities/types/ActivityTargetableEntity'; import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState'; diff --git a/packages/twenty-front/src/modules/activities/tasks/components/AddTaskButton.tsx b/packages/twenty-front/src/modules/activities/tasks/components/AddTaskButton.tsx index 9e6e0dafa0e..c99356bcbbb 100644 --- a/packages/twenty-front/src/modules/activities/tasks/components/AddTaskButton.tsx +++ b/packages/twenty-front/src/modules/activities/tasks/components/AddTaskButton.tsx @@ -1,7 +1,7 @@ import { useOpenCreateActivityDrawer } from '@/activities/hooks/useOpenCreateActivityDrawer'; import { type ActivityTargetableObject } from '@/activities/types/ActivityTargetableEntity'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useObjectPermissionsForObject } from '@/object-record/hooks/useObjectPermissionsForObject'; import { t } from '@lingui/core/macro'; import { IconPlus } from 'twenty-ui/display'; diff --git a/packages/twenty-front/src/modules/activities/tasks/components/TaskGroups.tsx b/packages/twenty-front/src/modules/activities/tasks/components/TaskGroups.tsx index e80886d1ab4..12e589c40fd 100644 --- a/packages/twenty-front/src/modules/activities/tasks/components/TaskGroups.tsx +++ b/packages/twenty-front/src/modules/activities/tasks/components/TaskGroups.tsx @@ -6,7 +6,7 @@ import { useTasks } from '@/activities/tasks/hooks/useTasks'; import { type ActivityTargetableObject } from '@/activities/types/ActivityTargetableEntity'; import { type Task } from '@/activities/types/Task'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useObjectPermissionsForObject } from '@/object-record/hooks/useObjectPermissionsForObject'; import { activeTabIdComponentState } from '@/ui/layout/tab-list/states/activeTabIdComponentState'; import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue'; diff --git a/packages/twenty-front/src/modules/activities/tasks/components/TaskRow.tsx b/packages/twenty-front/src/modules/activities/tasks/components/TaskRow.tsx index f62fc6f9cef..cb4874046a8 100644 --- a/packages/twenty-front/src/modules/activities/tasks/components/TaskRow.tsx +++ b/packages/twenty-front/src/modules/activities/tasks/components/TaskRow.tsx @@ -10,7 +10,7 @@ import { ActivityRow } from '@/activities/components/ActivityRow'; import { useActivityTargetsComponentInstanceId } from '@/activities/inline-cell/hooks/useActivityTargetsComponentInstanceId'; import { type Task } from '@/activities/types/Task'; import { useOpenRecordInCommandMenu } from '@/command-menu/hooks/useOpenRecordInCommandMenu'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { StopPropagationContainer } from '@/object-record/record-board/record-board-card/components/StopPropagationContainer'; import { RecordFieldsScopeContextProvider } from '@/object-record/record-field-list/contexts/RecordFieldsScopeContext'; import { FieldContextProvider } from '@/object-record/record-field/ui/components/FieldContextProvider'; diff --git a/packages/twenty-front/src/modules/activities/tasks/hooks/useCompleteTask.ts b/packages/twenty-front/src/modules/activities/tasks/hooks/useCompleteTask.ts index 5872fc73d22..a764edcdf6a 100644 --- a/packages/twenty-front/src/modules/activities/tasks/hooks/useCompleteTask.ts +++ b/packages/twenty-front/src/modules/activities/tasks/hooks/useCompleteTask.ts @@ -1,7 +1,7 @@ import { useCallback } from 'react'; import { type Task } from '@/activities/types/Task'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; export const useCompleteTask = (task: Task) => { diff --git a/packages/twenty-front/src/modules/activities/tasks/hooks/useTasks.ts b/packages/twenty-front/src/modules/activities/tasks/hooks/useTasks.ts index c8acce13a46..a76cac8d468 100644 --- a/packages/twenty-front/src/modules/activities/tasks/hooks/useTasks.ts +++ b/packages/twenty-front/src/modules/activities/tasks/hooks/useTasks.ts @@ -2,7 +2,7 @@ import { useActivities } from '@/activities/hooks/useActivities'; import { FIND_MANY_TIMELINE_ACTIVITIES_ORDER_BY } from '@/activities/timeline-activities/constants/FindManyTimelineActivitiesOrderBy'; import { type ActivityTargetableObject } from '@/activities/types/ActivityTargetableEntity'; import { type Task } from '@/activities/types/Task'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; type UseTasksProps = { targetableObjects: ActivityTargetableObject[]; diff --git a/packages/twenty-front/src/modules/activities/timeline-activities/components/__stories__/TimelineActivities.stories.tsx b/packages/twenty-front/src/modules/activities/timeline-activities/components/__stories__/TimelineActivities.stories.tsx index a0f3c1fa8c1..816ca27e149 100644 --- a/packages/twenty-front/src/modules/activities/timeline-activities/components/__stories__/TimelineActivities.stories.tsx +++ b/packages/twenty-front/src/modules/activities/timeline-activities/components/__stories__/TimelineActivities.stories.tsx @@ -3,7 +3,7 @@ import { HttpResponse, graphql } from 'msw'; import { TimelineCard } from '@/activities/timeline-activities/components/TimelineCard'; import { TimelineActivityContext } from '@/activities/timeline-activities/contexts/TimelineActivityContext'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { LayoutRenderingProvider } from '@/ui/layout/contexts/LayoutRenderingContext'; import { ComponentDecorator } from 'twenty-ui/testing'; import { PageLayoutType } from '~/generated-metadata/graphql'; diff --git a/packages/twenty-front/src/modules/activities/timeline-activities/hooks/useLinkedObjectsTitle.ts b/packages/twenty-front/src/modules/activities/timeline-activities/hooks/useLinkedObjectsTitle.ts index 2df7bc03a4c..edf85ce507f 100644 --- a/packages/twenty-front/src/modules/activities/timeline-activities/hooks/useLinkedObjectsTitle.ts +++ b/packages/twenty-front/src/modules/activities/timeline-activities/hooks/useLinkedObjectsTitle.ts @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useCombinedFindManyRecords } from '@/object-record/multiple-objects/hooks/useCombinedFindManyRecords'; import { isNonEmptyArray } from '@sniptt/guards'; 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 5bea7d908d6..30622f14276 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,7 +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 { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useGenerateDepthRecordGqlFieldsFromObject } from '@/object-record/graphql/record-gql-fields/hooks/useGenerateDepthRecordGqlFieldsFromObject'; import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords'; import { capitalize, isDefined } from 'twenty-shared/utils'; diff --git a/packages/twenty-front/src/modules/activities/timeline-activities/rows/activity/components/EventRowActivity.tsx b/packages/twenty-front/src/modules/activities/timeline-activities/rows/activity/components/EventRowActivity.tsx index d84af27c5f1..d065fe5ce90 100644 --- a/packages/twenty-front/src/modules/activities/timeline-activities/rows/activity/components/EventRowActivity.tsx +++ b/packages/twenty-front/src/modules/activities/timeline-activities/rows/activity/components/EventRowActivity.tsx @@ -8,7 +8,7 @@ import { } from '@/activities/timeline-activities/rows/components/EventRowDynamicComponent'; import { isTimelineActivityWithLinkedRecord } from '@/activities/timeline-activities/types/TimelineActivity'; import { useOpenRecordInCommandMenu } from '@/command-menu/hooks/useOpenRecordInCommandMenu'; -import { type CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { type CoreObjectNameSingular } from 'twenty-shared/types'; import { useGetRecordFromCache } from '@/object-record/cache/hooks/useGetRecordFromCache'; import { isNonEmptyString } from '@sniptt/guards'; import { OverflowingTextWithTooltip } from 'twenty-ui/display'; diff --git a/packages/twenty-front/src/modules/activities/timeline-activities/rows/calendar/components/EventCardCalendarEvent.tsx b/packages/twenty-front/src/modules/activities/timeline-activities/rows/calendar/components/EventCardCalendarEvent.tsx index 5fb402c5f14..b2350cbd1bc 100644 --- a/packages/twenty-front/src/modules/activities/timeline-activities/rows/calendar/components/EventCardCalendarEvent.tsx +++ b/packages/twenty-front/src/modules/activities/timeline-activities/rows/calendar/components/EventCardCalendarEvent.tsx @@ -6,7 +6,7 @@ import { CalendarEventNotSharedContent } from '@/activities/calendar/components/ import { CalendarEventParticipantsAvatarGroup } from '@/activities/calendar/components/CalendarEventParticipantsAvatarGroup'; import { type CalendarEvent } from '@/activities/calendar/types/CalendarEvent'; import { useOpenCalendarEventInCommandMenu } from '@/command-menu/hooks/useOpenCalendarEventInCommandMenu'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useFindOneRecord } from '@/object-record/hooks/useFindOneRecord'; import { useUpsertRecordsInStore } from '@/object-record/record-store/hooks/useUpsertRecordsInStore'; import { UserContext } from '@/users/contexts/UserContext'; diff --git a/packages/twenty-front/src/modules/activities/timeline-activities/rows/components/EventRowDynamicComponent.tsx b/packages/twenty-front/src/modules/activities/timeline-activities/rows/components/EventRowDynamicComponent.tsx index b09d2b95814..0e5b147802e 100644 --- a/packages/twenty-front/src/modules/activities/timeline-activities/rows/components/EventRowDynamicComponent.tsx +++ b/packages/twenty-front/src/modules/activities/timeline-activities/rows/components/EventRowDynamicComponent.tsx @@ -5,7 +5,7 @@ import { EventRowCalendarEvent } from '@/activities/timeline-activities/rows/cal import { EventRowMainObject } from '@/activities/timeline-activities/rows/main-object/components/EventRowMainObject'; import { EventRowMessage } from '@/activities/timeline-activities/rows/message/components/EventRowMessage'; import { type TimelineActivity } from '@/activities/timeline-activities/types/TimelineActivity'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { themeCssVariables } from 'twenty-ui/theme-constants'; diff --git a/packages/twenty-front/src/modules/activities/timeline-activities/rows/message/components/EventCardMessage.tsx b/packages/twenty-front/src/modules/activities/timeline-activities/rows/message/components/EventCardMessage.tsx index 127e4e49891..e713a3a253c 100644 --- a/packages/twenty-front/src/modules/activities/timeline-activities/rows/message/components/EventCardMessage.tsx +++ b/packages/twenty-front/src/modules/activities/timeline-activities/rows/message/components/EventCardMessage.tsx @@ -4,7 +4,7 @@ import { type EmailThreadMessage } from '@/activities/emails/types/EmailThreadMe import { EventCardMessageBodyNotShared } from '@/activities/timeline-activities/rows/message/components/EventCardMessageBodyNotShared'; import { EventCardMessageForbidden } from '@/activities/timeline-activities/rows/message/components/EventCardMessageForbidden'; import { useOpenEmailThreadInCommandMenu } from '@/command-menu/hooks/useOpenEmailThreadInCommandMenu'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useFindOneRecord } from '@/object-record/hooks/useFindOneRecord'; import { useUpsertRecordsInStore } from '@/object-record/record-store/hooks/useUpsertRecordsInStore'; import { Trans, useLingui } from '@lingui/react/macro'; diff --git a/packages/twenty-front/src/modules/activities/timeline-activities/utils/__tests__/filterOutInvalidTimelineActivities.test.ts b/packages/twenty-front/src/modules/activities/timeline-activities/utils/__tests__/filterOutInvalidTimelineActivities.test.ts index fe17dd697f4..217e4766f51 100644 --- a/packages/twenty-front/src/modules/activities/timeline-activities/utils/__tests__/filterOutInvalidTimelineActivities.test.ts +++ b/packages/twenty-front/src/modules/activities/timeline-activities/utils/__tests__/filterOutInvalidTimelineActivities.test.ts @@ -1,6 +1,6 @@ import { type TimelineActivity } from '@/activities/timeline-activities/types/TimelineActivity'; import { filterOutInvalidTimelineActivities } from '@/activities/timeline-activities/utils/filterOutInvalidTimelineActivities'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; const noteObjectMetadataItem = { diff --git a/packages/twenty-front/src/modules/activities/timeline-activities/utils/filterOutInvalidTimelineActivities.ts b/packages/twenty-front/src/modules/activities/timeline-activities/utils/filterOutInvalidTimelineActivities.ts index 82cc28390f3..e4d74f5066d 100644 --- a/packages/twenty-front/src/modules/activities/timeline-activities/utils/filterOutInvalidTimelineActivities.ts +++ b/packages/twenty-front/src/modules/activities/timeline-activities/utils/filterOutInvalidTimelineActivities.ts @@ -1,5 +1,5 @@ import { type TimelineActivity } from '@/activities/timeline-activities/types/TimelineActivity'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; export const filterOutInvalidTimelineActivities = ( diff --git a/packages/twenty-front/src/modules/activities/utils/getActivityTargetFieldNameForObject.ts b/packages/twenty-front/src/modules/activities/utils/getActivityTargetFieldNameForObject.ts index 3ae4204cca8..578a18251af 100644 --- a/packages/twenty-front/src/modules/activities/utils/getActivityTargetFieldNameForObject.ts +++ b/packages/twenty-front/src/modules/activities/utils/getActivityTargetFieldNameForObject.ts @@ -1,5 +1,5 @@ import { getActivityTargetObjectFieldIdName } from '@/activities/utils/getActivityTargetObjectFieldIdName'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { isDefined } from 'twenty-shared/utils'; diff --git a/packages/twenty-front/src/modules/activities/utils/getActivityTargetObjectRecords.ts b/packages/twenty-front/src/modules/activities/utils/getActivityTargetObjectRecords.ts index 4fa29944f98..6acdd44b535 100644 --- a/packages/twenty-front/src/modules/activities/utils/getActivityTargetObjectRecords.ts +++ b/packages/twenty-front/src/modules/activities/utils/getActivityTargetObjectRecords.ts @@ -3,10 +3,13 @@ import { type Note } from '@/activities/types/Note'; import { type NoteTarget } from '@/activities/types/NoteTarget'; import { type Task } from '@/activities/types/Task'; import { type TaskTarget } from '@/activities/types/TaskTarget'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { type ObjectRecord } from '@/object-record/types/ObjectRecord'; -import { FieldMetadataType, type Nullable } from 'twenty-shared/types'; +import { + CoreObjectNameSingular, + FieldMetadataType, + type Nullable, +} from 'twenty-shared/types'; import { computeMorphRelationFieldName, isDefined } from 'twenty-shared/utils'; type GetActivityTargetObjectRecordsProps = { diff --git a/packages/twenty-front/src/modules/activities/utils/getActivityTargetsFilter.ts b/packages/twenty-front/src/modules/activities/utils/getActivityTargetsFilter.ts index d1779dfb378..1c76ad5c5f4 100644 --- a/packages/twenty-front/src/modules/activities/utils/getActivityTargetsFilter.ts +++ b/packages/twenty-front/src/modules/activities/utils/getActivityTargetsFilter.ts @@ -1,6 +1,6 @@ import { type ActivityTargetableObject } from '@/activities/types/ActivityTargetableEntity'; import { getActivityTargetObjectFieldIdName } from '@/activities/utils/getActivityTargetObjectFieldIdName'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { isDefined } from 'twenty-shared/utils'; diff --git a/packages/twenty-front/src/modules/activities/utils/getJoinObjectNameSingular.ts b/packages/twenty-front/src/modules/activities/utils/getJoinObjectNameSingular.ts index fa0dca54b6d..324e8357909 100644 --- a/packages/twenty-front/src/modules/activities/utils/getJoinObjectNameSingular.ts +++ b/packages/twenty-front/src/modules/activities/utils/getJoinObjectNameSingular.ts @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; export const getJoinObjectNameSingular = ( objectNameSingular: CoreObjectNameSingular, diff --git a/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerUpdateRelationsOptimisticEffect.ts b/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerUpdateRelationsOptimisticEffect.ts index 9f5a367b68e..1dc342e90cb 100644 --- a/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerUpdateRelationsOptimisticEffect.ts +++ b/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerUpdateRelationsOptimisticEffect.ts @@ -2,7 +2,12 @@ import { triggerAttachRelationOptimisticEffect } from '@/apollo/optimistic-effec import { triggerDestroyRecordsOptimisticEffect } from '@/apollo/optimistic-effect/utils/triggerDestroyRecordsOptimisticEffect'; import { triggerDetachRelationOptimisticEffect } from '@/apollo/optimistic-effect/utils/triggerDetachRelationOptimisticEffect'; import { CORE_OBJECT_NAMES_TO_DELETE_ON_TRIGGER_RELATION_DETACH } from '@/apollo/types/coreObjectNamesToDeleteOnRelationDetach'; -import { type CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { + type CoreObjectNameSingular, + FieldMetadataType, + RelationType, + type ObjectPermissions, +} from 'twenty-shared/types'; import { type FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; import { type FieldMetadataItemRelation } from '@/object-metadata/types/FieldMetadataItemRelation'; import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; @@ -14,11 +19,6 @@ import { isFieldRelation } from '@/object-record/record-field/ui/types/guards/is import { type ObjectRecord } from '@/object-record/types/ObjectRecord'; import { type ApolloCache } from '@apollo/client'; import { isArray } from '@sniptt/guards'; -import { - FieldMetadataType, - RelationType, - type ObjectPermissions, -} from 'twenty-shared/types'; import { computeMorphRelationFieldName, CustomError, diff --git a/packages/twenty-front/src/modules/apollo/types/coreObjectNamesToDeleteOnRelationDetach.ts b/packages/twenty-front/src/modules/apollo/types/coreObjectNamesToDeleteOnRelationDetach.ts index 43da2774be3..c2bd63d538c 100644 --- a/packages/twenty-front/src/modules/apollo/types/coreObjectNamesToDeleteOnRelationDetach.ts +++ b/packages/twenty-front/src/modules/apollo/types/coreObjectNamesToDeleteOnRelationDetach.ts @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; export const CORE_OBJECT_NAMES_TO_DELETE_ON_TRIGGER_RELATION_DETACH = [ CoreObjectNameSingular.Favorite, diff --git a/packages/twenty-front/src/modules/blocknote-editor/hooks/useAttachmentSync.ts b/packages/twenty-front/src/modules/blocknote-editor/hooks/useAttachmentSync.ts index cea97b1b988..1fa8bbb0374 100644 --- a/packages/twenty-front/src/modules/blocknote-editor/hooks/useAttachmentSync.ts +++ b/packages/twenty-front/src/modules/blocknote-editor/hooks/useAttachmentSync.ts @@ -3,7 +3,7 @@ import { filterAttachmentsToRestore } from '@/activities/utils/filterAttachments import { getActivityAttachmentIdsAndNameToUpdate } from '@/activities/utils/getActivityAttachmentIdsAndNameToUpdate'; import { getActivityAttachmentIdsToDelete } from '@/activities/utils/getActivityAttachmentIdsToDelete'; import { getActivityAttachmentPathsToRestore } from '@/activities/utils/getActivityAttachmentPathsToRestore'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useDeleteManyRecords } from '@/object-record/hooks/useDeleteManyRecords'; import { useLazyFetchAllRecords } from '@/object-record/hooks/useLazyFetchAllRecords'; import { useRestoreManyRecords } from '@/object-record/hooks/useRestoreManyRecords'; diff --git a/packages/twenty-front/src/modules/command-menu-item/graphql/fragments/commandMenuItemFragment.ts b/packages/twenty-front/src/modules/command-menu-item/graphql/fragments/commandMenuItemFragment.ts index 790af60cafa..fdceb5ea0d2 100644 --- a/packages/twenty-front/src/modules/command-menu-item/graphql/fragments/commandMenuItemFragment.ts +++ b/packages/twenty-front/src/modules/command-menu-item/graphql/fragments/commandMenuItemFragment.ts @@ -13,6 +13,7 @@ export const COMMAND_MENU_ITEM_FRAGMENT = gql` label icon isPinned + conditionalAvailabilityExpression availabilityType availabilityObjectMetadataId } diff --git a/packages/twenty-front/src/modules/command-menu-item/hooks/useCommandMenuItemFrontComponentActions.tsx b/packages/twenty-front/src/modules/command-menu-item/hooks/useCommandMenuItemFrontComponentActions.tsx index 97be76611af..42e74ba35d2 100644 --- a/packages/twenty-front/src/modules/command-menu-item/hooks/useCommandMenuItemFrontComponentActions.tsx +++ b/packages/twenty-front/src/modules/command-menu-item/hooks/useCommandMenuItemFrontComponentActions.tsx @@ -13,20 +13,25 @@ import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/use import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled'; import { useContext } from 'react'; -import { isDefined } from 'twenty-shared/utils'; +import { type CommandMenuContextApi } from 'twenty-shared/types'; +import { + evaluateConditionalAvailabilityExpression, + isDefined, +} from 'twenty-shared/utils'; import { type IconComponent, useIcons } from 'twenty-ui/display'; import { type HeadlessFrontComponentMountContext } from '@/front-components/states/mountedHeadlessFrontComponentMapsState'; import { COMMAND_MENU_DEFAULT_ICON } from '@/workflow/workflow-trigger/constants/CommandMenuDefaultIcon'; import { - type CommandMenuItemFieldsFragment, CommandMenuItemAvailabilityType, + type CommandMenuItemFieldsFragment, FeatureFlagKey, useFindManyCommandMenuItemsQuery, } from '~/generated-metadata/graphql'; type CommandMenuItemWithFrontComponent = CommandMenuItemFieldsFragment & { frontComponentId: string; + conditionalAvailabilityExpression?: string | null; }; type BuildActionFromItemParams = { @@ -49,8 +54,11 @@ type BuildActionFromItemParams = { context?: HeadlessFrontComponentMountContext, ) => void; mountContext?: HeadlessFrontComponentMountContext; + commandMenuContextApi: CommandMenuContextApi; }; +// TODO: we should remove this backward compatibility logic in the future +// once we have migrated all command menu items const buildActionFromItem = ({ item, scope, @@ -60,6 +68,7 @@ const buildActionFromItem = ({ openFrontComponentInCommandMenu, mountHeadlessFrontComponent, mountContext, + commandMenuContextApi, }: BuildActionFromItemParams) => { const displayLabel = item.label; @@ -94,7 +103,11 @@ const buildActionFromItem = ({ position: index, isPinned, Icon, - shouldBeRegistered: () => true, + shouldBeRegistered: () => + evaluateConditionalAvailabilityExpression( + item.conditionalAvailabilityExpression, + commandMenuContextApi, + ), component: isHeadless ? ( { +export const useCommandMenuItemFrontComponentActions = ( + commandMenuContextApi: CommandMenuContextApi, +) => { const { getIcon } = useIcons(); const { openFrontComponentInCommandMenu } = useOpenFrontComponentInCommandMenu(); @@ -194,6 +209,7 @@ export const useCommandMenuItemFrontComponentActions = () => { getIcon, openFrontComponentInCommandMenu, mountHeadlessFrontComponent, + commandMenuContextApi, }), ); @@ -206,6 +222,7 @@ export const useCommandMenuItemFrontComponentActions = () => { getIcon, openFrontComponentInCommandMenu, mountHeadlessFrontComponent, + commandMenuContextApi, mountContext, }), ); diff --git a/packages/twenty-front/src/modules/command-menu/components/CommandMenuPageLayoutInfo.tsx b/packages/twenty-front/src/modules/command-menu/components/CommandMenuPageLayoutInfo.tsx index b898d6c989f..8adc7bfb0fe 100644 --- a/packages/twenty-front/src/modules/command-menu/components/CommandMenuPageLayoutInfo.tsx +++ b/packages/twenty-front/src/modules/command-menu/components/CommandMenuPageLayoutInfo.tsx @@ -2,7 +2,7 @@ import { CommandMenuDashboardPageLayoutInfo } from '@/command-menu/components/Co import { CommandMenuRecordPageLayoutInfo } from '@/command-menu/components/CommandMenuRecordPageLayoutInfo'; import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState'; import { useObjectMetadataItemById } from '@/object-metadata/hooks/useObjectMetadataItemById'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue'; import { isDefined } from 'twenty-shared/utils'; diff --git a/packages/twenty-front/src/modules/command-menu/components/CommandMenuWorkflowStepInfo.tsx b/packages/twenty-front/src/modules/command-menu/components/CommandMenuWorkflowStepInfo.tsx index 3e5fe1b4653..22116c1ff62 100644 --- a/packages/twenty-front/src/modules/command-menu/components/CommandMenuWorkflowStepInfo.tsx +++ b/packages/twenty-front/src/modules/command-menu/components/CommandMenuWorkflowStepInfo.tsx @@ -2,10 +2,10 @@ import { useUpdateCommandMenuPageInfo } from '@/command-menu/hooks/useUpdateComm import { useCommandMenuWorkflowIdOrThrow } from '@/command-menu/pages/workflow/hooks/useCommandMenuWorkflowIdOrThrow'; import { commandMenuWorkflowStepIdComponentState } from '@/command-menu/pages/workflow/states/commandMenuWorkflowStepIdComponentState'; import { commandMenuPageState } from '@/command-menu/states/commandMenuPageState'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; import { TitleInput } from '@/ui/input/components/TitleInput'; import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue'; +import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { useGetUpdatableWorkflowVersionOrThrow } from '@/workflow/hooks/useGetUpdatableWorkflowVersionOrThrow'; import { useWorkflowWithCurrentVersion } from '@/workflow/hooks/useWorkflowWithCurrentVersion'; import { getAgentIdFromStep } from '@/workflow/utils/getAgentIdFromStep'; @@ -18,14 +18,13 @@ import { getActionIconColorOrThrow } from '@/workflow/workflow-steps/workflow-ac import { getTriggerIcon } from '@/workflow/workflow-trigger/utils/getTriggerIcon'; import { getTriggerIconColor } from '@/workflow/workflow-trigger/utils/getTriggerIconColor'; import { t } from '@lingui/core/macro'; -import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { useContext, useState } from 'react'; -import { CommandMenuPages } from 'twenty-shared/types'; +import { CommandMenuPages, CoreObjectNameSingular } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; import { TRIGGER_STEP_ID } from 'twenty-shared/workflow'; import { useIcons } from 'twenty-ui/display'; -import { CommandMenuPageInfoLayout } from './CommandMenuPageInfoLayout'; import { ThemeContext } from 'twenty-ui/theme'; +import { CommandMenuPageInfoLayout } from './CommandMenuPageInfoLayout'; export const CommandMenuWorkflowStepInfo = ({ commandMenuPageInstanceId, diff --git a/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenuSearchRecords.tsx b/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenuSearchRecords.tsx index 0b45edae49b..f169f98b845 100644 --- a/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenuSearchRecords.tsx +++ b/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenuSearchRecords.tsx @@ -7,13 +7,12 @@ import { useOpenRecordInCommandMenu } from '@/command-menu/hooks/useOpenRecordIn import { commandMenuSearchState } from '@/command-menu/states/commandMenuSearchState'; import { useApolloCoreClient } from '@/object-metadata/hooks/useApolloCoreClient'; import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular, AppPath } from 'twenty-shared/types'; import { useObjectPermissions } from '@/object-record/hooks/useObjectPermissions'; import { getObjectPermissionsFromMapByObjectMetadataId } from '@/settings/roles/role-permissions/objects-permissions/utils/getObjectPermissionsFromMapByObjectMetadataId'; import { t } from '@lingui/core/macro'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { useMemo } from 'react'; -import { AppPath } from 'twenty-shared/types'; import { Avatar } from 'twenty-ui/display'; import { useDebounce } from 'use-debounce'; import { useSearchQuery } from '~/generated/graphql'; diff --git a/packages/twenty-front/src/modules/command-menu/hooks/useOpenRecordInCommandMenu.ts b/packages/twenty-front/src/modules/command-menu/hooks/useOpenRecordInCommandMenu.ts index 4eb01346d69..a55edd52b72 100644 --- a/packages/twenty-front/src/modules/command-menu/hooks/useOpenRecordInCommandMenu.ts +++ b/packages/twenty-front/src/modules/command-menu/hooks/useOpenRecordInCommandMenu.ts @@ -12,12 +12,11 @@ import { contextStoreNumberOfSelectedRecordsComponentState } from '@/context-sto import { contextStoreTargetedRecordsRuleComponentState } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState'; import { ContextStoreViewType } from '@/context-store/types/ContextStoreViewType'; import { objectMetadataItemFamilySelector } from '@/object-metadata/states/objectMetadataItemFamilySelector'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { getIconColorForObjectType } from '@/object-metadata/utils/getIconColorForObjectType'; import { getLabelIdentifierFieldMetadataItem } from '@/object-metadata/utils/getLabelIdentifierFieldMetadataItem'; import { viewableRecordIdState } from '@/object-record/record-right-drawer/states/viewableRecordIdState'; import { useOpenNewRecordTitleCell } from '@/object-record/record-title-cell/hooks/useOpenNewRecordTitleCell'; -import { CommandMenuPages } from 'twenty-shared/types'; +import { CommandMenuPages, CoreObjectNameSingular } from 'twenty-shared/types'; import { useRunWorkflowRunOpeningInCommandMenuSideEffects } from '@/workflow/hooks/useRunWorkflowRunOpeningInCommandMenuSideEffects'; import { t } from '@lingui/core/macro'; diff --git a/packages/twenty-front/src/modules/command-menu/pages/calendar-event/components/CommandMenuCalendarEventPage.tsx b/packages/twenty-front/src/modules/command-menu/pages/calendar-event/components/CommandMenuCalendarEventPage.tsx index 1b373831d8d..084c3384912 100644 --- a/packages/twenty-front/src/modules/command-menu/pages/calendar-event/components/CommandMenuCalendarEventPage.tsx +++ b/packages/twenty-front/src/modules/command-menu/pages/calendar-event/components/CommandMenuCalendarEventPage.tsx @@ -2,7 +2,7 @@ import { CalendarEventDetails } from '@/activities/calendar/components/CalendarE import { CalendarEventDetailsEffect } from '@/activities/calendar/components/CalendarEventDetailsEffect'; import { type CalendarEvent } from '@/activities/calendar/types/CalendarEvent'; import { viewableRecordIdComponentState } from '@/command-menu/pages/record-page/states/viewableRecordIdComponentState'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useGenerateDepthRecordGqlFieldsFromObject } from '@/object-record/graphql/record-gql-fields/hooks/useGenerateDepthRecordGqlFieldsFromObject'; import { useFindOneRecord } from '@/object-record/hooks/useFindOneRecord'; import { useUpsertRecordsInStore } from '@/object-record/record-store/hooks/useUpsertRecordsInStore'; diff --git a/packages/twenty-front/src/modules/command-menu/pages/message-thread/hooks/useEmailThreadInCommandMenu.ts b/packages/twenty-front/src/modules/command-menu/pages/message-thread/hooks/useEmailThreadInCommandMenu.ts index cea10a3acf5..c50784476da 100644 --- a/packages/twenty-front/src/modules/command-menu/pages/message-thread/hooks/useEmailThreadInCommandMenu.ts +++ b/packages/twenty-front/src/modules/command-menu/pages/message-thread/hooks/useEmailThreadInCommandMenu.ts @@ -9,12 +9,14 @@ import { type EmailThreadMessageParticipant } from '@/activities/emails/types/Em import { type EmailThreadMessageWithSender } from '@/activities/emails/types/EmailThreadMessageWithSender'; import { type MessageChannelMessageAssociation } from '@/activities/emails/types/MessageChannelMessageAssociation'; import { viewableRecordIdComponentState } from '@/command-menu/pages/record-page/states/viewableRecordIdComponentState'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { + CoreObjectNameSingular, + MessageParticipantRole, +} from 'twenty-shared/types'; import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords'; import { useFindOneRecord } from '@/object-record/hooks/useFindOneRecord'; import { useUpsertRecordsInStore } from '@/object-record/record-store/hooks/useUpsertRecordsInStore'; import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue'; -import { MessageParticipantRole } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; // to improve - https://github.com/twentyhq/twenty/issues/12190 diff --git a/packages/twenty-front/src/modules/command-menu/pages/navigation-menu-item/components/CommandMenuNewSidebarItemRecordItem.tsx b/packages/twenty-front/src/modules/command-menu/pages/navigation-menu-item/components/CommandMenuNewSidebarItemRecordItem.tsx index bdc6aac4ea7..dd1aba60334 100644 --- a/packages/twenty-front/src/modules/command-menu/pages/navigation-menu-item/components/CommandMenuNewSidebarItemRecordItem.tsx +++ b/packages/twenty-front/src/modules/command-menu/pages/navigation-menu-item/components/CommandMenuNewSidebarItemRecordItem.tsx @@ -10,7 +10,7 @@ import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomState import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; import type { AddToNavigationDragPayload } from '@/navigation-menu-item/types/add-to-navigation-drag-payload'; import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { SelectableListItem } from '@/ui/layout/selectable-list/components/SelectableListItem'; type SearchRecord = { diff --git a/packages/twenty-front/src/modules/command-menu/pages/rich-text-page/components/CommandMenuEditRichTextPage.tsx b/packages/twenty-front/src/modules/command-menu/pages/rich-text-page/components/CommandMenuEditRichTextPage.tsx index 0a2fd51409a..a765690531f 100644 --- a/packages/twenty-front/src/modules/command-menu/pages/rich-text-page/components/CommandMenuEditRichTextPage.tsx +++ b/packages/twenty-front/src/modules/command-menu/pages/rich-text-page/components/CommandMenuEditRichTextPage.tsx @@ -1,11 +1,11 @@ import { SKELETON_LOADER_HEIGHT_SIZES } from '@/activities/components/SkeletonLoader'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; -import { styled } from '@linaria/react'; -import { Suspense, lazy, useContext } from 'react'; -import { ThemeContext } from 'twenty-ui/theme'; -import Skeleton, { SkeletonTheme } from 'react-loading-skeleton'; import { viewableRichTextComponentState } from '@/command-menu/pages/rich-text-page/states/viewableRichTextComponentState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; +import { styled } from '@linaria/react'; +import { lazy, Suspense, useContext } from 'react'; +import Skeleton, { SkeletonTheme } from 'react-loading-skeleton'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; +import { ThemeContext } from 'twenty-ui/theme'; import { themeCssVariables } from 'twenty-ui/theme-constants'; const ActivityRichTextEditor = lazy(() => diff --git a/packages/twenty-front/src/modules/dashboards/hooks/useDuplicateDashboard.ts b/packages/twenty-front/src/modules/dashboards/hooks/useDuplicateDashboard.ts index bed3357108f..2a8ae58c2c5 100644 --- a/packages/twenty-front/src/modules/dashboards/hooks/useDuplicateDashboard.ts +++ b/packages/twenty-front/src/modules/dashboards/hooks/useDuplicateDashboard.ts @@ -1,7 +1,7 @@ import { triggerCreateRecordsOptimisticEffect } from '@/apollo/optimistic-effect/utils/triggerCreateRecordsOptimisticEffect'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useCreateOneRecordInCache } from '@/object-record/cache/hooks/useCreateOneRecordInCache'; import { getObjectTypename } from '@/object-record/cache/utils/getObjectTypename'; import { getRecordNodeFromRecord } from '@/object-record/cache/utils/getRecordNodeFromRecord'; diff --git a/packages/twenty-front/src/modules/favorites/hooks/__tests__/useCreateFavorite.test.tsx b/packages/twenty-front/src/modules/favorites/hooks/__tests__/useCreateFavorite.test.tsx index fdf22986559..aa7a4efedb0 100644 --- a/packages/twenty-front/src/modules/favorites/hooks/__tests__/useCreateFavorite.test.tsx +++ b/packages/twenty-front/src/modules/favorites/hooks/__tests__/useCreateFavorite.test.tsx @@ -3,7 +3,7 @@ import { renderHook, waitFor } from '@testing-library/react'; import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState'; import { useCreateFavorite } from '@/favorites/hooks/useCreateFavorite'; import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { jotaiStore } from '@/ui/utilities/state/jotai/jotaiStore'; import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper'; import { generatedMockObjectMetadataItems } from '~/testing/utils/generatedMockObjectMetadataItems'; diff --git a/packages/twenty-front/src/modules/favorites/hooks/useCreateFavorite.ts b/packages/twenty-front/src/modules/favorites/hooks/useCreateFavorite.ts index bf07c258f3b..acf22a2e7c1 100644 --- a/packages/twenty-front/src/modules/favorites/hooks/useCreateFavorite.ts +++ b/packages/twenty-front/src/modules/favorites/hooks/useCreateFavorite.ts @@ -1,6 +1,6 @@ import { usePrefetchedNavigationMenuItemsData } from '@/navigation-menu-item/hooks/usePrefetchedNavigationMenuItemsData'; import { isNavigationMenuItemFolder } from '@/navigation-menu-item/utils/isNavigationMenuItemFolder'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useCreateOneRecord } from '@/object-record/hooks/useCreateOneRecord'; import { type ObjectRecord } from '@/object-record/types/ObjectRecord'; import { isDefined } from 'twenty-shared/utils'; diff --git a/packages/twenty-front/src/modules/favorites/hooks/useCreateFavoriteFolder.ts b/packages/twenty-front/src/modules/favorites/hooks/useCreateFavoriteFolder.ts index a5e0821494b..afa023c8adf 100644 --- a/packages/twenty-front/src/modules/favorites/hooks/useCreateFavoriteFolder.ts +++ b/packages/twenty-front/src/modules/favorites/hooks/useCreateFavoriteFolder.ts @@ -1,5 +1,5 @@ import { usePrefetchedNavigationMenuItemsData } from '@/navigation-menu-item/hooks/usePrefetchedNavigationMenuItemsData'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useCreateOneRecord } from '@/object-record/hooks/useCreateOneRecord'; import { isDefined } from 'twenty-shared/utils'; import { useCreateNavigationMenuItemMutation } from '~/generated-metadata/graphql'; diff --git a/packages/twenty-front/src/modules/favorites/hooks/useDeleteFavorite.ts b/packages/twenty-front/src/modules/favorites/hooks/useDeleteFavorite.ts index e8f976c1440..c6457dd215b 100644 --- a/packages/twenty-front/src/modules/favorites/hooks/useDeleteFavorite.ts +++ b/packages/twenty-front/src/modules/favorites/hooks/useDeleteFavorite.ts @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useDeleteOneRecord } from '@/object-record/hooks/useDeleteOneRecord'; export const useDeleteFavorite = () => { diff --git a/packages/twenty-front/src/modules/favorites/hooks/useDeleteFavoriteFolder.ts b/packages/twenty-front/src/modules/favorites/hooks/useDeleteFavoriteFolder.ts index 7b1ed284c87..90ab68347ef 100644 --- a/packages/twenty-front/src/modules/favorites/hooks/useDeleteFavoriteFolder.ts +++ b/packages/twenty-front/src/modules/favorites/hooks/useDeleteFavoriteFolder.ts @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useDeleteOneRecord } from '@/object-record/hooks/useDeleteOneRecord'; export const useDeleteFavoriteFolder = () => { diff --git a/packages/twenty-front/src/modules/favorites/hooks/useFavorites.ts b/packages/twenty-front/src/modules/favorites/hooks/useFavorites.ts index ebd4cb24c0b..eaf3cb54d24 100644 --- a/packages/twenty-front/src/modules/favorites/hooks/useFavorites.ts +++ b/packages/twenty-front/src/modules/favorites/hooks/useFavorites.ts @@ -3,7 +3,7 @@ import { sortFavorites } from '@/favorites/utils/sortFavorites'; import { useGetObjectRecordIdentifierByNameSingular } from '@/object-metadata/hooks/useGetObjectRecordIdentifierByNameSingular'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useMemo } from 'react'; import { FieldMetadataType } from '~/generated-metadata/graphql'; import { usePrefetchedFavoritesData } from './usePrefetchedFavoritesData'; diff --git a/packages/twenty-front/src/modules/favorites/hooks/useFavoritesMetadata.ts b/packages/twenty-front/src/modules/favorites/hooks/useFavoritesMetadata.ts index caa2f1fa32d..3d6f29b8005 100644 --- a/packages/twenty-front/src/modules/favorites/hooks/useFavoritesMetadata.ts +++ b/packages/twenty-front/src/modules/favorites/hooks/useFavoritesMetadata.ts @@ -1,7 +1,7 @@ import { useGetObjectRecordIdentifierByNameSingular } from '@/object-metadata/hooks/useGetObjectRecordIdentifierByNameSingular'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { FieldMetadataType } from '~/generated-metadata/graphql'; import { allowRequestsToTwentyIconsState } from '@/client-config/states/allowRequestsToTwentyIcons'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; diff --git a/packages/twenty-front/src/modules/favorites/hooks/useHandleFavoriteDragAndDrop.ts b/packages/twenty-front/src/modules/favorites/hooks/useHandleFavoriteDragAndDrop.ts index d6204846615..49a9a6ef91c 100644 --- a/packages/twenty-front/src/modules/favorites/hooks/useHandleFavoriteDragAndDrop.ts +++ b/packages/twenty-front/src/modules/favorites/hooks/useHandleFavoriteDragAndDrop.ts @@ -2,7 +2,7 @@ import { FAVORITE_DROPPABLE_IDS } from '@/favorites/constants/FavoriteDroppableI import { useSortedFavorites } from '@/favorites/hooks/useSortedFavorites'; import { openFavoriteFolderIdsState } from '@/favorites/states/openFavoriteFolderIdsState'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; import { calculateNewPosition } from '@/ui/layout/draggable-list/utils/calculateNewPosition'; import { validateAndExtractFolderId } from '@/ui/layout/draggable-list/utils/validateAndExtractFolderId'; diff --git a/packages/twenty-front/src/modules/favorites/hooks/useRenameFavoriteFolder.ts b/packages/twenty-front/src/modules/favorites/hooks/useRenameFavoriteFolder.ts index 2d9f52f8656..d50a1915dc5 100644 --- a/packages/twenty-front/src/modules/favorites/hooks/useRenameFavoriteFolder.ts +++ b/packages/twenty-front/src/modules/favorites/hooks/useRenameFavoriteFolder.ts @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; export const useRenameFavoriteFolder = () => { diff --git a/packages/twenty-front/src/modules/favorites/hooks/useWorkspaceFavorites.ts b/packages/twenty-front/src/modules/favorites/hooks/useWorkspaceFavorites.ts index 4a1b3b17f55..be94f45553b 100644 --- a/packages/twenty-front/src/modules/favorites/hooks/useWorkspaceFavorites.ts +++ b/packages/twenty-front/src/modules/favorites/hooks/useWorkspaceFavorites.ts @@ -4,7 +4,7 @@ import { useFilteredObjectMetadataItems } from '@/object-metadata/hooks/useFilte import { useGetObjectRecordIdentifierByNameSingular } from '@/object-metadata/hooks/useGetObjectRecordIdentifierByNameSingular'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { coreViewsState } from '@/views/states/coreViewState'; import { convertCoreViewToView } from '@/views/utils/convertCoreViewToView'; diff --git a/packages/twenty-front/src/modules/file/hooks/useFileCategoryColors.ts b/packages/twenty-front/src/modules/file/hooks/useFileCategoryColors.ts index 029c661e62a..00f6ec7202e 100644 --- a/packages/twenty-front/src/modules/file/hooks/useFileCategoryColors.ts +++ b/packages/twenty-front/src/modules/file/hooks/useFileCategoryColors.ts @@ -1,7 +1,7 @@ import { type AttachmentFileCategory } from '@/activities/files/types/AttachmentFileCategory'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { useContext } from 'react'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; import { type ThemeColor, ThemeContext } from 'twenty-ui/theme'; diff --git a/packages/twenty-front/src/modules/information-banner/hooks/useAccountToReconnect.ts b/packages/twenty-front/src/modules/information-banner/hooks/useAccountToReconnect.ts index 73c2e39f019..cd22938e953 100644 --- a/packages/twenty-front/src/modules/information-banner/hooks/useAccountToReconnect.ts +++ b/packages/twenty-front/src/modules/information-banner/hooks/useAccountToReconnect.ts @@ -1,7 +1,7 @@ import { type ConnectedAccount } from '@/accounts/types/ConnectedAccount'; import { currentUserState } from '@/auth/states/currentUserState'; import { type InformationBannerKeys } from '@/information-banner/types/InformationBannerKeys'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useFindOneRecord } from '@/object-record/hooks/useFindOneRecord'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; diff --git a/packages/twenty-front/src/modules/localization/hooks/useFormatPreferences.ts b/packages/twenty-front/src/modules/localization/hooks/useFormatPreferences.ts index 4990b992821..972f825eddd 100644 --- a/packages/twenty-front/src/modules/localization/hooks/useFormatPreferences.ts +++ b/packages/twenty-front/src/modules/localization/hooks/useFormatPreferences.ts @@ -15,7 +15,7 @@ import { detectTimeFormat } from '@/localization/utils/detection/detectTimeForma import { detectTimeZone } from '@/localization/utils/detection/detectTimeZone'; import { getFormatPreferencesFromWorkspaceMember } from '@/localization/utils/format-preferences/getFormatPreferencesFromWorkspaceMember'; import { getWorkspaceMemberUpdateFromFormatPreferences } from '@/localization/utils/format-preferences/getWorkspaceMemberUpdateFromFormatPreferences'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; diff --git a/packages/twenty-front/src/modules/navigation-menu-item/utils/__tests__/recordIdentifierToObjectRecordIdentifier.test.ts b/packages/twenty-front/src/modules/navigation-menu-item/utils/__tests__/recordIdentifierToObjectRecordIdentifier.test.ts index f80e7243136..79c9e5658d6 100644 --- a/packages/twenty-front/src/modules/navigation-menu-item/utils/__tests__/recordIdentifierToObjectRecordIdentifier.test.ts +++ b/packages/twenty-front/src/modules/navigation-menu-item/utils/__tests__/recordIdentifierToObjectRecordIdentifier.test.ts @@ -1,5 +1,5 @@ import { recordIdentifierToObjectRecordIdentifier } from '@/navigation-menu-item/utils/recordIdentifierToObjectRecordIdentifier'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; jest.mock('@/object-metadata/utils/getAvatarType', () => ({ diff --git a/packages/twenty-front/src/modules/navigation-menu-item/utils/getStandardObjectIconColor.ts b/packages/twenty-front/src/modules/navigation-menu-item/utils/getStandardObjectIconColor.ts index b399cb24b70..2ac88eeeb28 100644 --- a/packages/twenty-front/src/modules/navigation-menu-item/utils/getStandardObjectIconColor.ts +++ b/packages/twenty-front/src/modules/navigation-menu-item/utils/getStandardObjectIconColor.ts @@ -1,7 +1,7 @@ import { type ThemeColor, MAIN_COLOR_NAMES } from 'twenty-ui/theme'; import { DEFAULT_NAV_ITEM_ICON_COLOR } from '@/navigation-menu-item/constants/NavigationMenuItemDefaultIconColor.constant'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; const STANDARD_OBJECT_ICON_COLOR: Partial< Record diff --git a/packages/twenty-front/src/modules/navigation-menu-item/utils/recordIdentifierToObjectRecordIdentifier.ts b/packages/twenty-front/src/modules/navigation-menu-item/utils/recordIdentifierToObjectRecordIdentifier.ts index 542982dd591..28fc33cf277 100644 --- a/packages/twenty-front/src/modules/navigation-menu-item/utils/recordIdentifierToObjectRecordIdentifier.ts +++ b/packages/twenty-front/src/modules/navigation-menu-item/utils/recordIdentifierToObjectRecordIdentifier.ts @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { getAvatarType } from '@/object-metadata/utils/getAvatarType'; import { getBasePathToShowPage } from '@/object-metadata/utils/getBasePathToShowPage'; diff --git a/packages/twenty-front/src/modules/object-metadata/components/NavigationDrawerItemForObjectMetadataItem.tsx b/packages/twenty-front/src/modules/object-metadata/components/NavigationDrawerItemForObjectMetadataItem.tsx index 84d89ed76cd..b3f169837b0 100644 --- a/packages/twenty-front/src/modules/object-metadata/components/NavigationDrawerItemForObjectMetadataItem.tsx +++ b/packages/twenty-front/src/modules/object-metadata/components/NavigationDrawerItemForObjectMetadataItem.tsx @@ -6,7 +6,6 @@ import { useObjectNavItemColor } from '@/navigation-menu-item/hooks/useObjectNav import { getStandardObjectIconColor } from '@/navigation-menu-item/utils/getStandardObjectIconColor'; import { type ProcessedNavigationMenuItem } from '@/navigation-menu-item/utils/sortNavigationMenuItems'; import { lastVisitedViewPerObjectMetadataItemState } from '@/navigation/states/lastVisitedViewPerObjectMetadataItemState'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { NavigationDrawerItem } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerItem'; import { NavigationDrawerItemsCollapsableContainer } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerItemsCollapsableContainer'; @@ -18,7 +17,7 @@ import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomState import { coreViewsFromObjectMetadataItemFamilySelector } from '@/views/states/selectors/coreViewsFromObjectMetadataItemFamilySelector'; import { ViewKey } from '@/views/types/ViewKey'; import { useLocation } from 'react-router-dom'; -import { AppPath } from 'twenty-shared/types'; +import { AppPath, CoreObjectNameSingular } from 'twenty-shared/types'; import { getAppPath, isDefined } from 'twenty-shared/utils'; import { Avatar, useIcons } from 'twenty-ui/display'; import { AnimatedExpandableContainer } from 'twenty-ui/layout'; diff --git a/packages/twenty-front/src/modules/object-metadata/components/NavigationDrawerOpenedSection.tsx b/packages/twenty-front/src/modules/object-metadata/components/NavigationDrawerOpenedSection.tsx index 127f4d6fc3c..6d50c487e25 100644 --- a/packages/twenty-front/src/modules/object-metadata/components/NavigationDrawerOpenedSection.tsx +++ b/packages/twenty-front/src/modules/object-metadata/components/NavigationDrawerOpenedSection.tsx @@ -5,7 +5,7 @@ import { useWorkspaceNavigationMenuItems } from '@/navigation-menu-item/hooks/us import { NavigationDrawerSectionForObjectMetadataItems } from '@/object-metadata/components/NavigationDrawerSectionForObjectMetadataItems'; import { NavigationDrawerSectionForObjectMetadataItemsSkeletonLoader } from '@/object-metadata/components/NavigationDrawerSectionForObjectMetadataItemsSkeletonLoader'; import { useFilteredObjectMetadataItems } from '@/object-metadata/hooks/useFilteredObjectMetadataItems'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useIsPrefetchLoading } from '@/prefetch/hooks/useIsPrefetchLoading'; import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled'; import { useLingui } from '@lingui/react/macro'; diff --git a/packages/twenty-front/src/modules/object-metadata/components/NavigationDrawerSectionForObjectMetadataItems.tsx b/packages/twenty-front/src/modules/object-metadata/components/NavigationDrawerSectionForObjectMetadataItems.tsx index aa308265f3f..4e996637e8a 100644 --- a/packages/twenty-front/src/modules/object-metadata/components/NavigationDrawerSectionForObjectMetadataItems.tsx +++ b/packages/twenty-front/src/modules/object-metadata/components/NavigationDrawerSectionForObjectMetadataItems.tsx @@ -1,5 +1,5 @@ import { NavigationDrawerItemForObjectMetadataItem } from '@/object-metadata/components/NavigationDrawerItemForObjectMetadataItem'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { getObjectPermissionsForObject } from '@/object-metadata/utils/getObjectPermissionsForObject'; import { useObjectPermissions } from '@/object-record/hooks/useObjectPermissions'; diff --git a/packages/twenty-front/src/modules/object-metadata/utils/getAvatarType.ts b/packages/twenty-front/src/modules/object-metadata/utils/getAvatarType.ts index 1ddba77b9fc..f047d43a036 100644 --- a/packages/twenty-front/src/modules/object-metadata/utils/getAvatarType.ts +++ b/packages/twenty-front/src/modules/object-metadata/utils/getAvatarType.ts @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; export const getAvatarType = (objectNameSingular: string) => { if (objectNameSingular === CoreObjectNameSingular.WorkspaceMember) { diff --git a/packages/twenty-front/src/modules/object-metadata/utils/getAvatarUrl.ts b/packages/twenty-front/src/modules/object-metadata/utils/getAvatarUrl.ts index e72f40fe91f..bac71de6fdb 100644 --- a/packages/twenty-front/src/modules/object-metadata/utils/getAvatarUrl.ts +++ b/packages/twenty-front/src/modules/object-metadata/utils/getAvatarUrl.ts @@ -1,5 +1,5 @@ import { type Company } from '@/companies/types/Company'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { type FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; import { getCompanyDomainName } from '@/object-metadata/utils/getCompanyDomainName'; import { type ObjectRecord } from '@/object-record/types/ObjectRecord'; diff --git a/packages/twenty-front/src/modules/object-metadata/utils/getLinkToShowPage.ts b/packages/twenty-front/src/modules/object-metadata/utils/getLinkToShowPage.ts index 4a71c5ddb5d..42d902422e3 100644 --- a/packages/twenty-front/src/modules/object-metadata/utils/getLinkToShowPage.ts +++ b/packages/twenty-front/src/modules/object-metadata/utils/getLinkToShowPage.ts @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { getBasePathToShowPage } from '@/object-metadata/utils/getBasePathToShowPage'; import { type ObjectRecord } from '@/object-record/types/ObjectRecord'; diff --git a/packages/twenty-front/src/modules/object-metadata/utils/isActiveFieldMetadataItem.ts b/packages/twenty-front/src/modules/object-metadata/utils/isActiveFieldMetadataItem.ts index e7fa2de150c..53bd930ef81 100644 --- a/packages/twenty-front/src/modules/object-metadata/utils/isActiveFieldMetadataItem.ts +++ b/packages/twenty-front/src/modules/object-metadata/utils/isActiveFieldMetadataItem.ts @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { type FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; import { isHiddenSystemField } from '@/object-metadata/utils/isHiddenSystemField'; diff --git a/packages/twenty-front/src/modules/object-metadata/utils/isImageIdentifierField.ts b/packages/twenty-front/src/modules/object-metadata/utils/isImageIdentifierField.ts index 4607676a208..9839588af71 100644 --- a/packages/twenty-front/src/modules/object-metadata/utils/isImageIdentifierField.ts +++ b/packages/twenty-front/src/modules/object-metadata/utils/isImageIdentifierField.ts @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { type FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; diff --git a/packages/twenty-front/src/modules/object-metadata/utils/isObjectMetadataAvailableForRelation.ts b/packages/twenty-front/src/modules/object-metadata/utils/isObjectMetadataAvailableForRelation.ts index 85d9c31696c..abc2260e440 100644 --- a/packages/twenty-front/src/modules/object-metadata/utils/isObjectMetadataAvailableForRelation.ts +++ b/packages/twenty-front/src/modules/object-metadata/utils/isObjectMetadataAvailableForRelation.ts @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; export const isObjectMetadataAvailableForRelation = ( diff --git a/packages/twenty-front/src/modules/object-record/advanced-filter/command-menu/components/AdvancedFilterCommandMenuValueFormCompositeFieldInput.tsx b/packages/twenty-front/src/modules/object-record/advanced-filter/command-menu/components/AdvancedFilterCommandMenuValueFormCompositeFieldInput.tsx index c669535be72..071f221624b 100644 --- a/packages/twenty-front/src/modules/object-record/advanced-filter/command-menu/components/AdvancedFilterCommandMenuValueFormCompositeFieldInput.tsx +++ b/packages/twenty-front/src/modules/object-record/advanced-filter/command-menu/components/AdvancedFilterCommandMenuValueFormCompositeFieldInput.tsx @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular, FieldActorSource } from 'twenty-shared/types'; import { AdvancedFilterContext } from '@/object-record/advanced-filter/states/context/AdvancedFilterContext'; import { subFieldNameUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/subFieldNameUsedInDropdownComponentState'; import { FormCountryMultiSelectInput } from '@/object-record/record-field/ui/form-types/components/FormCountryMultiSelectInput'; @@ -11,7 +11,6 @@ import { type RecordFilter } from '@/object-record/record-filter/types/RecordFil import { CURRENCIES } from '@/settings/data-model/constants/Currencies'; import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue'; import { useContext } from 'react'; -import { FieldActorSource } from 'twenty-shared/types'; import { type SelectOption } from 'twenty-ui/input'; import { type JsonValue } from 'type-fest'; diff --git a/packages/twenty-front/src/modules/object-record/components/RecordChip.tsx b/packages/twenty-front/src/modules/object-record/components/RecordChip.tsx index 16bb5ed648a..657621f110b 100644 --- a/packages/twenty-front/src/modules/object-record/components/RecordChip.tsx +++ b/packages/twenty-front/src/modules/object-record/components/RecordChip.tsx @@ -1,5 +1,5 @@ import { useOpenRecordInCommandMenu } from '@/command-menu/hooks/useOpenRecordInCommandMenu'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { getLinkToShowPage } from '@/object-metadata/utils/getLinkToShowPage'; import { useRecordChipData } from '@/object-record/hooks/useRecordChipData'; import { recordIndexOpenRecordInState } from '@/object-record/record-index/states/recordIndexOpenRecordInState'; diff --git a/packages/twenty-front/src/modules/object-record/graphql/record-gql-fields/utils/__tests__/generateActivityTargetGqlFields.test.ts b/packages/twenty-front/src/modules/object-record/graphql/record-gql-fields/utils/__tests__/generateActivityTargetGqlFields.test.ts index 57b316f4070..95cd0244fee 100644 --- a/packages/twenty-front/src/modules/object-record/graphql/record-gql-fields/utils/__tests__/generateActivityTargetGqlFields.test.ts +++ b/packages/twenty-front/src/modules/object-record/graphql/record-gql-fields/utils/__tests__/generateActivityTargetGqlFields.test.ts @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { generateActivityTargetGqlFields } from '@/object-record/graphql/record-gql-fields/utils/generateActivityTargetGqlFields'; import { generatedMockObjectMetadataItems } from '~/testing/utils/generatedMockObjectMetadataItems'; diff --git a/packages/twenty-front/src/modules/object-record/graphql/record-gql-fields/utils/generateActivityTargetGqlFields.ts b/packages/twenty-front/src/modules/object-record/graphql/record-gql-fields/utils/generateActivityTargetGqlFields.ts index 554e1160b6f..dcc9893ad67 100644 --- a/packages/twenty-front/src/modules/object-record/graphql/record-gql-fields/utils/generateActivityTargetGqlFields.ts +++ b/packages/twenty-front/src/modules/object-record/graphql/record-gql-fields/utils/generateActivityTargetGqlFields.ts @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { getLabelIdentifierFieldMetadataItem } from '@/object-metadata/utils/getLabelIdentifierFieldMetadataItem'; import { generateDepthRecordGqlFieldsFromFields } from '@/object-record/graphql/record-gql-fields/utils/generateDepthRecordGqlFieldsFromFields'; diff --git a/packages/twenty-front/src/modules/object-record/graphql/record-gql-fields/utils/generateDepthRecordGqlFieldsFromFields.ts b/packages/twenty-front/src/modules/object-record/graphql/record-gql-fields/utils/generateDepthRecordGqlFieldsFromFields.ts index 4cbc8d7875d..2947b6c0eca 100644 --- a/packages/twenty-front/src/modules/object-record/graphql/record-gql-fields/utils/generateDepthRecordGqlFieldsFromFields.ts +++ b/packages/twenty-front/src/modules/object-record/graphql/record-gql-fields/utils/generateDepthRecordGqlFieldsFromFields.ts @@ -1,5 +1,9 @@ import { CoreObjectNamePlural } from '@/object-metadata/types/CoreObjectNamePlural'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { + CoreObjectNameSingular, + FieldMetadataType, + RelationType, +} from 'twenty-shared/types'; import { type FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { getImageIdentifierFieldMetadataItem } from '@/object-metadata/utils/getImageIdentifierFieldMetadataItem'; @@ -8,7 +12,6 @@ import { type RecordGqlFields } from '@/object-record/graphql/record-gql-fields/ import { generateActivityTargetGqlFields } from '@/object-record/graphql/record-gql-fields/utils/generateActivityTargetGqlFields'; import { generateJunctionRelationGqlFields } from '@/object-record/graphql/record-gql-fields/utils/generateJunctionRelationGqlFields'; import { isJunctionRelationField } from '@/object-record/record-field/ui/utils/junction/isJunctionRelationField'; -import { FieldMetadataType, RelationType } from 'twenty-shared/types'; import { computeMorphRelationFieldName, isDefined } from 'twenty-shared/utils'; export type GenerateDepthRecordGqlFieldsFromFields = { diff --git a/packages/twenty-front/src/modules/object-record/hooks/__tests__/useCreateManyRecords.test.tsx b/packages/twenty-front/src/modules/object-record/hooks/__tests__/useCreateManyRecords.test.tsx index 48e6672c34b..10935198b91 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/__tests__/useCreateManyRecords.test.tsx +++ b/packages/twenty-front/src/modules/object-record/hooks/__tests__/useCreateManyRecords.test.tsx @@ -1,7 +1,7 @@ import { act, renderHook } from '@testing-library/react'; import { v4 } from 'uuid'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { query, response, diff --git a/packages/twenty-front/src/modules/object-record/hooks/__tests__/useCreateOneRecord.test.tsx b/packages/twenty-front/src/modules/object-record/hooks/__tests__/useCreateOneRecord.test.tsx index 0caea681d9b..49190c75609 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/__tests__/useCreateOneRecord.test.tsx +++ b/packages/twenty-front/src/modules/object-record/hooks/__tests__/useCreateOneRecord.test.tsx @@ -1,6 +1,6 @@ import { act, renderHook } from '@testing-library/react'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { query, responseData, diff --git a/packages/twenty-front/src/modules/object-record/hooks/useBuildRecordInputFromRLSPredicates.ts b/packages/twenty-front/src/modules/object-record/hooks/useBuildRecordInputFromRLSPredicates.ts index eb8d406bf78..4cb4cced7fd 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/useBuildRecordInputFromRLSPredicates.ts +++ b/packages/twenty-front/src/modules/object-record/hooks/useBuildRecordInputFromRLSPredicates.ts @@ -5,7 +5,7 @@ import { convertPredicateToRecordFilter } from '@/settings/roles/role-permission import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular, RelationType } from 'twenty-shared/types'; import { getObjectPermissionsForObject } from '@/object-metadata/utils/getObjectPermissionsForObject'; import { useFindOneRecord } from '@/object-record/hooks/useFindOneRecord'; import { useObjectPermissions } from '@/object-record/hooks/useObjectPermissions'; @@ -15,7 +15,6 @@ import { buildCompositeValueFromSubField } from '@/object-record/record-table/ut import { type ObjectRecord } from '@/object-record/types/ObjectRecord'; import { isUndefined } from '@sniptt/guards'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; -import { RelationType } from 'twenty-shared/types'; import { isDefined, isPlainObject } from 'twenty-shared/utils'; const mergeCompositeValues = ( diff --git a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownActorSelect.tsx b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownActorSelect.tsx index 2e8ca67f558..9013d7d2cca 100644 --- a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownActorSelect.tsx +++ b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownActorSelect.tsx @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { ObjectFilterDropdownRecordPinnedItems } from '@/object-record/object-filter-dropdown/components/ObjectFilterDropdownRecordPinnedItems'; import { CURRENT_WORKSPACE_MEMBER_SELECTABLE_ITEM_ID } from '@/object-record/object-filter-dropdown/constants/CurrentWorkspaceMemberSelectableItemId'; import { useApplyObjectFilterDropdownFilterValue } from '@/object-record/object-filter-dropdown/hooks/useApplyObjectFilterDropdownFilterValue'; diff --git a/packages/twenty-front/src/modules/object-record/record-calendar/month/components/__stories__/RecordCalendarMonth.stories.tsx b/packages/twenty-front/src/modules/object-record/record-calendar/month/components/__stories__/RecordCalendarMonth.stories.tsx index 76c044f45a6..17c2620b68b 100644 --- a/packages/twenty-front/src/modules/object-record/record-calendar/month/components/__stories__/RecordCalendarMonth.stories.tsx +++ b/packages/twenty-front/src/modules/object-record/record-calendar/month/components/__stories__/RecordCalendarMonth.stories.tsx @@ -4,7 +4,7 @@ import { useEffect, useMemo, useState } from 'react'; import { type TaskGroups } from '@/activities/tasks/components/TaskGroups'; import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState'; import { CoreObjectNamePlural } from '@/object-metadata/types/CoreObjectNamePlural'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { ObjectFilterDropdownComponentInstanceContext } from '@/object-record/object-filter-dropdown/states/contexts/ObjectFilterDropdownComponentInstanceContext'; import { RecordIndexContextProvider } from '@/object-record/record-index/contexts/RecordIndexContext'; import { RecordTableComponentInstanceContext } from '@/object-record/record-table/states/context/RecordTableComponentInstanceContext'; diff --git a/packages/twenty-front/src/modules/object-record/record-field-list/components/RecordFieldList.tsx b/packages/twenty-front/src/modules/object-record/record-field-list/components/RecordFieldList.tsx index 47f4755044b..66e44fefc51 100644 --- a/packages/twenty-front/src/modules/object-record/record-field-list/components/RecordFieldList.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field-list/components/RecordFieldList.tsx @@ -1,7 +1,6 @@ import { ActivityTargetsInlineCell } from '@/activities/inline-cell/components/ActivityTargetsInlineCell'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems'; -import { type CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { formatFieldMetadataItemAsColumnDefinition } from '@/object-metadata/utils/formatFieldMetadataItemAsColumnDefinition'; import { useObjectPermissions } from '@/object-record/hooks/useObjectPermissions'; import { useIsRecordReadOnly } from '@/object-record/read-only/hooks/useIsRecordReadOnly'; @@ -25,7 +24,10 @@ import { useRecordShowContainerData } from '@/object-record/record-show/hooks/us import { getRecordFieldInputInstanceId } from '@/object-record/utils/getRecordFieldInputId'; import { getObjectPermissionsFromMapByObjectMetadataId } from '@/settings/roles/role-permissions/objects-permissions/utils/getObjectPermissionsFromMapByObjectMetadataId'; import { useSetAtomComponentState } from '@/ui/utilities/state/jotai/hooks/useSetAtomComponentState'; -import { FieldMetadataType } from 'twenty-shared/types'; +import { + FieldMetadataType, + type CoreObjectNameSingular, +} from 'twenty-shared/types'; type RecordFieldListProps = { instanceId: string; diff --git a/packages/twenty-front/src/modules/object-record/record-field-list/record-detail-section/duplicate/components/__stories__/RecordDetailDuplicatesSection.stories.tsx b/packages/twenty-front/src/modules/object-record/record-field-list/record-detail-section/duplicate/components/__stories__/RecordDetailDuplicatesSection.stories.tsx index 0c7a8921df7..49b64aecfec 100644 --- a/packages/twenty-front/src/modules/object-record/record-field-list/record-detail-section/duplicate/components/__stories__/RecordDetailDuplicatesSection.stories.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field-list/record-detail-section/duplicate/components/__stories__/RecordDetailDuplicatesSection.stories.tsx @@ -1,6 +1,6 @@ import { type Meta, type StoryObj } from '@storybook/react-vite'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { LayoutRenderingProvider } from '@/ui/layout/contexts/LayoutRenderingContext'; import { MemoryRouterDecorator } from '~/testing/decorators/MemoryRouterDecorator'; import { ObjectMetadataItemsDecorator } from '~/testing/decorators/ObjectMetadataItemsDecorator'; diff --git a/packages/twenty-front/src/modules/object-record/record-field-list/record-detail-section/relation/components/RecordDetailRelationRecordsListItem.tsx b/packages/twenty-front/src/modules/object-record/record-field-list/record-detail-section/relation/components/RecordDetailRelationRecordsListItem.tsx index 3808efe9c56..a66722c91fd 100644 --- a/packages/twenty-front/src/modules/object-record/record-field-list/record-detail-section/relation/components/RecordDetailRelationRecordsListItem.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field-list/record-detail-section/relation/components/RecordDetailRelationRecordsListItem.tsx @@ -4,7 +4,7 @@ import { useCallback, useContext } from 'react'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { getObjectTypename } from '@/object-record/cache/utils/getObjectTypename'; import { RecordChip } from '@/object-record/components/RecordChip'; import { useDeleteOneRecord } from '@/object-record/hooks/useDeleteOneRecord'; diff --git a/packages/twenty-front/src/modules/object-record/record-field-list/record-detail-section/relation/components/RecordDetailRelationSectionDropdownToOne.tsx b/packages/twenty-front/src/modules/object-record/record-field-list/record-detail-section/relation/components/RecordDetailRelationSectionDropdownToOne.tsx index a6cd6681749..856a50b4f48 100644 --- a/packages/twenty-front/src/modules/object-record/record-field-list/record-detail-section/relation/components/RecordDetailRelationSectionDropdownToOne.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field-list/record-detail-section/relation/components/RecordDetailRelationSectionDropdownToOne.tsx @@ -1,7 +1,7 @@ import { type ReactNode, useCallback, useContext } from 'react'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular, FieldMetadataType } from 'twenty-shared/types'; import { useRecordFieldsScopeContextOrThrow } from '@/object-record/record-field-list/contexts/RecordFieldsScopeContext'; import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext'; import { FieldInputEventContext } from '@/object-record/record-field/ui/contexts/FieldInputEventContext'; @@ -25,7 +25,6 @@ import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadat import { getFieldMetadataItemById } from '@/object-metadata/utils/getFieldMetadataItemById'; import { assertFieldMetadata } from '@/object-record/record-field/ui/types/guards/assertFieldMetadata'; import { isFieldRelation } from '@/object-record/record-field/ui/types/guards/isFieldRelation'; -import { FieldMetadataType } from 'twenty-shared/types'; import { CustomError } from 'twenty-shared/utils'; import { IconForbid, IconPencil } from 'twenty-ui/display'; import { LightIconButton } from 'twenty-ui/input'; diff --git a/packages/twenty-front/src/modules/object-record/record-field-list/utils/__tests__/isActivityTargetField.test.ts b/packages/twenty-front/src/modules/object-record/record-field-list/utils/__tests__/isActivityTargetField.test.ts index afd1842a48b..41e7248de11 100644 --- a/packages/twenty-front/src/modules/object-record/record-field-list/utils/__tests__/isActivityTargetField.test.ts +++ b/packages/twenty-front/src/modules/object-record/record-field-list/utils/__tests__/isActivityTargetField.test.ts @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { isActivityTargetField } from '@/object-record/record-field-list/utils/categorizeRelationFields'; describe('isActivityTargetField', () => { diff --git a/packages/twenty-front/src/modules/object-record/record-field-list/utils/categorizeRelationFields.ts b/packages/twenty-front/src/modules/object-record/record-field-list/utils/categorizeRelationFields.ts index f9777e27861..8078eb40757 100644 --- a/packages/twenty-front/src/modules/object-record/record-field-list/utils/categorizeRelationFields.ts +++ b/packages/twenty-front/src/modules/object-record/record-field-list/utils/categorizeRelationFields.ts @@ -1,8 +1,10 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { type FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; import { getObjectPermissionsForObject } from '@/object-metadata/utils/getObjectPermissionsForObject'; import { isJunctionRelationField } from '@/object-record/record-field/ui/utils/junction/isJunctionRelationField'; -import { type ObjectPermissions } from 'twenty-shared/types'; +import { + CoreObjectNameSingular, + type ObjectPermissions, +} from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; type ObjectPermissionsByObjectMetadataId = Record< diff --git a/packages/twenty-front/src/modules/object-record/record-field/hooks/useRecordsFieldVisibleGqlFields.ts b/packages/twenty-front/src/modules/object-record/record-field/hooks/useRecordsFieldVisibleGqlFields.ts index ab69095d76e..1ecfb2a31fc 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/hooks/useRecordsFieldVisibleGqlFields.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/hooks/useRecordsFieldVisibleGqlFields.ts @@ -1,5 +1,5 @@ import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { getImageIdentifierFieldMetadataItem } from '@/object-metadata/utils/getImageIdentifierFieldMetadataItem'; import { getLabelIdentifierFieldMetadataItem } from '@/object-metadata/utils/getLabelIdentifierFieldMetadataItem'; diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/__tests__/useToggleEditOnlyInput.test.tsx b/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/__tests__/useToggleEditOnlyInput.test.tsx index eaedba2096a..0ec2be699f5 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/__tests__/useToggleEditOnlyInput.test.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/__tests__/useToggleEditOnlyInput.test.tsx @@ -2,7 +2,7 @@ import { type MockedResponse } from '@apollo/client/testing'; import { renderHook, waitFor } from '@testing-library/react'; import { act, type ReactNode } from 'react'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { generateUpdateOneRecordMutation } from '@/object-metadata/utils/generateUpdateOneRecordMutation'; import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; import { booleanFieldDefinition } from '@/object-record/record-field/ui/__mocks__/fieldDefinitions'; diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/display/components/MorphRelationManyToOneFieldDisplay.tsx b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/display/components/MorphRelationManyToOneFieldDisplay.tsx index 6f1806433f3..b37a602ac6d 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/display/components/MorphRelationManyToOneFieldDisplay.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/display/components/MorphRelationManyToOneFieldDisplay.tsx @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { RecordChip } from '@/object-record/components/RecordChip'; import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext'; import { useMorphRelationToOneFieldDisplay } from '@/object-record/record-field/ui/meta-types/hooks/useMorphRelationToOneFieldDisplay'; diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/display/components/RelationFromManyFieldDisplay.tsx b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/display/components/RelationFromManyFieldDisplay.tsx index 86535b8f02e..eee1c8ab75b 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/display/components/RelationFromManyFieldDisplay.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/display/components/RelationFromManyFieldDisplay.tsx @@ -4,7 +4,7 @@ import { useActivityTargetObjectRecords } from '@/activities/hooks/useActivityTa import { type NoteTarget } from '@/activities/types/NoteTarget'; import { type TaskTarget } from '@/activities/types/TaskTarget'; import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { RecordChip } from '@/object-record/components/RecordChip'; import { isActivityTargetField } from '@/object-record/record-field-list/utils/categorizeRelationFields'; import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext'; diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/display/components/RelationToOneFieldDisplay.tsx b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/display/components/RelationToOneFieldDisplay.tsx index 3dd320c6830..b67ec08bd2b 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/display/components/RelationToOneFieldDisplay.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/display/components/RelationToOneFieldDisplay.tsx @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { RecordChip } from '@/object-record/components/RecordChip'; import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext'; import { ForbiddenFieldDisplay } from '@/object-record/record-field/ui/meta-types/display/components/ForbiddenFieldDisplay'; diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/display/components/__stories__/perf/ChipFieldDisplay.perf.stories.tsx b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/display/components/__stories__/perf/ChipFieldDisplay.perf.stories.tsx index 9a9d3b24c60..b7d3aeefba6 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/display/components/__stories__/perf/ChipFieldDisplay.perf.stories.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/display/components/__stories__/perf/ChipFieldDisplay.perf.stories.tsx @@ -1,7 +1,7 @@ import { type Meta, type StoryObj } from '@storybook/react-vite'; import { CoreObjectNamePlural } from '@/object-metadata/types/CoreObjectNamePlural'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { ChipFieldDisplay } from '@/object-record/record-field/ui/meta-types/display/components/ChipFieldDisplay'; import { RecordIndexContextProvider } from '@/object-record/record-index/contexts/RecordIndexContext'; import { useRecordIndexFieldMetadataDerivedStates } from '@/object-record/record-index/hooks/useRecordIndexFieldMetadataDerivedStates'; diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useFormattedJsonFieldValue.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useFormattedJsonFieldValue.ts index 6406a30de67..38bbc3522be 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useFormattedJsonFieldValue.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useFormattedJsonFieldValue.ts @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext'; import { orderWorkflowRunState } from '@/object-record/record-field/ui/meta-types/utils/orderWorkflowRunState'; import { type FieldJsonValue } from '@/object-record/record-field/ui/types/FieldMetadata'; diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/usePrecomputedJsonDraftValue.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/usePrecomputedJsonDraftValue.ts index 9e5414c797d..9ffc840a824 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/usePrecomputedJsonDraftValue.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/usePrecomputedJsonDraftValue.ts @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext'; import { orderWorkflowRunState } from '@/object-record/record-field/ui/meta-types/utils/orderWorkflowRunState'; import { useContext } from 'react'; diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/components/RelationOneToManyFieldInput.tsx b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/components/RelationOneToManyFieldInput.tsx index 4a30c988488..4eaba43babb 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/components/RelationOneToManyFieldInput.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/components/RelationOneToManyFieldInput.tsx @@ -8,7 +8,7 @@ import { type NoteTarget } from '@/activities/types/NoteTarget'; import { type TaskTarget } from '@/activities/types/TaskTarget'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems'; -import { type CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { type CoreObjectNameSingular } from 'twenty-shared/types'; import { getFieldMetadataItemById } from '@/object-metadata/utils/getFieldMetadataItemById'; import { useCreateOneRecord } from '@/object-record/hooks/useCreateOneRecord'; import { isActivityTargetField } from '@/object-record/record-field-list/utils/categorizeRelationFields'; diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/components/RichTextFieldInput.tsx b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/components/RichTextFieldInput.tsx index 5aabe2a137e..4ede25a0392 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/components/RichTextFieldInput.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/components/RichTextFieldInput.tsx @@ -1,6 +1,6 @@ import { SKELETON_LOADER_HEIGHT_SIZES } from '@/activities/components/SkeletonLoader'; import { useRichTextCommandMenu } from '@/command-menu/hooks/useRichTextCommandMenu'; -import { type CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { type CoreObjectNameSingular } from 'twenty-shared/types'; import { useRegisterInputEvents } from '@/object-record/record-field/ui/meta-types/input/hooks/useRegisterInputEvents'; import { RecordFieldComponentInstanceContext } from '@/object-record/record-field/ui/states/contexts/RecordFieldComponentInstanceContext'; diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/components/__stories__/RelationManyToOneFieldInput.stories.tsx b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/components/__stories__/RelationManyToOneFieldInput.stories.tsx index a8e7bc331e9..2900ce1c271 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/components/__stories__/RelationManyToOneFieldInput.stories.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/components/__stories__/RelationManyToOneFieldInput.stories.tsx @@ -16,7 +16,7 @@ import { mockedWorkspaceMemberData, } from '~/testing/mock-data/users'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular, FieldMetadataType } from 'twenty-shared/types'; import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext'; import { RecordFieldComponentInstanceContext } from '@/object-record/record-field/ui/states/contexts/RecordFieldComponentInstanceContext'; import { recordFieldInputLayoutDirectionLoadingComponentState } from '@/object-record/record-field/ui/states/recordFieldInputLayoutDirectionLoadingComponentState'; @@ -24,7 +24,6 @@ import { usePushFocusItemToFocusStack } from '@/ui/utilities/focus/hooks/usePush import { FocusComponentType } from '@/ui/utilities/focus/types/FocusComponentType'; import { jotaiStore } from '@/ui/utilities/state/jotai/jotaiStore'; import { useSetAtomComponentState } from '@/ui/utilities/state/jotai/hooks/useSetAtomComponentState'; -import { FieldMetadataType } from 'twenty-shared/types'; import { RelationManyToOneFieldInput } from '@/object-record/record-field/ui/meta-types/input/components/RelationManyToOneFieldInput'; import { mockedCompanyRecords } from '~/testing/mock-data/generated/data/companies/mock-companies-data'; diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/components/__stories__/RelationOneToManyFieldInput.stories.tsx b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/components/__stories__/RelationOneToManyFieldInput.stories.tsx index a208484690e..52041314a18 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/components/__stories__/RelationOneToManyFieldInput.stories.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/components/__stories__/RelationOneToManyFieldInput.stories.tsx @@ -15,14 +15,13 @@ import { mockedWorkspaceMemberData, } from '~/testing/mock-data/users'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular, FieldMetadataType } from 'twenty-shared/types'; import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext'; import { useOpenFieldInputEditMode } from '@/object-record/record-field/ui/hooks/useOpenFieldInputEditMode'; import { RelationOneToManyFieldInput } from '@/object-record/record-field/ui/meta-types/input/components/RelationOneToManyFieldInput'; import { RecordFieldComponentInstanceContext } from '@/object-record/record-field/ui/states/contexts/RecordFieldComponentInstanceContext'; import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { FocusComponentType } from '@/ui/utilities/focus/types/FocusComponentType'; -import { FieldMetadataType } from 'twenty-shared/types'; import { RelationType } from '~/generated-metadata/graphql'; import { getMockFieldMetadataItemOrThrow } from '~/testing/utils/getMockFieldMetadataItemOrThrow'; import { getMockObjectMetadataItemOrThrow } from '~/testing/utils/getMockObjectMetadataItemOrThrow'; diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/types/guards/isFieldDisplayedAsPhone.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/types/guards/isFieldDisplayedAsPhone.ts index bcc5bc6c773..3d661cdac4a 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/types/guards/isFieldDisplayedAsPhone.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/types/guards/isFieldDisplayedAsPhone.ts @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { FieldMetadataType } from '~/generated-metadata/graphql'; import { type FieldDefinition } from '@/object-record/record-field/ui/types/FieldDefinition'; diff --git a/packages/twenty-front/src/modules/object-record/record-picker/single-record-picker/components/__stories__/SingleRecordPicker.stories.tsx b/packages/twenty-front/src/modules/object-record/record-picker/single-record-picker/components/__stories__/SingleRecordPicker.stories.tsx index c1306726321..947ba90d369 100644 --- a/packages/twenty-front/src/modules/object-record/record-picker/single-record-picker/components/__stories__/SingleRecordPicker.stories.tsx +++ b/packages/twenty-front/src/modules/object-record/record-picker/single-record-picker/components/__stories__/SingleRecordPicker.stories.tsx @@ -1,7 +1,7 @@ import { type Meta, type StoryObj } from '@storybook/react-vite'; import { expect, userEvent, within } from 'storybook/test'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { ObjectMetadataItemsDecorator } from '~/testing/decorators/ObjectMetadataItemsDecorator'; import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator'; import { graphqlMocks } from '~/testing/graphqlMocks'; diff --git a/packages/twenty-front/src/modules/object-record/record-show/components/PageLayoutRecordPageRenderer.tsx b/packages/twenty-front/src/modules/object-record/record-show/components/PageLayoutRecordPageRenderer.tsx index 5a5e8e59ed1..27451658089 100644 --- a/packages/twenty-front/src/modules/object-record/record-show/components/PageLayoutRecordPageRenderer.tsx +++ b/packages/twenty-front/src/modules/object-record/record-show/components/PageLayoutRecordPageRenderer.tsx @@ -1,7 +1,7 @@ import { RecordShowRightDrawerActionMenu } from '@/action-menu/components/RecordShowRightDrawerActionMenu'; import { RecordShowRightDrawerOpenRecordButton } from '@/action-menu/components/RecordShowRightDrawerOpenRecordButton'; import { InformationBannerDeletedRecord } from '@/information-banner/components/deleted-record/InformationBannerDeletedRecord'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { RecordShowContainerContextStoreTargetedRecordsEffect } from '@/object-record/record-show/components/RecordShowContainerContextStoreTargetedRecordsEffect'; import { RecordShowEffect } from '@/object-record/record-show/components/RecordShowEffect'; import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; diff --git a/packages/twenty-front/src/modules/object-record/record-show/components/SummaryCard.tsx b/packages/twenty-front/src/modules/object-record/record-show/components/SummaryCard.tsx index ca16f3fbcc1..8d764ab5d3b 100644 --- a/packages/twenty-front/src/modules/object-record/record-show/components/SummaryCard.tsx +++ b/packages/twenty-front/src/modules/object-record/record-show/components/SummaryCard.tsx @@ -1,7 +1,7 @@ import { allowRequestsToTwentyIconsState } from '@/client-config/states/allowRequestsToTwentyIcons'; import { useLabelIdentifierFieldMetadataItem } from '@/object-metadata/hooks/useLabelIdentifierFieldMetadataItem'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useIsRecordFieldReadOnly } from '@/object-record/read-only/hooks/useIsRecordFieldReadOnly'; import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext'; import { usePersonAvatarUpload } from '@/object-record/record-show/hooks/usePersonAvatarUpload'; diff --git a/packages/twenty-front/src/modules/object-record/record-show/graphql/operations/factories/findOneRecordForShowPageOperationSignatureFactory.ts b/packages/twenty-front/src/modules/object-record/record-show/graphql/operations/factories/findOneRecordForShowPageOperationSignatureFactory.ts index b4dd0e81078..c51015d5a17 100644 --- a/packages/twenty-front/src/modules/object-record/record-show/graphql/operations/factories/findOneRecordForShowPageOperationSignatureFactory.ts +++ b/packages/twenty-front/src/modules/object-record/record-show/graphql/operations/factories/findOneRecordForShowPageOperationSignatureFactory.ts @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { generateActivityTargetGqlFields } from '@/object-record/graphql/record-gql-fields/utils/generateActivityTargetGqlFields'; import { generateDepthRecordGqlFieldsFromObject } from '@/object-record/graphql/record-gql-fields/utils/generateDepthRecordGqlFieldsFromObject'; diff --git a/packages/twenty-front/src/modules/object-record/record-show/hooks/usePersonAvatarUpload.ts b/packages/twenty-front/src/modules/object-record/record-show/hooks/usePersonAvatarUpload.ts index 9be5605e396..574efcbcdc9 100644 --- a/packages/twenty-front/src/modules/object-record/record-show/hooks/usePersonAvatarUpload.ts +++ b/packages/twenty-front/src/modules/object-record/record-show/hooks/usePersonAvatarUpload.ts @@ -1,5 +1,5 @@ import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled'; import { useApolloClient } from '@apollo/client'; diff --git a/packages/twenty-front/src/modules/object-record/record-table/empty-state/utils/__tests__/getEmptyStateSubTitle.test.ts b/packages/twenty-front/src/modules/object-record/record-table/empty-state/utils/__tests__/getEmptyStateSubTitle.test.ts index 22ed3f5ed71..86d1bde2cd0 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/empty-state/utils/__tests__/getEmptyStateSubTitle.test.ts +++ b/packages/twenty-front/src/modules/object-record/record-table/empty-state/utils/__tests__/getEmptyStateSubTitle.test.ts @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { getEmptyStateSubTitle } from '@/object-record/record-table/empty-state/utils/getEmptyStateSubTitle'; describe('getEmptyStateSubTitle', () => { diff --git a/packages/twenty-front/src/modules/object-record/record-table/empty-state/utils/__tests__/getEmptyStateTitle.test.ts b/packages/twenty-front/src/modules/object-record/record-table/empty-state/utils/__tests__/getEmptyStateTitle.test.ts index afdce574ff6..88cca058726 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/empty-state/utils/__tests__/getEmptyStateTitle.test.ts +++ b/packages/twenty-front/src/modules/object-record/record-table/empty-state/utils/__tests__/getEmptyStateTitle.test.ts @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { getEmptyStateTitle } from '@/object-record/record-table/empty-state/utils/getEmptyStateTitle'; describe('getEmptyStateTitle', () => { diff --git a/packages/twenty-front/src/modules/object-record/record-table/empty-state/utils/getEmptyStateSubTitle.ts b/packages/twenty-front/src/modules/object-record/record-table/empty-state/utils/getEmptyStateSubTitle.ts index 3f8ceab26b3..beef6dca975 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/empty-state/utils/getEmptyStateSubTitle.ts +++ b/packages/twenty-front/src/modules/object-record/record-table/empty-state/utils/getEmptyStateSubTitle.ts @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { t } from '@lingui/core/macro'; export const getEmptyStateSubTitle = ( diff --git a/packages/twenty-front/src/modules/object-record/record-table/empty-state/utils/getEmptyStateTitle.ts b/packages/twenty-front/src/modules/object-record/record-table/empty-state/utils/getEmptyStateTitle.ts index 1a5203f0607..c115d6e4ed8 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/empty-state/utils/getEmptyStateTitle.ts +++ b/packages/twenty-front/src/modules/object-record/record-table/empty-state/utils/getEmptyStateTitle.ts @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { t } from '@lingui/core/macro'; export const getEmptyStateTitle = ( diff --git a/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/internal/__tests__/useCloseRecordTableCellInGroup.test.tsx b/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/internal/__tests__/useCloseRecordTableCellInGroup.test.tsx index 7b7e9bee4e8..40f22e21efe 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/internal/__tests__/useCloseRecordTableCellInGroup.test.tsx +++ b/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/internal/__tests__/useCloseRecordTableCellInGroup.test.tsx @@ -2,7 +2,7 @@ import { act, renderHook } from '@testing-library/react'; import { Provider as JotaiProvider } from 'jotai'; import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { RecordComponentInstanceContextsWrapper } from '@/object-record/components/RecordComponentInstanceContextsWrapper'; import { textfieldDefinition } from '@/object-record/record-field/ui/__mocks__/fieldDefinitions'; import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext'; diff --git a/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/internal/__tests__/useCloseRecordTableCellNoGroup.test.tsx b/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/internal/__tests__/useCloseRecordTableCellNoGroup.test.tsx index 106633da6c7..cdfe6890953 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/internal/__tests__/useCloseRecordTableCellNoGroup.test.tsx +++ b/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/internal/__tests__/useCloseRecordTableCellNoGroup.test.tsx @@ -2,7 +2,7 @@ import { act, renderHook } from '@testing-library/react'; import { Provider as JotaiProvider } from 'jotai'; import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { RecordComponentInstanceContextsWrapper } from '@/object-record/components/RecordComponentInstanceContextsWrapper'; import { textfieldDefinition } from '@/object-record/record-field/ui/__mocks__/fieldDefinitions'; import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext'; diff --git a/packages/twenty-front/src/modules/object-record/spreadsheet-import/hooks/__tests__/useOpenObjectRecordsSpreadsheetImportDialog.test.ts b/packages/twenty-front/src/modules/object-record/spreadsheet-import/hooks/__tests__/useOpenObjectRecordsSpreadsheetImportDialog.test.ts index 669f55523dd..7464ab8cf67 100644 --- a/packages/twenty-front/src/modules/object-record/spreadsheet-import/hooks/__tests__/useOpenObjectRecordsSpreadsheetImportDialog.test.ts +++ b/packages/twenty-front/src/modules/object-record/spreadsheet-import/hooks/__tests__/useOpenObjectRecordsSpreadsheetImportDialog.test.ts @@ -1,7 +1,7 @@ import { renderHook } from '@testing-library/react'; import { act } from 'react'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { spreadsheetImportDialogState } from '@/spreadsheet-import/states/spreadsheetImportDialogState'; import { useOpenObjectRecordsSpreadsheetImportDialog } from '@/object-record/spreadsheet-import/hooks/useOpenObjectRecordsSpreadsheetImportDialog'; diff --git a/packages/twenty-front/src/modules/object-record/utils/isFieldCellSupported.ts b/packages/twenty-front/src/modules/object-record/utils/isFieldCellSupported.ts index 9246dcbabef..5f79d7ed320 100644 --- a/packages/twenty-front/src/modules/object-record/utils/isFieldCellSupported.ts +++ b/packages/twenty-front/src/modules/object-record/utils/isFieldCellSupported.ts @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { type FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { isHiddenSystemField } from '@/object-metadata/utils/isHiddenSystemField'; diff --git a/packages/twenty-front/src/modules/page-layout/components/__stories__/PageLayoutRenderer.stories.tsx b/packages/twenty-front/src/modules/page-layout/components/__stories__/PageLayoutRenderer.stories.tsx index eb960dce356..c9018573bd9 100644 --- a/packages/twenty-front/src/modules/page-layout/components/__stories__/PageLayoutRenderer.stories.tsx +++ b/packages/twenty-front/src/modules/page-layout/components/__stories__/PageLayoutRenderer.stories.tsx @@ -10,7 +10,7 @@ import { expect, within } from 'storybook/test'; import { FIND_ONE_PAGE_LAYOUT } from '@/dashboards/graphql/queries/findOnePageLayout'; import { ApolloCoreClientContext } from '@/object-metadata/contexts/ApolloCoreClientContext'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { generateGroupByAggregateQuery } from '@/object-record/record-aggregate/utils/generateGroupByAggregateQuery'; import { PageLayoutRenderer } from '@/page-layout/components/PageLayoutRenderer'; import { LayoutRenderingProvider } from '@/ui/layout/contexts/LayoutRenderingContext'; diff --git a/packages/twenty-front/src/modules/page-layout/hooks/useOpportunityDefaultChartConfig.ts b/packages/twenty-front/src/modules/page-layout/hooks/useOpportunityDefaultChartConfig.ts index 7f6d8ecac23..bcf4baece69 100644 --- a/packages/twenty-front/src/modules/page-layout/hooks/useOpportunityDefaultChartConfig.ts +++ b/packages/twenty-front/src/modules/page-layout/hooks/useOpportunityDefaultChartConfig.ts @@ -2,7 +2,7 @@ import { objectMetadataItemFamilySelector } from '@/object-metadata/states/objec import { useAtomFamilySelectorValue } from '@/ui/utilities/state/jotai/hooks/useAtomFamilySelectorValue'; import { isDefined } from 'twenty-shared/utils'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { type GraphWidgetFieldSelection } from '@/page-layout/types/GraphWidgetFieldSelection'; export const useOpportunityDefaultChartConfig = () => { diff --git a/packages/twenty-front/src/modules/page-layout/hooks/usePageLayoutIdForRecord.ts b/packages/twenty-front/src/modules/page-layout/hooks/usePageLayoutIdForRecord.ts index 7f3bfc61d63..9913700f7c0 100644 --- a/packages/twenty-front/src/modules/page-layout/hooks/usePageLayoutIdForRecord.ts +++ b/packages/twenty-front/src/modules/page-layout/hooks/usePageLayoutIdForRecord.ts @@ -1,5 +1,5 @@ import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useFindOneRecord } from '@/object-record/hooks/useFindOneRecord'; import { type ObjectRecord } from '@/object-record/types/ObjectRecord'; import { recordPageLayoutByObjectMetadataIdFamilySelector } from '@/page-layout/states/selectors/recordPageLayoutByObjectMetadataIdFamilySelector'; diff --git a/packages/twenty-front/src/modules/page-layout/utils/__tests__/getDefaultRecordPageLayoutId.test.ts b/packages/twenty-front/src/modules/page-layout/utils/__tests__/getDefaultRecordPageLayoutId.test.ts index 12b6e42871f..3647317fd79 100644 --- a/packages/twenty-front/src/modules/page-layout/utils/__tests__/getDefaultRecordPageLayoutId.test.ts +++ b/packages/twenty-front/src/modules/page-layout/utils/__tests__/getDefaultRecordPageLayoutId.test.ts @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { DEFAULT_COMPANY_RECORD_PAGE_LAYOUT_ID } from '@/page-layout/constants/DefaultCompanyRecordPageLayoutId'; import { DEFAULT_NOTE_RECORD_PAGE_LAYOUT_ID } from '@/page-layout/constants/DefaultNoteRecordPageLayoutId'; import { DEFAULT_OPPORTUNITY_RECORD_PAGE_LAYOUT_ID } from '@/page-layout/constants/DefaultOpportunityRecordPageLayoutId'; diff --git a/packages/twenty-front/src/modules/page-layout/utils/getDefaultRecordPageLayoutId.ts b/packages/twenty-front/src/modules/page-layout/utils/getDefaultRecordPageLayoutId.ts index ad98e707330..fcca2632d90 100644 --- a/packages/twenty-front/src/modules/page-layout/utils/getDefaultRecordPageLayoutId.ts +++ b/packages/twenty-front/src/modules/page-layout/utils/getDefaultRecordPageLayoutId.ts @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { DEFAULT_COMPANY_RECORD_PAGE_LAYOUT_ID } from '@/page-layout/constants/DefaultCompanyRecordPageLayoutId'; import { DEFAULT_NOTE_RECORD_PAGE_LAYOUT_ID } from '@/page-layout/constants/DefaultNoteRecordPageLayoutId'; import { DEFAULT_OPPORTUNITY_RECORD_PAGE_LAYOUT_ID } from '@/page-layout/constants/DefaultOpportunityRecordPageLayoutId'; diff --git a/packages/twenty-front/src/modules/page-layout/utils/getRecordPageLayoutId.ts b/packages/twenty-front/src/modules/page-layout/utils/getRecordPageLayoutId.ts index 3305bd32d64..03f78da83ae 100644 --- a/packages/twenty-front/src/modules/page-layout/utils/getRecordPageLayoutId.ts +++ b/packages/twenty-front/src/modules/page-layout/utils/getRecordPageLayoutId.ts @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { type ObjectRecord } from '@/object-record/types/ObjectRecord'; import { DEFAULT_COMPANY_RECORD_PAGE_LAYOUT_ID } from '@/page-layout/constants/DefaultCompanyRecordPageLayoutId'; import { DEFAULT_NOTE_RECORD_PAGE_LAYOUT_ID } from '@/page-layout/constants/DefaultNoteRecordPageLayoutId'; diff --git a/packages/twenty-front/src/modules/page-layout/widgets/components/__stories__/WidgetRenderer.stories.tsx b/packages/twenty-front/src/modules/page-layout/widgets/components/__stories__/WidgetRenderer.stories.tsx index 4ac2982d43d..cf60bbf48b1 100644 --- a/packages/twenty-front/src/modules/page-layout/widgets/components/__stories__/WidgetRenderer.stories.tsx +++ b/packages/twenty-front/src/modules/page-layout/widgets/components/__stories__/WidgetRenderer.stories.tsx @@ -14,7 +14,7 @@ import { ApolloCoreClientContext } from '@/object-metadata/contexts/ApolloCoreCl import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; import { isAppMetadataReadyState } from '@/metadata-store/states/isAppMetadataReadyState'; import { jotaiStore } from '@/ui/utilities/state/jotai/jotaiStore'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; import { type ObjectRecord } from '@/object-record/types/ObjectRecord'; import { PageLayoutContentProvider } from '@/page-layout/contexts/PageLayoutContentContext'; diff --git a/packages/twenty-front/src/modules/page-layout/widgets/field/components/__stories__/FieldWidget.stories.tsx b/packages/twenty-front/src/modules/page-layout/widgets/field/components/__stories__/FieldWidget.stories.tsx index 2b5d2139928..94f74be4e8b 100644 --- a/packages/twenty-front/src/modules/page-layout/widgets/field/components/__stories__/FieldWidget.stories.tsx +++ b/packages/twenty-front/src/modules/page-layout/widgets/field/components/__stories__/FieldWidget.stories.tsx @@ -10,7 +10,7 @@ import { expect, userEvent, waitFor, within } from 'storybook/test'; import { ApolloCoreClientContext } from '@/object-metadata/contexts/ApolloCoreClientContext'; import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; import { isAppMetadataReadyState } from '@/metadata-store/states/isAppMetadataReadyState'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; import { type ObjectRecord } from '@/object-record/types/ObjectRecord'; import { PageLayoutContentProvider } from '@/page-layout/contexts/PageLayoutContentContext'; diff --git a/packages/twenty-front/src/modules/page-layout/widgets/fields/components/FieldsWidgetFieldItem.tsx b/packages/twenty-front/src/modules/page-layout/widgets/fields/components/FieldsWidgetFieldItem.tsx index e07234a5523..12f09ccc2cd 100644 --- a/packages/twenty-front/src/modules/page-layout/widgets/fields/components/FieldsWidgetFieldItem.tsx +++ b/packages/twenty-front/src/modules/page-layout/widgets/fields/components/FieldsWidgetFieldItem.tsx @@ -1,5 +1,4 @@ import { ActivityTargetsInlineCell } from '@/activities/inline-cell/components/ActivityTargetsInlineCell'; -import { type CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { type FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { formatFieldMetadataItemAsColumnDefinition } from '@/object-metadata/utils/formatFieldMetadataItemAsColumnDefinition'; @@ -14,7 +13,10 @@ import { isJunctionRelationForbidden } from '@/object-record/record-field/ui/uti import { RecordInlineCell } from '@/object-record/record-inline-cell/components/RecordInlineCell'; import { getRecordFieldInputInstanceId } from '@/object-record/utils/getRecordFieldInputId'; import { getObjectPermissionsFromMapByObjectMetadataId } from '@/settings/roles/role-permissions/objects-permissions/utils/getObjectPermissionsFromMapByObjectMetadataId'; -import { type ObjectPermissions } from 'twenty-shared/types'; +import { + type CoreObjectNameSingular, + type ObjectPermissions, +} from 'twenty-shared/types'; type FieldsWidgetFieldItemProps = { fieldMetadataItem: FieldMetadataItem; diff --git a/packages/twenty-front/src/modules/page-layout/widgets/fields/components/__stories__/FieldsWidget.stories.tsx b/packages/twenty-front/src/modules/page-layout/widgets/fields/components/__stories__/FieldsWidget.stories.tsx index 99d40b27ed3..e3e44fa8dc8 100644 --- a/packages/twenty-front/src/modules/page-layout/widgets/fields/components/__stories__/FieldsWidget.stories.tsx +++ b/packages/twenty-front/src/modules/page-layout/widgets/fields/components/__stories__/FieldsWidget.stories.tsx @@ -10,7 +10,7 @@ import { expect, waitFor, within } from 'storybook/test'; import { isAppMetadataReadyState } from '@/metadata-store/states/isAppMetadataReadyState'; import { ApolloCoreClientContext } from '@/object-metadata/contexts/ApolloCoreClientContext'; import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; import { type ObjectRecord } from '@/object-record/types/ObjectRecord'; import { PageLayoutContentProvider } from '@/page-layout/contexts/PageLayoutContentContext'; diff --git a/packages/twenty-front/src/modules/page-layout/widgets/graph/components/__stories__/GraphWidgetPieChart.stories.tsx b/packages/twenty-front/src/modules/page-layout/widgets/graph/components/__stories__/GraphWidgetPieChart.stories.tsx index 8dbf74bbb0b..254ce9265b7 100644 --- a/packages/twenty-front/src/modules/page-layout/widgets/graph/components/__stories__/GraphWidgetPieChart.stories.tsx +++ b/packages/twenty-front/src/modules/page-layout/widgets/graph/components/__stories__/GraphWidgetPieChart.stories.tsx @@ -1,6 +1,6 @@ import { type Meta, type StoryObj } from '@storybook/react-vite'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { GraphWidgetTestWrapper } from '@/page-layout/widgets/graph/__tests__/GraphWidgetTestWrapper'; import { GraphWidgetPieChart } from '@/page-layout/widgets/graph/graphWidgetPieChart/components/GraphWidgetPieChart'; import { CatalogDecorator, ComponentDecorator } from 'twenty-ui/testing'; diff --git a/packages/twenty-front/src/modules/page-layout/widgets/standalone-rich-text/components/StandaloneRichTextWidget.tsx b/packages/twenty-front/src/modules/page-layout/widgets/standalone-rich-text/components/StandaloneRichTextWidget.tsx index cbaa282da50..729db0d54ad 100644 --- a/packages/twenty-front/src/modules/page-layout/widgets/standalone-rich-text/components/StandaloneRichTextWidget.tsx +++ b/packages/twenty-front/src/modules/page-layout/widgets/standalone-rich-text/components/StandaloneRichTextWidget.tsx @@ -2,7 +2,7 @@ import { useRef } from 'react'; import { type Attachment } from '@/activities/files/types/Attachment'; import { getActivityTargetObjectFieldIdName } from '@/activities/utils/getActivityTargetObjectFieldIdName'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords'; import { isPageLayoutInEditModeComponentState } from '@/page-layout/states/isPageLayoutInEditModeComponentState'; import { pageLayoutEditingWidgetIdComponentState } from '@/page-layout/states/pageLayoutEditingWidgetIdComponentState'; diff --git a/packages/twenty-front/src/modules/prefetch/components/PrefetchRunFavoriteQueriesEffect.tsx b/packages/twenty-front/src/modules/prefetch/components/PrefetchRunFavoriteQueriesEffect.tsx index 73dc9c44133..6b2bf3d3307 100644 --- a/packages/twenty-front/src/modules/prefetch/components/PrefetchRunFavoriteQueriesEffect.tsx +++ b/packages/twenty-front/src/modules/prefetch/components/PrefetchRunFavoriteQueriesEffect.tsx @@ -2,7 +2,7 @@ import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState'; import { useIsSettingsPage } from '@/navigation/hooks/useIsSettingsPage'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords'; import { findAllFavoritesFolderOperationSignatureFactory } from '@/prefetch/graphql/operation-signatures/factories/findAllFavoritesFolderOperationSignatureFactory'; import { findAllFavoritesOperationSignatureFactory } from '@/prefetch/graphql/operation-signatures/factories/findAllFavoritesOperationSignatureFactory'; diff --git a/packages/twenty-front/src/modules/prefetch/graphql/operation-signatures/factories/findAllFavoritesFolderOperationSignatureFactory.ts b/packages/twenty-front/src/modules/prefetch/graphql/operation-signatures/factories/findAllFavoritesFolderOperationSignatureFactory.ts index fcc2f276db2..89731e453d0 100644 --- a/packages/twenty-front/src/modules/prefetch/graphql/operation-signatures/factories/findAllFavoritesFolderOperationSignatureFactory.ts +++ b/packages/twenty-front/src/modules/prefetch/graphql/operation-signatures/factories/findAllFavoritesFolderOperationSignatureFactory.ts @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { type RecordGqlOperationSignatureFactory } from '@/object-record/graphql/types/RecordGqlOperationSignatureFactory'; export const findAllFavoritesFolderOperationSignatureFactory: RecordGqlOperationSignatureFactory< diff --git a/packages/twenty-front/src/modules/prefetch/graphql/operation-signatures/factories/findAllFavoritesOperationSignatureFactory.ts b/packages/twenty-front/src/modules/prefetch/graphql/operation-signatures/factories/findAllFavoritesOperationSignatureFactory.ts index 46f99056046..04000ceb534 100644 --- a/packages/twenty-front/src/modules/prefetch/graphql/operation-signatures/factories/findAllFavoritesOperationSignatureFactory.ts +++ b/packages/twenty-front/src/modules/prefetch/graphql/operation-signatures/factories/findAllFavoritesOperationSignatureFactory.ts @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { generateDepthRecordGqlFieldsFromObject } from '@/object-record/graphql/record-gql-fields/utils/generateDepthRecordGqlFieldsFromObject'; import { type RecordGqlOperationSignatureFactory } from '@/object-record/graphql/types/RecordGqlOperationSignatureFactory'; diff --git a/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsBlocklistSection.tsx b/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsBlocklistSection.tsx index b6b62a1d0b0..7d0dff6e3b9 100644 --- a/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsBlocklistSection.tsx +++ b/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsBlocklistSection.tsx @@ -1,7 +1,7 @@ import { type BlocklistItem } from '@/accounts/types/BlocklistItem'; import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useCreateOneRecord } from '@/object-record/hooks/useCreateOneRecord'; import { useDeleteOneRecord } from '@/object-record/hooks/useDeleteOneRecord'; import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords'; diff --git a/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsCalendarChannelDetails.tsx b/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsCalendarChannelDetails.tsx index 84e2a877f90..23152a8ed5b 100644 --- a/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsCalendarChannelDetails.tsx +++ b/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsCalendarChannelDetails.tsx @@ -1,5 +1,5 @@ import { type CalendarChannel } from '@/accounts/types/CalendarChannel'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; import { SettingsAccountsEventVisibilitySettingsCard } from '@/settings/accounts/components/SettingsAccountsCalendarVisibilitySettingsCard'; import { SettingsOptionCardContentToggle } from '@/settings/components/SettingsOptions/SettingsOptionCardContentToggle'; diff --git a/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsCalendarChannelsContainer.tsx b/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsCalendarChannelsContainer.tsx index d794481b70e..729a9c0beec 100644 --- a/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsCalendarChannelsContainer.tsx +++ b/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsCalendarChannelsContainer.tsx @@ -7,7 +7,7 @@ import { import { type ConnectedAccount } from '@/accounts/types/ConnectedAccount'; import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords'; import { SettingsAccountsCalendarChannelDetails } from '@/settings/accounts/components/SettingsAccountsCalendarChannelDetails'; import { SettingsNewAccountSection } from '@/settings/accounts/components/SettingsNewAccountSection'; diff --git a/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsMessageChannelDetails.tsx b/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsMessageChannelDetails.tsx index edf18c2222e..ad82d49a690 100644 --- a/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsMessageChannelDetails.tsx +++ b/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsMessageChannelDetails.tsx @@ -5,7 +5,7 @@ import { type MessageChannelContactAutoCreationPolicy, type MessageFolderImportPolicy, } from '@/accounts/types/MessageChannel'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; import { SettingsAccountsMessageAutoCreationCard } from '@/settings/accounts/components/SettingsAccountsMessageAutoCreationCard'; import { SettingsAccountsMessageFolderCard } from '@/settings/accounts/components/SettingsAccountsMessageFolderCard'; diff --git a/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsMessageChannelsContainer.tsx b/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsMessageChannelsContainer.tsx index da0a925621c..3de4cadf96d 100644 --- a/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsMessageChannelsContainer.tsx +++ b/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsMessageChannelsContainer.tsx @@ -7,7 +7,7 @@ import { } from '@/accounts/types/MessageChannel'; import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useGenerateDepthRecordGqlFieldsFromObject } from '@/object-record/graphql/record-gql-fields/hooks/useGenerateDepthRecordGqlFieldsFromObject'; import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords'; import { SettingsAccountsMessageChannelDetails } from '@/settings/accounts/components/SettingsAccountsMessageChannelDetails'; diff --git a/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsRowDropdownMenu.tsx b/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsRowDropdownMenu.tsx index f5a2748f41e..72e2c91a913 100644 --- a/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsRowDropdownMenu.tsx +++ b/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsRowDropdownMenu.tsx @@ -1,7 +1,11 @@ import { type ConnectedAccount } from '@/accounts/types/ConnectedAccount'; import { CalendarChannelSyncStage } from '@/accounts/types/CalendarChannel'; import { MessageChannelSyncStage } from '@/accounts/types/MessageChannel'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { + CoreObjectNameSingular, + ConnectedAccountProvider, + SettingsPath, +} from 'twenty-shared/types'; import { useDestroyOneRecord } from '@/object-record/hooks/useDestroyOneRecord'; import { useTriggerProviderReconnect } from '@/settings/accounts/hooks/useTriggerProviderReconnect'; import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown'; @@ -11,7 +15,6 @@ import { useCloseDropdown } from '@/ui/layout/dropdown/hooks/useCloseDropdown'; import { ConfirmationModal } from '@/ui/layout/modal/components/ConfirmationModal'; import { useModal } from '@/ui/layout/modal/hooks/useModal'; import { Trans, useLingui } from '@lingui/react/macro'; -import { ConnectedAccountProvider, SettingsPath } from 'twenty-shared/types'; import { IconAt, IconCalendarEvent, diff --git a/packages/twenty-front/src/modules/settings/accounts/components/message-folders/SettingsAccountsMessageFoldersCard.tsx b/packages/twenty-front/src/modules/settings/accounts/components/message-folders/SettingsAccountsMessageFoldersCard.tsx index 0e30fbebc9d..87872c53867 100644 --- a/packages/twenty-front/src/modules/settings/accounts/components/message-folders/SettingsAccountsMessageFoldersCard.tsx +++ b/packages/twenty-front/src/modules/settings/accounts/components/message-folders/SettingsAccountsMessageFoldersCard.tsx @@ -1,6 +1,6 @@ import { type MessageChannel } from '@/accounts/types/MessageChannel'; import { type MessageFolder } from '@/accounts/types/MessageFolder'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useGenerateDepthRecordGqlFieldsFromObject } from '@/object-record/graphql/record-gql-fields/hooks/useGenerateDepthRecordGqlFieldsFromObject'; import { useFindOneRecord } from '@/object-record/hooks/useFindOneRecord'; import { SettingsMessageFoldersEmptyStateCard } from '@/settings/accounts/components/message-folders/SettingsMessageFoldersEmptyStateCard'; diff --git a/packages/twenty-front/src/modules/settings/accounts/hooks/useUpdateMessageFoldersSyncStatus.ts b/packages/twenty-front/src/modules/settings/accounts/hooks/useUpdateMessageFoldersSyncStatus.ts index 6680b57a019..db3fa017d7f 100644 --- a/packages/twenty-front/src/modules/settings/accounts/hooks/useUpdateMessageFoldersSyncStatus.ts +++ b/packages/twenty-front/src/modules/settings/accounts/hooks/useUpdateMessageFoldersSyncStatus.ts @@ -1,6 +1,6 @@ import { useCallback } from 'react'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useUpdateManyRecords } from '@/object-record/hooks/useUpdateManyRecords'; type UpdateMessageFoldersSyncStatusArgs = { diff --git a/packages/twenty-front/src/modules/settings/data-model/fields/preview/components/SettingsDataModelRelationFieldPreview.tsx b/packages/twenty-front/src/modules/settings/data-model/fields/preview/components/SettingsDataModelRelationFieldPreview.tsx index 7051450afb1..dd524207659 100644 --- a/packages/twenty-front/src/modules/settings/data-model/fields/preview/components/SettingsDataModelRelationFieldPreview.tsx +++ b/packages/twenty-front/src/modules/settings/data-model/fields/preview/components/SettingsDataModelRelationFieldPreview.tsx @@ -2,7 +2,7 @@ import { useContext } from 'react'; import { styled } from '@linaria/react'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { type FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; import { type FieldMetadataItemRelation } from '@/object-metadata/types/FieldMetadataItemRelation'; import { FieldDisplay } from '@/object-record/record-field/ui/components/FieldDisplay'; diff --git a/packages/twenty-front/src/modules/settings/data-model/fields/preview/hooks/useFieldPreviewValue.ts b/packages/twenty-front/src/modules/settings/data-model/fields/preview/hooks/useFieldPreviewValue.ts index c1021bc78a2..ae60f176e3c 100644 --- a/packages/twenty-front/src/modules/settings/data-model/fields/preview/hooks/useFieldPreviewValue.ts +++ b/packages/twenty-front/src/modules/settings/data-model/fields/preview/hooks/useFieldPreviewValue.ts @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { type FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; import { useRelationFieldPreviewValue } from '@/settings/data-model/fields/preview/hooks/useRelationFieldPreviewValue'; import { getAddressFieldPreviewValue } from '@/settings/data-model/fields/preview/utils/getAddressFieldPreviewValue'; diff --git a/packages/twenty-front/src/modules/settings/data-model/fields/preview/hooks/usePreviewRecord.ts b/packages/twenty-front/src/modules/settings/data-model/fields/preview/hooks/usePreviewRecord.ts index e107ad5927c..90d0feef87f 100644 --- a/packages/twenty-front/src/modules/settings/data-model/fields/preview/hooks/usePreviewRecord.ts +++ b/packages/twenty-front/src/modules/settings/data-model/fields/preview/hooks/usePreviewRecord.ts @@ -1,5 +1,5 @@ import { useLabelIdentifierFieldMetadataItem } from '@/object-metadata/hooks/useLabelIdentifierFieldMetadataItem'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords'; import { isFieldValueEmpty } from '@/object-record/record-field/ui/utils/isFieldValueEmpty'; import { type ObjectRecord } from '@/object-record/types/ObjectRecord'; diff --git a/packages/twenty-front/src/modules/settings/profile/components/NameFields.tsx b/packages/twenty-front/src/modules/settings/profile/components/NameFields.tsx index e03407ac121..41e6b8014b9 100644 --- a/packages/twenty-front/src/modules/settings/profile/components/NameFields.tsx +++ b/packages/twenty-front/src/modules/settings/profile/components/NameFields.tsx @@ -7,7 +7,7 @@ import { currentUserState } from '@/auth/states/currentUserState'; import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; import { useCanEditProfileField } from '@/settings/profile/hooks/useCanEditProfileField'; import { SettingsTextInput } from '@/ui/input/components/SettingsTextInput'; diff --git a/packages/twenty-front/src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentWorkspaceMemberPickerDropdown.tsx b/packages/twenty-front/src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentWorkspaceMemberPickerDropdown.tsx index f58d847d4f4..7fbe24c80b5 100644 --- a/packages/twenty-front/src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentWorkspaceMemberPickerDropdown.tsx +++ b/packages/twenty-front/src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentWorkspaceMemberPickerDropdown.tsx @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useObjectRecordSearchRecords } from '@/object-record/hooks/useObjectRecordSearchRecords'; import { SettingsRoleAssignmentWorkspaceMemberPickerDropdownContent } from '@/settings/roles/role-assignment/components/SettingsRoleAssignmentWorkspaceMemberPickerDropdownContent'; import { type PartialWorkspaceMember } from '@/settings/roles/types/RoleWithPartialMembers'; diff --git a/packages/twenty-front/src/modules/settings/roles/role-permissions/object-level-permissions/record-level-permissions/components/SettingsRolePermissionsObjectLevelRecordLevelPermissionFieldSelectFieldMenu.tsx b/packages/twenty-front/src/modules/settings/roles/role-permissions/object-level-permissions/record-level-permissions/components/SettingsRolePermissionsObjectLevelRecordLevelPermissionFieldSelectFieldMenu.tsx index da6c0a6b921..3cb09b297d9 100644 --- a/packages/twenty-front/src/modules/settings/roles/role-permissions/object-level-permissions/record-level-permissions/components/SettingsRolePermissionsObjectLevelRecordLevelPermissionFieldSelectFieldMenu.tsx +++ b/packages/twenty-front/src/modules/settings/roles/role-permissions/object-level-permissions/record-level-permissions/components/SettingsRolePermissionsObjectLevelRecordLevelPermissionFieldSelectFieldMenu.tsx @@ -3,7 +3,7 @@ import { useLingui } from '@lingui/react/macro'; import { getFilterTypeFromFieldType } from 'twenty-shared/utils'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular, FieldMetadataType } from 'twenty-shared/types'; import { type FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; import { AdvancedFilterFieldSelectSearchInput } from '@/object-record/advanced-filter/components/AdvancedFilterFieldSelectSearchInput'; import { useAdvancedFilterFieldSelectDropdown } from '@/object-record/advanced-filter/hooks/useAdvancedFilterFieldSelectDropdown'; @@ -27,7 +27,6 @@ import { useSelectableList } from '@/ui/layout/selectable-list/hooks/useSelectab import { useAtomComponentState } from '@/ui/utilities/state/jotai/hooks/useAtomComponentState'; import { useSetAtomComponentState } from '@/ui/utilities/state/jotai/hooks/useSetAtomComponentState'; import { useContext } from 'react'; -import { FieldMetadataType } from 'twenty-shared/types'; type SettingsRolePermissionsObjectLevelRecordLevelPermissionFieldSelectFieldMenuProps = { diff --git a/packages/twenty-front/src/modules/settings/roles/role-permissions/object-level-permissions/record-level-permissions/components/SettingsRolePermissionsObjectLevelRecordLevelPermissionMeValueSelect.tsx b/packages/twenty-front/src/modules/settings/roles/role-permissions/object-level-permissions/record-level-permissions/components/SettingsRolePermissionsObjectLevelRecordLevelPermissionMeValueSelect.tsx index 5a504318e12..90033956f97 100644 --- a/packages/twenty-front/src/modules/settings/roles/role-permissions/object-level-permissions/record-level-permissions/components/SettingsRolePermissionsObjectLevelRecordLevelPermissionMeValueSelect.tsx +++ b/packages/twenty-front/src/modules/settings/roles/role-permissions/object-level-permissions/record-level-permissions/components/SettingsRolePermissionsObjectLevelRecordLevelPermissionMeValueSelect.tsx @@ -6,6 +6,7 @@ import { useState } from 'react'; import { compositeTypeDefinitions, FieldMetadataType, + CoreObjectNameSingular, } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; import { IconUserCircle, IconX, useIcons } from 'twenty-ui/display'; @@ -13,7 +14,6 @@ import { MenuItem } from 'twenty-ui/navigation'; import { themeCssVariables } from 'twenty-ui/theme-constants'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { fieldMetadataItemUsedInDropdownComponentSelector } from '@/object-record/object-filter-dropdown/states/fieldMetadataItemUsedInDropdownComponentSelector'; import { getCompositeSubFieldLabel } from '@/object-record/object-filter-dropdown/utils/getCompositeSubFieldLabel'; import { getCompositeSubFieldType } from '@/object-record/object-filter-dropdown/utils/getCompositeSubFieldType'; diff --git a/packages/twenty-front/src/modules/settings/roles/role-permissions/object-level-permissions/record-level-permissions/components/SettingsRolePermissionsObjectLevelRecordLevelPermissionValueInput.tsx b/packages/twenty-front/src/modules/settings/roles/role-permissions/object-level-permissions/record-level-permissions/components/SettingsRolePermissionsObjectLevelRecordLevelPermissionValueInput.tsx index 4f5257134e7..9956202c04f 100644 --- a/packages/twenty-front/src/modules/settings/roles/role-permissions/object-level-permissions/record-level-permissions/components/SettingsRolePermissionsObjectLevelRecordLevelPermissionValueInput.tsx +++ b/packages/twenty-front/src/modules/settings/roles/role-permissions/object-level-permissions/record-level-permissions/components/SettingsRolePermissionsObjectLevelRecordLevelPermissionValueInput.tsx @@ -3,14 +3,13 @@ import { styled } from '@linaria/react'; import { t } from '@lingui/core/macro'; import { useContext, useMemo } from 'react'; -import { FieldMetadataType } from 'twenty-shared/types'; +import { FieldMetadataType, CoreObjectNameSingular } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; import { AppTooltip, IconEraser, TooltipDelay } from 'twenty-ui/display'; import { type JsonValue } from 'type-fest'; import { useFieldMetadataItemById } from '@/object-metadata/hooks/useFieldMetadataItemById'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { formatFieldMetadataItemAsFieldDefinition } from '@/object-metadata/utils/formatFieldMetadataItemAsFieldDefinition'; import { AdvancedFilterContext } from '@/object-record/advanced-filter/states/context/AdvancedFilterContext'; import { useApplyObjectFilterDropdownFilterValue } from '@/object-record/object-filter-dropdown/hooks/useApplyObjectFilterDropdownFilterValue'; diff --git a/packages/twenty-front/src/modules/settings/roles/role-permissions/object-level-permissions/record-level-permissions/hooks/useRecordLevelPermissionFilterActions.ts b/packages/twenty-front/src/modules/settings/roles/role-permissions/object-level-permissions/record-level-permissions/hooks/useRecordLevelPermissionFilterActions.ts index b91b13a620a..b863e0b43db 100644 --- a/packages/twenty-front/src/modules/settings/roles/role-permissions/object-level-permissions/record-level-permissions/hooks/useRecordLevelPermissionFilterActions.ts +++ b/packages/twenty-front/src/modules/settings/roles/role-permissions/object-level-permissions/record-level-permissions/hooks/useRecordLevelPermissionFilterActions.ts @@ -3,12 +3,12 @@ import { FieldMetadataType, RecordFilterGroupLogicalOperator, + CoreObjectNameSingular, } from 'twenty-shared/types'; import { getFilterTypeFromFieldType, isDefined } from 'twenty-shared/utils'; import { v4 } from 'uuid'; import { availableFieldMetadataItemsForFilterFamilySelector } from '@/object-metadata/states/availableFieldMetadataItemsForFilterFamilySelector'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { useChildRecordFiltersAndRecordFilterGroups } from '@/object-record/advanced-filter/hooks/useChildRecordFiltersAndRecordFilterGroups'; import { useGetDefaultFieldMetadataItemForFilter } from '@/object-record/advanced-filter/hooks/useGetDefaultFieldMetadataItemForFilter'; diff --git a/packages/twenty-front/src/modules/settings/workspace-member/components/WorkspaceMemberPictureUploader.tsx b/packages/twenty-front/src/modules/settings/workspace-member/components/WorkspaceMemberPictureUploader.tsx index 2c2a423217d..1ba5fc2fa99 100644 --- a/packages/twenty-front/src/modules/settings/workspace-member/components/WorkspaceMemberPictureUploader.tsx +++ b/packages/twenty-front/src/modules/settings/workspace-member/components/WorkspaceMemberPictureUploader.tsx @@ -3,7 +3,7 @@ import { useState } from 'react'; import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState'; import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; import { useCanEditProfileField } from '@/settings/profile/hooks/useCanEditProfileField'; import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; diff --git a/packages/twenty-front/src/modules/ui/layout/show-page/components/FieldRichTextCard.tsx b/packages/twenty-front/src/modules/ui/layout/show-page/components/FieldRichTextCard.tsx index 01226399aae..308561f38af 100644 --- a/packages/twenty-front/src/modules/ui/layout/show-page/components/FieldRichTextCard.tsx +++ b/packages/twenty-front/src/modules/ui/layout/show-page/components/FieldRichTextCard.tsx @@ -1,5 +1,5 @@ import { SKELETON_LOADER_HEIGHT_SIZES } from '@/activities/components/SkeletonLoader'; -import { type CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { type CoreObjectNameSingular } from 'twenty-shared/types'; import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { useTargetRecord } from '@/ui/layout/contexts/useTargetRecord'; import { ScrollWrapper } from '@/ui/utilities/scroll/components/ScrollWrapper'; diff --git a/packages/twenty-front/src/modules/ui/theme/hooks/useColorScheme.ts b/packages/twenty-front/src/modules/ui/theme/hooks/useColorScheme.ts index 206cf737d72..69795b63a58 100644 --- a/packages/twenty-front/src/modules/ui/theme/hooks/useColorScheme.ts +++ b/packages/twenty-front/src/modules/ui/theme/hooks/useColorScheme.ts @@ -1,7 +1,7 @@ import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState'; import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState'; import { useCallback } from 'react'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; import { persistedColorSchemeState } from '@/ui/theme/states/persistedColorSchemeState'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; diff --git a/packages/twenty-front/src/modules/views/components/__stories__/ViewBarFilterDropdown.stories.tsx b/packages/twenty-front/src/modules/views/components/__stories__/ViewBarFilterDropdown.stories.tsx index de44a290e5b..6ec7621bcf9 100644 --- a/packages/twenty-front/src/modules/views/components/__stories__/ViewBarFilterDropdown.stories.tsx +++ b/packages/twenty-front/src/modules/views/components/__stories__/ViewBarFilterDropdown.stories.tsx @@ -3,7 +3,7 @@ import { useEffect, useMemo, useState } from 'react'; import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState'; import { CoreObjectNamePlural } from '@/object-metadata/types/CoreObjectNamePlural'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { ObjectFilterDropdownComponentInstanceContext } from '@/object-record/object-filter-dropdown/states/contexts/ObjectFilterDropdownComponentInstanceContext'; import { RecordIndexContextProvider } from '@/object-record/record-index/contexts/RecordIndexContext'; import { RecordTableComponentInstanceContext } from '@/object-record/record-table/states/context/RecordTableComponentInstanceContext'; diff --git a/packages/twenty-front/src/modules/workflow/components/OverrideWorkflowDraftConfirmationModal.tsx b/packages/twenty-front/src/modules/workflow/components/OverrideWorkflowDraftConfirmationModal.tsx index 2ccd9b5c9be..c83bc48787f 100644 --- a/packages/twenty-front/src/modules/workflow/components/OverrideWorkflowDraftConfirmationModal.tsx +++ b/packages/twenty-front/src/modules/workflow/components/OverrideWorkflowDraftConfirmationModal.tsx @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular, AppPath } from 'twenty-shared/types'; import { ConfirmationModal, StyledCenteredButton, @@ -7,7 +7,6 @@ import { useModal } from '@/ui/layout/modal/hooks/useModal'; import { OVERRIDE_WORKFLOW_DRAFT_CONFIRMATION_MODAL_ID } from '@/workflow/constants/OverrideWorkflowDraftConfirmationModalId'; import { useCreateDraftFromWorkflowVersion } from '@/workflow/hooks/useCreateDraftFromWorkflowVersion'; import { useLingui } from '@lingui/react/macro'; -import { AppPath } from 'twenty-shared/types'; import { getAppPath } from 'twenty-shared/utils'; import { useNavigateApp } from '~/hooks/useNavigateApp'; diff --git a/packages/twenty-front/src/modules/workflow/hooks/useActivateWorkflowVersion.ts b/packages/twenty-front/src/modules/workflow/hooks/useActivateWorkflowVersion.ts index 355566b6a7a..8507d90abbb 100644 --- a/packages/twenty-front/src/modules/workflow/hooks/useActivateWorkflowVersion.ts +++ b/packages/twenty-front/src/modules/workflow/hooks/useActivateWorkflowVersion.ts @@ -4,7 +4,7 @@ import { triggerUpdateRecordOptimisticEffect } from '@/apollo/optimistic-effect/ import { useApolloCoreClient } from '@/object-metadata/hooks/useApolloCoreClient'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { getRecordFromCache } from '@/object-record/cache/utils/getRecordFromCache'; import { modifyRecordFromCache } from '@/object-record/cache/utils/modifyRecordFromCache'; import { useObjectPermissions } from '@/object-record/hooks/useObjectPermissions'; diff --git a/packages/twenty-front/src/modules/workflow/hooks/useActiveWorkflowVersion.ts b/packages/twenty-front/src/modules/workflow/hooks/useActiveWorkflowVersion.ts index f1df077bd92..b23b4b159a9 100644 --- a/packages/twenty-front/src/modules/workflow/hooks/useActiveWorkflowVersion.ts +++ b/packages/twenty-front/src/modules/workflow/hooks/useActiveWorkflowVersion.ts @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords'; import { type WorkflowVersion } from '@/workflow/types/Workflow'; diff --git a/packages/twenty-front/src/modules/workflow/hooks/useActiveWorkflowVersionsWithManualTrigger.ts b/packages/twenty-front/src/modules/workflow/hooks/useActiveWorkflowVersionsWithManualTrigger.ts index 872376730b1..089468c50be 100644 --- a/packages/twenty-front/src/modules/workflow/hooks/useActiveWorkflowVersionsWithManualTrigger.ts +++ b/packages/twenty-front/src/modules/workflow/hooks/useActiveWorkflowVersionsWithManualTrigger.ts @@ -1,5 +1,5 @@ import { isGlobalManualTrigger } from '@/action-menu/actions/record-actions/utils/isGlobalManualTrigger'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords'; import { diff --git a/packages/twenty-front/src/modules/workflow/hooks/useCreateDraftFromWorkflowVersion.ts b/packages/twenty-front/src/modules/workflow/hooks/useCreateDraftFromWorkflowVersion.ts index accddc4e014..bf7176fd809 100644 --- a/packages/twenty-front/src/modules/workflow/hooks/useCreateDraftFromWorkflowVersion.ts +++ b/packages/twenty-front/src/modules/workflow/hooks/useCreateDraftFromWorkflowVersion.ts @@ -1,5 +1,5 @@ import { useApolloCoreClient } from '@/object-metadata/hooks/useApolloCoreClient'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useFindManyRecordsQuery } from '@/object-record/hooks/useFindManyRecordsQuery'; import { type CreateDraftFromWorkflowVersionInput, diff --git a/packages/twenty-front/src/modules/workflow/hooks/useDeactivateWorkflowVersion.ts b/packages/twenty-front/src/modules/workflow/hooks/useDeactivateWorkflowVersion.ts index f58f11d1848..a839b7edf4c 100644 --- a/packages/twenty-front/src/modules/workflow/hooks/useDeactivateWorkflowVersion.ts +++ b/packages/twenty-front/src/modules/workflow/hooks/useDeactivateWorkflowVersion.ts @@ -4,7 +4,7 @@ import { triggerUpdateRecordOptimisticEffect } from '@/apollo/optimistic-effect/ import { useApolloCoreClient } from '@/object-metadata/hooks/useApolloCoreClient'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { getRecordFromCache } from '@/object-record/cache/utils/getRecordFromCache'; import { modifyRecordFromCache } from '@/object-record/cache/utils/modifyRecordFromCache'; import { useObjectPermissions } from '@/object-record/hooks/useObjectPermissions'; diff --git a/packages/twenty-front/src/modules/workflow/hooks/useDeleteOneWorkflowVersion.ts b/packages/twenty-front/src/modules/workflow/hooks/useDeleteOneWorkflowVersion.ts index efd14b97b99..5e3e2308de6 100644 --- a/packages/twenty-front/src/modules/workflow/hooks/useDeleteOneWorkflowVersion.ts +++ b/packages/twenty-front/src/modules/workflow/hooks/useDeleteOneWorkflowVersion.ts @@ -2,7 +2,7 @@ import { useCallback } from 'react'; import { useApolloCoreClient } from '@/object-metadata/hooks/useApolloCoreClient'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useGetRecordFromCache } from '@/object-record/cache/hooks/useGetRecordFromCache'; import { modifyRecordFromCache } from '@/object-record/cache/utils/modifyRecordFromCache'; import { useDeleteOneRecord } from '@/object-record/hooks/useDeleteOneRecord'; diff --git a/packages/twenty-front/src/modules/workflow/hooks/useDuplicateWorkflow.ts b/packages/twenty-front/src/modules/workflow/hooks/useDuplicateWorkflow.ts index 4b26d23031c..f56dd9b49ae 100644 --- a/packages/twenty-front/src/modules/workflow/hooks/useDuplicateWorkflow.ts +++ b/packages/twenty-front/src/modules/workflow/hooks/useDuplicateWorkflow.ts @@ -1,5 +1,5 @@ import { useApolloCoreClient } from '@/object-metadata/hooks/useApolloCoreClient'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useFindManyRecordsQuery } from '@/object-record/hooks/useFindManyRecordsQuery'; import { useMutation } from '@apollo/client'; import { diff --git a/packages/twenty-front/src/modules/workflow/hooks/useRunWorkflowVersion.tsx b/packages/twenty-front/src/modules/workflow/hooks/useRunWorkflowVersion.tsx index 119ff3fa744..d957fffd02b 100644 --- a/packages/twenty-front/src/modules/workflow/hooks/useRunWorkflowVersion.tsx +++ b/packages/twenty-front/src/modules/workflow/hooks/useRunWorkflowVersion.tsx @@ -4,7 +4,7 @@ import { useOpenRecordInCommandMenu } from '@/command-menu/hooks/useOpenRecordIn import { useApolloCoreClient } from '@/object-metadata/hooks/useApolloCoreClient'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useCreateOneRecordInCache } from '@/object-record/cache/hooks/useCreateOneRecordInCache'; import { useUpsertFindOneRecordQueryInCache } from '@/object-record/cache/hooks/useUpsertFindOneRecordQueryInCache'; import { getObjectTypename } from '@/object-record/cache/utils/getObjectTypename'; diff --git a/packages/twenty-front/src/modules/workflow/hooks/useStopWorkflowRun.ts b/packages/twenty-front/src/modules/workflow/hooks/useStopWorkflowRun.ts index 88fa913dd96..c096d63e54b 100644 --- a/packages/twenty-front/src/modules/workflow/hooks/useStopWorkflowRun.ts +++ b/packages/twenty-front/src/modules/workflow/hooks/useStopWorkflowRun.ts @@ -1,6 +1,6 @@ import { useApolloCoreClient } from '@/object-metadata/hooks/useApolloCoreClient'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { dispatchObjectRecordOperationBrowserEvent } from '@/browser-event/utils/dispatchObjectRecordOperationBrowserEvent'; import { useStopWorkflowRunMutation } from '~/generated/graphql'; diff --git a/packages/twenty-front/src/modules/workflow/hooks/useWorkflowRun.ts b/packages/twenty-front/src/modules/workflow/hooks/useWorkflowRun.ts index cb0424c2d98..a2076328885 100644 --- a/packages/twenty-front/src/modules/workflow/hooks/useWorkflowRun.ts +++ b/packages/twenty-front/src/modules/workflow/hooks/useWorkflowRun.ts @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useFindOneRecord } from '@/object-record/hooks/useFindOneRecord'; import { type WorkflowRun } from '@/workflow/types/Workflow'; import { useMemo } from 'react'; diff --git a/packages/twenty-front/src/modules/workflow/hooks/useWorkflowRunUnsafe.ts b/packages/twenty-front/src/modules/workflow/hooks/useWorkflowRunUnsafe.ts index 03242c628da..36e93db4a70 100644 --- a/packages/twenty-front/src/modules/workflow/hooks/useWorkflowRunUnsafe.ts +++ b/packages/twenty-front/src/modules/workflow/hooks/useWorkflowRunUnsafe.ts @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useFindOneRecord } from '@/object-record/hooks/useFindOneRecord'; import { type WorkflowRun } from '@/workflow/types/Workflow'; diff --git a/packages/twenty-front/src/modules/workflow/hooks/useWorkflowVersion.ts b/packages/twenty-front/src/modules/workflow/hooks/useWorkflowVersion.ts index ff014190603..2e4b803bac3 100644 --- a/packages/twenty-front/src/modules/workflow/hooks/useWorkflowVersion.ts +++ b/packages/twenty-front/src/modules/workflow/hooks/useWorkflowVersion.ts @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useFindOneRecord } from '@/object-record/hooks/useFindOneRecord'; import { type Workflow, type WorkflowVersion } from '@/workflow/types/Workflow'; diff --git a/packages/twenty-front/src/modules/workflow/hooks/useWorkflowWithCurrentVersion.ts b/packages/twenty-front/src/modules/workflow/hooks/useWorkflowWithCurrentVersion.ts index 92792c6625c..5c3397d19a2 100644 --- a/packages/twenty-front/src/modules/workflow/hooks/useWorkflowWithCurrentVersion.ts +++ b/packages/twenty-front/src/modules/workflow/hooks/useWorkflowWithCurrentVersion.ts @@ -1,6 +1,6 @@ import { useEffect } from 'react'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useFindOneRecord } from '@/object-record/hooks/useFindOneRecord'; import { useAtomFamilyStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomFamilyStateValue'; import { useSetAtomFamilyState } from '@/ui/utilities/state/jotai/hooks/useSetAtomFamilyState'; diff --git a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowRunSSESubscribeEffect.tsx b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowRunSSESubscribeEffect.tsx index 33429abbe50..e3a88fa7b49 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowRunSSESubscribeEffect.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowRunSSESubscribeEffect.tsx @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useListenToEventsForQuery } from '@/sse-db-event/hooks/useListenToEventsForQuery'; export const WorkflowRunSSESubscribeEffect = ({ diff --git a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowSSESubscribeEffect.tsx b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowSSESubscribeEffect.tsx index 9bde4125cff..13e48fc304c 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowSSESubscribeEffect.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowSSESubscribeEffect.tsx @@ -1,7 +1,7 @@ import { useCallback } from 'react'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useListenToObjectRecordOperationBrowserEvent } from '@/browser-event/hooks/useListenToObjectRecordOperationBrowserEvent'; import { useListenToEventsForQuery } from '@/sse-db-event/hooks/useListenToEventsForQuery'; import { useSetAtomFamilyState } from '@/ui/utilities/state/jotai/hooks/useSetAtomFamilyState'; diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/filters/components/WorkflowStepFilterValueCompositeInput.tsx b/packages/twenty-front/src/modules/workflow/workflow-steps/filters/components/WorkflowStepFilterValueCompositeInput.tsx index e8ef3b4785d..4d2a1be62f0 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/filters/components/WorkflowStepFilterValueCompositeInput.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/filters/components/WorkflowStepFilterValueCompositeInput.tsx @@ -1,4 +1,3 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { FormCountryMultiSelectInput } from '@/object-record/record-field/ui/form-types/components/FormCountryMultiSelectInput'; import { FormMultiSelectFieldInput } from '@/object-record/record-field/ui/form-types/components/FormMultiSelectFieldInput'; import { FormNumberFieldInput } from '@/object-record/record-field/ui/form-types/components/FormNumberFieldInput'; @@ -12,7 +11,11 @@ import { CURRENCIES } from '@/settings/data-model/constants/Currencies'; import { WorkflowStepFilterContext } from '@/workflow/workflow-steps/filters/states/context/WorkflowStepFilterContext'; import { WorkflowVariablePicker } from '@/workflow/workflow-variables/components/WorkflowVariablePicker'; import { useContext } from 'react'; -import { FieldActorSource, type StepFilter } from 'twenty-shared/types'; +import { + CoreObjectNameSingular, + FieldActorSource, + type StepFilter, +} from 'twenty-shared/types'; import { type SelectOption } from 'twenty-ui/input'; import { type JsonValue } from 'type-fest'; diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useDeleteWorkflowVersionStep.ts b/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useDeleteWorkflowVersionStep.ts index 6f1de3b5271..78dd94b2696 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useDeleteWorkflowVersionStep.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useDeleteWorkflowVersionStep.ts @@ -1,5 +1,5 @@ import { useApolloCoreClient } from '@/object-metadata/hooks/useApolloCoreClient'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useFindOneRecordQuery } from '@/object-record/hooks/useFindOneRecordQuery'; import { DELETE_WORKFLOW_VERSION_STEP } from '@/workflow/graphql/mutations/deleteWorkflowVersionStep'; import { useUpdateWorkflowVersionCache } from '@/workflow/workflow-steps/hooks/useUpdateWorkflowVersionCache'; diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useUpdateWorkflowRunStep.ts b/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useUpdateWorkflowRunStep.ts index 0fe4935bbaa..aa6cd865421 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useUpdateWorkflowRunStep.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useUpdateWorkflowRunStep.ts @@ -1,7 +1,7 @@ import { useApolloCoreClient } from '@/object-metadata/hooks/useApolloCoreClient'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useGetRecordFromCache } from '@/object-record/cache/hooks/useGetRecordFromCache'; import { updateRecordFromCache } from '@/object-record/cache/utils/updateRecordFromCache'; import { useObjectPermissions } from '@/object-record/hooks/useObjectPermissions'; diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useUpdateWorkflowVersionCache.ts b/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useUpdateWorkflowVersionCache.ts index fdff55a98ba..df26b17f68d 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useUpdateWorkflowVersionCache.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useUpdateWorkflowVersionCache.ts @@ -1,7 +1,7 @@ import { useApolloCoreClient } from '@/object-metadata/hooks/useApolloCoreClient'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useGetRecordFromCache } from '@/object-record/cache/hooks/useGetRecordFromCache'; import { updateRecordFromCache } from '@/object-record/cache/utils/updateRecordFromCache'; import { useObjectPermissions } from '@/object-record/hooks/useObjectPermissions'; diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useUpdateWorkflowVersionStep.ts b/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useUpdateWorkflowVersionStep.ts index 5ae3c72a409..510d535da86 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useUpdateWorkflowVersionStep.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useUpdateWorkflowVersionStep.ts @@ -1,7 +1,7 @@ import { useApolloCoreClient } from '@/object-metadata/hooks/useApolloCoreClient'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useGetRecordFromCache } from '@/object-record/cache/hooks/useGetRecordFromCache'; import { updateRecordFromCache } from '@/object-record/cache/utils/updateRecordFromCache'; import { useObjectPermissions } from '@/object-record/hooks/useObjectPermissions'; diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionEmailBase.tsx b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionEmailBase.tsx index 388b39b4ee0..7eac26829a2 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionEmailBase.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionEmailBase.tsx @@ -4,7 +4,11 @@ import { useUploadAttachmentFile } from '@/activities/files/hooks/useUploadAttac import { WorkflowSendEmailAttachments } from '@/advanced-text-editor/components/WorkflowSendEmailAttachments'; import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState'; import { useCommandMenu } from '@/command-menu/hooks/useCommandMenu'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { + CoreObjectNameSingular, + ConnectedAccountProvider, + SettingsPath, +} from 'twenty-shared/types'; import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords'; import { FormAdvancedTextFieldInput } from '@/object-record/record-field/ui/form-types/components/FormAdvancedTextFieldInput'; import { FormMultiTextFieldInput } from '@/object-record/record-field/ui/form-types/components/FormMultiTextFieldInput'; @@ -27,7 +31,6 @@ import { WorkflowVariablePicker } from '@/workflow/workflow-variables/components import { t } from '@lingui/core/macro'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { useEffect, useState } from 'react'; -import { ConnectedAccountProvider, SettingsPath } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; import { type WorkflowEmailAction } from '@/workflow/types/WorkflowEmailAction'; import { Callout, IconPlus } from 'twenty-ui/display'; diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/form-action/hooks/useSubmitFormStep.ts b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/form-action/hooks/useSubmitFormStep.ts index 6ed6347a350..f656568b4dd 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/form-action/hooks/useSubmitFormStep.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/form-action/hooks/useSubmitFormStep.ts @@ -1,5 +1,5 @@ import { useApolloCoreClient } from '@/object-metadata/hooks/useApolloCoreClient'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useFindOneRecordQuery } from '@/object-record/hooks/useFindOneRecordQuery'; import { SUBMIT_FORM_STEP } from '@/workflow/workflow-steps/workflow-actions/form-action/graphql/mutations/submitFormStep'; import { useMutation } from '@apollo/client'; diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/form-action/utils/getDefaultFormFieldSettings.ts b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/form-action/utils/getDefaultFormFieldSettings.ts index ad1c5d54d48..b10fd51d9f7 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/form-action/utils/getDefaultFormFieldSettings.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/form-action/utils/getDefaultFormFieldSettings.ts @@ -1,6 +1,5 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular, FieldMetadataType } from 'twenty-shared/types'; import { type WorkflowFormFieldType } from '@/workflow/workflow-steps/workflow-actions/form-action/types/WorkflowFormFieldType'; -import { FieldMetadataType } from 'twenty-shared/types'; import { assertUnreachable } from 'twenty-shared/utils'; import { v4 } from 'uuid'; diff --git a/packages/twenty-front/src/modules/workflow/workflow-trigger/hooks/useUpdateWorkflowVersionTrigger.ts b/packages/twenty-front/src/modules/workflow/workflow-trigger/hooks/useUpdateWorkflowVersionTrigger.ts index e19c29f51f4..48f98876c97 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-trigger/hooks/useUpdateWorkflowVersionTrigger.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-trigger/hooks/useUpdateWorkflowVersionTrigger.ts @@ -1,4 +1,4 @@ -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; import { useGetUpdatableWorkflowVersionOrThrow } from '@/workflow/hooks/useGetUpdatableWorkflowVersionOrThrow'; import { type WorkflowTrigger } from '@/workflow/types/Workflow'; diff --git a/packages/twenty-front/src/modules/workflow/workflow-version/hooks/useTidyUpWorkflowVersion.ts b/packages/twenty-front/src/modules/workflow/workflow-version/hooks/useTidyUpWorkflowVersion.ts index b7fe79c94b4..87a8296a00a 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-version/hooks/useTidyUpWorkflowVersion.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-version/hooks/useTidyUpWorkflowVersion.ts @@ -10,7 +10,7 @@ import { import { useApolloCoreClient } from '@/object-metadata/hooks/useApolloCoreClient'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useGetRecordFromCache } from '@/object-record/cache/hooks/useGetRecordFromCache'; import { updateRecordFromCache } from '@/object-record/cache/utils/updateRecordFromCache'; import { useObjectPermissions } from '@/object-record/hooks/useObjectPermissions'; diff --git a/packages/twenty-front/src/pages/onboarding/CreateProfile.tsx b/packages/twenty-front/src/pages/onboarding/CreateProfile.tsx index 48fb791f968..6ccbfa78f11 100644 --- a/packages/twenty-front/src/pages/onboarding/CreateProfile.tsx +++ b/packages/twenty-front/src/pages/onboarding/CreateProfile.tsx @@ -11,7 +11,7 @@ import { SubTitle } from '@/auth/components/SubTitle'; import { Title } from '@/auth/components/Title'; import { currentUserState } from '@/auth/states/currentUserState'; import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; import { useSetNextOnboardingStatus } from '@/onboarding/hooks/useSetNextOnboardingStatus'; import { WorkspaceMemberPictureUploader } from '@/settings/workspace-member/components/WorkspaceMemberPictureUploader'; diff --git a/packages/twenty-front/src/pages/settings/accounts/SettingsAccounts.tsx b/packages/twenty-front/src/pages/settings/accounts/SettingsAccounts.tsx index 2ed63ae55eb..4692b2fa7de 100644 --- a/packages/twenty-front/src/pages/settings/accounts/SettingsAccounts.tsx +++ b/packages/twenty-front/src/pages/settings/accounts/SettingsAccounts.tsx @@ -1,6 +1,6 @@ import { type ConnectedAccount } from '@/accounts/types/ConnectedAccount'; import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular, SettingsPath } from 'twenty-shared/types'; import { useGenerateDepthRecordGqlFieldsFromObject } from '@/object-record/graphql/record-gql-fields/hooks/useGenerateDepthRecordGqlFieldsFromObject'; import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords'; import { SettingsAccountLoader } from '@/settings/accounts/components/SettingsAccountLoader'; @@ -11,7 +11,6 @@ import { SettingsPageContainer } from '@/settings/components/SettingsPageContain import { SubMenuTopBarContainer } from '@/ui/layout/page/components/SubMenuTopBarContainer'; import { useLingui } from '@lingui/react/macro'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; -import { SettingsPath } from 'twenty-shared/types'; import { getSettingsPath } from 'twenty-shared/utils'; import { H2Title } from 'twenty-ui/display'; import { Section } from 'twenty-ui/layout'; diff --git a/packages/twenty-front/src/pages/settings/accounts/SettingsAccountsConfiguration.tsx b/packages/twenty-front/src/pages/settings/accounts/SettingsAccountsConfiguration.tsx index 3f7df922193..4ad5f9a9d53 100644 --- a/packages/twenty-front/src/pages/settings/accounts/SettingsAccountsConfiguration.tsx +++ b/packages/twenty-front/src/pages/settings/accounts/SettingsAccountsConfiguration.tsx @@ -5,12 +5,11 @@ import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomStat import { type CalendarChannel } from '@/accounts/types/CalendarChannel'; import { type MessageChannel } from '@/accounts/types/MessageChannel'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular, SettingsPath } from 'twenty-shared/types'; import { useGenerateDepthRecordGqlFieldsFromObject } from '@/object-record/graphql/record-gql-fields/hooks/useGenerateDepthRecordGqlFieldsFromObject'; import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords'; import { settingsAccountsSelectedMessageChannelState } from '@/settings/accounts/states/settingsAccountsSelectedMessageChannelState'; import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; -import { SettingsPath } from 'twenty-shared/types'; import { getSettingsPath, isDefined } from 'twenty-shared/utils'; import { useStartChannelSyncMutation } from '~/generated-metadata/graphql'; import { SettingsAccountsConfigurationStepCalendar } from '~/pages/settings/accounts/SettingsAccountsConfigurationStepCalendar'; diff --git a/packages/twenty-front/src/pages/settings/members/SettingsWorkspaceMember.tsx b/packages/twenty-front/src/pages/settings/members/SettingsWorkspaceMember.tsx index 2589f91e460..dd21c3e828f 100644 --- a/packages/twenty-front/src/pages/settings/members/SettingsWorkspaceMember.tsx +++ b/packages/twenty-front/src/pages/settings/members/SettingsWorkspaceMember.tsx @@ -1,7 +1,7 @@ import { useParams } from 'react-router-dom'; import { useDebouncedCallback } from 'use-debounce'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular, SettingsPath } from 'twenty-shared/types'; import { useFindOneRecord } from '@/object-record/hooks/useFindOneRecord'; import { useImpersonationAuth } from '@/settings/admin-panel/hooks/useImpersonationAuth'; import { SettingsPageContainer } from '@/settings/components/SettingsPageContainer'; @@ -16,7 +16,6 @@ import { activeTabIdComponentState } from '@/ui/layout/tab-list/states/activeTab import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue'; import { t } from '@lingui/core/macro'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; -import { SettingsPath } from 'twenty-shared/types'; import { getSettingsPath } from 'twenty-shared/utils'; import { IconInfoCircle, IconLockOpen } from 'twenty-ui/display'; import { useNavigateSettings } from '~/hooks/useNavigateSettings'; diff --git a/packages/twenty-front/src/pages/settings/members/SettingsWorkspaceMembers.tsx b/packages/twenty-front/src/pages/settings/members/SettingsWorkspaceMembers.tsx index f714001636c..15a8dc46083 100644 --- a/packages/twenty-front/src/pages/settings/members/SettingsWorkspaceMembers.tsx +++ b/packages/twenty-front/src/pages/settings/members/SettingsWorkspaceMembers.tsx @@ -1,15 +1,14 @@ +import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; +import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; import { styled } from '@linaria/react'; import { Trans, useLingui } from '@lingui/react/macro'; import { isNonEmptyArray } from '@sniptt/guards'; import { useContext, useMemo, useState } from 'react'; import { useInView } from 'react-intersection-observer'; -import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; import { useDebounce } from 'use-debounce'; -import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState'; import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords'; import { SettingsPageContainer } from '@/settings/components/SettingsPageContainer'; import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; @@ -21,7 +20,7 @@ import { type WorkspaceMember } from '@/workspace-member/types/WorkspaceMember'; import { WorkspaceInviteLink } from '@/workspace/components/WorkspaceInviteLink'; import { WorkspaceInviteTeam } from '@/workspace/components/WorkspaceInviteTeam'; import { type ApolloError } from '@apollo/client'; -import { SettingsPath } from 'twenty-shared/types'; +import { CoreObjectNameSingular, SettingsPath } from 'twenty-shared/types'; import { generateILikeFiltersForCompositeFields, getSettingsPath, @@ -41,19 +40,19 @@ import { } from 'twenty-ui/display'; import { IconButton } from 'twenty-ui/input'; import { Section } from 'twenty-ui/layout'; -import { ThemeContext } from 'twenty-ui/theme'; -import { themeCssVariables } from 'twenty-ui/theme-constants'; import { useGetWorkspaceInvitationsQuery } from '~/generated-metadata/graphql'; import { SettingsRolesQueryEffect } from '@/settings/roles/components/SettingsRolesQueryEffect'; import { useSettingsAllRoles } from '@/settings/roles/hooks/useSettingsAllRoles'; -import { useNavigateSettings } from '~/hooks/useNavigateSettings'; -import { normalizeSearchText } from '~/utils/normalizeSearchText'; import { TableCell } from '@/ui/layout/table/components/TableCell'; import { TableRow } from '@/ui/layout/table/components/TableRow'; import { useDeleteWorkspaceInvitation } from '@/workspace-invitation/hooks/useDeleteWorkspaceInvitation'; import { useResendWorkspaceInvitation } from '@/workspace-invitation/hooks/useResendWorkspaceInvitation'; import { workspaceInvitationsState } from '@/workspace-invitation/states/workspaceInvitationsStates'; +import { ThemeContext } from 'twenty-ui/theme'; +import { themeCssVariables } from 'twenty-ui/theme-constants'; +import { useNavigateSettings } from '~/hooks/useNavigateSettings'; +import { normalizeSearchText } from '~/utils/normalizeSearchText'; const StyledButtonContainer = styled.div` align-items: center; diff --git a/packages/twenty-front/src/pages/settings/profile/appearance/components/LocalePicker.tsx b/packages/twenty-front/src/pages/settings/profile/appearance/components/LocalePicker.tsx index 5f9d600c976..22fc1736679 100644 --- a/packages/twenty-front/src/pages/settings/profile/appearance/components/LocalePicker.tsx +++ b/packages/twenty-front/src/pages/settings/profile/appearance/components/LocalePicker.tsx @@ -2,7 +2,7 @@ import { styled } from '@linaria/react'; import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState'; import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; import { getDateFnsLocale } from '@/ui/field/display/utils/getDateFnsLocale.util'; import { Select } from '@/ui/input/components/Select'; diff --git a/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/__tests__/__mocks__/comparison-operator-front-component.ts b/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/__tests__/__mocks__/comparison-operator-front-component.ts new file mode 100644 index 00000000000..320baa66a9f --- /dev/null +++ b/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/__tests__/__mocks__/comparison-operator-front-component.ts @@ -0,0 +1,13 @@ +import { defineFrontComponent, numberOfSelectedRecords } from '@/sdk'; + +const MyComponent = () => null; + +export default defineFrontComponent({ + universalIdentifier: 'comparison-operator', + component: MyComponent, + command: { + universalIdentifier: 'comparison-operator-cmd', + label: 'Comparison Operator', + conditionalAvailabilityExpression: numberOfSelectedRecords > 0, + }, +}); diff --git a/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/__tests__/__mocks__/complex-soft-delete-front-component.ts b/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/__tests__/__mocks__/complex-soft-delete-front-component.ts new file mode 100644 index 00000000000..deca422fd4e --- /dev/null +++ b/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/__tests__/__mocks__/complex-soft-delete-front-component.ts @@ -0,0 +1,21 @@ +import { + defineFrontComponent, + numberOfSelectedRecords, + objectPermissions, + selectedRecord, +} from '@/sdk'; + +const MyComponent = () => null; + +export default defineFrontComponent({ + universalIdentifier: 'complex-soft-delete', + component: MyComponent, + command: { + universalIdentifier: 'complex-soft-delete-cmd', + label: 'Complex Soft Delete', + conditionalAvailabilityExpression: + objectPermissions.canSoftDeleteObjectRecords && + !selectedRecord.isRemote && + numberOfSelectedRecords > 0, + }, +}); diff --git a/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/__tests__/__mocks__/custom-function-front-component.ts b/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/__tests__/__mocks__/custom-function-front-component.ts new file mode 100644 index 00000000000..0d0ecd710c2 --- /dev/null +++ b/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/__tests__/__mocks__/custom-function-front-component.ts @@ -0,0 +1,13 @@ +import { defineFrontComponent, isDefined, selectedRecord } from '@/sdk'; + +const MyComponent = () => null; + +export default defineFrontComponent({ + universalIdentifier: 'custom-function', + component: MyComponent, + command: { + universalIdentifier: 'custom-function-cmd', + label: 'Custom Function', + conditionalAvailabilityExpression: isDefined(selectedRecord.deletedAt), + }, +}); diff --git a/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/__tests__/__mocks__/feature-flag-gated-front-component.ts b/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/__tests__/__mocks__/feature-flag-gated-front-component.ts new file mode 100644 index 00000000000..36e16870608 --- /dev/null +++ b/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/__tests__/__mocks__/feature-flag-gated-front-component.ts @@ -0,0 +1,14 @@ +import { defineFrontComponent, featureFlags, objectPermissions } from '@/sdk'; + +const MyComponent = () => null; + +export default defineFrontComponent({ + universalIdentifier: 'feature-flag-gated', + component: MyComponent, + command: { + universalIdentifier: 'feature-flag-gated-cmd', + label: 'Feature Flag Gated', + conditionalAvailabilityExpression: + featureFlags.IS_AI_ENABLED && objectPermissions.canReadObjectRecords, + }, +}); diff --git a/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/__tests__/__mocks__/parenthesized-expression-front-component.ts b/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/__tests__/__mocks__/parenthesized-expression-front-component.ts new file mode 100644 index 00000000000..d171a869761 --- /dev/null +++ b/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/__tests__/__mocks__/parenthesized-expression-front-component.ts @@ -0,0 +1,13 @@ +import { defineFrontComponent, isFavorite, isRemote, isShowPage } from '@/sdk'; + +const MyComponent = () => null; + +export default defineFrontComponent({ + universalIdentifier: 'parenthesized-expression', + component: MyComponent, + command: { + universalIdentifier: 'parenthesized-expression-cmd', + label: 'Parenthesized Expression', + conditionalAvailabilityExpression: (isShowPage || isFavorite) && !isRemote, + }, +}); diff --git a/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/__tests__/__mocks__/permissions-check-front-component.ts b/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/__tests__/__mocks__/permissions-check-front-component.ts new file mode 100644 index 00000000000..6a1ce21c6d5 --- /dev/null +++ b/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/__tests__/__mocks__/permissions-check-front-component.ts @@ -0,0 +1,18 @@ +import { + defineFrontComponent, + isInRightDrawer, + objectPermissions, +} from '@/sdk'; + +const MyComponent = () => null; + +export default defineFrontComponent({ + universalIdentifier: 'permissions-check', + component: MyComponent, + command: { + universalIdentifier: 'permissions-check-cmd', + label: 'Permissions Check', + conditionalAvailabilityExpression: + objectPermissions.canUpdateObjectRecords && !isInRightDrawer, + }, +}); diff --git a/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/__tests__/__mocks__/simple-boolean-front-component.ts b/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/__tests__/__mocks__/simple-boolean-front-component.ts new file mode 100644 index 00000000000..d86e14505ed --- /dev/null +++ b/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/__tests__/__mocks__/simple-boolean-front-component.ts @@ -0,0 +1,13 @@ +import { defineFrontComponent, isShowPage } from '@/sdk'; + +const MyComponent = () => null; + +export default defineFrontComponent({ + universalIdentifier: 'simple-boolean', + component: MyComponent, + command: { + universalIdentifier: 'simple-boolean-cmd', + label: 'Simple Boolean', + conditionalAvailabilityExpression: isShowPage, + }, +}); diff --git a/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/__tests__/__mocks__/string-comparison-front-component.ts b/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/__tests__/__mocks__/string-comparison-front-component.ts new file mode 100644 index 00000000000..67c9a1f0d22 --- /dev/null +++ b/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/__tests__/__mocks__/string-comparison-front-component.ts @@ -0,0 +1,14 @@ +import { defineFrontComponent, isShowPage, selectedRecord } from '@/sdk'; + +const MyComponent = () => null; + +export default defineFrontComponent({ + universalIdentifier: 'string-comparison', + component: MyComponent, + command: { + universalIdentifier: 'string-comparison-cmd', + label: 'String Comparison', + conditionalAvailabilityExpression: + isShowPage && selectedRecord.company.name === 'apple', + }, +}); diff --git a/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/__tests__/__mocks__/target-permissions-front-component.ts b/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/__tests__/__mocks__/target-permissions-front-component.ts new file mode 100644 index 00000000000..8459d9ec395 --- /dev/null +++ b/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/__tests__/__mocks__/target-permissions-front-component.ts @@ -0,0 +1,18 @@ +import { + defineFrontComponent, + isShowPage, + targetObjectWritePermissions, +} from '@/sdk'; + +const MyComponent = () => null; + +export default defineFrontComponent({ + universalIdentifier: 'target-permissions', + component: MyComponent, + command: { + universalIdentifier: 'target-permissions-cmd', + label: 'Target Permissions', + conditionalAvailabilityExpression: + isShowPage && targetObjectWritePermissions.person, + }, +}); diff --git a/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/__tests__/to-expr-eval.test.ts b/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/__tests__/to-expr-eval.test.ts new file mode 100644 index 00000000000..40d7ad517a3 --- /dev/null +++ b/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/__tests__/to-expr-eval.test.ts @@ -0,0 +1,93 @@ +import { toExprEval } from '@/cli/utilities/build/common/conditional-availability/utils/to-expr-eval'; + +describe('toExprEval', () => { + describe('strict equality (===) to loose equality (==)', () => { + it('should convert a single ===', () => { + expect(toExprEval('a === b')).toBe('a == b'); + }); + + it('should convert multiple ===', () => { + expect(toExprEval('a === b === c')).toBe('a == b == c'); + }); + }); + + describe('strict inequality (!==) to loose inequality (!=)', () => { + it('should convert a single !==', () => { + expect(toExprEval('a !== b')).toBe('a != b'); + }); + + it('should convert multiple !==', () => { + expect(toExprEval('a !== 0 !== b')).toBe('a != 0 != b'); + }); + }); + + describe('logical AND (&&) to and', () => { + it('should convert a single &&', () => { + expect(toExprEval('a && b')).toBe('a and b'); + }); + + it('should convert multiple &&', () => { + expect(toExprEval('a && b && c')).toBe('a and b and c'); + }); + }); + + describe('logical OR (||) to or', () => { + it('should convert a single ||', () => { + expect(toExprEval('a || b')).toBe('a or b'); + }); + + it('should convert multiple ||', () => { + expect(toExprEval('a || b || c')).toBe('a or b or c'); + }); + }); + + describe('logical NOT (!) to not', () => { + it('should convert a prefix !', () => { + expect(toExprEval('!a')).toBe('not a'); + }); + + it('should convert multiple prefix !', () => { + expect(toExprEval('!a && !b')).toBe('not a and not b'); + }); + + it('should not convert ! that is part of !==', () => { + expect(toExprEval('a !== b')).toBe('a != b'); + }); + + it('should not convert ! that is part of !=', () => { + expect(toExprEval('a != b')).toBe('a != b'); + }); + }); + + describe('combined operators', () => { + it('should convert a complex expression with all operators', () => { + expect(toExprEval('a && !b || c === 1 && d !== 0')).toBe( + 'a and not b or c == 1 and d != 0', + ); + }); + + it('should handle parenthesized expressions', () => { + expect(toExprEval('(a || b) && !c')).toBe('(a or b) and not c'); + }); + + it('should handle nested property access', () => { + expect(toExprEval('obj.prop === true && !obj.other')).toBe( + 'obj.prop == true and not obj.other', + ); + }); + }); + + describe('edge cases', () => { + it('should return an empty string unchanged', () => { + expect(toExprEval('')).toBe(''); + }); + + it('should return a plain identifier unchanged', () => { + expect(toExprEval('isShowPage')).toBe('isShowPage'); + }); + + it('should leave numeric comparisons intact', () => { + expect(toExprEval('count > 0')).toBe('count > 0'); + }); + }); +}); diff --git a/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/__tests__/transform-conditional-availability-expressions.test.ts b/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/__tests__/transform-conditional-availability-expressions.test.ts new file mode 100644 index 00000000000..755a06e566e --- /dev/null +++ b/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/__tests__/transform-conditional-availability-expressions.test.ts @@ -0,0 +1,480 @@ +import * as fs from 'fs'; +import * as path from 'path'; + +import { transformConditionalAvailabilityExpressionsForEsBuildPlugin } from '@/cli/utilities/build/common/conditional-availability/utils/transform-conditional-availability-expressions'; +import { type CommandMenuContextApi } from 'twenty-shared/types'; +import { evaluateConditionalAvailabilityExpression } from 'twenty-shared/utils'; + +const MOCKS_DIR = path.join(__dirname, '__mocks__'); + +const readMock = (filename: string): string => + fs.readFileSync(path.join(MOCKS_DIR, filename), 'utf8'); + +const buildMockCommandMenuContextApi = ( + overrides: Partial = {}, +): CommandMenuContextApi => ({ + isShowPage: false, + isInRightDrawer: false, + isFavorite: false, + isRemote: false, + isNoteOrTask: false, + isSelectAll: false, + hasAnySoftDeleteFilterOnView: false, + numberOfSelectedRecords: 0, + objectPermissions: { + objectMetadataId: 'test-metadata-id', + canReadObjectRecords: true, + canUpdateObjectRecords: true, + canSoftDeleteObjectRecords: true, + canDestroyObjectRecords: false, + restrictedFields: {}, + rowLevelPermissionPredicates: [], + rowLevelPermissionPredicateGroups: [], + }, + selectedRecord: undefined, + featureFlags: {}, + targetObjectReadPermissions: {}, + targetObjectWritePermissions: {}, + ...overrides, +}); + +const CONDITIONAL_AVAILABILITY_EXPRESSION_REGEX = + /conditionalAvailabilityExpression\s*:\s*("(?:[^"\\]|\\.)*")/; + +const extractConditionalAvailabilityExpressionFromTransformedSource = ( + transformedSource: string, +): string | undefined => { + const match = transformedSource.match( + CONDITIONAL_AVAILABILITY_EXPRESSION_REGEX, + ); + + if (!match?.[1]) { + return undefined; + } + + return JSON.parse(match[1]) as string; +}; + +const transformMockAndEvaluate = ( + filename: string, + context: CommandMenuContextApi, +): boolean => { + const source = readMock(filename); + + const transformedSourceForEsBuildPlugin = + transformConditionalAvailabilityExpressionsForEsBuildPlugin(source); + + const conditionalAvailabilityExpression = + extractConditionalAvailabilityExpressionFromTransformedSource( + transformedSourceForEsBuildPlugin, + ); + + return evaluateConditionalAvailabilityExpression( + conditionalAvailabilityExpression, + context, + ); +}; + +describe('transformConditionalAvailabilityExpressionsForEsBuildPlugin', () => { + describe('transform correctness', () => { + it('should convert && to and', () => { + const source = '{ conditionalAvailabilityExpression: a && b }'; + const result = + transformConditionalAvailabilityExpressionsForEsBuildPlugin(source); + + expect(result).toBe('{ conditionalAvailabilityExpression: "a and b"}'); + }); + + it('should convert || to or', () => { + const source = '{ conditionalAvailabilityExpression: a || b }'; + const result = + transformConditionalAvailabilityExpressionsForEsBuildPlugin(source); + + expect(result).toBe('{ conditionalAvailabilityExpression: "a or b"}'); + }); + + it('should convert ! to not', () => { + const source = '{ conditionalAvailabilityExpression: !a }'; + const result = + transformConditionalAvailabilityExpressionsForEsBuildPlugin(source); + + expect(result).toBe('{ conditionalAvailabilityExpression: "not a"}'); + }); + + it('should convert === to ==', () => { + const source = '{ conditionalAvailabilityExpression: a === 1 }'; + const result = + transformConditionalAvailabilityExpressionsForEsBuildPlugin(source); + + expect(result).toBe('{ conditionalAvailabilityExpression: "a == 1"}'); + }); + + it('should convert !== to !=', () => { + const source = '{ conditionalAvailabilityExpression: a !== 0 }'; + const result = + transformConditionalAvailabilityExpressionsForEsBuildPlugin(source); + + expect(result).toBe('{ conditionalAvailabilityExpression: "a != 0"}'); + }); + + it('should convert all operators in a complex expression', () => { + const source = + '{ conditionalAvailabilityExpression: a && !b || c === 1 && d !== 0 }'; + const result = + transformConditionalAvailabilityExpressionsForEsBuildPlugin(source); + + expect(result).toBe( + '{ conditionalAvailabilityExpression: "a and not b or c == 1 and d != 0"}', + ); + }); + }); + + describe('regex edge cases', () => { + it('should skip already-quoted string expressions without leading space', () => { + const source = '{ conditionalAvailabilityExpression:"already quoted" }'; + const transformed = + transformConditionalAvailabilityExpressionsForEsBuildPlugin(source); + + expect(transformed).toBe(source); + }); + + it('should skip single-quoted string expressions without leading space', () => { + const source = "{ conditionalAvailabilityExpression:'already quoted' }"; + const transformed = + transformConditionalAvailabilityExpressionsForEsBuildPlugin(source); + + expect(transformed).toBe(source); + }); + + it('should skip template literal expressions without leading space', () => { + const source = '{ conditionalAvailabilityExpression:`already quoted` }'; + const transformed = + transformConditionalAvailabilityExpressionsForEsBuildPlugin(source); + + expect(transformed).toBe(source); + }); + + it('should handle multiple expressions in one source', () => { + const source = [ + 'const a = { conditionalAvailabilityExpression: isShowPage };', + 'const b = { conditionalAvailabilityExpression: isFavorite && !isRemote };', + ].join('\n'); + const transformed = + transformConditionalAvailabilityExpressionsForEsBuildPlugin(source); + + expect(transformed).toContain( + 'conditionalAvailabilityExpression: "isShowPage"', + ); + expect(transformed).toContain( + 'conditionalAvailabilityExpression: "isFavorite and not isRemote"', + ); + }); + + it('should handle extra spaces around colon', () => { + const source = + '{ conditionalAvailabilityExpression : isShowPage && isFavorite }'; + const transformed = + transformConditionalAvailabilityExpressionsForEsBuildPlugin(source); + + expect(transformed).toContain('"isShowPage and isFavorite"'); + }); + }); + + describe('e2e: mock file -> transform -> evaluate', () => { + describe('simple-boolean-front-component', () => { + it('should evaluate isShowPage when true', () => { + const context = buildMockCommandMenuContextApi({ + isShowPage: true, + }); + + expect( + transformMockAndEvaluate( + 'simple-boolean-front-component.ts', + context, + ), + ).toBe(true); + }); + + it('should evaluate isShowPage when false', () => { + const context = buildMockCommandMenuContextApi({ + isShowPage: false, + }); + + expect( + transformMockAndEvaluate( + 'simple-boolean-front-component.ts', + context, + ), + ).toBe(false); + }); + }); + + describe('permissions-check-front-component', () => { + it('should allow when has permission and not in right drawer', () => { + const context = buildMockCommandMenuContextApi({ + isInRightDrawer: false, + }); + + expect( + transformMockAndEvaluate( + 'permissions-check-front-component.ts', + context, + ), + ).toBe(true); + }); + + it('should deny when in right drawer', () => { + const context = buildMockCommandMenuContextApi({ + isInRightDrawer: true, + }); + + expect( + transformMockAndEvaluate( + 'permissions-check-front-component.ts', + context, + ), + ).toBe(false); + }); + }); + + describe('comparison-operator-front-component', () => { + it('should allow when records are selected', () => { + const context = buildMockCommandMenuContextApi({ + numberOfSelectedRecords: 3, + }); + + expect( + transformMockAndEvaluate( + 'comparison-operator-front-component.ts', + context, + ), + ).toBe(true); + }); + + it('should deny when no records are selected', () => { + const context = buildMockCommandMenuContextApi({ + numberOfSelectedRecords: 0, + }); + + expect( + transformMockAndEvaluate( + 'comparison-operator-front-component.ts', + context, + ), + ).toBe(false); + }); + }); + + describe('feature-flag-gated-front-component', () => { + it('should allow when feature flag is enabled', () => { + const context = buildMockCommandMenuContextApi({ + featureFlags: { IS_AI_ENABLED: true }, + }); + + expect( + transformMockAndEvaluate( + 'feature-flag-gated-front-component.ts', + context, + ), + ).toBe(true); + }); + + it('should deny when feature flag is disabled', () => { + const context = buildMockCommandMenuContextApi({ + featureFlags: { IS_AI_ENABLED: false }, + }); + + expect( + transformMockAndEvaluate( + 'feature-flag-gated-front-component.ts', + context, + ), + ).toBe(false); + }); + }); + + describe('complex-soft-delete-front-component', () => { + it('should allow soft delete for local record with selection', () => { + const context = buildMockCommandMenuContextApi({ + numberOfSelectedRecords: 2, + selectedRecord: { + id: 'rec-1', + createdAt: '2024-01-01', + updatedAt: '2024-01-01', + deletedAt: null, + isRemote: false, + }, + }); + + expect( + transformMockAndEvaluate( + 'complex-soft-delete-front-component.ts', + context, + ), + ).toBe(true); + }); + + it('should deny soft delete when record is remote', () => { + const context = buildMockCommandMenuContextApi({ + numberOfSelectedRecords: 1, + selectedRecord: { + id: 'rec-1', + createdAt: '2024-01-01', + updatedAt: '2024-01-01', + deletedAt: null, + isRemote: true, + }, + }); + + expect( + transformMockAndEvaluate( + 'complex-soft-delete-front-component.ts', + context, + ), + ).toBe(false); + }); + }); + + describe('parenthesized-expression-front-component', () => { + it('should allow when favorite and not remote', () => { + const context = buildMockCommandMenuContextApi({ + isShowPage: false, + isFavorite: true, + isRemote: false, + }); + + expect( + transformMockAndEvaluate( + 'parenthesized-expression-front-component.ts', + context, + ), + ).toBe(true); + }); + + it('should deny when remote even if show page', () => { + const context = buildMockCommandMenuContextApi({ + isShowPage: true, + isFavorite: false, + isRemote: true, + }); + + expect( + transformMockAndEvaluate( + 'parenthesized-expression-front-component.ts', + context, + ), + ).toBe(false); + }); + }); + + describe('custom-function-front-component', () => { + it('should return false when deletedAt is null', () => { + const context = buildMockCommandMenuContextApi({ + selectedRecord: { + id: 'rec-1', + createdAt: '2024-01-01', + updatedAt: '2024-01-01', + deletedAt: null, + }, + }); + + expect( + transformMockAndEvaluate( + 'custom-function-front-component.ts', + context, + ), + ).toBe(false); + }); + + it('should return true when deletedAt is set', () => { + const context = buildMockCommandMenuContextApi({ + selectedRecord: { + id: 'rec-1', + createdAt: '2024-01-01', + updatedAt: '2024-01-01', + deletedAt: '2024-06-01', + }, + }); + + expect( + transformMockAndEvaluate( + 'custom-function-front-component.ts', + context, + ), + ).toBe(true); + }); + }); + + describe('string-comparison-front-component', () => { + it('should match when on show page and company name matches', () => { + const context = buildMockCommandMenuContextApi({ + isShowPage: true, + selectedRecord: { + id: 'rec-1', + createdAt: '2024-01-01', + updatedAt: '2024-01-01', + deletedAt: null, + company: { name: 'apple' }, + }, + }); + + expect( + transformMockAndEvaluate( + 'string-comparison-front-component.ts', + context, + ), + ).toBe(true); + }); + + it('should not match when company name differs', () => { + const context = buildMockCommandMenuContextApi({ + isShowPage: true, + selectedRecord: { + id: 'rec-1', + createdAt: '2024-01-01', + updatedAt: '2024-01-01', + deletedAt: null, + company: { name: 'google' }, + }, + }); + + expect( + transformMockAndEvaluate( + 'string-comparison-front-component.ts', + context, + ), + ).toBe(false); + }); + }); + + describe('target-permissions-front-component', () => { + it('should allow when on show page with write permission', () => { + const context = buildMockCommandMenuContextApi({ + isShowPage: true, + targetObjectWritePermissions: { person: true }, + }); + + expect( + transformMockAndEvaluate( + 'target-permissions-front-component.ts', + context, + ), + ).toBe(true); + }); + + it('should deny when not on show page', () => { + const context = buildMockCommandMenuContextApi({ + isShowPage: false, + targetObjectWritePermissions: { person: true }, + }); + + expect( + transformMockAndEvaluate( + 'target-permissions-front-component.ts', + context, + ), + ).toBe(false); + }); + }); + }); +}); diff --git a/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/conditional-availability-transform-plugin.ts b/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/conditional-availability-transform-plugin.ts new file mode 100644 index 00000000000..76d892f4c4b --- /dev/null +++ b/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/conditional-availability-transform-plugin.ts @@ -0,0 +1,29 @@ +import type * as esbuild from 'esbuild'; +import * as fs from 'fs/promises'; + +import { transformConditionalAvailabilityExpressionsForEsBuildPlugin } from './utils/transform-conditional-availability-expressions'; + +export const conditionalAvailabilityTransformPlugin: esbuild.Plugin = { + name: 'conditional-availability-transform', + setup: (build) => { + build.onLoad({ filter: /\.tsx?$/ }, async (args) => { + const source = await fs.readFile(args.path, 'utf8'); + + if (!source.includes('conditionalAvailabilityExpression')) { + return null; + } + + const transformedSource = + transformConditionalAvailabilityExpressionsForEsBuildPlugin(source); + + if (transformedSource === source) { + return null; + } + + return { + contents: transformedSource, + loader: args.path.endsWith('.tsx') ? 'tsx' : 'ts', + }; + }); + }, +}; diff --git a/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/utils/to-expr-eval.ts b/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/utils/to-expr-eval.ts new file mode 100644 index 00000000000..4682d06a4df --- /dev/null +++ b/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/utils/to-expr-eval.ts @@ -0,0 +1,7 @@ +export const toExprEval = (raw: string): string => + raw + .replace(/!==/g, '!=') + .replace(/===/g, '==') + .replace(/&&/g, 'and') + .replace(/\|\|/g, 'or') + .replace(/!(?!=)/g, 'not '); diff --git a/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/utils/transform-conditional-availability-expressions.ts b/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/utils/transform-conditional-availability-expressions.ts new file mode 100644 index 00000000000..ae514d3e935 --- /dev/null +++ b/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/utils/transform-conditional-availability-expressions.ts @@ -0,0 +1,13 @@ +import { toExprEval } from './to-expr-eval'; + +const CONDITIONAL_AVAILABILITY_EXPRESSION_PATTERN = + /(conditionalAvailabilityExpression\s*:\s*)(?!['"`])([^,}]+)/g; + +export const transformConditionalAvailabilityExpressionsForEsBuildPlugin = ( + source: string, +): string => + source.replace( + CONDITIONAL_AVAILABILITY_EXPRESSION_PATTERN, + (_, prefix: string, rawExpression: string) => + prefix + JSON.stringify(toExprEval(rawExpression.trim())), + ); diff --git a/packages/twenty-sdk/src/cli/utilities/build/manifest/manifest-build.ts b/packages/twenty-sdk/src/cli/utilities/build/manifest/manifest-build.ts index 16b79bae551..6080d051783 100644 --- a/packages/twenty-sdk/src/cli/utilities/build/manifest/manifest-build.ts +++ b/packages/twenty-sdk/src/cli/utilities/build/manifest/manifest-build.ts @@ -6,6 +6,7 @@ import { TargetFunction, } from '@/cli/utilities/build/manifest/manifest-extract-config'; import { extractManifestFromFile } from '@/cli/utilities/build/manifest/manifest-extract-config-from-file'; +import { getDefaultFieldsInObjectFields } from '@/cli/utilities/build/manifest/utils/get-default-fields-in-object-fields'; import { type ApplicationConfig, type FrontComponentConfig, @@ -22,6 +23,7 @@ import { type AssetManifest, ASSETS_DIR, type FieldManifest, + type FrontComponentCommandManifest, type FrontComponentManifest, type LogicFunctionManifest, type Manifest, @@ -34,7 +36,6 @@ import { } from 'twenty-shared/application'; import { getInputSchemaFromSourceCode } from 'twenty-shared/logic-function'; import { assertUnreachable } from 'twenty-shared/utils'; -import { getDefaultFieldsInObjectFields } from '@/cli/utilities/build/manifest/utils/get-default-fields-in-object-fields'; const loadSources = async (appPath: string): Promise => { return await glob(['**/*.ts', '**/*.tsx'], { @@ -237,7 +238,7 @@ export const buildManifest = async ( errors.push(...extract.errors); - const { component, ...rest } = extract.config; + const { component, command, ...rest } = extract.config; const relativeFilePath = relative(appPath, filePath); @@ -248,6 +249,8 @@ export const buildManifest = async ( builtComponentPath: relativeFilePath.replace(/\.tsx?$/, '.mjs'), builtComponentChecksum: '', isHeadless: rest.isHeadless ?? false, + // transformed by conditionalAvailabilityTransformPlugin + command: command as FrontComponentCommandManifest, }; frontComponents.push(config); diff --git a/packages/twenty-sdk/src/cli/utilities/build/manifest/manifest-extract-config-from-file.ts b/packages/twenty-sdk/src/cli/utilities/build/manifest/manifest-extract-config-from-file.ts index cc997cad69c..7a3aba3fa8f 100644 --- a/packages/twenty-sdk/src/cli/utilities/build/manifest/manifest-extract-config-from-file.ts +++ b/packages/twenty-sdk/src/cli/utilities/build/manifest/manifest-extract-config-from-file.ts @@ -1,3 +1,4 @@ +import { conditionalAvailabilityTransformPlugin } from '@/cli/utilities/build/common/conditional-availability/conditional-availability-transform-plugin'; import { type ValidationResult } from '@/sdk'; import * as esbuild from 'esbuild'; import * as fs from 'fs-extra'; @@ -74,7 +75,7 @@ const loadModule = async ({ ...(reactPath && { react: reactPath }), ...(reactDomPath && { 'react-dom': reactDomPath }), }, - plugins: [manifestMockPlugin], + plugins: [conditionalAvailabilityTransformPlugin, manifestMockPlugin], logLevel: 'silent', }); diff --git a/packages/twenty-sdk/src/sdk/front-component-api/conditional-availability/conditional-availability-variables.ts b/packages/twenty-sdk/src/sdk/front-component-api/conditional-availability/conditional-availability-variables.ts new file mode 100644 index 00000000000..cf20ac74bd1 --- /dev/null +++ b/packages/twenty-sdk/src/sdk/front-component-api/conditional-availability/conditional-availability-variables.ts @@ -0,0 +1,31 @@ +import { type CommandMenuContextApi } from 'twenty-shared/types'; + +export const isShowPage = + null as unknown as CommandMenuContextApi['isShowPage']; +export const isInRightDrawer = + null as unknown as CommandMenuContextApi['isInRightDrawer']; +export const isFavorite = + null as unknown as CommandMenuContextApi['isFavorite']; +export const isRemote = null as unknown as CommandMenuContextApi['isRemote']; +export const isNoteOrTask = + null as unknown as CommandMenuContextApi['isNoteOrTask']; +export const isSelectAll = + null as unknown as CommandMenuContextApi['isSelectAll']; +export const hasAnySoftDeleteFilterOnView = + null as unknown as CommandMenuContextApi['hasAnySoftDeleteFilterOnView']; +export const numberOfSelectedRecords = + null as unknown as CommandMenuContextApi['numberOfSelectedRecords']; +export const objectPermissions = + null as unknown as CommandMenuContextApi['objectPermissions']; +export const selectedRecord = null as unknown as NonNullable< + CommandMenuContextApi['selectedRecord'] +>; +export const featureFlags = + null as unknown as CommandMenuContextApi['featureFlags']; +export const targetObjectReadPermissions = + null as unknown as CommandMenuContextApi['targetObjectReadPermissions']; +export const targetObjectWritePermissions = + null as unknown as CommandMenuContextApi['targetObjectWritePermissions']; + +export const isDefined = null as unknown as (value: unknown) => boolean; +export const isNonEmptyString = null as unknown as (value: unknown) => boolean; diff --git a/packages/twenty-sdk/src/sdk/front-component-api/index.ts b/packages/twenty-sdk/src/sdk/front-component-api/index.ts index 56a40f48158..85ac1a4057b 100644 --- a/packages/twenty-sdk/src/sdk/front-component-api/index.ts +++ b/packages/twenty-sdk/src/sdk/front-component-api/index.ts @@ -1,3 +1,20 @@ +export { + isShowPage, + isInRightDrawer, + isFavorite, + isRemote, + isNoteOrTask, + isSelectAll, + hasAnySoftDeleteFilterOnView, + numberOfSelectedRecords, + objectPermissions, + selectedRecord, + featureFlags, + targetObjectReadPermissions, + targetObjectWritePermissions, + isDefined, + isNonEmptyString, +} from './conditional-availability/conditional-availability-variables'; export { setFrontComponentExecutionContext } from './context/frontComponentContext'; export { closeSidePanel } from './functions/closeSidePanel'; export { enqueueSnackbar } from './functions/enqueueSnackbar'; diff --git a/packages/twenty-sdk/src/sdk/front-component-config.ts b/packages/twenty-sdk/src/sdk/front-component-config.ts index efd79e8a563..38d9dc193ae 100644 --- a/packages/twenty-sdk/src/sdk/front-component-config.ts +++ b/packages/twenty-sdk/src/sdk/front-component-config.ts @@ -5,7 +5,12 @@ import { export type FrontComponentType = React.ComponentType; -export type FrontComponentCommandConfig = FrontComponentCommandManifest; +export type FrontComponentCommandConfig = Omit< + FrontComponentCommandManifest, + 'conditionalAvailabilityExpression' +> & { + conditionalAvailabilityExpression?: boolean | string; +}; export type FrontComponentConfig = Omit< FrontComponentManifest, @@ -13,6 +18,8 @@ export type FrontComponentConfig = Omit< | 'builtComponentPath' | 'builtComponentChecksum' | 'componentName' + | 'command' > & { component: FrontComponentType; + command?: FrontComponentCommandConfig; }; diff --git a/packages/twenty-sdk/src/sdk/index.ts b/packages/twenty-sdk/src/sdk/index.ts index 3d3d45c0eb5..74da39b46bd 100644 --- a/packages/twenty-sdk/src/sdk/index.ts +++ b/packages/twenty-sdk/src/sdk/index.ts @@ -80,6 +80,25 @@ export type { ActionProps, } from './action'; +// Conditional availability typed variables for command menu items +export { + isShowPage, + isInRightDrawer, + isFavorite, + isRemote, + isNoteOrTask, + isSelectAll, + hasAnySoftDeleteFilterOnView, + numberOfSelectedRecords, + objectPermissions, + selectedRecord, + featureFlags, + targetObjectReadPermissions, + targetObjectWritePermissions, + isDefined, + isNonEmptyString, +} from './front-component-api'; + // Front Component API exports export { closeSidePanel, diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-17/1-17-migrate-attachment-to-morph-relations.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-17/1-17-migrate-attachment-to-morph-relations.command.ts index b0871144165..e0c8dfb9de1 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-17/1-17-migrate-attachment-to-morph-relations.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-17/1-17-migrate-attachment-to-morph-relations.command.ts @@ -3,6 +3,7 @@ import { InjectDataSource, InjectRepository } from '@nestjs/typeorm'; import { Command } from 'nest-commander'; import { STANDARD_OBJECTS } from 'twenty-shared/metadata'; import { + FeatureFlagKey, FieldMetadataType, type FieldMetadataSettings, } from 'twenty-shared/types'; @@ -13,7 +14,6 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/ import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { getFlatFieldsFromFlatObjectMetadata } from 'src/engine/api/graphql/workspace-schema-builder/utils/get-flat-fields-for-flat-object-metadata.util'; import { type FlatApplicationCacheMaps } from 'src/engine/core-modules/application/types/flat-application-cache-maps.type'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-17/1-17-migrate-date-time-is-filter-values.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-17/1-17-migrate-date-time-is-filter-values.command.ts index 4c63a9d098e..f4b1748f465 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-17/1-17-migrate-date-time-is-filter-values.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-17/1-17-migrate-date-time-is-filter-values.command.ts @@ -2,12 +2,15 @@ import { Logger } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Command } from 'nest-commander'; -import { FieldMetadataType, ViewFilterOperand } from 'twenty-shared/types'; +import { + FieldMetadataType, + ViewFilterOperand, + FeatureFlagKey, +} from 'twenty-shared/types'; import { Repository } from 'typeorm'; import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; import { type RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-17/1-17-migrate-note-target-to-morph-relations.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-17/1-17-migrate-note-target-to-morph-relations.command.ts index 62461a65320..1be212083ad 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-17/1-17-migrate-note-target-to-morph-relations.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-17/1-17-migrate-note-target-to-morph-relations.command.ts @@ -3,6 +3,7 @@ import { InjectDataSource, InjectRepository } from '@nestjs/typeorm'; import { Command } from 'nest-commander'; import { STANDARD_OBJECTS } from 'twenty-shared/metadata'; import { + FeatureFlagKey, FieldMetadataType, type FieldMetadataSettings, } from 'twenty-shared/types'; @@ -13,7 +14,6 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/ import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { getFlatFieldsFromFlatObjectMetadata } from 'src/engine/api/graphql/workspace-schema-builder/utils/get-flat-fields-for-flat-object-metadata.util'; import { type FlatApplicationCacheMaps } from 'src/engine/core-modules/application/types/flat-application-cache-maps.type'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-17/1-17-migrate-task-target-to-morph-relations.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-17/1-17-migrate-task-target-to-morph-relations.command.ts index 54f19d98aaa..abdcb0bdb83 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-17/1-17-migrate-task-target-to-morph-relations.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-17/1-17-migrate-task-target-to-morph-relations.command.ts @@ -3,6 +3,7 @@ import { InjectDataSource, InjectRepository } from '@nestjs/typeorm'; import { Command } from 'nest-commander'; import { STANDARD_OBJECTS } from 'twenty-shared/metadata'; import { + FeatureFlagKey, FieldMetadataType, type FieldMetadataSettings, } from 'twenty-shared/types'; @@ -13,7 +14,6 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/ import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { getFlatFieldsFromFlatObjectMetadata } from 'src/engine/api/graphql/workspace-schema-builder/utils/get-flat-fields-for-flat-object-metadata.util'; import { type FlatApplicationCacheMaps } from 'src/engine/core-modules/application/types/flat-application-cache-maps.type'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-18/1-18-migrate-activity-rich-text-attachment-file-ids.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-18/1-18-migrate-activity-rich-text-attachment-file-ids.command.ts index 4391c9abbde..77d1a7496f0 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-18/1-18-migrate-activity-rich-text-attachment-file-ids.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-18/1-18-migrate-activity-rich-text-attachment-file-ids.command.ts @@ -3,7 +3,7 @@ import { InjectDataSource, InjectRepository } from '@nestjs/typeorm'; import { isNonEmptyString } from '@sniptt/guards'; import { Command } from 'nest-commander'; import { STANDARD_OBJECTS } from 'twenty-shared/metadata'; -import { FileFolder } from 'twenty-shared/types'; +import { FileFolder, FeatureFlagKey } from 'twenty-shared/types'; import { extractFolderPathFilenameAndTypeOrThrow, isDefined, @@ -14,7 +14,6 @@ import { v4 } from 'uuid'; import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { ApplicationService } from 'src/engine/core-modules/application/services/application.service'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { FileStorageService } from 'src/engine/core-modules/file-storage/file-storage.service'; import { FileEntity } from 'src/engine/core-modules/file/entities/file.entity'; diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-18/1-18-migrate-attachment-files.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-18/1-18-migrate-attachment-files.command.ts index 3e4e562acbe..757a4a7c3a3 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-18/1-18-migrate-attachment-files.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-18/1-18-migrate-attachment-files.command.ts @@ -3,7 +3,11 @@ import { InjectDataSource, InjectRepository } from '@nestjs/typeorm'; import { isNonEmptyString } from '@sniptt/guards'; import { Command } from 'nest-commander'; import { STANDARD_OBJECTS } from 'twenty-shared/metadata'; -import { FieldMetadataType, FileFolder } from 'twenty-shared/types'; +import { + FieldMetadataType, + FileFolder, + FeatureFlagKey, +} from 'twenty-shared/types'; import { extractFolderPathFilenameAndTypeOrThrow, isDefined, @@ -15,7 +19,6 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/ import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { getFlatFieldsFromFlatObjectMetadata } from 'src/engine/api/graphql/workspace-schema-builder/utils/get-flat-fields-for-flat-object-metadata.util'; import { ApplicationService } from 'src/engine/core-modules/application/services/application.service'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { FileStorageService } from 'src/engine/core-modules/file-storage/file-storage.service'; import { FileEntity } from 'src/engine/core-modules/file/entities/file.entity'; diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-18/1-18-migrate-favorites-to-navigation-menu-items.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-18/1-18-migrate-favorites-to-navigation-menu-items.command.ts index 1e81ab9589f..de2cbaaa085 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-18/1-18-migrate-favorites-to-navigation-menu-items.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-18/1-18-migrate-favorites-to-navigation-menu-items.command.ts @@ -3,7 +3,7 @@ import { InjectRepository } from '@nestjs/typeorm'; import { Command } from 'nest-commander'; import { STANDARD_OBJECTS } from 'twenty-shared/metadata'; -import { FieldMetadataType } from 'twenty-shared/types'; +import { FieldMetadataType, FeatureFlagKey } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; import { In, IsNull, Not, Or, Repository } from 'typeorm'; import { v4 as uuidv4 } from 'uuid'; @@ -11,7 +11,6 @@ import { v4 as uuidv4 } from 'uuid'; import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { ApplicationService } from 'src/engine/core-modules/application/services/application.service'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { UserWorkspaceService } from 'src/engine/core-modules/user-workspace/user-workspace.service'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-18/1-18-migrate-person-avatar-files.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-18/1-18-migrate-person-avatar-files.command.ts index a395eb97a8c..8c51b89646c 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-18/1-18-migrate-person-avatar-files.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-18/1-18-migrate-person-avatar-files.command.ts @@ -3,7 +3,11 @@ import { InjectDataSource, InjectRepository } from '@nestjs/typeorm'; import { isNonEmptyString } from '@sniptt/guards'; import { Command } from 'nest-commander'; import { STANDARD_OBJECTS } from 'twenty-shared/metadata'; -import { FieldMetadataType, FileFolder } from 'twenty-shared/types'; +import { + FieldMetadataType, + FileFolder, + FeatureFlagKey, +} from 'twenty-shared/types'; import { assertIsDefinedOrThrow, extractFolderPathFilenameAndTypeOrThrow, @@ -16,7 +20,6 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/ import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { getFlatFieldsFromFlatObjectMetadata } from 'src/engine/api/graphql/workspace-schema-builder/utils/get-flat-fields-for-flat-object-metadata.util'; import { ApplicationService } from 'src/engine/core-modules/application/services/application.service'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { FileStorageService } from 'src/engine/core-modules/file-storage/file-storage.service'; import { FileEntity } from 'src/engine/core-modules/file/entities/file.entity'; diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-18/1-18-migrate-workflow-send-email-attachments.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-18/1-18-migrate-workflow-send-email-attachments.command.ts index 8420fe42b19..d3433b98379 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-18/1-18-migrate-workflow-send-email-attachments.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-18/1-18-migrate-workflow-send-email-attachments.command.ts @@ -3,14 +3,13 @@ import { InjectDataSource, InjectRepository } from '@nestjs/typeorm'; import { isNonEmptyString } from '@sniptt/guards'; import { Command } from 'nest-commander'; -import { FileFolder } from 'twenty-shared/types'; +import { FileFolder, FeatureFlagKey } from 'twenty-shared/types'; import { isDefined, isNonEmptyArray } from 'twenty-shared/utils'; import { DataSource, In, Repository } from 'typeorm'; import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { ApplicationService } from 'src/engine/core-modules/application/services/application.service'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { FileStorageService } from 'src/engine/core-modules/file-storage/file-storage.service'; import { FileEntity } from 'src/engine/core-modules/file/entities/file.entity'; diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-18/1-18-migrate-workspace-pictures.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-18/1-18-migrate-workspace-pictures.command.ts index 3439eb02ee8..ad6db646927 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-18/1-18-migrate-workspace-pictures.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-18/1-18-migrate-workspace-pictures.command.ts @@ -4,7 +4,7 @@ import { isNonEmptyString } from '@sniptt/guards'; import FileType from 'file-type'; import { Command } from 'nest-commander'; import { STANDARD_OBJECTS } from 'twenty-shared/metadata'; -import { FileFolder } from 'twenty-shared/types'; +import { FileFolder, FeatureFlagKey } from 'twenty-shared/types'; import { extractFolderPathFilenameAndTypeOrThrow, isDefined, @@ -16,7 +16,6 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/ import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { ApplicationService } from 'src/engine/core-modules/application/services/application.service'; import { type FlatApplication } from 'src/engine/core-modules/application/types/flat-application.type'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { FileStorageService } from 'src/engine/core-modules/file-storage/file-storage.service'; import { FileEntity } from 'src/engine/core-modules/file/entities/file.entity'; diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-19/1-19-backfill-page-layouts.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-19/1-19-backfill-page-layouts.command.ts index aa594d67df4..fb55be1fae3 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-19/1-19-backfill-page-layouts.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-19/1-19-backfill-page-layouts.command.ts @@ -1,14 +1,13 @@ import { InjectRepository } from '@nestjs/typeorm'; import { Command } from 'nest-commander'; -import { ViewType } from 'twenty-shared/types'; +import { ViewType, FeatureFlagKey } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; import { Repository } from 'typeorm'; import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { ApplicationService } from 'src/engine/core-modules/application/services/application.service'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; diff --git a/packages/twenty-server/src/database/typeorm/core/migrations/common/1772267875870-add-conditional-availability-expression-to-command-menu-item.ts b/packages/twenty-server/src/database/typeorm/core/migrations/common/1772267875870-add-conditional-availability-expression-to-command-menu-item.ts new file mode 100644 index 00000000000..4ed3077dd26 --- /dev/null +++ b/packages/twenty-server/src/database/typeorm/core/migrations/common/1772267875870-add-conditional-availability-expression-to-command-menu-item.ts @@ -0,0 +1,19 @@ +import { type MigrationInterface, type QueryRunner } from 'typeorm'; + +export class AddConditionalAvailabilityExpressionToCommandMenuItem1772267875870 + implements MigrationInterface +{ + name = 'AddConditionalAvailabilityExpressionToCommandMenuItem1772267875870'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "core"."commandMenuItem" ADD "conditionalAvailabilityExpression" character varying`, + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "core"."commandMenuItem" DROP COLUMN "conditionalAvailabilityExpression"`, + ); + } +} diff --git a/packages/twenty-server/src/engine/api/common/common-result-getters/handlers/field-handlers/rich-text-v2-field-query-result-getter.handler.ts b/packages/twenty-server/src/engine/api/common/common-result-getters/handlers/field-handlers/rich-text-v2-field-query-result-getter.handler.ts index 2ad819bd3db..4a9944f3daa 100644 --- a/packages/twenty-server/src/engine/api/common/common-result-getters/handlers/field-handlers/rich-text-v2-field-query-result-getter.handler.ts +++ b/packages/twenty-server/src/engine/api/common/common-result-getters/handlers/field-handlers/rich-text-v2-field-query-result-getter.handler.ts @@ -1,4 +1,5 @@ import { + FeatureFlagKey, FieldMetadataType, FileFolder, type ObjectRecord, @@ -7,7 +8,6 @@ import { isDefined } from 'twenty-shared/utils'; import { type QueryResultGetterHandlerInterface } from 'src/engine/api/graphql/workspace-query-runner/factories/query-result-getters/interfaces/query-result-getter-handler.interface'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { type FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { type FileUrlService } from 'src/engine/core-modules/file/file-url/file-url.service'; import { extractFileIdFromUrl } from 'src/engine/core-modules/file/files-field/utils/extract-file-id-from-url.util'; diff --git a/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/factories/query-result-getters/handlers/workspace-member-query-result-getter.handler.ts b/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/factories/query-result-getters/handlers/workspace-member-query-result-getter.handler.ts index 1779f7a7aff..167cdef8051 100644 --- a/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/factories/query-result-getters/handlers/workspace-member-query-result-getter.handler.ts +++ b/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/factories/query-result-getters/handlers/workspace-member-query-result-getter.handler.ts @@ -1,9 +1,8 @@ -import { FileFolder } from 'twenty-shared/types'; +import { FileFolder, FeatureFlagKey } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; import { type QueryResultGetterHandlerInterface } from 'src/engine/api/graphql/workspace-query-runner/factories/query-result-getters/interfaces/query-result-getter-handler.interface'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { type FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { type FileUrlService } from 'src/engine/core-modules/file/file-url/file-url.service'; import { extractFileIdFromUrl } from 'src/engine/core-modules/file/files-field/utils/extract-file-id-from-url.util'; diff --git a/packages/twenty-server/src/engine/api/mcp/services/__tests__/mcp-protocol.service.spec.ts b/packages/twenty-server/src/engine/api/mcp/services/__tests__/mcp-protocol.service.spec.ts index 2d536fc1853..d63e251d03e 100644 --- a/packages/twenty-server/src/engine/api/mcp/services/__tests__/mcp-protocol.service.spec.ts +++ b/packages/twenty-server/src/engine/api/mcp/services/__tests__/mcp-protocol.service.spec.ts @@ -1,13 +1,14 @@ import { HttpException, HttpStatus } from '@nestjs/common'; import { Test, type TestingModule } from '@nestjs/testing'; +import { FeatureFlagKey } from 'twenty-shared/types'; + import { MCP_SERVER_METADATA } from 'src/engine/api/mcp/constants/mcp.const'; import { type JsonRpc } from 'src/engine/api/mcp/dtos/json-rpc'; import { McpProtocolService } from 'src/engine/api/mcp/services/mcp-protocol.service'; import { McpToolExecutorService } from 'src/engine/api/mcp/services/mcp-tool-executor.service'; import { type ApiKeyEntity } from 'src/engine/core-modules/api-key/api-key.entity'; import { ApiKeyRoleService } from 'src/engine/core-modules/api-key/services/api-key-role.service'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { EXECUTE_TOOL_TOOL_NAME } from 'src/engine/core-modules/tool-provider/tools/execute-tool.tool'; import { GET_TOOL_CATALOG_TOOL_NAME } from 'src/engine/core-modules/tool-provider/tools/get-tool-catalog.tool'; diff --git a/packages/twenty-server/src/engine/api/mcp/services/mcp-protocol.service.ts b/packages/twenty-server/src/engine/api/mcp/services/mcp-protocol.service.ts index 1d2e555323b..8d4247416a6 100644 --- a/packages/twenty-server/src/engine/api/mcp/services/mcp-protocol.service.ts +++ b/packages/twenty-server/src/engine/api/mcp/services/mcp-protocol.service.ts @@ -2,6 +2,7 @@ import { HttpException, HttpStatus, Injectable } from '@nestjs/common'; import { type ToolSet, zodSchema } from 'ai'; import { isDefined } from 'twenty-shared/utils'; +import { FeatureFlagKey } from 'twenty-shared/types'; import { type JsonRpc } from 'src/engine/api/mcp/dtos/json-rpc'; import { McpToolExecutorService } from 'src/engine/api/mcp/services/mcp-tool-executor.service'; @@ -10,7 +11,6 @@ import { type ApiKeyEntity } from 'src/engine/core-modules/api-key/api-key.entit import { ApiKeyRoleService } from 'src/engine/core-modules/api-key/services/api-key-role.service'; import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type'; import { buildApiKeyAuthContext } from 'src/engine/core-modules/auth/utils/build-api-key-auth-context.util'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { COMMON_PRELOAD_TOOLS } from 'src/engine/core-modules/tool-provider/constants/common-preload-tools.const'; import { ToolRegistryService } from 'src/engine/core-modules/tool-provider/services/tool-registry.service'; diff --git a/packages/twenty-server/src/engine/core-modules/admin-panel/admin-panel.service.ts b/packages/twenty-server/src/engine/core-modules/admin-panel/admin-panel.service.ts index 13b7ec84b89..844f3db1a3d 100644 --- a/packages/twenty-server/src/engine/core-modules/admin-panel/admin-panel.service.ts +++ b/packages/twenty-server/src/engine/core-modules/admin-panel/admin-panel.service.ts @@ -6,6 +6,7 @@ import semver from 'semver'; import { isDefined } from 'twenty-shared/utils'; import { Repository } from 'typeorm'; import * as z from 'zod'; +import { FeatureFlagKey } from 'twenty-shared/types'; import { type ConfigVariableDTO } from 'src/engine/core-modules/admin-panel/dtos/config-variable.dto'; import { type ConfigVariablesGroupDataDTO } from 'src/engine/core-modules/admin-panel/dtos/config-variables-group.dto'; @@ -17,7 +18,6 @@ import { AuthExceptionCode, } from 'src/engine/core-modules/auth/auth.exception'; import { WorkspaceDomainsService } from 'src/engine/core-modules/domain/workspace-domains/services/workspace-domains.service'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { type FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { FileService } from 'src/engine/core-modules/file/services/file.service'; import { SecureHttpClientService } from 'src/engine/core-modules/secure-http-client/secure-http-client.service'; diff --git a/packages/twenty-server/src/engine/core-modules/admin-panel/dtos/update-workspace-feature-flag.input.ts b/packages/twenty-server/src/engine/core-modules/admin-panel/dtos/update-workspace-feature-flag.input.ts index cbab229b558..5e321a211f8 100644 --- a/packages/twenty-server/src/engine/core-modules/admin-panel/dtos/update-workspace-feature-flag.input.ts +++ b/packages/twenty-server/src/engine/core-modules/admin-panel/dtos/update-workspace-feature-flag.input.ts @@ -1,9 +1,9 @@ import { ArgsType, Field } from '@nestjs/graphql'; import { IsBoolean, IsNotEmpty, IsUUID } from 'class-validator'; +import { FeatureFlagKey } from 'twenty-shared/types'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; @ArgsType() export class UpdateWorkspaceFeatureFlagInput { diff --git a/packages/twenty-server/src/engine/core-modules/application/resolvers/application-development.resolver.ts b/packages/twenty-server/src/engine/core-modules/application/resolvers/application-development.resolver.ts index 9a099aa38a0..941618d3231 100644 --- a/packages/twenty-server/src/engine/core-modules/application/resolvers/application-development.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/application/resolvers/application-development.resolver.ts @@ -8,7 +8,7 @@ import { Args, Mutation } from '@nestjs/graphql'; import GraphQLUpload from 'graphql-upload/GraphQLUpload.mjs'; import { PermissionFlagType } from 'twenty-shared/constants'; -import { FileFolder } from 'twenty-shared/types'; +import { FileFolder, FeatureFlagKey } from 'twenty-shared/types'; import type { FileUpload } from 'graphql-upload/processRequest.mjs'; @@ -28,7 +28,6 @@ import { ApplicationSyncService } from 'src/engine/core-modules/application/serv import { ApplicationService } from 'src/engine/core-modules/application/services/application.service'; import { ApplicationTokenPairDTO } from 'src/engine/core-modules/application/dtos/application-token-pair.dto'; import { ApplicationTokenService } from 'src/engine/core-modules/auth/token/services/application-token.service'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FileStorageService } from 'src/engine/core-modules/file-storage/file-storage.service'; import { FileDTO } from 'src/engine/core-modules/file/dtos/file.dto'; import { ResolverValidationPipe } from 'src/engine/core-modules/graphql/pipes/resolver-validation.pipe'; diff --git a/packages/twenty-server/src/engine/core-modules/application/resolvers/application.resolver.ts b/packages/twenty-server/src/engine/core-modules/application/resolvers/application.resolver.ts index 353ca05e6fa..18479df0611 100644 --- a/packages/twenty-server/src/engine/core-modules/application/resolvers/application.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/application/resolvers/application.resolver.ts @@ -7,6 +7,7 @@ import { import { Args, Mutation, Query } from '@nestjs/graphql'; import { PermissionFlagType } from 'twenty-shared/constants'; +import { FeatureFlagKey } from 'twenty-shared/types'; import { MetadataResolver } from 'src/engine/api/graphql/graphql-config/decorators/metadata-resolver.decorator'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; @@ -23,7 +24,6 @@ import { UninstallApplicationInput } from 'src/engine/core-modules/application/d import { ApplicationSyncService } from 'src/engine/core-modules/application/services/application-sync.service'; import { ApplicationService } from 'src/engine/core-modules/application/services/application.service'; import { ApplicationTokenService } from 'src/engine/core-modules/auth/token/services/application-token.service'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { ResolverValidationPipe } from 'src/engine/core-modules/graphql/pipes/resolver-validation.pipe'; import { type WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; diff --git a/packages/twenty-server/src/engine/core-modules/application/utils/from-command-menu-item-manifest-to-universal-flat-command-menu-item.util.ts b/packages/twenty-server/src/engine/core-modules/application/utils/from-command-menu-item-manifest-to-universal-flat-command-menu-item.util.ts index 464d148169e..6b022736aad 100644 --- a/packages/twenty-server/src/engine/core-modules/application/utils/from-command-menu-item-manifest-to-universal-flat-command-menu-item.util.ts +++ b/packages/twenty-server/src/engine/core-modules/application/utils/from-command-menu-item-manifest-to-universal-flat-command-menu-item.util.ts @@ -30,6 +30,8 @@ export const fromCommandMenuItemManifestToUniversalFlatCommandMenuItem = ({ availabilityType: commandMenuItemManifest.availabilityType ? AVAILABILITY_TYPE_MAP[commandMenuItemManifest.availabilityType] : CommandMenuItemAvailabilityType.GLOBAL, + conditionalAvailabilityExpression: + commandMenuItemManifest.conditionalAvailabilityExpression ?? null, frontComponentUniversalIdentifier: commandMenuItemManifest.frontComponentUniversalIdentifier, availabilityObjectMetadataUniversalIdentifier: diff --git a/packages/twenty-server/src/engine/core-modules/auth/guards/google-apis-oauth-exchange-code-for-token.guard.ts b/packages/twenty-server/src/engine/core-modules/auth/guards/google-apis-oauth-exchange-code-for-token.guard.ts index 8f752863e24..a8105e41c3a 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/guards/google-apis-oauth-exchange-code-for-token.guard.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/guards/google-apis-oauth-exchange-code-for-token.guard.ts @@ -3,6 +3,7 @@ import { AuthGuard } from '@nestjs/passport'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; +import { FeatureFlagKey } from 'twenty-shared/types'; import { AuthException, @@ -12,7 +13,6 @@ import { GoogleAPIsOauthExchangeCodeForTokenStrategy } from 'src/engine/core-mod import { TransientTokenService } from 'src/engine/core-modules/auth/token/services/transient-token.service'; import { setRequestExtraParams } from 'src/engine/core-modules/auth/utils/google-apis-set-request-extra-params.util'; import { WorkspaceDomainsService } from 'src/engine/core-modules/domain/workspace-domains/services/workspace-domains.service'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { GuardRedirectService } from 'src/engine/core-modules/guard-redirect/services/guard-redirect.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; diff --git a/packages/twenty-server/src/engine/core-modules/auth/guards/google-apis-oauth-request-code.guard.ts b/packages/twenty-server/src/engine/core-modules/auth/guards/google-apis-oauth-request-code.guard.ts index 6013ea6f9b9..983f2157e98 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/guards/google-apis-oauth-request-code.guard.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/guards/google-apis-oauth-request-code.guard.ts @@ -3,6 +3,7 @@ import { AuthGuard } from '@nestjs/passport'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; +import { FeatureFlagKey } from 'twenty-shared/types'; import { AuthException, @@ -12,7 +13,6 @@ import { GoogleAPIsOauthRequestCodeStrategy } from 'src/engine/core-modules/auth import { TransientTokenService } from 'src/engine/core-modules/auth/token/services/transient-token.service'; import { setRequestExtraParams } from 'src/engine/core-modules/auth/utils/google-apis-set-request-extra-params.util'; import { WorkspaceDomainsService } from 'src/engine/core-modules/domain/workspace-domains/services/workspace-domains.service'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { GuardRedirectService } from 'src/engine/core-modules/guard-redirect/services/guard-redirect.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; diff --git a/packages/twenty-server/src/engine/core-modules/auth/services/google-apis.service.ts b/packages/twenty-server/src/engine/core-modules/auth/services/google-apis.service.ts index 3e62a49eb93..de41eb1dfde 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/services/google-apis.service.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/services/google-apis.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@nestjs/common'; -import { ConnectedAccountProvider } from 'twenty-shared/types'; +import { ConnectedAccountProvider, FeatureFlagKey } from 'twenty-shared/types'; import { v4 } from 'uuid'; import { @@ -13,7 +13,6 @@ import { CreateMessageChannelService } from 'src/engine/core-modules/auth/servic import { GoogleAPIScopesService } from 'src/engine/core-modules/auth/services/google-apis-scopes'; import { GoogleApisServiceAvailabilityService } from 'src/engine/core-modules/auth/services/google-apis-service-availability.service'; import { UpdateConnectedAccountOnReconnectService } from 'src/engine/core-modules/auth/services/update-connected-account-on-reconnect.service'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { InjectMessageQueue } from 'src/engine/core-modules/message-queue/decorators/message-queue.decorator'; import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants'; diff --git a/packages/twenty-server/src/engine/core-modules/client-config/client-config.entity.ts b/packages/twenty-server/src/engine/core-modules/client-config/client-config.entity.ts index e3c504af86b..d9b1f1e41fa 100644 --- a/packages/twenty-server/src/engine/core-modules/client-config/client-config.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/client-config/client-config.entity.ts @@ -1,10 +1,11 @@ import { Field, ObjectType, registerEnumType } from '@nestjs/graphql'; +import { FeatureFlagKey } from 'twenty-shared/types'; + import { SupportDriver } from 'src/engine/core-modules/twenty-config/interfaces/support.interface'; import { BillingTrialPeriodDTO } from 'src/engine/core-modules/billing/dtos/billing-trial-period.dto'; import { CaptchaDriverType } from 'src/engine/core-modules/captcha/interfaces'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { AuthProvidersDTO } from 'src/engine/core-modules/workspace/dtos/public-workspace-data.dto'; import { InferenceProvider, diff --git a/packages/twenty-server/src/engine/core-modules/feature-flag/constants/public-feature-flag.const.ts b/packages/twenty-server/src/engine/core-modules/feature-flag/constants/public-feature-flag.const.ts index e1e0eb8d0b5..c4a65dac153 100644 --- a/packages/twenty-server/src/engine/core-modules/feature-flag/constants/public-feature-flag.const.ts +++ b/packages/twenty-server/src/engine/core-modules/feature-flag/constants/public-feature-flag.const.ts @@ -1,4 +1,4 @@ -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; +import { FeatureFlagKey } from 'twenty-shared/types'; type FeatureFlagMetadata = { label: string; diff --git a/packages/twenty-server/src/engine/core-modules/feature-flag/dtos/feature-flag.dto.ts b/packages/twenty-server/src/engine/core-modules/feature-flag/dtos/feature-flag.dto.ts index 82c6c075cde..6fa1818d233 100644 --- a/packages/twenty-server/src/engine/core-modules/feature-flag/dtos/feature-flag.dto.ts +++ b/packages/twenty-server/src/engine/core-modules/feature-flag/dtos/feature-flag.dto.ts @@ -1,8 +1,7 @@ import { Field, ObjectType } from '@nestjs/graphql'; import { Column } from 'typeorm'; - -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; +import { FeatureFlagKey } from 'twenty-shared/types'; @ObjectType('FeatureFlag') export class FeatureFlagDTO { diff --git a/packages/twenty-server/src/engine/core-modules/feature-flag/feature-flag.entity.ts b/packages/twenty-server/src/engine/core-modules/feature-flag/feature-flag.entity.ts index e5978286c71..8ce07bcd46e 100644 --- a/packages/twenty-server/src/engine/core-modules/feature-flag/feature-flag.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/feature-flag/feature-flag.entity.ts @@ -1,5 +1,6 @@ import { registerEnumType } from '@nestjs/graphql'; +import { FeatureFlagKey } from 'twenty-shared/types'; import { Column, CreateDateColumn, @@ -9,7 +10,6 @@ import { UpdateDateColumn, } from 'typeorm'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { WorkspaceRelatedEntity } from 'src/engine/workspace-manager/types/workspace-related-entity'; @Entity({ name: 'featureFlag', schema: 'core' }) diff --git a/packages/twenty-server/src/engine/core-modules/feature-flag/interfaces/feature-flag-map.interface.ts b/packages/twenty-server/src/engine/core-modules/feature-flag/interfaces/feature-flag-map.interface.ts index 927508c16d7..569b07abebd 100644 --- a/packages/twenty-server/src/engine/core-modules/feature-flag/interfaces/feature-flag-map.interface.ts +++ b/packages/twenty-server/src/engine/core-modules/feature-flag/interfaces/feature-flag-map.interface.ts @@ -1,3 +1,3 @@ -import { type FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; +import { type FeatureFlagKey } from 'twenty-shared/types'; export type FeatureFlagMap = Record<`${FeatureFlagKey}`, boolean>; diff --git a/packages/twenty-server/src/engine/core-modules/feature-flag/services/__tests__/feature-flag.service.spec.ts b/packages/twenty-server/src/engine/core-modules/feature-flag/services/__tests__/feature-flag.service.spec.ts index cdadef728b0..a2da4b35c29 100644 --- a/packages/twenty-server/src/engine/core-modules/feature-flag/services/__tests__/feature-flag.service.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/feature-flag/services/__tests__/feature-flag.service.spec.ts @@ -1,7 +1,8 @@ import { Test, type TestingModule } from '@nestjs/testing'; import { getRepositoryToken } from '@nestjs/typeorm'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; +import { FeatureFlagKey } from 'twenty-shared/types'; + import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { FeatureFlagException, diff --git a/packages/twenty-server/src/engine/core-modules/feature-flag/services/feature-flag.service.ts b/packages/twenty-server/src/engine/core-modules/feature-flag/services/feature-flag.service.ts index 9429a1f8aa4..4e5e33a2f13 100644 --- a/packages/twenty-server/src/engine/core-modules/feature-flag/services/feature-flag.service.ts +++ b/packages/twenty-server/src/engine/core-modules/feature-flag/services/feature-flag.service.ts @@ -1,12 +1,12 @@ import { Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; +import { FeatureFlagKey } from 'twenty-shared/types'; import { Repository } from 'typeorm'; import { type FeatureFlagMap } from 'src/engine/core-modules/feature-flag/interfaces/feature-flag-map.interface'; import { type FeatureFlagDTO } from 'src/engine/core-modules/feature-flag/dtos/feature-flag.dto'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { FeatureFlagException, diff --git a/packages/twenty-server/src/engine/core-modules/feature-flag/validates/feature-flag.validate.ts b/packages/twenty-server/src/engine/core-modules/feature-flag/validates/feature-flag.validate.ts index 37103e0869e..055907cf362 100644 --- a/packages/twenty-server/src/engine/core-modules/feature-flag/validates/feature-flag.validate.ts +++ b/packages/twenty-server/src/engine/core-modules/feature-flag/validates/feature-flag.validate.ts @@ -1,6 +1,6 @@ import { isDefined } from 'twenty-shared/utils'; +import { FeatureFlagKey } from 'twenty-shared/types'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { type CustomException } from 'src/utils/custom-exception'; const assertIsFeatureFlagKey = ( diff --git a/packages/twenty-server/src/engine/core-modules/feature-flag/validates/is-public-feature-flag.validate.spec.ts b/packages/twenty-server/src/engine/core-modules/feature-flag/validates/is-public-feature-flag.validate.spec.ts index 09c5b49113b..54495b36ecc 100644 --- a/packages/twenty-server/src/engine/core-modules/feature-flag/validates/is-public-feature-flag.validate.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/feature-flag/validates/is-public-feature-flag.validate.spec.ts @@ -1,20 +1,19 @@ +import { type FeatureFlagKey } from 'twenty-shared/types'; + import { AuthException, AuthExceptionCode, } from 'src/engine/core-modules/auth/auth.exception'; import { type PublicFeatureFlag } from 'src/engine/core-modules/feature-flag/constants/public-feature-flag.const'; -import { type FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { publicFeatureFlagValidator } from 'src/engine/core-modules/feature-flag/validates/is-public-feature-flag.validate'; -jest.mock( - 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum', - () => ({ - FeatureFlagKey: { - mockKey1: 'MOCK_KEY_1', - mockKey2: 'MOCK_KEY_2', - }, - }), -); +jest.mock('twenty-shared/types', () => ({ + ...jest.requireActual('twenty-shared/types'), + FeatureFlagKey: { + mockKey1: 'MOCK_KEY_1', + mockKey2: 'MOCK_KEY_2', + }, +})); const mockPublicFeatureFlag = { key: 'MOCK_KEY_1', diff --git a/packages/twenty-server/src/engine/core-modules/feature-flag/validates/is-public-feature-flag.validate.ts b/packages/twenty-server/src/engine/core-modules/feature-flag/validates/is-public-feature-flag.validate.ts index f62ace437c0..2e4c2d2f414 100644 --- a/packages/twenty-server/src/engine/core-modules/feature-flag/validates/is-public-feature-flag.validate.ts +++ b/packages/twenty-server/src/engine/core-modules/feature-flag/validates/is-public-feature-flag.validate.ts @@ -1,5 +1,6 @@ +import { type FeatureFlagKey } from 'twenty-shared/types'; + import { type PublicFeatureFlag } from 'src/engine/core-modules/feature-flag/constants/public-feature-flag.const'; -import { type FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { isPublicFeatureFlag } from 'src/engine/core-modules/lab/utils/is-public-feature-flag.util'; import { type CustomException } from 'src/utils/custom-exception'; diff --git a/packages/twenty-server/src/engine/core-modules/lab/dtos/update-lab-public-feature-flag.input.ts b/packages/twenty-server/src/engine/core-modules/lab/dtos/update-lab-public-feature-flag.input.ts index 3eea0b6204a..f344ec85607 100644 --- a/packages/twenty-server/src/engine/core-modules/lab/dtos/update-lab-public-feature-flag.input.ts +++ b/packages/twenty-server/src/engine/core-modules/lab/dtos/update-lab-public-feature-flag.input.ts @@ -1,8 +1,7 @@ import { Field, InputType } from '@nestjs/graphql'; import { IsBoolean, IsNotEmpty } from 'class-validator'; - -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; +import { FeatureFlagKey } from 'twenty-shared/types'; @InputType() export class UpdateLabPublicFeatureFlagInput { diff --git a/packages/twenty-server/src/engine/core-modules/lab/utils/is-public-feature-flag.util.spec.ts b/packages/twenty-server/src/engine/core-modules/lab/utils/is-public-feature-flag.util.spec.ts index f4e5f5e15d5..bf850370fea 100644 --- a/packages/twenty-server/src/engine/core-modules/lab/utils/is-public-feature-flag.util.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/lab/utils/is-public-feature-flag.util.spec.ts @@ -1,16 +1,14 @@ -import { type FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; +import { type FeatureFlagKey } from 'twenty-shared/types'; import { isPublicFeatureFlag } from './is-public-feature-flag.util'; -jest.mock( - 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum', - () => ({ - FeatureFlagKey: { - mockKey1: 'MOCK_KEY_1', - mockKey2: 'MOCK_KEY_2', - }, - }), -); +jest.mock('twenty-shared/types', () => ({ + ...jest.requireActual('twenty-shared/types'), + FeatureFlagKey: { + mockKey1: 'MOCK_KEY_1', + mockKey2: 'MOCK_KEY_2', + }, +})); jest.mock( 'src/engine/core-modules/feature-flag/constants/public-feature-flag.const', diff --git a/packages/twenty-server/src/engine/core-modules/lab/utils/is-public-feature-flag.util.ts b/packages/twenty-server/src/engine/core-modules/lab/utils/is-public-feature-flag.util.ts index 9bcced88367..dfa8a06095a 100644 --- a/packages/twenty-server/src/engine/core-modules/lab/utils/is-public-feature-flag.util.ts +++ b/packages/twenty-server/src/engine/core-modules/lab/utils/is-public-feature-flag.util.ts @@ -1,8 +1,9 @@ +import { type FeatureFlagKey } from 'twenty-shared/types'; + import { PUBLIC_FEATURE_FLAGS, type PublicFeatureFlag, } from 'src/engine/core-modules/feature-flag/constants/public-feature-flag.const'; -import { type FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; export const isPublicFeatureFlag = ( key: FeatureFlagKey, diff --git a/packages/twenty-server/src/engine/core-modules/tool/tools/email-tool/email-composer.service.ts b/packages/twenty-server/src/engine/core-modules/tool/tools/email-tool/email-composer.service.ts index 47918b70c40..2ec99e4a2a8 100644 --- a/packages/twenty-server/src/engine/core-modules/tool/tools/email-tool/email-composer.service.ts +++ b/packages/twenty-server/src/engine/core-modules/tool/tools/email-tool/email-composer.service.ts @@ -6,7 +6,7 @@ import { Readable } from 'stream'; import { render, toPlainText } from '@react-email/render'; import DOMPurify from 'dompurify'; import { reactMarkupFromJSON } from 'twenty-emails'; -import { FileFolder } from 'twenty-shared/types'; +import { FileFolder, FeatureFlagKey } from 'twenty-shared/types'; import { extractFolderPathFilenameAndTypeOrThrow, isDefined, @@ -16,7 +16,6 @@ import { WorkflowAttachment } from 'twenty-shared/workflow'; import { In, type Repository } from 'typeorm'; import { z } from 'zod'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { FileEntity } from 'src/engine/core-modules/file/entities/file.entity'; import { FileService } from 'src/engine/core-modules/file/services/file.service'; diff --git a/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.service.ts b/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.service.ts index 88fad6cc2f6..4a275e35f2a 100644 --- a/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.service.ts +++ b/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.service.ts @@ -2,7 +2,7 @@ import { InjectRepository } from '@nestjs/typeorm'; import { TypeOrmQueryService } from '@ptc-org/nestjs-query-typeorm'; import { type APP_LOCALES, SOURCE_LOCALE } from 'twenty-shared/translations'; -import { FileFolder } from 'twenty-shared/types'; +import { FileFolder, FeatureFlagKey } from 'twenty-shared/types'; import { assertIsDefinedOrThrow, isDefined } from 'twenty-shared/utils'; import { IsNull, Not, type QueryRunner, type Repository } from 'typeorm'; @@ -17,7 +17,6 @@ import { import { type AvailableWorkspace } from 'src/engine/core-modules/auth/dto/available-workspaces.dto'; import { LoginTokenService } from 'src/engine/core-modules/auth/token/services/login-token.service'; import { WorkspaceDomainsService } from 'src/engine/core-modules/domain/workspace-domains/services/workspace-domains.service'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { FileCorePictureService } from 'src/engine/core-modules/file/file-core-picture/services/file-core-picture.service'; import { FileUploadService } from 'src/engine/core-modules/file/file-upload/services/file-upload.service'; diff --git a/packages/twenty-server/src/engine/core-modules/workflow/resolvers/workflow-version-step.resolver.ts b/packages/twenty-server/src/engine/core-modules/workflow/resolvers/workflow-version-step.resolver.ts index 4f467defdbf..878521f0cd4 100644 --- a/packages/twenty-server/src/engine/core-modules/workflow/resolvers/workflow-version-step.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/workflow/resolvers/workflow-version-step.resolver.ts @@ -2,9 +2,9 @@ import { UseFilters, UseGuards, UsePipes } from '@nestjs/common'; import { Args, Mutation } from '@nestjs/graphql'; import { PermissionFlagType } from 'twenty-shared/constants'; +import { FeatureFlagKey } from 'twenty-shared/types'; import { CoreResolver } from 'src/engine/api/graphql/graphql-config/decorators/core-resolver.decorator'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { PreventNestToAutoLogGraphqlErrorsFilter } from 'src/engine/core-modules/graphql/filters/prevent-nest-to-auto-log-graphql-errors.filter'; import { ResolverValidationPipe } from 'src/engine/core-modules/graphql/pipes/resolver-validation.pipe'; diff --git a/packages/twenty-server/src/engine/core-modules/workspace/workspace.resolver.ts b/packages/twenty-server/src/engine/core-modules/workspace/workspace.resolver.ts index dea8e48ff90..cd4bd3f0946 100644 --- a/packages/twenty-server/src/engine/core-modules/workspace/workspace.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/workspace/workspace.resolver.ts @@ -11,7 +11,7 @@ import assert from 'assert'; import GraphQLUpload from 'graphql-upload/GraphQLUpload.mjs'; import { PermissionFlagType } from 'twenty-shared/constants'; -import { FileFolder } from 'twenty-shared/types'; +import { FeatureFlagKey, FileFolder } from 'twenty-shared/types'; import { assertIsDefinedOrThrow, isDefined } from 'twenty-shared/utils'; import type { FileUpload } from 'graphql-upload/processRequest.mjs'; @@ -29,7 +29,6 @@ import { DnsManagerService } from 'src/engine/core-modules/dns-manager/services/ import { CustomDomainManagerService } from 'src/engine/core-modules/domain/custom-domain-manager/services/custom-domain-manager.service'; import { WorkspaceDomainsService } from 'src/engine/core-modules/domain/workspace-domains/services/workspace-domains.service'; import { FeatureFlagDTO } from 'src/engine/core-modules/feature-flag/dtos/feature-flag.dto'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { SignedFileDTO } from 'src/engine/core-modules/file/file-upload/dtos/signed-file.dto'; import { FileUploadService } from 'src/engine/core-modules/file/file-upload/services/file-upload.service'; diff --git a/packages/twenty-server/src/engine/guards/feature-flag.guard.ts b/packages/twenty-server/src/engine/guards/feature-flag.guard.ts index 93cec85f348..b3ed355b1ac 100644 --- a/packages/twenty-server/src/engine/guards/feature-flag.guard.ts +++ b/packages/twenty-server/src/engine/guards/feature-flag.guard.ts @@ -6,7 +6,8 @@ import { import { Reflector } from '@nestjs/core'; import { GqlExecutionContext } from '@nestjs/graphql'; -import { type FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; +import { type FeatureFlagKey } from 'twenty-shared/types'; + import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { TypedReflect } from 'src/utils/typed-reflect'; diff --git a/packages/twenty-server/src/engine/metadata-modules/ai/ai-agent/agent.resolver.ts b/packages/twenty-server/src/engine/metadata-modules/ai/ai-agent/agent.resolver.ts index 2803ea2dc89..7d4d766d4f2 100644 --- a/packages/twenty-server/src/engine/metadata-modules/ai/ai-agent/agent.resolver.ts +++ b/packages/twenty-server/src/engine/metadata-modules/ai/ai-agent/agent.resolver.ts @@ -3,8 +3,8 @@ import { Args, Mutation, Query } from '@nestjs/graphql'; import { PermissionFlagType } from 'twenty-shared/constants'; import { isNonEmptyString } from '@sniptt/guards'; +import { FeatureFlagKey } from 'twenty-shared/types'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { MetadataResolver } from 'src/engine/api/graphql/graphql-config/decorators/metadata-resolver.decorator'; diff --git a/packages/twenty-server/src/engine/metadata-modules/ai/ai-chat/resolvers/agent-chat.resolver.ts b/packages/twenty-server/src/engine/metadata-modules/ai/ai-chat/resolvers/agent-chat.resolver.ts index c12aeaf1d4d..9ce534778a7 100644 --- a/packages/twenty-server/src/engine/metadata-modules/ai/ai-chat/resolvers/agent-chat.resolver.ts +++ b/packages/twenty-server/src/engine/metadata-modules/ai/ai-chat/resolvers/agent-chat.resolver.ts @@ -9,10 +9,10 @@ import { } from '@nestjs/graphql'; import { PermissionFlagType } from 'twenty-shared/constants'; +import { FeatureFlagKey } from 'twenty-shared/types'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; import { toDisplayCredits } from 'src/engine/core-modules/billing/utils/to-display-credits.util'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { type WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthUserWorkspaceId } from 'src/engine/decorators/auth/auth-user-workspace-id.decorator'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; diff --git a/packages/twenty-server/src/engine/metadata-modules/command-menu-item/command-menu-item.resolver.ts b/packages/twenty-server/src/engine/metadata-modules/command-menu-item/command-menu-item.resolver.ts index 7149a2095a0..4e74e57c82f 100644 --- a/packages/twenty-server/src/engine/metadata-modules/command-menu-item/command-menu-item.resolver.ts +++ b/packages/twenty-server/src/engine/metadata-modules/command-menu-item/command-menu-item.resolver.ts @@ -2,9 +2,9 @@ import { UseGuards, UseInterceptors } from '@nestjs/common'; import { Args, Mutation, Parent, Query, ResolveField } from '@nestjs/graphql'; import { isDefined } from 'twenty-shared/utils'; +import { FeatureFlagKey } from 'twenty-shared/types'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { MetadataResolver } from 'src/engine/api/graphql/graphql-config/decorators/metadata-resolver.decorator'; diff --git a/packages/twenty-server/src/engine/metadata-modules/command-menu-item/dtos/command-menu-item.dto.ts b/packages/twenty-server/src/engine/metadata-modules/command-menu-item/dtos/command-menu-item.dto.ts index f8876e2156c..d2a4f29a456 100644 --- a/packages/twenty-server/src/engine/metadata-modules/command-menu-item/dtos/command-menu-item.dto.ts +++ b/packages/twenty-server/src/engine/metadata-modules/command-menu-item/dtos/command-menu-item.dto.ts @@ -61,6 +61,11 @@ export class CommandMenuItemDTO { @Field(() => CommandMenuItemAvailabilityType) availabilityType: CommandMenuItemAvailabilityType; + @IsString() + @IsOptional() + @Field({ nullable: true }) + conditionalAvailabilityExpression?: string; + @IsUUID() @IsOptional() @Field(() => UUIDScalarType, { nullable: true }) diff --git a/packages/twenty-server/src/engine/metadata-modules/command-menu-item/dtos/create-command-menu-item.input.ts b/packages/twenty-server/src/engine/metadata-modules/command-menu-item/dtos/create-command-menu-item.input.ts index cb683107160..23721acd29c 100644 --- a/packages/twenty-server/src/engine/metadata-modules/command-menu-item/dtos/create-command-menu-item.input.ts +++ b/packages/twenty-server/src/engine/metadata-modules/command-menu-item/dtos/create-command-menu-item.input.ts @@ -44,6 +44,11 @@ export class CreateCommandMenuItemInput { @Field(() => CommandMenuItemAvailabilityType, { nullable: true }) availabilityType?: CommandMenuItemAvailabilityType; + @IsString() + @IsOptional() + @Field({ nullable: true }) + conditionalAvailabilityExpression?: string; + @IsUUID() @IsOptional() @Field(() => UUIDScalarType, { nullable: true }) diff --git a/packages/twenty-server/src/engine/metadata-modules/command-menu-item/entities/command-menu-item.entity.ts b/packages/twenty-server/src/engine/metadata-modules/command-menu-item/entities/command-menu-item.entity.ts index daeabc2acc4..13369fb3e8c 100644 --- a/packages/twenty-server/src/engine/metadata-modules/command-menu-item/entities/command-menu-item.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/command-menu-item/entities/command-menu-item.entity.ts @@ -74,6 +74,9 @@ export class CommandMenuItemEntity }) availabilityType: CommandMenuItemAvailabilityType; + @Column({ nullable: true, type: 'varchar' }) + conditionalAvailabilityExpression: string | null; + @Column({ nullable: true, type: 'uuid' }) availabilityObjectMetadataId: string | null; diff --git a/packages/twenty-server/src/engine/metadata-modules/field-metadata/services/field-metadata.service.ts b/packages/twenty-server/src/engine/metadata-modules/field-metadata/services/field-metadata.service.ts index b66673e47c3..284abb4c981 100644 --- a/packages/twenty-server/src/engine/metadata-modules/field-metadata/services/field-metadata.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/field-metadata/services/field-metadata.service.ts @@ -4,10 +4,10 @@ import { InjectRepository } from '@nestjs/typeorm'; import { TypeOrmQueryService } from '@ptc-org/nestjs-query-typeorm'; import { isDefined } from 'twenty-shared/utils'; import { type FindOneOptions, type Repository } from 'typeorm'; +import { FeatureFlagKey } from 'twenty-shared/types'; import { ApplicationService } from 'src/engine/core-modules/application/services/application.service'; import { type FlatApplication } from 'src/engine/core-modules/application/types/flat-application.type'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { type CreateFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/create-field.input'; import { type DeleteOneFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/delete-field.input'; import { type UpdateFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/update-field.input'; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-command-menu-item/utils/from-command-menu-item-entity-to-flat-command-menu-item.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-command-menu-item/utils/from-command-menu-item-entity-to-flat-command-menu-item.util.ts index eb21cd6db75..ce018fe5e33 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-command-menu-item/utils/from-command-menu-item-entity-to-flat-command-menu-item.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-command-menu-item/utils/from-command-menu-item-entity-to-flat-command-menu-item.util.ts @@ -73,6 +73,8 @@ export const fromCommandMenuItemEntityToFlatCommandMenuItem = ({ createdAt: commandMenuItemEntity.createdAt.toISOString(), updatedAt: commandMenuItemEntity.updatedAt.toISOString(), applicationUniversalIdentifier, + conditionalAvailabilityExpression: + commandMenuItemEntity.conditionalAvailabilityExpression, availabilityObjectMetadataUniversalIdentifier, frontComponentUniversalIdentifier, }; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-command-menu-item/utils/from-create-command-menu-item-input-to-flat-command-menu-item-to-create.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-command-menu-item/utils/from-create-command-menu-item-input-to-flat-command-menu-item-to-create.util.ts index 47b8ed012bc..e71391c8020 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-command-menu-item/utils/from-create-command-menu-item-input-to-flat-command-menu-item-to-create.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-command-menu-item/utils/from-create-command-menu-item-input-to-flat-command-menu-item-to-create.util.ts @@ -70,6 +70,8 @@ export const fromCreateCommandMenuItemInputToFlatCommandMenuItemToCreate = ({ CommandMenuItemAvailabilityType.GLOBAL, availabilityObjectMetadataId: createCommandMenuItemInput.availabilityObjectMetadataId ?? null, + conditionalAvailabilityExpression: + createCommandMenuItemInput.conditionalAvailabilityExpression ?? null, availabilityObjectMetadataUniversalIdentifier, workspaceId, applicationId: flatApplication.id, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/__tests__/__snapshots__/all-universal-flat-entity-properties-to-compare-and-stringify.constant.spec.ts.snap b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/__tests__/__snapshots__/all-universal-flat-entity-properties-to-compare-and-stringify.constant.spec.ts.snap index 7876966aa81..3cf21763d92 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/__tests__/__snapshots__/all-universal-flat-entity-properties-to-compare-and-stringify.constant.spec.ts.snap +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/__tests__/__snapshots__/all-universal-flat-entity-properties-to-compare-and-stringify.constant.spec.ts.snap @@ -26,6 +26,7 @@ exports[`ALL_UNIVERSAL_FLAT_ENTITY_PROPERTIES_TO_COMPARE_AND_STRINGIFY should ma "icon", "isPinned", "availabilityType", + "conditionalAvailabilityExpression", "availabilityObjectMetadataUniversalIdentifier", ], "propertiesToStringify": [], diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-entity-properties-configuration-by-metadata-name.constant.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-entity-properties-configuration-by-metadata-name.constant.ts index 1192a49a3cc..cbce5561e52 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-entity-properties-configuration-by-metadata-name.constant.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-entity-properties-configuration-by-metadata-name.constant.ts @@ -980,6 +980,11 @@ export const ALL_ENTITY_PROPERTIES_CONFIGURATION_BY_METADATA_NAME = { toStringify: false, universalProperty: undefined, }, + conditionalAvailabilityExpression: { + toCompare: true, + toStringify: false, + universalProperty: undefined, + }, availabilityObjectMetadataId: { toCompare: true, toStringify: false, diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.service.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.service.ts index 5a1fee47a9d..140cd91ddd5 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.service.ts @@ -6,6 +6,7 @@ import { ViewOpenRecordIn, ViewType, ViewVisibility, + FeatureFlagKey, } from 'twenty-shared/types'; import { fromArrayToUniqueKeyRecord, isDefined } from 'twenty-shared/utils'; import { FindManyOptions, FindOneOptions, Repository } from 'typeorm'; @@ -13,7 +14,6 @@ import { v4 as uuidv4, v4 } from 'uuid'; import { ApplicationService } from 'src/engine/core-modules/application/services/application.service'; import { type FlatApplication } from 'src/engine/core-modules/application/types/flat-application.type'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service'; diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/build-default-relation-flat-field-metadatas-for-custom-object.util.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/build-default-relation-flat-field-metadatas-for-custom-object.util.ts index d44fc1cc2d0..c6015ee68c7 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/build-default-relation-flat-field-metadatas-for-custom-object.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/build-default-relation-flat-field-metadatas-for-custom-object.util.ts @@ -2,14 +2,13 @@ import { STANDARD_OBJECTS, DEFAULT_RELATIONS_OBJECTS_STANDARD_IDS, } from 'twenty-shared/metadata'; -import { FieldMetadataType } from 'twenty-shared/types'; +import { FieldMetadataType, FeatureFlagKey } from 'twenty-shared/types'; import { capitalize, isDefined } from 'twenty-shared/utils'; import { type FeatureFlagMap } from 'src/engine/core-modules/feature-flag/interfaces/feature-flag-map.interface'; import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface'; import { type FlatApplication } from 'src/engine/core-modules/application/types/flat-application.type'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { computeMorphOrRelationFieldJoinColumnName } from 'src/engine/metadata-modules/field-metadata/utils/compute-morph-or-relation-field-join-column-name.util'; import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; diff --git a/packages/twenty-server/src/engine/metadata-modules/role/role.resolver.ts b/packages/twenty-server/src/engine/metadata-modules/role/role.resolver.ts index 4c5587ee1c9..7a242d33180 100644 --- a/packages/twenty-server/src/engine/metadata-modules/role/role.resolver.ts +++ b/packages/twenty-server/src/engine/metadata-modules/role/role.resolver.ts @@ -9,11 +9,11 @@ import { Args, Mutation, Parent, Query, ResolveField } from '@nestjs/graphql'; import { msg } from '@lingui/core/macro'; import { PermissionFlagType } from 'twenty-shared/constants'; import { isDefined } from 'twenty-shared/utils'; +import { FeatureFlagKey } from 'twenty-shared/types'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; import { ApiKeyRoleService } from 'src/engine/core-modules/api-key/services/api-key-role.service'; import { ApplicationService } from 'src/engine/core-modules/application/services/application.service'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { PreventNestToAutoLogGraphqlErrorsFilter } from 'src/engine/core-modules/graphql/filters/prevent-nest-to-auto-log-graphql-errors.filter'; import { ResolverValidationPipe } from 'src/engine/core-modules/graphql/pipes/resolver-validation.pipe'; import { UserWorkspaceService } from 'src/engine/core-modules/user-workspace/user-workspace.service'; diff --git a/packages/twenty-server/src/engine/twenty-orm/interfaces/workspace-internal-context.interface.ts b/packages/twenty-server/src/engine/twenty-orm/interfaces/workspace-internal-context.interface.ts index dd8808f14f5..7b4eefafe1d 100644 --- a/packages/twenty-server/src/engine/twenty-orm/interfaces/workspace-internal-context.interface.ts +++ b/packages/twenty-server/src/engine/twenty-orm/interfaces/workspace-internal-context.interface.ts @@ -1,6 +1,6 @@ import { type DataSource } from 'typeorm'; +import { type FeatureFlagKey } from 'twenty-shared/types'; -import { type FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; import { type FlatIndexMetadata } from 'src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata.type'; diff --git a/packages/twenty-server/src/engine/twenty-orm/repository/__tests__/workspace.repository.spec.ts b/packages/twenty-server/src/engine/twenty-orm/repository/__tests__/workspace.repository.spec.ts index 5d6f84f5b4e..3d47b56db7d 100644 --- a/packages/twenty-server/src/engine/twenty-orm/repository/__tests__/workspace.repository.spec.ts +++ b/packages/twenty-server/src/engine/twenty-orm/repository/__tests__/workspace.repository.spec.ts @@ -1,4 +1,5 @@ import { + FeatureFlagKey, FieldMetadataType, type ObjectsPermissions, } from 'twenty-shared/types'; @@ -14,7 +15,6 @@ import { import { type FeatureFlagMap } from 'src/engine/core-modules/feature-flag/interfaces/feature-flag-map.interface'; import { type WorkspaceInternalContext } from 'src/engine/twenty-orm/interfaces/workspace-internal-context.interface'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; import { type WorkspaceEntityManager } from 'src/engine/twenty-orm/entity-manager/workspace-entity-manager'; import { WorkspaceRepository } from 'src/engine/twenty-orm/repository/workspace.repository'; diff --git a/packages/twenty-server/src/engine/twenty-orm/repository/workspace-insert-query-builder.ts b/packages/twenty-server/src/engine/twenty-orm/repository/workspace-insert-query-builder.ts index 08e7e67aa01..b4383eb9eeb 100644 --- a/packages/twenty-server/src/engine/twenty-orm/repository/workspace-insert-query-builder.ts +++ b/packages/twenty-server/src/engine/twenty-orm/repository/workspace-insert-query-builder.ts @@ -1,4 +1,4 @@ -import { type ObjectsPermissions } from 'twenty-shared/types'; +import { FeatureFlagKey, type ObjectsPermissions } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; import { type EntityTarget, @@ -12,7 +12,6 @@ import { type WorkspaceInternalContext } from 'src/engine/twenty-orm/interfaces/ import { DatabaseEventAction } from 'src/engine/api/graphql/graphql-query-runner/enums/database-event-action'; import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { type QueryDeepPartialEntityWithNestedRelationFields } from 'src/engine/twenty-orm/entity-manager/types/query-deep-partial-entity-with-nested-relation-fields.type'; import { type RelationConnectQueryConfig } from 'src/engine/twenty-orm/entity-manager/types/relation-connect-query-config.type'; import { type RelationDisconnectQueryFieldsByEntityIndex } from 'src/engine/twenty-orm/entity-manager/types/relation-nested-query-fields-by-entity-index.type'; diff --git a/packages/twenty-server/src/engine/twenty-orm/repository/workspace-select-query-builder.ts b/packages/twenty-server/src/engine/twenty-orm/repository/workspace-select-query-builder.ts index fc2fa206fee..102d7c391cf 100644 --- a/packages/twenty-server/src/engine/twenty-orm/repository/workspace-select-query-builder.ts +++ b/packages/twenty-server/src/engine/twenty-orm/repository/workspace-select-query-builder.ts @@ -1,4 +1,4 @@ -import { type ObjectsPermissions } from 'twenty-shared/types'; +import { FeatureFlagKey, type ObjectsPermissions } from 'twenty-shared/types'; import { type EntityTarget, type ObjectLiteral, @@ -10,7 +10,6 @@ import { type FeatureFlagMap } from 'src/engine/core-modules/feature-flag/interf import { type WorkspaceInternalContext } from 'src/engine/twenty-orm/interfaces/workspace-internal-context.interface'; import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { PermissionsException, PermissionsExceptionCode, diff --git a/packages/twenty-server/src/engine/twenty-orm/repository/workspace-update-query-builder.ts b/packages/twenty-server/src/engine/twenty-orm/repository/workspace-update-query-builder.ts index 3d6a9ae0124..ae780e538df 100644 --- a/packages/twenty-server/src/engine/twenty-orm/repository/workspace-update-query-builder.ts +++ b/packages/twenty-server/src/engine/twenty-orm/repository/workspace-update-query-builder.ts @@ -1,6 +1,6 @@ import { msg } from '@lingui/core/macro'; import { QUERY_MAX_RECORDS } from 'twenty-shared/constants'; -import { type ObjectsPermissions } from 'twenty-shared/types'; +import { FeatureFlagKey, type ObjectsPermissions } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; import { UpdateQueryBuilder, @@ -16,7 +16,6 @@ import { type WorkspaceInternalContext } from 'src/engine/twenty-orm/interfaces/ import { DatabaseEventAction } from 'src/engine/api/graphql/graphql-query-runner/enums/database-event-action'; import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { type QueryDeepPartialEntityWithNestedRelationFields } from 'src/engine/twenty-orm/entity-manager/types/query-deep-partial-entity-with-nested-relation-fields.type'; import { type RelationConnectQueryConfig } from 'src/engine/twenty-orm/entity-manager/types/relation-connect-query-config.type'; import { type RelationDisconnectQueryFieldsByEntityIndex } from 'src/engine/twenty-orm/entity-manager/types/relation-nested-query-fields-by-entity-index.type'; diff --git a/packages/twenty-server/src/engine/twenty-orm/storage/orm-workspace-context.storage.ts b/packages/twenty-server/src/engine/twenty-orm/storage/orm-workspace-context.storage.ts index 9691f0830d6..b2fff4461e5 100644 --- a/packages/twenty-server/src/engine/twenty-orm/storage/orm-workspace-context.storage.ts +++ b/packages/twenty-server/src/engine/twenty-orm/storage/orm-workspace-context.storage.ts @@ -1,10 +1,12 @@ import { AsyncLocalStorage } from 'async_hooks'; -import { type ObjectsPermissionsByRoleId } from 'twenty-shared/types'; +import { + type ObjectsPermissionsByRoleId, + type FeatureFlagKey, +} from 'twenty-shared/types'; import { type EntityMetadata } from 'typeorm'; import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type'; -import { type FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; import { type FlatIndexMetadata } from 'src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata.type'; diff --git a/packages/twenty-server/src/engine/twenty-orm/utils/apply-row-level-permission-predicates.util.ts b/packages/twenty-server/src/engine/twenty-orm/utils/apply-row-level-permission-predicates.util.ts index b8251f97349..00c6db1ef10 100644 --- a/packages/twenty-server/src/engine/twenty-orm/utils/apply-row-level-permission-predicates.util.ts +++ b/packages/twenty-server/src/engine/twenty-orm/utils/apply-row-level-permission-predicates.util.ts @@ -6,13 +6,13 @@ import { type ObjectLiteral, type WhereExpressionBuilder, } from 'typeorm'; +import { FeatureFlagKey } from 'twenty-shared/types'; import { type FeatureFlagMap } from 'src/engine/core-modules/feature-flag/interfaces/feature-flag-map.interface'; import { type WorkspaceInternalContext } from 'src/engine/twenty-orm/interfaces/workspace-internal-context.interface'; import { GraphqlQueryFilterFieldParser } from 'src/engine/api/graphql/graphql-query-runner/graphql-query-parsers/graphql-query-filter/graphql-query-filter-field.parser'; import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; import { type WorkspaceSelectQueryBuilder } from 'src/engine/twenty-orm/repository/workspace-select-query-builder'; import { buildRowLevelPermissionRecordFilter } from 'src/engine/twenty-orm/utils/build-row-level-permission-record-filter.util'; diff --git a/packages/twenty-server/src/engine/workspace-cache/types/workspace-cache-key.type.ts b/packages/twenty-server/src/engine/workspace-cache/types/workspace-cache-key.type.ts index 1ecd1c30def..9450a3ea056 100644 --- a/packages/twenty-server/src/engine/workspace-cache/types/workspace-cache-key.type.ts +++ b/packages/twenty-server/src/engine/workspace-cache/types/workspace-cache-key.type.ts @@ -1,9 +1,11 @@ -import { type ObjectsPermissionsByRoleId } from 'twenty-shared/types'; +import { + type ObjectsPermissionsByRoleId, + type FeatureFlagKey, +} from 'twenty-shared/types'; import { type EntityMetadata } from 'typeorm'; import { type FlatApplicationCacheMaps } from 'src/engine/core-modules/application/types/flat-application-cache-maps.type'; import { type ApplicationVariableCacheMaps } from 'src/engine/core-modules/applicationVariable/types/application-variable-cache-maps.type'; -import { type FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { type FlatWorkspaceMemberMaps } from 'src/engine/core-modules/user/types/flat-workspace-member-maps.type'; import { type FlatRoleTargetByAgentIdMaps } from 'src/engine/metadata-modules/flat-agent/types/flat-role-target-by-agent-id-maps.type'; import { type AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; diff --git a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/utils/seed-feature-flags.util.ts b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/utils/seed-feature-flags.util.ts index affe2850e4e..2a2f9305067 100644 --- a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/utils/seed-feature-flags.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/utils/seed-feature-flags.util.ts @@ -1,6 +1,5 @@ import { type QueryRunner } from 'typeorm'; - -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; +import { FeatureFlagKey } from 'twenty-shared/types'; const tableName = 'featureFlag'; diff --git a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/data/services/dev-seeder-data.service.ts b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/data/services/dev-seeder-data.service.ts index 4b42af22d4c..c4e6d97a5fb 100644 --- a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/data/services/dev-seeder-data.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/data/services/dev-seeder-data.service.ts @@ -5,10 +5,9 @@ import { readFile } from 'fs/promises'; import { join } from 'path'; import { STANDARD_OBJECTS } from 'twenty-shared/metadata'; -import { FileFolder } from 'twenty-shared/types'; +import { FileFolder, FeatureFlagKey } from 'twenty-shared/types'; import { DataSource } from 'typeorm'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FileStorageService } from 'src/engine/core-modules/file-storage/file-storage.service'; import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service'; import { FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; diff --git a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/services/dev-seeder.service.ts b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/services/dev-seeder.service.ts index 8d6e5f51413..f23c2b9a09e 100644 --- a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/services/dev-seeder.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/services/dev-seeder.service.ts @@ -3,9 +3,9 @@ import { InjectDataSource } from '@nestjs/typeorm'; import { ALL_METADATA_NAME } from 'twenty-shared/metadata'; import { DataSource } from 'typeorm'; +import { FeatureFlagKey } from 'twenty-shared/types'; import { ApplicationService } from 'src/engine/core-modules/application/services/application.service'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { getMetadataFlatEntityMapsKey } from 'src/engine/metadata-modules/flat-entity/utils/get-metadata-flat-entity-maps-key.util'; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/constant/default-feature-flags.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/constant/default-feature-flags.ts index 3edb1bca0b1..9360fb35945 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/constant/default-feature-flags.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/constant/default-feature-flags.ts @@ -1,4 +1,4 @@ -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; +import { FeatureFlagKey } from 'twenty-shared/types'; export const DEFAULT_FEATURE_FLAGS = [ FeatureFlagKey.IS_ATTACHMENT_MIGRATED, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-page-layout-widget-validator.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-page-layout-widget-validator.service.ts index 5c52ee00051..de5eaf7aa8a 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-page-layout-widget-validator.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-page-layout-widget-validator.service.ts @@ -3,13 +3,13 @@ import { Injectable } from '@nestjs/common'; import { msg, t } from '@lingui/core/macro'; import { ALL_METADATA_NAME } from 'twenty-shared/metadata'; import { + FeatureFlagKey, PageLayoutTabLayoutMode, PageLayoutWidgetPosition, type GridPosition, } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { findFlatEntityByUniversalIdentifier } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-universal-identifier.util'; import { FlatPageLayoutWidgetTypeValidatorService } from 'src/engine/metadata-modules/flat-page-layout-widget/services/flat-page-layout-widget-type-validator.service'; import { PageLayoutTabExceptionCode } from 'src/engine/metadata-modules/page-layout-tab/exceptions/page-layout-tab.exception'; diff --git a/packages/twenty-server/src/modules/workflow/workflow-trigger/workspace-services/workflow-trigger.workspace-service.ts b/packages/twenty-server/src/modules/workflow/workflow-trigger/workspace-services/workflow-trigger.workspace-service.ts index 8b80cec9a02..625b0a2db55 100644 --- a/packages/twenty-server/src/modules/workflow/workflow-trigger/workspace-services/workflow-trigger.workspace-service.ts +++ b/packages/twenty-server/src/modules/workflow/workflow-trigger/workspace-services/workflow-trigger.workspace-service.ts @@ -1,10 +1,9 @@ import { Injectable } from '@nestjs/common'; import { msg } from '@lingui/core/macro'; -import { type ActorMetadata } from 'twenty-shared/types'; import { isNonEmptyString } from '@sniptt/guards'; +import { type ActorMetadata, FeatureFlagKey } from 'twenty-shared/types'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { CommandMenuItemService } from 'src/engine/metadata-modules/command-menu-item/command-menu-item.service'; import { CommandMenuItemAvailabilityType } from 'src/engine/metadata-modules/command-menu-item/entities/command-menu-item.entity'; diff --git a/packages/twenty-server/src/modules/workspace-member/listeners/workspace-member-avatar-file-deletion.listener.ts b/packages/twenty-server/src/modules/workspace-member/listeners/workspace-member-avatar-file-deletion.listener.ts index 486c8708653..f43e68c41d9 100644 --- a/packages/twenty-server/src/modules/workspace-member/listeners/workspace-member-avatar-file-deletion.listener.ts +++ b/packages/twenty-server/src/modules/workspace-member/listeners/workspace-member-avatar-file-deletion.listener.ts @@ -5,12 +5,11 @@ import { ObjectRecordDestroyEvent, ObjectRecordUpdateEvent, } from 'twenty-shared/database-events'; -import { FileFolder } from 'twenty-shared/types'; +import { FileFolder, FeatureFlagKey } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; import { OnDatabaseBatchEvent } from 'src/engine/api/graphql/graphql-query-runner/decorators/on-database-batch-event.decorator'; import { DatabaseEventAction } from 'src/engine/api/graphql/graphql-query-runner/enums/database-event-action'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { FileCorePictureService } from 'src/engine/core-modules/file/file-core-picture/services/file-core-picture.service'; import { extractFileIdFromUrl } from 'src/engine/core-modules/file/files-field/utils/extract-file-id-from-url.util'; diff --git a/packages/twenty-server/src/utils/typed-reflect.ts b/packages/twenty-server/src/utils/typed-reflect.ts index 0e9cb9d82b4..390aed5fc08 100644 --- a/packages/twenty-server/src/utils/typed-reflect.ts +++ b/packages/twenty-server/src/utils/typed-reflect.ts @@ -1,9 +1,9 @@ import 'reflect-metadata'; +import { type FeatureFlagKey } from 'twenty-shared/types'; import { type Gate } from 'src/engine/twenty-orm/interfaces/gate.interface'; import { type WorkspaceEntityDuplicateCriteria } from 'src/engine/api/graphql/workspace-query-builder/types/workspace-entity-duplicate-criteria.type'; -import { type FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { type ConfigVariablesMetadataMap } from 'src/engine/core-modules/twenty-config/decorators/config-variables-metadata.decorator'; export interface ReflectMetadataTypeMap { diff --git a/packages/twenty-server/test/integration/graphql/suites/settings-permissions/workspace.integration-spec.ts b/packages/twenty-server/test/integration/graphql/suites/settings-permissions/workspace.integration-spec.ts index 4cd5602cf56..c25b8a102be 100644 --- a/packages/twenty-server/test/integration/graphql/suites/settings-permissions/workspace.integration-spec.ts +++ b/packages/twenty-server/test/integration/graphql/suites/settings-permissions/workspace.integration-spec.ts @@ -2,9 +2,9 @@ import gql from 'graphql-tag'; import request from 'supertest'; import { makeMetadataAPIRequestWithFileUpload } from 'test/integration/metadata/suites/utils/make-metadata-api-request-with-file-upload.util'; import { makeMetadataAPIRequest } from 'test/integration/metadata/suites/utils/make-metadata-api-request.util'; +import { FeatureFlagKey } from 'twenty-shared/types'; import { BillingPlanKey } from 'src/engine/core-modules/billing/enums/billing-plan-key.enum'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { ErrorCode } from 'src/engine/core-modules/graphql/utils/graphql-errors.util'; import { PermissionsExceptionMessage } from 'src/engine/metadata-modules/permissions/permissions.exception'; diff --git a/packages/twenty-server/test/integration/graphql/utils/update-feature-flag-factory.util.ts b/packages/twenty-server/test/integration/graphql/utils/update-feature-flag-factory.util.ts index 71060bd8edb..e9cc021ebe0 100644 --- a/packages/twenty-server/test/integration/graphql/utils/update-feature-flag-factory.util.ts +++ b/packages/twenty-server/test/integration/graphql/utils/update-feature-flag-factory.util.ts @@ -1,6 +1,5 @@ import gql from 'graphql-tag'; - -import { type FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; +import { type FeatureFlagKey } from 'twenty-shared/types'; export const updateFeatureFlagFactory = ( workspaceId: string, diff --git a/packages/twenty-server/test/integration/metadata/suites/application/failing-install-application.integration-spec.ts b/packages/twenty-server/test/integration/metadata/suites/application/failing-install-application.integration-spec.ts index ff11656d5f3..929cf887407 100644 --- a/packages/twenty-server/test/integration/metadata/suites/application/failing-install-application.integration-spec.ts +++ b/packages/twenty-server/test/integration/metadata/suites/application/failing-install-application.integration-spec.ts @@ -6,8 +6,7 @@ import { syncApplication } from 'test/integration/metadata/suites/application/ut import { uninstallApplication } from 'test/integration/metadata/suites/application/utils/uninstall-application.util'; import { updateFeatureFlag } from 'test/integration/metadata/suites/utils/update-feature-flag.util'; import { v4 as uuidv4 } from 'uuid'; - -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; +import { FeatureFlagKey } from 'twenty-shared/types'; const INVALID_UUID_APP_ID = uuidv4(); const INVALID_UUID_ROLE_ID = uuidv4(); diff --git a/packages/twenty-server/test/integration/metadata/suites/command-menu-item/failing-command-menu-item-creation.integration-spec.ts b/packages/twenty-server/test/integration/metadata/suites/command-menu-item/failing-command-menu-item-creation.integration-spec.ts index 0ce7fbd334e..bd60e82e2b7 100644 --- a/packages/twenty-server/test/integration/metadata/suites/command-menu-item/failing-command-menu-item-creation.integration-spec.ts +++ b/packages/twenty-server/test/integration/metadata/suites/command-menu-item/failing-command-menu-item-creation.integration-spec.ts @@ -6,8 +6,8 @@ import { eachTestingContextFilter, type EachTestingContext, } from 'twenty-shared/testing'; +import { FeatureFlagKey } from 'twenty-shared/types'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { type CreateCommandMenuItemInput } from 'src/engine/metadata-modules/command-menu-item/dtos/create-command-menu-item.input'; type TestContext = { diff --git a/packages/twenty-server/test/integration/metadata/suites/command-menu-item/failing-command-menu-item-deletion.integration-spec.ts b/packages/twenty-server/test/integration/metadata/suites/command-menu-item/failing-command-menu-item-deletion.integration-spec.ts index 35e248460f2..adcda48d296 100644 --- a/packages/twenty-server/test/integration/metadata/suites/command-menu-item/failing-command-menu-item-deletion.integration-spec.ts +++ b/packages/twenty-server/test/integration/metadata/suites/command-menu-item/failing-command-menu-item-deletion.integration-spec.ts @@ -7,8 +7,7 @@ import { eachTestingContextFilter, type EachTestingContext, } from 'twenty-shared/testing'; - -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; +import { FeatureFlagKey } from 'twenty-shared/types'; type TestContext = { input: DeleteCommandMenuItemFactoryInput; diff --git a/packages/twenty-server/test/integration/metadata/suites/command-menu-item/failing-command-menu-item-update.integration-spec.ts b/packages/twenty-server/test/integration/metadata/suites/command-menu-item/failing-command-menu-item-update.integration-spec.ts index 06c53a2072e..92ffc244f85 100644 --- a/packages/twenty-server/test/integration/metadata/suites/command-menu-item/failing-command-menu-item-update.integration-spec.ts +++ b/packages/twenty-server/test/integration/metadata/suites/command-menu-item/failing-command-menu-item-update.integration-spec.ts @@ -8,8 +8,8 @@ import { eachTestingContextFilter, type EachTestingContext, } from 'twenty-shared/testing'; +import { FeatureFlagKey } from 'twenty-shared/types'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { type UpdateCommandMenuItemInput } from 'src/engine/metadata-modules/command-menu-item/dtos/update-command-menu-item.input'; type TestContext = { diff --git a/packages/twenty-server/test/integration/metadata/suites/command-menu-item/successful-command-menu-item-creation.integration-spec.ts b/packages/twenty-server/test/integration/metadata/suites/command-menu-item/successful-command-menu-item-creation.integration-spec.ts index d8a578d71b2..1e99becfcd1 100644 --- a/packages/twenty-server/test/integration/metadata/suites/command-menu-item/successful-command-menu-item-creation.integration-spec.ts +++ b/packages/twenty-server/test/integration/metadata/suites/command-menu-item/successful-command-menu-item-creation.integration-spec.ts @@ -7,8 +7,8 @@ import { seedBuiltFrontComponentFile } from 'test/integration/metadata/suites/fr import { findManyObjectMetadata } from 'test/integration/metadata/suites/object-metadata/utils/find-many-object-metadata.util'; import { updateFeatureFlag } from 'test/integration/metadata/suites/utils/update-feature-flag.util'; import { jestExpectToBeDefined } from 'test/utils/jest-expect-to-be-defined.util.test'; +import { FeatureFlagKey } from 'twenty-shared/types'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { CommandMenuItemAvailabilityType } from 'src/engine/metadata-modules/command-menu-item/entities/command-menu-item.entity'; describe('CommandMenuItem creation should succeed', () => { diff --git a/packages/twenty-server/test/integration/metadata/suites/command-menu-item/successful-command-menu-item-deletion.integration-spec.ts b/packages/twenty-server/test/integration/metadata/suites/command-menu-item/successful-command-menu-item-deletion.integration-spec.ts index ada8444ed82..702804c7789 100644 --- a/packages/twenty-server/test/integration/metadata/suites/command-menu-item/successful-command-menu-item-deletion.integration-spec.ts +++ b/packages/twenty-server/test/integration/metadata/suites/command-menu-item/successful-command-menu-item-deletion.integration-spec.ts @@ -3,8 +3,7 @@ import { updateFeatureFlag } from 'test/integration/metadata/suites/utils/update import { createCommandMenuItem } from 'test/integration/metadata/suites/command-menu-item/utils/create-command-menu-item.util'; import { deleteCommandMenuItem } from 'test/integration/metadata/suites/command-menu-item/utils/delete-command-menu-item.util'; import { findCommandMenuItems } from 'test/integration/metadata/suites/command-menu-item/utils/find-command-menu-items.util'; - -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; +import { FeatureFlagKey } from 'twenty-shared/types'; describe('CommandMenuItem deletion should succeed', () => { beforeAll(async () => { diff --git a/packages/twenty-server/test/integration/metadata/suites/command-menu-item/successful-command-menu-item-update.integration-spec.ts b/packages/twenty-server/test/integration/metadata/suites/command-menu-item/successful-command-menu-item-update.integration-spec.ts index 8777f9718ba..78c5cc8aa19 100644 --- a/packages/twenty-server/test/integration/metadata/suites/command-menu-item/successful-command-menu-item-update.integration-spec.ts +++ b/packages/twenty-server/test/integration/metadata/suites/command-menu-item/successful-command-menu-item-update.integration-spec.ts @@ -5,8 +5,8 @@ import { findManyObjectMetadata } from 'test/integration/metadata/suites/object- import { updateCommandMenuItem } from 'test/integration/metadata/suites/command-menu-item/utils/update-command-menu-item.util'; import { updateFeatureFlag } from 'test/integration/metadata/suites/utils/update-feature-flag.util'; import { jestExpectToBeDefined } from 'test/utils/jest-expect-to-be-defined.util.test'; +import { FeatureFlagKey } from 'twenty-shared/types'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { CommandMenuItemAvailabilityType } from 'src/engine/metadata-modules/command-menu-item/entities/command-menu-item.entity'; describe('CommandMenuItem update should succeed', () => { diff --git a/packages/twenty-server/test/integration/metadata/suites/row-level-permission-predicate/failing-row-level-permission-predicate-upsert.integration-spec.ts b/packages/twenty-server/test/integration/metadata/suites/row-level-permission-predicate/failing-row-level-permission-predicate-upsert.integration-spec.ts index accb8cc0499..4c062db2448 100644 --- a/packages/twenty-server/test/integration/metadata/suites/row-level-permission-predicate/failing-row-level-permission-predicate-upsert.integration-spec.ts +++ b/packages/twenty-server/test/integration/metadata/suites/row-level-permission-predicate/failing-row-level-permission-predicate-upsert.integration-spec.ts @@ -12,10 +12,10 @@ import { import { RowLevelPermissionPredicateGroupLogicalOperator, RowLevelPermissionPredicateOperand, + FeatureFlagKey, } from 'twenty-shared/types'; import { v4 } from 'uuid'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { type UpsertRowLevelPermissionPredicatesInput } from 'src/engine/metadata-modules/row-level-permission-predicate/dtos/inputs/upsert-row-level-permission-predicates.input'; type TestSetup = { diff --git a/packages/twenty-server/test/integration/metadata/suites/row-level-permission-predicate/successful-row-level-permission-predicate-upsert.integration-spec.ts b/packages/twenty-server/test/integration/metadata/suites/row-level-permission-predicate/successful-row-level-permission-predicate-upsert.integration-spec.ts index d18b8aecb50..7bb75027945 100644 --- a/packages/twenty-server/test/integration/metadata/suites/row-level-permission-predicate/successful-row-level-permission-predicate-upsert.integration-spec.ts +++ b/packages/twenty-server/test/integration/metadata/suites/row-level-permission-predicate/successful-row-level-permission-predicate-upsert.integration-spec.ts @@ -7,10 +7,10 @@ import { jestExpectToBeDefined } from 'test/utils/jest-expect-to-be-defined.util import { RowLevelPermissionPredicateGroupLogicalOperator, RowLevelPermissionPredicateOperand, + FeatureFlagKey, } from 'twenty-shared/types'; import { v4 } from 'uuid'; -import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { type UpsertRowLevelPermissionPredicatesInput } from 'src/engine/metadata-modules/row-level-permission-predicate/dtos/inputs/upsert-row-level-permission-predicates.input'; describe('Row Level Permission Predicate upsert should succeed', () => { diff --git a/packages/twenty-server/test/integration/metadata/suites/utils/update-feature-flag.util.ts b/packages/twenty-server/test/integration/metadata/suites/utils/update-feature-flag.util.ts index 9a5f46f1968..44e28d85d71 100644 --- a/packages/twenty-server/test/integration/metadata/suites/utils/update-feature-flag.util.ts +++ b/packages/twenty-server/test/integration/metadata/suites/utils/update-feature-flag.util.ts @@ -2,8 +2,8 @@ import { makeMetadataAPIRequest } from 'test/integration/metadata/suites/utils/m import { updateFeatureFlagFactory } from 'test/integration/graphql/utils/update-feature-flag-factory.util'; import { warnIfErrorButNotExpectedToFail } from 'test/integration/metadata/utils/warn-if-error-but-not-expected-to-fail.util'; import { warnIfNoErrorButExpectedToFail } from 'test/integration/metadata/utils/warn-if-no-error-but-expected-to-fail.util'; +import { type FeatureFlagKey } from 'twenty-shared/types'; -import { type FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { SEED_APPLE_WORKSPACE_ID } from 'src/engine/workspace-manager/dev-seeder/core/constants/seeder-workspaces.constant'; export const updateFeatureFlag = async ({ diff --git a/packages/twenty-shared/package.json b/packages/twenty-shared/package.json index d1eea9c69f8..edd38bd7586 100644 --- a/packages/twenty-shared/package.json +++ b/packages/twenty-shared/package.json @@ -31,6 +31,7 @@ "dependencies": { "@sniptt/guards": "^0.2.0", "class-validator": "^0.14.0", + "expr-eval": "^2.0.2", "handlebars": "^4.7.8", "libphonenumber-js": "^1.10.26", "lodash.camelcase": "^4.3.0", diff --git a/packages/twenty-shared/src/application/frontComponentManifestType.ts b/packages/twenty-shared/src/application/frontComponentManifestType.ts index e85d5822205..aa2034c01db 100644 --- a/packages/twenty-shared/src/application/frontComponentManifestType.ts +++ b/packages/twenty-shared/src/application/frontComponentManifestType.ts @@ -7,6 +7,7 @@ export type CommandMenuItemManifest = SyncableEntityOptions & { availabilityType?: 'GLOBAL' | 'SINGLE_RECORD' | 'BULK_RECORDS'; availabilityObjectUniversalIdentifier?: string; frontComponentUniversalIdentifier: string; + conditionalAvailabilityExpression?: string; }; export type FrontComponentCommandManifest = Omit< diff --git a/packages/twenty-front/src/modules/object-record/constants/BackendBatchRequestMaxCount.ts b/packages/twenty-shared/src/constants/BackendBatchRequestMaxCount.ts similarity index 100% rename from packages/twenty-front/src/modules/object-record/constants/BackendBatchRequestMaxCount.ts rename to packages/twenty-shared/src/constants/BackendBatchRequestMaxCount.ts diff --git a/packages/twenty-shared/src/constants/index.ts b/packages/twenty-shared/src/constants/index.ts index e298d232d2a..409de0aad84 100644 --- a/packages/twenty-shared/src/constants/index.ts +++ b/packages/twenty-shared/src/constants/index.ts @@ -7,6 +7,7 @@ * |___/ */ +export { BACKEND_BATCH_REQUEST_MAX_COUNT } from './BackendBatchRequestMaxCount'; export { CalendarStartDay } from './CalendarStartDay'; export { COMPOSITE_FIELD_TYPE_SUB_FIELDS_NAMES } from './CompositeFieldTypeSubFieldsNames'; export { CurrencyCode } from './CurrencyCode'; diff --git a/packages/twenty-shared/src/expr-eval.d.ts b/packages/twenty-shared/src/expr-eval.d.ts new file mode 100644 index 00000000000..3efb581e02e --- /dev/null +++ b/packages/twenty-shared/src/expr-eval.d.ts @@ -0,0 +1,95 @@ +declare module 'expr-eval' { + export type Value = + | number + | string + | boolean + | null + | undefined + | Value[] + | ((...args: Value[]) => Value) + | { [propertyName: string]: Value }; + + export type EvaluationContext = Record; + + export interface Values { + [propertyName: string]: Value; + } + + export interface ParserOptions { + allowMemberAccess?: boolean; + operators?: { + add?: boolean; + comparison?: boolean; + concatenate?: boolean; + conditional?: boolean; + divide?: boolean; + factorial?: boolean; + logical?: boolean; + multiply?: boolean; + power?: boolean; + remainder?: boolean; + subtract?: boolean; + sin?: boolean; + cos?: boolean; + tan?: boolean; + asin?: boolean; + acos?: boolean; + atan?: boolean; + sinh?: boolean; + cosh?: boolean; + tanh?: boolean; + asinh?: boolean; + acosh?: boolean; + atanh?: boolean; + sqrt?: boolean; + log?: boolean; + ln?: boolean; + lg?: boolean; + log10?: boolean; + abs?: boolean; + ceil?: boolean; + floor?: boolean; + round?: boolean; + trunc?: boolean; + exp?: boolean; + length?: boolean; + in?: boolean; + random?: boolean; + min?: boolean; + max?: boolean; + assignment?: boolean; + fndef?: boolean; + cbrt?: boolean; + expm1?: boolean; + log1p?: boolean; + sign?: boolean; + log2?: boolean; + }; + } + + export class Parser { + constructor(options?: ParserOptions); + unaryOps: any; + functions: any; + consts: any; + parse(expression: string): Expression; + evaluate(expression: string, values?: EvaluationContext): number; + static parse(expression: string): Expression; + static evaluate(expression: string, values?: EvaluationContext): number; + } + + export interface Expression { + simplify(values?: EvaluationContext): Expression; + evaluate(values?: EvaluationContext): any; + substitute( + variable: string, + value: Expression | string | number, + ): Expression; + symbols(options?: { withMembers?: boolean }): string[]; + variables(options?: { withMembers?: boolean }): string[]; + toJSFunction( + params: string, + values?: EvaluationContext, + ): (...args: any[]) => number; + } +} diff --git a/packages/twenty-front/src/modules/action-menu/actions/types/ActionViewType.ts b/packages/twenty-shared/src/types/ActionViewType.ts similarity index 100% rename from packages/twenty-front/src/modules/action-menu/actions/types/ActionViewType.ts rename to packages/twenty-shared/src/types/ActionViewType.ts diff --git a/packages/twenty-shared/src/types/CommandMenuContextApi.ts b/packages/twenty-shared/src/types/CommandMenuContextApi.ts new file mode 100644 index 00000000000..e0de034f4b4 --- /dev/null +++ b/packages/twenty-shared/src/types/CommandMenuContextApi.ts @@ -0,0 +1,18 @@ +import { type ObjectPermissions } from './ObjectPermissions'; +import { type ObjectRecord } from './ObjectRecord'; + +export type CommandMenuContextApi = { + isShowPage: boolean; + isInRightDrawer: boolean; + isFavorite: boolean; + isRemote: boolean; + isNoteOrTask: boolean; + isSelectAll: boolean; + hasAnySoftDeleteFilterOnView: boolean; + numberOfSelectedRecords: number; + objectPermissions: ObjectPermissions & { objectMetadataId: string }; + selectedRecord: ObjectRecord | undefined; + featureFlags: Record; + targetObjectReadPermissions: Record; + targetObjectWritePermissions: Record; +}; diff --git a/packages/twenty-front/src/modules/object-metadata/types/CoreObjectNameSingular.ts b/packages/twenty-shared/src/types/CoreObjectNameSingular.ts similarity index 100% rename from packages/twenty-front/src/modules/object-metadata/types/CoreObjectNameSingular.ts rename to packages/twenty-shared/src/types/CoreObjectNameSingular.ts diff --git a/packages/twenty-server/src/engine/core-modules/feature-flag/enums/feature-flag-key.enum.ts b/packages/twenty-shared/src/types/FeatureFlagKey.ts similarity index 100% rename from packages/twenty-server/src/engine/core-modules/feature-flag/enums/feature-flag-key.enum.ts rename to packages/twenty-shared/src/types/FeatureFlagKey.ts diff --git a/packages/twenty-shared/src/types/index.ts b/packages/twenty-shared/src/types/index.ts index 7d62b061c6b..2e4d3aeb6f4 100644 --- a/packages/twenty-shared/src/types/index.ts +++ b/packages/twenty-shared/src/types/index.ts @@ -7,6 +7,7 @@ * |___/ */ +export { ActionViewType } from './ActionViewType'; export type { AllowedAddressSubField } from './AddressFieldsType'; export { ALLOWED_ADDRESS_SUBFIELDS } from './AddressFieldsType'; export { AggregateOperations } from './AggregateOperations'; @@ -14,6 +15,7 @@ export { AppBasePath } from './AppBasePath'; export { AppPath } from './AppPath'; export type { Arrayable } from './Arrayable'; export type { ArraySortDirection } from './ArraySortDirection'; +export type { CommandMenuContextApi } from './CommandMenuContextApi'; export { CommandMenuPages } from './CommandMenuPages'; export type { ActorMetadata } from './composite-types/actor.composite-type'; export { @@ -52,6 +54,7 @@ export { export type { CompositeFieldSubFieldName } from './CompositeFieldSubFieldNameType'; export type { ConfigVariableValue } from './ConfigVariableValue'; export { ConnectedAccountProvider } from './ConnectedAccountProvider'; +export { CoreObjectNameSingular } from './CoreObjectNameSingular'; export { CrudOperationType } from './CrudOperationType'; export type { SnackBarVariant, @@ -63,6 +66,7 @@ export type { ExcludeFunctions } from './ExcludeFunctions'; export type { ExtractPropertiesThatEndsWithId } from './ExtractPropertiesThatEndsWithId'; export type { ExtractPropertiesThatEndsWithIds } from './ExtractPropertiesThatEndsWithIds'; export type { ExtractSerializedRelationProperties } from './ExtractSerializedRelationProperties.type'; +export { FeatureFlagKey } from './FeatureFlagKey'; export type { FieldMetadataDefaultValueFunctionNames, FieldMetadataDefaultValueUuidFunction, diff --git a/packages/twenty-shared/src/utils/conditional-availability/evaluateConditionalAvailabilityExpression.ts b/packages/twenty-shared/src/utils/conditional-availability/evaluateConditionalAvailabilityExpression.ts new file mode 100644 index 00000000000..5db4a3274f8 --- /dev/null +++ b/packages/twenty-shared/src/utils/conditional-availability/evaluateConditionalAvailabilityExpression.ts @@ -0,0 +1,26 @@ +import { isNonEmptyString } from '@sniptt/guards'; +import { type EvaluationContext, Parser } from 'expr-eval'; + +import { isDefined } from '../validation/isDefined'; + +const parser = new Parser(); + +parser.functions.isDefined = (value: unknown) => isDefined(value); +parser.functions.isNonEmptyString = (value: unknown) => isNonEmptyString(value); + +export const evaluateConditionalAvailabilityExpression = ( + expression: string | null | undefined, + context: EvaluationContext, +): boolean => { + if (!isNonEmptyString(expression)) { + return true; + } + + try { + const parsed = parser.parse(expression); + + return parsed.evaluate(context) === true; + } catch { + return false; + } +}; diff --git a/packages/twenty-shared/src/utils/index.ts b/packages/twenty-shared/src/utils/index.ts index 3cf64935a17..60fecf353fa 100644 --- a/packages/twenty-shared/src/utils/index.ts +++ b/packages/twenty-shared/src/utils/index.ts @@ -23,6 +23,7 @@ export { upsertPropertiesOfItemIntoArrayOfObjectsComparingId } from './array/ups export { assertUnreachable } from './assertUnreachable'; export { base64UrlEncode } from './base64UrlEncode'; export { computeDiffBetweenObjects } from './compute-diff-between-objects'; +export { evaluateConditionalAvailabilityExpression } from './conditional-availability/evaluateConditionalAvailabilityExpression'; export { isPlainDateAfter } from './date/isPlainDateAfter'; export { isPlainDateBefore } from './date/isPlainDateBefore'; export { isPlainDateBeforeOrEqual } from './date/isPlainDateBeforeOrEqual'; diff --git a/yarn.lock b/yarn.lock index 73da57fc7bf..a5280b4ac0b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -36522,6 +36522,13 @@ __metadata: languageName: node linkType: hard +"expr-eval@npm:^2.0.2": + version: 2.0.2 + resolution: "expr-eval@npm:2.0.2" + checksum: 10c0/642f112ff28ea34574c595c3ad73ccd8e638498879a4dd28620c4dabebab2e11987a851266ba81883dae85a5800e0c93b3d06f81718b71a215f831534646e4f2 + languageName: node + linkType: hard + "express-session@npm:^1.18.2": version: 1.18.2 resolution: "express-session@npm:1.18.2" @@ -58015,6 +58022,7 @@ __metadata: "@types/handlebars": "npm:^4.1.0" babel-plugin-module-resolver: "npm:^5.0.2" class-validator: "npm:^0.14.0" + expr-eval: "npm:^2.0.2" glob: "npm:^11.1.0" handlebars: "npm:^4.7.8" libphonenumber-js: "npm:^1.10.26"