diff --git a/packages/twenty-front/src/generated-metadata/graphql.ts b/packages/twenty-front/src/generated-metadata/graphql.ts index 7deb61626c..a475046d51 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 a3c904e544..dbf47630f2 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 608550202d..411eccebf6 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 b9705ec579..0bd2eb9568 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 ec9c903e40..5e6dbb1f08 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 87f6a1767e..8c0c1c2f1c 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 5f7e1e17d2..a7a0d98a28 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 b6476ec3c6..91848304c0 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 1a9efdacfa..755a87eb0f 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 c3b68fa2f3..8028c2aaf0 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 12488f6b34..9ada90f3a9 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 e16b28fec5..10e174205f 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 8c58229188..df10b96e0e 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 b80aa519b1..f6867f819e 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 2167cf6b9e..6080f91bdb 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 3cf8c39d5d..6400c824a4 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 b04f79ecc7..323a2a58b9 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 042ad9db16..3339c063c2 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 5427427b12..95da8fa872 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 eb4b2ce00d..2175137271 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 01ed4e5f1e..0000000000 --- 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 a4ae40fc10..913866670f 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 c58696275d..65041c1130 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 2aa3b31403..07e9a549b8 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 a114660cee..4846065a09 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 134027f437..960cd52874 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 ceea09643e..65cfdd0473 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 831e9a39c0..5693005ab3 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 f9be2a54aa..0ca2023b28 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 5859bc2385..1f0396767b 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 8fb3a15667..a467ee63fb 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 8f8966cb1a..9b40593036 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 e9e420d2a4..125260edc2 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 d1c6e08681..4df444cc72 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 c15354a89d..a8b5708b94 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 44df0003d3..2adf7fea50 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 399f669f2d..d746889c84 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 82b07999f0..b99ce9651b 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 0047bc1ddb..9762f17640 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 3fc4d5a430..b023208c15 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 c20324ab97..e908f8e8a3 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 5b77b8d4f4..702feca6b6 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 74c15be50f..d02da78f80 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 dc700a9fc3..fce5e33ecf 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 8ba765d1ee..acc064a09f 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 2c51884156..b6a1504218 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 67df24f1c4..0392cb59a8 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 88aaa16ec2..9a1278453b 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 0e4cd09030..3ba0bac5c0 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 9edee49591..184026cc3e 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 67682e0336..cae08902f3 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 099cfe5567..3a6ddf37e8 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 f7ae9ee8d3..de485ef3dc 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 44bd5ff5c0..7af9ba5e62 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 8915d56c5f..b75c94763f 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 e9cb297e4b..db557c279a 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 d879a6e5b8..58a2a0f1b2 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 693833a481..fa3f83b55f 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 a99ec42bea..fbd9de0514 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 60b16af638..2647e34f9d 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 58c37dcd47..363aea6309 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 dbfcb0f877..c1e8aa99f0 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 9b2d791fa3..b2b95facf2 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 9e6e0dafa0..c99356bcbb 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 e80886d1ab..12e589c40f 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 f62fc6f9ce..cb4874046a 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 5872fc73d2..a764edcdf6 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 c8acce13a4..a76cac8d46 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 a0f3c1fa8c..816ca27e14 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 2df7bc03a4..edf85ce507 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 5bea7d908d..30622f1427 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 d84af27c5f..d065fe5ce9 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 5fb402c5f1..b2350cbd1b 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 b09d2b9581..0e5b147802 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 127e4e4989..e713a3a253 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 fe17dd697f..217e4766f5 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 82cc28390f..e4d74f5066 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 3ae4204cca..578a18251a 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 4fa29944f9..6acdd44b53 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 d1779dfb37..1c76ad5c5f 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 fa0dca54b6..324e835790 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 9f5a367b68..1dc342e90c 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 43da2774be..c2bd63d538 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 cea97b1b98..1fa8bbb037 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 790af60caf..fdceb5ea0d 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 97be76611a..42e74ba35d 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 b898d6c989..8adc7bfb0f 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 3e5fe1b465..22116c1ff6 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 0b45edae49..f169f98b84 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 4eb01346d6..a55edd52b7 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 1b373831d8..084c338491 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 cea10a3acf..c50784476d 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 bdc6aac4ea..dd1aba6033 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 0a2fd51409..a765690531 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 bed3357108..2a8ae58c2c 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 fdf2298655..aa7a4efedb 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 bf07c258f3..acf22a2e7c 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 a5e0821494..afa023c8ad 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 e8f976c144..c6457dd215 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 7b1ed284c8..90ab68347e 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 ebd4cb24c0..eaf3cb54d2 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 caa2f1fa32..3d6f29b800 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 d620484661..49a9a6ef91 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 2d9f52f865..d50a1915dc 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 4a1b3b17f5..be94f45553 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 029c661e62..00f6ec7202 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 73c2e39f01..cd22938e95 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 4990b99282..972f825edd 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 f80e724313..79c9e5658d 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 b399cb24b7..2ac88eeeb2 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 542982dd59..28fc33cf27 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 84d89ed76c..b3f169837b 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 127f4d6fc3..6d50c487e2 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 aa308265f3..4e996637e8 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 1ddba77b9f..f047d43a03 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 e72f40fe91..bac71de6fd 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 4a71c5ddb5..42d902422e 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 e7fa2de150..53bd930ef8 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 4607676a20..9839588af7 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 85d9c31696..abc2260e44 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 c669535be7..071f221624 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 16bb5ed648..657621f110 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 57b316f407..95cd0244fe 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 554e1160b6..dcc9893ad6 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 4cbc8d7875..2947b6c0ec 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 48e6672c34..10935198b9 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 0caea681d9..49190c7560 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 eb8d406bf7..4cb4cced7f 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 2e8ca67f55..9013d7d2cc 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 76c044f45a..17c2620b68 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 47f4755044..66e44fefc5 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 0c7a8921df..49b64aecfe 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 3808efe9c5..a66722c91f 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 a6cd668174..856a50b4f4 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 afd1842a48..41e7248de1 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 f9777e2786..8078eb4075 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 ab69095d76..1ecfb2a31f 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 eaedba2096..0ec2be699f 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 6f1806433f..b37a602ac6 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 86535b8f02..eee1c8ab75 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 3dd320c683..b67ec08bd2 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 9a9d3b24c6..b7d3aeefba 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 6406a30de6..38bbc3522b 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 9e5414c797..9ffc840a82 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 4a30c98848..4eaba43bab 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 5aabe2a137..4ede25a039 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 a8e7bc331e..2900ce1c27 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 a208484690..52041314a1 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 bcc5bc6c77..3d661cdac4 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 c130672632..947ba90d36 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 5a5e8e59ed..2745165808 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 ca16f3fbcc..8d764ab5d3 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 b4dd0e8107..c51015d5a1 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 9be5605e39..574efcbcdc 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 22ed3f5ed7..86d1bde2cd 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 afdce574ff..88cca05872 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 3f8ceab26b..beef6dca97 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 1a5203f060..c115d6e4ed 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 7b7e9bee4e..40f22e21ef 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 106633da6c..cdfe689095 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 669f55523d..7464ab8cf6 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 9246dcbabe..5f79d7ed32 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 eb960dce35..c9018573bd 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 7f6d8ecac2..bcf4baece6 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 7f3bfc61d6..9913700f7c 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 12b6e42871..3647317fd7 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 ad98e70733..fcca2632d9 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 3305bd32d6..03f78da83a 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 4ac2982d43..cf60bbf48b 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 2b5d213992..94f74be4e8 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 e07234a552..12f09ccc2c 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 99d40b27ed..e3e44fa8dc 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 8dbf74bbb0..254ce9265b 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 cbaa282da5..729db0d54a 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 73dc9c4413..6b2bf3d330 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 fcc2f276db..89731e453d 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 46f9905604..04000ceb53 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 b6b62a1d0b..7d0dff6e3b 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 84e2a877f9..23152a8ed5 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 d794481b70..729a9c0bee 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 edf18c2222..ad82d49a69 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 da0a925621..3de4cadf96 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 f5a2748f41..72e2c91a91 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 0e30fbebc9..87872c5386 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 6680b57a01..db3fa017d7 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 7051450afb..dd52420765 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 c1021bc78a..ae60f176e3 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 e107ad5927..90d0feef87 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 e03407ac12..41e6b8014b 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 f58d847d4f..7fbe24c80b 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 da6c0a6b92..3cb09b297d 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 5a504318e1..90033956f9 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 4f5257134e..9956202c04 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 b91b13a620..b863e0b43d 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 2c2a423217..1ba5fc2fa9 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 01226399aa..308561f38a 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 206cf737d7..69795b63a5 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 de44a290e5..6ec7621bcf 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 2ccd9b5c9b..c83bc48787 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 355566b6a7..8507d90abb 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 f1df077bd9..b23b4b159a 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 872376730b..089468c50b 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 accddc4e01..bf7176fd80 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 f58f11d184..a839b7edf4 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 efd14b97b9..5e3e2308de 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 4b26d23031..f56dd9b49a 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 119ff3fa74..d957fffd02 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 88fa913dd9..c096d63e54 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 cb0424c2d9..a207632888 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 03242c628d..36e93db4a7 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 ff01419060..2e4b803bac 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 92792c6625..5c3397d19a 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 33429abbe5..e3a88fa7b4 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 9bde4125cf..13e48fc304 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 e8ef3b4785..4d2a1be62f 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 6f1de3b527..78dd94b269 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 0fe4935bba..aa6cd86542 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 fdff55a98b..df26b17f68 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 5ae3c72a40..510d535da8 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 388b39b4ee..7eac26829a 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 6ed6347a35..f656568b4d 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 ad1c5d54d4..b10fd51d9f 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 e19c29f51f..48f98876c9 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 b7fe79c94b..87a8296a00 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 48fb791f96..6ccbfa78f1 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 2ed63ae55e..4692b2fa7d 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 3f7df92219..4ad5f9a9d5 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 2589f91e46..dd21c3e828 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 f714001636..15a8dc4608 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 5f9d600c97..22fc173667 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 0000000000..320baa66a9 --- /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 0000000000..deca422fd4 --- /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 0000000000..0d0ecd710c --- /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 0000000000..36e1687060 --- /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 0000000000..d171a86976 --- /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 0000000000..6a1ce21c6d --- /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 0000000000..d86e14505e --- /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 0000000000..67c9a1f0d2 --- /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 0000000000..8459d9ec39 --- /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 0000000000..40d7ad517a --- /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 0000000000..755a06e566 --- /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 0000000000..76d892f4c4 --- /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 0000000000..4682d06a4d --- /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 0000000000..ae514d3e93 --- /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 16b79bae55..6080d05178 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 cc997cad69..7a3aba3fa8 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 0000000000..cf20ac74bd --- /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 56a40f4815..85ac1a4057 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 efd79e8a56..38d9dc193a 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 3d3d45c0eb..74da39b46b 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 b087114416..e0c8dfb9de 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 4c63a9d098..f4b1748f46 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 62461a6532..1be212083a 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 54f19d98aa..abdcb0bdb8 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 4391c9abbd..77d1a7496f 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 3e4e562acb..757a4a7c3a 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 1e81ab9589..de2cbaaa08 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 a395eb97a8..8c51b89646 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 8420fe42b1..d3433b9837 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 3439eb02ee..ad6db64692 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 aa594d67df..fb55be1fae 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 0000000000..4ed3077dd2 --- /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 2ad819bd3d..4a9944f3da 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 1779f7a7af..167cdef805 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 2d536fc185..d63e251d03 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 1d2e555323..8d4247416a 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 13b7ec84b8..844f3db1a3 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 cbab229b55..5e321a211f 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 9a099aa38a..941618d323 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 353ca05e6f..18479df061 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 464d148169..6b022736aa 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 8f752863e2..a8105e41c3 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 6013ea6f9b..983f2157e9 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 3e62a49eb9..de41eb1dfd 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 e3c504af86..d9b1f1e41f 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 e1e0eb8d0b..c4a65dac15 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 82c6c075cd..6fa1818d23 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 e5978286c7..8ce07bcd46 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 927508c16d..569b07abeb 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 cdadef728b..a2da4b35c2 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 9429a1f8aa..4e5e33a2f1 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 37103e0869..055907cf36 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 09c5b49113..54495b36ec 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 f62ace437c..2e4c2d2f41 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 3eea0b6204..f344ec8560 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 f4e5f5e15d..bf850370fe 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 9bcced8836..dfa8a06095 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 47918b70c4..2ec99e4a2a 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 88fad6cc2f..4a275e35f2 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 4f467defdb..878521f0cd 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 dea8e48ff9..cd4bd3f094 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 93cec85f34..b3ed355b1a 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 2803ea2dc8..7d4d766d4f 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 c12aeaf1d4..9ce534778a 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 7149a2095a..4e74e57c82 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 f8876e2156..d2a4f29a45 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 cb68310716..23721acd29 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 daeabc2acc..13369fb3e8 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 b66673e47c..284abb4c98 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 eb21cd6db7..ce018fe5e3 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 47b8ed012b..e71391c802 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 7876966aa8..3cf21763d9 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 1192a49a3c..cbce5561e5 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 5a1fee47a9..140cd91ddd 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 d44fc1cc2d..c6015ee68c 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 4c5587ee1c..7a242d3318 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 dd8808f14f..7b4eefafe1 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 5d6f84f5b4..3d47b56db7 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 08e7e67aa0..b4383eb9ee 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 fc2fa206fe..102d7c391c 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 3d6a9ae012..ae780e538d 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 9691f0830d..b2fff4461e 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 b8251f9734..00c6db1ef1 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 1ecd1c30de..9450a3ea05 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 affe2850e4..2a2f930506 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 4b42af22d4..c4e6d97a5f 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 8d6e5f5141..f23c2b9a09 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 3edb1bca0b..9360fb3594 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 5c52ee0005..de5eaf7aa8 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 8b80cec9a0..625b0a2db5 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 486c870865..f43e68c41d 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 0e9cb9d82b..390aed5fc0 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 4cd5602cf5..c25b8a102b 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 71060bd8ed..e9cc021ebe 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 ff11656d5f..929cf88740 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 0ce7fbd334..bd60e82e2b 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 35e248460f..adcda48d29 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 06c53a2072..92ffc244f8 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 d8a578d71b..1e99becfcd 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 ada8444ed8..702804c778 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 8777f9718b..78c5cc8aa1 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 accb8cc049..4c062db244 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 d18b8aecb5..7bb7502794 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 9a5f46f196..44e28d85d7 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 d1eea9c69f..edd38bd758 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 e85d582220..aa2034c01d 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 e298d232d2..409de0aad8 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 0000000000..3efb581e02 --- /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 0000000000..e0de034f4b --- /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 7d62b061c6..2e4d3aeb6f 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 0000000000..5db4a3274f --- /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 3cf64935a1..60fecf353f 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 73da57fc7b..a5280b4ac0 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"