From ce296fae4fac26fb6d47b7e0737a946b753f8b4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Bosi?= <71827178+bosiraphael@users.noreply.github.com> Date: Wed, 29 Jan 2025 18:23:40 +0100 Subject: [PATCH] Add search records actions to the command menu (#9892) Closes https://github.com/twentyhq/core-team-issues/issues/253 and https://github.com/twentyhq/core-team-issues/issues/256. - Created `CommandMenuList`, a component used at the root level of the command menu and inside the search page of the command menu - Refactored record agnostic actions - Added shortcuts to the action menu entries (`/` key for the search) and updated the design of the shortcuts - Reordered actions at the root level of the command menu https://github.com/user-attachments/assets/e1339cc4-ef5d-45c5-a159-6817a54b92e9 --- .../components/RegisterRecordActionEffect.tsx | 4 +- .../constants/DefaultActionsConfigV1.ts | 16 +- .../constants/DefaultActionsConfigV2.ts | 28 +- .../constants/WorkflowActionsConfig.ts | 36 +- .../constants/WorkflowRunsActionsConfig.ts | 14 +- .../WorkflowVersionsActionsConfig.ts | 20 +- .../RecordAgnosticActionMenuEntriesSetter.tsx | 12 + .../RecordAgnosticActionsSetterEffect.tsx | 17 - .../RegisterAgnosticRecordActionEffect.tsx | 50 + ...wRecordAgnosticActionMenuEntriesSetter.tsx | 14 + .../constants/RecordAgnosticActionsConfig.ts | 31 + .../hooks/useRecordAgnosticActions.ts | 26 - .../useSearchRecordsRecordAgnosticAction.ts | 28 + .../hooks/useRunWorkflowActions.tsx} | 49 +- .../types/RecordAgnosticActionsKey.ts | 3 + .../actions/types/ActionViewType.ts | 1 + .../components/RecordIndexActionMenu.tsx | 16 +- .../components/RecordShowActionMenu.tsx | 16 +- .../RecordShowRightDrawerActionMenu.tsx | 10 +- .../action-menu/types/ActionMenuEntry.ts | 2 + .../command-menu/components/CommandMenu.tsx | 217 +-- .../components/CommandMenuContainer.tsx | 24 +- .../components/CommandMenuItem.tsx | 9 +- .../components/CommandMenuList.tsx | 146 ++ .../components/CommandMenuTopBar.tsx | 16 +- .../ResetContextToSelectionCommandButton.tsx | 3 +- .../__stories__/CommandMenu.stories.tsx | 45 +- .../constants/CommandMenuNavigateCommands.ts | 15 +- .../constants/CommandMenuPagesConfig.tsx | 4 +- .../constants/ResetContextToSelection.ts | 1 + .../command-menu/hooks/useCommandMenu.ts | 19 +- .../hooks/useCommandMenuCommands.tsx | 222 +-- .../hooks/useCommandMenuHotKeys.ts | 22 +- .../command-menu/hooks/useMatchCommands.ts | 5 +- .../hooks/useMatchingCommandMenuCommands.ts | 36 +- .../command-menu/hooks/useSearchRecords.tsx | 229 +++ .../CommandMenuSearchRecordsPage.tsx | 20 + .../states/commandMenuPageState.ts | 2 +- .../src/modules/command-menu/types/Command.ts | 4 +- .../{components => types}/CommandMenuPages.ts | 1 + .../components/MainNavigationDrawerItems.tsx | 9 +- .../components/MobileNavigationBar.tsx | 9 +- .../mapRightDrawerPageToCommandMenuPage.ts | 2 +- .../components/NavigationDrawerItem.tsx | 16 +- .../hotkey/hooks/useScopedHotkeys.ts | 5 + .../engine/core-modules/i18n/locales/en.po | 12 +- .../engine/core-modules/i18n/locales/fr.po | 1368 ++++++++--------- .../core-modules/i18n/locales/generated/en.js | 2 +- .../core-modules/i18n/locales/generated/fr.js | 2 +- .../menu-item/components/MenuItemCommand.tsx | 13 +- .../components/MenuItemCommandHotKeys.tsx | 17 +- .../__stories__/MenuItemCommand.stories.tsx | 12 +- 52 files changed, 1539 insertions(+), 1361 deletions(-) create mode 100644 packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/components/RecordAgnosticActionMenuEntriesSetter.tsx delete mode 100644 packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/components/RecordAgnosticActionsSetterEffect.tsx create mode 100644 packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/components/RegisterAgnosticRecordActionEffect.tsx create mode 100644 packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/components/RunWorkflowRecordAgnosticActionMenuEntriesSetter.tsx create mode 100644 packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/constants/RecordAgnosticActionsConfig.ts delete mode 100644 packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/hooks/useRecordAgnosticActions.ts create mode 100644 packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/hooks/useSearchRecordsRecordAgnosticAction.ts rename packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/{workflow-run-actions/hooks/useWorkflowRunActions.tsx => run-workflow-actions/hooks/useRunWorkflowActions.tsx} (57%) create mode 100644 packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/types/RecordAgnosticActionsKey.ts create mode 100644 packages/twenty-front/src/modules/command-menu/components/CommandMenuList.tsx create mode 100644 packages/twenty-front/src/modules/command-menu/constants/ResetContextToSelection.ts create mode 100644 packages/twenty-front/src/modules/command-menu/hooks/useSearchRecords.tsx create mode 100644 packages/twenty-front/src/modules/command-menu/pages/components/CommandMenuSearchRecordsPage.tsx rename packages/twenty-front/src/modules/command-menu/{components => types}/CommandMenuPages.ts (91%) diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/components/RegisterRecordActionEffect.tsx b/packages/twenty-front/src/modules/action-menu/actions/record-actions/components/RegisterRecordActionEffect.tsx index 25159234c..e14eff503 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/components/RegisterRecordActionEffect.tsx +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/components/RegisterRecordActionEffect.tsx @@ -8,7 +8,7 @@ import { useContext, useEffect } from 'react'; type RegisterRecordActionEffectProps = { action: ActionMenuEntry & { - actionHook: ActionHook; + useAction: ActionHook; }; objectMetadataItem: ObjectMetadataItem; }; @@ -17,7 +17,7 @@ export const RegisterRecordActionEffect = ({ action, objectMetadataItem, }: RegisterRecordActionEffectProps) => { - const { shouldBeRegistered, onClick, ConfirmationModal } = action.actionHook({ + const { shouldBeRegistered, onClick, ConfirmationModal } = action.useAction({ objectMetadataItem, }); diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/DefaultActionsConfigV1.ts b/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/DefaultActionsConfigV1.ts index 12da07f3f..a6d8911f6 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/DefaultActionsConfigV1.ts +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/DefaultActionsConfigV1.ts @@ -23,7 +23,7 @@ import { export const DEFAULT_ACTIONS_CONFIG_V1: Record< string, ActionMenuEntry & { - actionHook: ActionHook; + useAction: ActionHook; } > = { addToFavoritesSingleRecord: { @@ -37,7 +37,7 @@ export const DEFAULT_ACTIONS_CONFIG_V1: Record< ActionViewType.SHOW_PAGE, ActionViewType.INDEX_PAGE_SINGLE_RECORD_SELECTION, ], - actionHook: useAddToFavoritesSingleRecordAction, + useAction: useAddToFavoritesSingleRecordAction, }, removeFromFavoritesSingleRecord: { type: ActionMenuEntryType.Standard, @@ -50,7 +50,7 @@ export const DEFAULT_ACTIONS_CONFIG_V1: Record< ActionViewType.SHOW_PAGE, ActionViewType.INDEX_PAGE_SINGLE_RECORD_SELECTION, ], - actionHook: useRemoveFromFavoritesSingleRecordAction, + useAction: useRemoveFromFavoritesSingleRecordAction, }, deleteSingleRecord: { type: ActionMenuEntryType.Standard, @@ -65,7 +65,7 @@ export const DEFAULT_ACTIONS_CONFIG_V1: Record< ActionViewType.SHOW_PAGE, ActionViewType.INDEX_PAGE_SINGLE_RECORD_SELECTION, ], - actionHook: useDeleteSingleRecordAction, + useAction: useDeleteSingleRecordAction, }, deleteMultipleRecords: { type: ActionMenuEntryType.Standard, @@ -78,7 +78,7 @@ export const DEFAULT_ACTIONS_CONFIG_V1: Record< accent: 'danger', isPinned: true, availableOn: [ActionViewType.INDEX_PAGE_BULK_SELECTION], - actionHook: useDeleteMultipleRecordsAction, + useAction: useDeleteMultipleRecordsAction, }, exportMultipleRecords: { type: ActionMenuEntryType.Standard, @@ -91,11 +91,11 @@ export const DEFAULT_ACTIONS_CONFIG_V1: Record< accent: 'default', isPinned: false, availableOn: [ActionViewType.INDEX_PAGE_BULK_SELECTION], - actionHook: useExportMultipleRecordsAction, + useAction: useExportMultipleRecordsAction, }, exportView: { type: ActionMenuEntryType.Standard, - scope: ActionMenuEntryScope.RecordSelection, + scope: ActionMenuEntryScope.Object, key: NoSelectionRecordActionKeys.EXPORT_VIEW, label: 'Export view', shortLabel: 'Export', @@ -104,6 +104,6 @@ export const DEFAULT_ACTIONS_CONFIG_V1: Record< accent: 'default', isPinned: false, availableOn: [ActionViewType.INDEX_PAGE_NO_SELECTION], - actionHook: useExportMultipleRecordsAction, + useAction: useExportMultipleRecordsAction, }, }; diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/DefaultActionsConfigV2.ts b/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/DefaultActionsConfigV2.ts index c68e731d3..aa35f42ef 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/DefaultActionsConfigV2.ts +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/DefaultActionsConfigV2.ts @@ -33,12 +33,12 @@ import { export const DEFAULT_ACTIONS_CONFIG_V2: Record< string, ActionMenuEntry & { - actionHook: ActionHook; + useAction: ActionHook; } > = { createNewRecord: { type: ActionMenuEntryType.Standard, - scope: ActionMenuEntryScope.RecordSelection, + scope: ActionMenuEntryScope.Object, key: NoSelectionRecordActionKeys.CREATE_NEW_RECORD, label: 'Create new record', shortLabel: 'New record', @@ -46,7 +46,7 @@ export const DEFAULT_ACTIONS_CONFIG_V2: Record< isPinned: true, Icon: IconPlus, availableOn: [ActionViewType.INDEX_PAGE_NO_SELECTION], - actionHook: useCreateNewTableRecordNoSelectionRecordAction, + useAction: useCreateNewTableRecordNoSelectionRecordAction, }, exportNoteToPdf: { type: ActionMenuEntryType.Standard, @@ -58,7 +58,7 @@ export const DEFAULT_ACTIONS_CONFIG_V2: Record< isPinned: false, Icon: IconFileExport, availableOn: [ActionViewType.SHOW_PAGE], - actionHook: useExportNoteAction, + useAction: useExportNoteAction, }, addToFavoritesSingleRecord: { type: ActionMenuEntryType.Standard, @@ -73,7 +73,7 @@ export const DEFAULT_ACTIONS_CONFIG_V2: Record< ActionViewType.INDEX_PAGE_SINGLE_RECORD_SELECTION, ActionViewType.SHOW_PAGE, ], - actionHook: useAddToFavoritesSingleRecordAction, + useAction: useAddToFavoritesSingleRecordAction, }, removeFromFavoritesSingleRecord: { type: ActionMenuEntryType.Standard, @@ -88,7 +88,7 @@ export const DEFAULT_ACTIONS_CONFIG_V2: Record< ActionViewType.INDEX_PAGE_SINGLE_RECORD_SELECTION, ActionViewType.SHOW_PAGE, ], - actionHook: useRemoveFromFavoritesSingleRecordAction, + useAction: useRemoveFromFavoritesSingleRecordAction, }, deleteSingleRecord: { type: ActionMenuEntryType.Standard, @@ -104,7 +104,7 @@ export const DEFAULT_ACTIONS_CONFIG_V2: Record< ActionViewType.INDEX_PAGE_SINGLE_RECORD_SELECTION, ActionViewType.SHOW_PAGE, ], - actionHook: useDeleteSingleRecordAction, + useAction: useDeleteSingleRecordAction, }, deleteMultipleRecords: { type: ActionMenuEntryType.Standard, @@ -117,7 +117,7 @@ export const DEFAULT_ACTIONS_CONFIG_V2: Record< accent: 'danger', isPinned: true, availableOn: [ActionViewType.INDEX_PAGE_BULK_SELECTION], - actionHook: useDeleteMultipleRecordsAction, + useAction: useDeleteMultipleRecordsAction, }, exportMultipleRecords: { type: ActionMenuEntryType.Standard, @@ -130,11 +130,11 @@ export const DEFAULT_ACTIONS_CONFIG_V2: Record< accent: 'default', isPinned: false, availableOn: [ActionViewType.INDEX_PAGE_BULK_SELECTION], - actionHook: useExportMultipleRecordsAction, + useAction: useExportMultipleRecordsAction, }, exportView: { type: ActionMenuEntryType.Standard, - scope: ActionMenuEntryScope.RecordSelection, + scope: ActionMenuEntryScope.Object, key: NoSelectionRecordActionKeys.EXPORT_VIEW, label: 'Export view', shortLabel: 'Export', @@ -143,7 +143,7 @@ export const DEFAULT_ACTIONS_CONFIG_V2: Record< accent: 'default', isPinned: false, availableOn: [ActionViewType.INDEX_PAGE_NO_SELECTION], - actionHook: useExportMultipleRecordsAction, + useAction: useExportMultipleRecordsAction, }, destroySingleRecord: { type: ActionMenuEntryType.Standard, @@ -159,7 +159,7 @@ export const DEFAULT_ACTIONS_CONFIG_V2: Record< ActionViewType.INDEX_PAGE_SINGLE_RECORD_SELECTION, ActionViewType.SHOW_PAGE, ], - actionHook: useDestroySingleRecordAction, + useAction: useDestroySingleRecordAction, }, navigateToPreviousRecord: { type: ActionMenuEntryType.Standard, @@ -171,7 +171,7 @@ export const DEFAULT_ACTIONS_CONFIG_V2: Record< isPinned: true, Icon: IconChevronUp, availableOn: [ActionViewType.SHOW_PAGE], - actionHook: useNavigateToPreviousRecordSingleRecordAction, + useAction: useNavigateToPreviousRecordSingleRecordAction, }, navigateToNextRecord: { type: ActionMenuEntryType.Standard, @@ -183,6 +183,6 @@ export const DEFAULT_ACTIONS_CONFIG_V2: Record< isPinned: true, Icon: IconChevronDown, availableOn: [ActionViewType.SHOW_PAGE], - actionHook: useNavigateToNextRecordSingleRecordAction, + useAction: useNavigateToNextRecordSingleRecordAction, }, }; diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.ts b/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.ts index f3a669850..69ef1ae7f 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.ts +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.ts @@ -44,7 +44,7 @@ import { export const WORKFLOW_ACTIONS_CONFIG: Record< string, ActionMenuEntry & { - actionHook: ActionHook; + useAction: ActionHook; } > = { createNewRecord: { @@ -57,7 +57,7 @@ export const WORKFLOW_ACTIONS_CONFIG: Record< isPinned: true, Icon: IconPlus, availableOn: [ActionViewType.INDEX_PAGE_NO_SELECTION], - actionHook: useCreateNewTableRecordNoSelectionRecordAction, + useAction: useCreateNewTableRecordNoSelectionRecordAction, }, activateWorkflowSingleRecord: { key: WorkflowSingleRecordActionKeys.ACTIVATE, @@ -72,7 +72,7 @@ export const WORKFLOW_ACTIONS_CONFIG: Record< ActionViewType.SHOW_PAGE, ActionViewType.INDEX_PAGE_SINGLE_RECORD_SELECTION, ], - actionHook: useActivateWorkflowSingleRecordAction, + useAction: useActivateWorkflowSingleRecordAction, }, deactivateWorkflowSingleRecord: { key: WorkflowSingleRecordActionKeys.DEACTIVATE, @@ -87,7 +87,7 @@ export const WORKFLOW_ACTIONS_CONFIG: Record< ActionViewType.SHOW_PAGE, ActionViewType.INDEX_PAGE_SINGLE_RECORD_SELECTION, ], - actionHook: useDeactivateWorkflowSingleRecordAction, + useAction: useDeactivateWorkflowSingleRecordAction, }, discardWorkflowDraftSingleRecord: { key: WorkflowSingleRecordActionKeys.DISCARD_DRAFT, @@ -102,7 +102,7 @@ export const WORKFLOW_ACTIONS_CONFIG: Record< ActionViewType.SHOW_PAGE, ActionViewType.INDEX_PAGE_SINGLE_RECORD_SELECTION, ], - actionHook: useDiscardDraftWorkflowSingleRecordAction, + useAction: useDiscardDraftWorkflowSingleRecordAction, }, seeWorkflowActiveVersionSingleRecord: { key: WorkflowSingleRecordActionKeys.SEE_ACTIVE_VERSION, @@ -117,7 +117,7 @@ export const WORKFLOW_ACTIONS_CONFIG: Record< ActionViewType.SHOW_PAGE, ActionViewType.INDEX_PAGE_SINGLE_RECORD_SELECTION, ], - actionHook: useSeeActiveVersionWorkflowSingleRecordAction, + useAction: useSeeActiveVersionWorkflowSingleRecordAction, }, seeWorkflowRunsSingleRecord: { key: WorkflowSingleRecordActionKeys.SEE_RUNS, @@ -132,7 +132,7 @@ export const WORKFLOW_ACTIONS_CONFIG: Record< ActionViewType.SHOW_PAGE, ActionViewType.INDEX_PAGE_SINGLE_RECORD_SELECTION, ], - actionHook: useSeeRunsWorkflowSingleRecordAction, + useAction: useSeeRunsWorkflowSingleRecordAction, }, seeWorkflowVersionsHistorySingleRecord: { key: WorkflowSingleRecordActionKeys.SEE_VERSIONS, @@ -147,7 +147,7 @@ export const WORKFLOW_ACTIONS_CONFIG: Record< ActionViewType.SHOW_PAGE, ActionViewType.INDEX_PAGE_SINGLE_RECORD_SELECTION, ], - actionHook: useSeeVersionsWorkflowSingleRecordAction, + useAction: useSeeVersionsWorkflowSingleRecordAction, }, testWorkflowSingleRecord: { key: WorkflowSingleRecordActionKeys.TEST, @@ -162,7 +162,7 @@ export const WORKFLOW_ACTIONS_CONFIG: Record< ActionViewType.SHOW_PAGE, ActionViewType.INDEX_PAGE_SINGLE_RECORD_SELECTION, ], - actionHook: useTestWorkflowSingleRecordAction, + useAction: useTestWorkflowSingleRecordAction, }, navigateToPreviousRecord: { type: ActionMenuEntryType.Standard, @@ -173,7 +173,7 @@ export const WORKFLOW_ACTIONS_CONFIG: Record< position: 8, Icon: IconChevronUp, availableOn: [ActionViewType.SHOW_PAGE], - actionHook: useNavigateToPreviousRecordSingleRecordAction, + useAction: useNavigateToPreviousRecordSingleRecordAction, }, navigateToNextRecord: { type: ActionMenuEntryType.Standard, @@ -184,7 +184,7 @@ export const WORKFLOW_ACTIONS_CONFIG: Record< position: 9, Icon: IconChevronDown, availableOn: [ActionViewType.SHOW_PAGE], - actionHook: useNavigateToNextRecordSingleRecordAction, + useAction: useNavigateToNextRecordSingleRecordAction, }, addToFavoritesSingleRecord: { type: ActionMenuEntryType.Standard, @@ -199,7 +199,7 @@ export const WORKFLOW_ACTIONS_CONFIG: Record< ActionViewType.INDEX_PAGE_SINGLE_RECORD_SELECTION, ActionViewType.SHOW_PAGE, ], - actionHook: useAddToFavoritesSingleRecordAction, + useAction: useAddToFavoritesSingleRecordAction, }, removeFromFavoritesSingleRecord: { type: ActionMenuEntryType.Standard, @@ -214,7 +214,7 @@ export const WORKFLOW_ACTIONS_CONFIG: Record< ActionViewType.INDEX_PAGE_SINGLE_RECORD_SELECTION, ActionViewType.SHOW_PAGE, ], - actionHook: useRemoveFromFavoritesSingleRecordAction, + useAction: useRemoveFromFavoritesSingleRecordAction, }, deleteSingleRecord: { type: ActionMenuEntryType.Standard, @@ -230,7 +230,7 @@ export const WORKFLOW_ACTIONS_CONFIG: Record< ActionViewType.INDEX_PAGE_SINGLE_RECORD_SELECTION, ActionViewType.SHOW_PAGE, ], - actionHook: useDeleteSingleRecordAction, + useAction: useDeleteSingleRecordAction, }, deleteMultipleRecords: { type: ActionMenuEntryType.Standard, @@ -243,7 +243,7 @@ export const WORKFLOW_ACTIONS_CONFIG: Record< accent: 'danger', isPinned: true, availableOn: [ActionViewType.INDEX_PAGE_BULK_SELECTION], - actionHook: useDeleteMultipleRecordsAction, + useAction: useDeleteMultipleRecordsAction, }, destroySingleRecord: { type: ActionMenuEntryType.Standard, @@ -259,7 +259,7 @@ export const WORKFLOW_ACTIONS_CONFIG: Record< ActionViewType.INDEX_PAGE_SINGLE_RECORD_SELECTION, ActionViewType.SHOW_PAGE, ], - actionHook: useDestroySingleRecordAction, + useAction: useDestroySingleRecordAction, }, exportMultipleRecords: { type: ActionMenuEntryType.Standard, @@ -272,7 +272,7 @@ export const WORKFLOW_ACTIONS_CONFIG: Record< accent: 'default', isPinned: false, availableOn: [ActionViewType.INDEX_PAGE_BULK_SELECTION], - actionHook: useExportMultipleRecordsAction, + useAction: useExportMultipleRecordsAction, }, exportView: { type: ActionMenuEntryType.Standard, @@ -285,6 +285,6 @@ export const WORKFLOW_ACTIONS_CONFIG: Record< accent: 'default', isPinned: false, availableOn: [ActionViewType.INDEX_PAGE_NO_SELECTION], - actionHook: useExportMultipleRecordsAction, + useAction: useExportMultipleRecordsAction, }, }; diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/WorkflowRunsActionsConfig.ts b/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/WorkflowRunsActionsConfig.ts index ee0f56f97..571f18d06 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/WorkflowRunsActionsConfig.ts +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/WorkflowRunsActionsConfig.ts @@ -24,7 +24,7 @@ import { export const WORKFLOW_RUNS_ACTIONS_CONFIG: Record< string, ActionMenuEntry & { - actionHook: ActionHook; + useAction: ActionHook; } > = { addToFavoritesSingleRecord: { @@ -40,7 +40,7 @@ export const WORKFLOW_RUNS_ACTIONS_CONFIG: Record< ActionViewType.INDEX_PAGE_SINGLE_RECORD_SELECTION, ActionViewType.SHOW_PAGE, ], - actionHook: useAddToFavoritesSingleRecordAction, + useAction: useAddToFavoritesSingleRecordAction, }, removeFromFavoritesSingleRecord: { type: ActionMenuEntryType.Standard, @@ -55,7 +55,7 @@ export const WORKFLOW_RUNS_ACTIONS_CONFIG: Record< ActionViewType.INDEX_PAGE_SINGLE_RECORD_SELECTION, ActionViewType.SHOW_PAGE, ], - actionHook: useRemoveFromFavoritesSingleRecordAction, + useAction: useRemoveFromFavoritesSingleRecordAction, }, navigateToPreviousRecord: { type: ActionMenuEntryType.Standard, @@ -67,7 +67,7 @@ export const WORKFLOW_RUNS_ACTIONS_CONFIG: Record< isPinned: true, Icon: IconChevronUp, availableOn: [ActionViewType.SHOW_PAGE], - actionHook: useNavigateToPreviousRecordSingleRecordAction, + useAction: useNavigateToPreviousRecordSingleRecordAction, }, navigateToNextRecord: { type: ActionMenuEntryType.Standard, @@ -79,7 +79,7 @@ export const WORKFLOW_RUNS_ACTIONS_CONFIG: Record< isPinned: true, Icon: IconChevronDown, availableOn: [ActionViewType.SHOW_PAGE], - actionHook: useNavigateToNextRecordSingleRecordAction, + useAction: useNavigateToNextRecordSingleRecordAction, }, exportMultipleRecords: { type: ActionMenuEntryType.Standard, @@ -92,7 +92,7 @@ export const WORKFLOW_RUNS_ACTIONS_CONFIG: Record< accent: 'default', isPinned: false, availableOn: [ActionViewType.INDEX_PAGE_BULK_SELECTION], - actionHook: useExportMultipleRecordsAction, + useAction: useExportMultipleRecordsAction, }, exportView: { type: ActionMenuEntryType.Standard, @@ -105,6 +105,6 @@ export const WORKFLOW_RUNS_ACTIONS_CONFIG: Record< accent: 'default', isPinned: false, availableOn: [ActionViewType.INDEX_PAGE_NO_SELECTION], - actionHook: useExportMultipleRecordsAction, + useAction: useExportMultipleRecordsAction, }, }; diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/WorkflowVersionsActionsConfig.ts b/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/WorkflowVersionsActionsConfig.ts index 2fbff23aa..9b097380e 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/WorkflowVersionsActionsConfig.ts +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/WorkflowVersionsActionsConfig.ts @@ -31,7 +31,7 @@ import { export const WORKFLOW_VERSIONS_ACTIONS_CONFIG: Record< string, ActionMenuEntry & { - actionHook: ActionHook; + useAction: ActionHook; } > = { useAsDraftWorkflowVersionSingleRecord: { @@ -47,7 +47,7 @@ export const WORKFLOW_VERSIONS_ACTIONS_CONFIG: Record< ActionViewType.SHOW_PAGE, ActionViewType.INDEX_PAGE_SINGLE_RECORD_SELECTION, ], - actionHook: useUseAsDraftWorkflowVersionSingleRecordAction, + useAction: useUseAsDraftWorkflowVersionSingleRecordAction, }, seeWorkflowRunsSingleRecord: { key: WorkflowVersionSingleRecordActionKeys.SEE_RUNS, @@ -61,7 +61,7 @@ export const WORKFLOW_VERSIONS_ACTIONS_CONFIG: Record< ActionViewType.SHOW_PAGE, ActionViewType.INDEX_PAGE_SINGLE_RECORD_SELECTION, ], - actionHook: useSeeRunsWorkflowVersionSingleRecordAction, + useAction: useSeeRunsWorkflowVersionSingleRecordAction, }, seeWorkflowVersionsHistorySingleRecord: { key: WorkflowVersionSingleRecordActionKeys.SEE_VERSIONS, @@ -75,7 +75,7 @@ export const WORKFLOW_VERSIONS_ACTIONS_CONFIG: Record< ActionViewType.SHOW_PAGE, ActionViewType.INDEX_PAGE_SINGLE_RECORD_SELECTION, ], - actionHook: useSeeVersionsWorkflowVersionSingleRecordAction, + useAction: useSeeVersionsWorkflowVersionSingleRecordAction, }, navigateToPreviousRecord: { type: ActionMenuEntryType.Standard, @@ -86,7 +86,7 @@ export const WORKFLOW_VERSIONS_ACTIONS_CONFIG: Record< position: 4, Icon: IconChevronUp, availableOn: [ActionViewType.SHOW_PAGE], - actionHook: useNavigateToPreviousRecordSingleRecordAction, + useAction: useNavigateToPreviousRecordSingleRecordAction, }, navigateToNextRecord: { type: ActionMenuEntryType.Standard, @@ -97,7 +97,7 @@ export const WORKFLOW_VERSIONS_ACTIONS_CONFIG: Record< position: 5, Icon: IconChevronDown, availableOn: [ActionViewType.SHOW_PAGE], - actionHook: useNavigateToNextRecordSingleRecordAction, + useAction: useNavigateToNextRecordSingleRecordAction, }, addToFavoritesSingleRecord: { type: ActionMenuEntryType.Standard, @@ -112,7 +112,7 @@ export const WORKFLOW_VERSIONS_ACTIONS_CONFIG: Record< ActionViewType.INDEX_PAGE_SINGLE_RECORD_SELECTION, ActionViewType.SHOW_PAGE, ], - actionHook: useAddToFavoritesSingleRecordAction, + useAction: useAddToFavoritesSingleRecordAction, }, removeFromFavoritesSingleRecord: { type: ActionMenuEntryType.Standard, @@ -127,7 +127,7 @@ export const WORKFLOW_VERSIONS_ACTIONS_CONFIG: Record< ActionViewType.INDEX_PAGE_SINGLE_RECORD_SELECTION, ActionViewType.SHOW_PAGE, ], - actionHook: useRemoveFromFavoritesSingleRecordAction, + useAction: useRemoveFromFavoritesSingleRecordAction, }, exportMultipleRecords: { type: ActionMenuEntryType.Standard, @@ -140,7 +140,7 @@ export const WORKFLOW_VERSIONS_ACTIONS_CONFIG: Record< accent: 'default', isPinned: false, availableOn: [ActionViewType.INDEX_PAGE_BULK_SELECTION], - actionHook: useExportMultipleRecordsAction, + useAction: useExportMultipleRecordsAction, }, exportView: { type: ActionMenuEntryType.Standard, @@ -153,6 +153,6 @@ export const WORKFLOW_VERSIONS_ACTIONS_CONFIG: Record< accent: 'default', isPinned: false, availableOn: [ActionViewType.INDEX_PAGE_NO_SELECTION], - actionHook: useExportMultipleRecordsAction, + useAction: useExportMultipleRecordsAction, }, }; diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/components/RecordAgnosticActionMenuEntriesSetter.tsx b/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/components/RecordAgnosticActionMenuEntriesSetter.tsx new file mode 100644 index 000000000..c799a0db6 --- /dev/null +++ b/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/components/RecordAgnosticActionMenuEntriesSetter.tsx @@ -0,0 +1,12 @@ +import { RegisterAgnosticRecordActionEffect } from '@/action-menu/actions/record-agnostic-actions/components/RegisterAgnosticRecordActionEffect'; +import { RECORD_AGNOSTIC_ACTIONS_CONFIG } from '@/action-menu/actions/record-agnostic-actions/constants/RecordAgnosticActionsConfig'; + +export const RecordAgnosticActionMenuEntriesSetter = () => { + return ( + <> + {Object.values(RECORD_AGNOSTIC_ACTIONS_CONFIG).map((action) => ( + + ))} + + ); +}; diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/components/RecordAgnosticActionsSetterEffect.tsx b/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/components/RecordAgnosticActionsSetterEffect.tsx deleted file mode 100644 index 4353a9c96..000000000 --- a/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/components/RecordAgnosticActionsSetterEffect.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import { useRecordAgnosticActions } from '@/action-menu/actions/record-agnostic-actions/hooks/useRecordAgnosticActions'; -import { useEffect } from 'react'; - -export const RecordAgnosticActionsSetterEffect = () => { - const { registerRecordAgnosticActions, unregisterRecordAgnosticActions } = - useRecordAgnosticActions(); - - useEffect(() => { - registerRecordAgnosticActions(); - - return () => { - unregisterRecordAgnosticActions(); - }; - }, [registerRecordAgnosticActions, unregisterRecordAgnosticActions]); - - return null; -}; diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/components/RegisterAgnosticRecordActionEffect.tsx b/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/components/RegisterAgnosticRecordActionEffect.tsx new file mode 100644 index 000000000..493b8b5ba --- /dev/null +++ b/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/components/RegisterAgnosticRecordActionEffect.tsx @@ -0,0 +1,50 @@ +import { ActionHookWithoutObjectMetadataItem } from '@/action-menu/actions/types/ActionHook'; +import { wrapActionInCallbacks } from '@/action-menu/actions/utils/wrapActionInCallbacks'; +import { ActionMenuContext } from '@/action-menu/contexts/ActionMenuContext'; +import { useActionMenuEntries } from '@/action-menu/hooks/useActionMenuEntries'; +import { ActionMenuEntry } from '@/action-menu/types/ActionMenuEntry'; +import { useContext, useEffect } from 'react'; + +type RegisterAgnosticRecordActionEffectProps = { + action: ActionMenuEntry & { + useAction: ActionHookWithoutObjectMetadataItem; + }; +}; + +export const RegisterAgnosticRecordActionEffect = ({ + action, +}: RegisterAgnosticRecordActionEffectProps) => { + const { shouldBeRegistered, onClick, ConfirmationModal } = action.useAction(); + + const { onActionStartedCallback, onActionExecutedCallback } = + useContext(ActionMenuContext); + + const { addActionMenuEntry, removeActionMenuEntry } = useActionMenuEntries(); + + const wrappedAction = wrapActionInCallbacks({ + action: { + ...action, + onClick, + ConfirmationModal, + }, + onActionStartedCallback, + onActionExecutedCallback, + }); + + useEffect(() => { + if (shouldBeRegistered) { + addActionMenuEntry(wrappedAction); + } + + return () => { + removeActionMenuEntry(wrappedAction.key); + }; + }, [ + addActionMenuEntry, + removeActionMenuEntry, + shouldBeRegistered, + wrappedAction, + ]); + + return null; +}; diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/components/RunWorkflowRecordAgnosticActionMenuEntriesSetter.tsx b/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/components/RunWorkflowRecordAgnosticActionMenuEntriesSetter.tsx new file mode 100644 index 000000000..5cc6dfc06 --- /dev/null +++ b/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/components/RunWorkflowRecordAgnosticActionMenuEntriesSetter.tsx @@ -0,0 +1,14 @@ +import { RegisterAgnosticRecordActionEffect } from '@/action-menu/actions/record-agnostic-actions/components/RegisterAgnosticRecordActionEffect'; +import { useRunWorkflowActions } from '@/action-menu/actions/record-agnostic-actions/run-workflow-actions/hooks/useRunWorkflowActions'; + +export const RunWorkflowRecordAgnosticActionMenuEntriesSetter = () => { + const { runWorkflowActions } = useRunWorkflowActions(); + + return ( + <> + {runWorkflowActions.map((action) => ( + + ))} + + ); +}; diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/constants/RecordAgnosticActionsConfig.ts b/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/constants/RecordAgnosticActionsConfig.ts new file mode 100644 index 000000000..5b156d0d0 --- /dev/null +++ b/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/constants/RecordAgnosticActionsConfig.ts @@ -0,0 +1,31 @@ +import { useSearchRecordsRecordAgnosticAction } from '@/action-menu/actions/record-agnostic-actions/hooks/useSearchRecordsRecordAgnosticAction'; +import { RecordAgnosticActionsKey } from '@/action-menu/actions/record-agnostic-actions/types/RecordAgnosticActionsKey'; +import { ActionHookWithoutObjectMetadataItem } from '@/action-menu/actions/types/ActionHook'; +import { ActionViewType } from '@/action-menu/actions/types/ActionViewType'; +import { + ActionMenuEntry, + ActionMenuEntryScope, + ActionMenuEntryType, +} from '@/action-menu/types/ActionMenuEntry'; +import { IconSearch } from 'twenty-ui'; + +export const RECORD_AGNOSTIC_ACTIONS_CONFIG: Record< + string, + ActionMenuEntry & { + useAction: ActionHookWithoutObjectMetadataItem; + } +> = { + searchRecords: { + type: ActionMenuEntryType.Standard, + scope: ActionMenuEntryScope.Global, + key: RecordAgnosticActionsKey.SEARCH_RECORDS, + label: 'Search records', + shortLabel: 'Search', + position: 0, + isPinned: false, + Icon: IconSearch, + availableOn: [ActionViewType.GLOBAL], + useAction: useSearchRecordsRecordAgnosticAction, + hotKeys: ['/'], + }, +}; diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/hooks/useRecordAgnosticActions.ts b/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/hooks/useRecordAgnosticActions.ts deleted file mode 100644 index 01ac93ba7..000000000 --- a/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/hooks/useRecordAgnosticActions.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { useWorkflowRunActions } from '@/action-menu/actions/record-agnostic-actions/workflow-run-actions/hooks/useWorkflowRunActions'; -import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled'; -import { FeatureFlagKey } from '~/generated/graphql'; - -export const useRecordAgnosticActions = () => { - const isWorkflowEnabled = useIsFeatureEnabled( - FeatureFlagKey.IsWorkflowEnabled, - ); - - const { addWorkflowRunActions, removeWorkflowRunActions } = - useWorkflowRunActions(); - - const registerRecordAgnosticActions = () => { - if (isWorkflowEnabled) { - addWorkflowRunActions(); - } - }; - - const unregisterRecordAgnosticActions = () => { - if (isWorkflowEnabled) { - removeWorkflowRunActions(); - } - }; - - return { registerRecordAgnosticActions, unregisterRecordAgnosticActions }; -}; diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/hooks/useSearchRecordsRecordAgnosticAction.ts b/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/hooks/useSearchRecordsRecordAgnosticAction.ts new file mode 100644 index 000000000..224a26d0f --- /dev/null +++ b/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/hooks/useSearchRecordsRecordAgnosticAction.ts @@ -0,0 +1,28 @@ +import { useCommandMenu } from '@/command-menu/hooks/useCommandMenu'; +import { commandMenuPageState } from '@/command-menu/states/commandMenuPageState'; +import { commandMenuPageInfoState } from '@/command-menu/states/commandMenuPageTitle'; +import { CommandMenuPages } from '@/command-menu/types/CommandMenuPages'; +import { useRecoilCallback } from 'recoil'; +import { IconSearch } from 'twenty-ui'; + +export const useSearchRecordsRecordAgnosticAction = () => { + const { openCommandMenu } = useCommandMenu(); + + const onClick = useRecoilCallback( + ({ set }) => + () => { + set(commandMenuPageState, CommandMenuPages.SearchRecords); + set(commandMenuPageInfoState, { + title: 'Search', + Icon: IconSearch, + }); + openCommandMenu(); + }, + [openCommandMenu], + ); + + return { + onClick, + shouldBeRegistered: true, + }; +}; diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/workflow-run-actions/hooks/useWorkflowRunActions.tsx b/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/run-workflow-actions/hooks/useRunWorkflowActions.tsx similarity index 57% rename from packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/workflow-run-actions/hooks/useWorkflowRunActions.tsx rename to packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/run-workflow-actions/hooks/useRunWorkflowActions.tsx index a1a0bf0f2..24d603cb9 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/workflow-run-actions/hooks/useWorkflowRunActions.tsx +++ b/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/run-workflow-actions/hooks/useRunWorkflowActions.tsx @@ -1,4 +1,3 @@ -import { useActionMenuEntries } from '@/action-menu/hooks/useActionMenuEntries'; import { ActionMenuEntryScope, ActionMenuEntryType, @@ -11,55 +10,49 @@ import { capitalize } from 'twenty-shared'; import { IconSettingsAutomation, isDefined } from 'twenty-ui'; import { FeatureFlagKey } from '~/generated/graphql'; -export const useWorkflowRunActions = () => { +export const useRunWorkflowActions = () => { const isWorkflowEnabled = useIsFeatureEnabled( FeatureFlagKey.IsWorkflowEnabled, ); - const { addActionMenuEntry, removeActionMenuEntry } = useActionMenuEntries(); - const { records: activeWorkflowVersions } = useAllActiveWorkflowVersions({ triggerType: 'MANUAL', }); const { runWorkflowVersion } = useRunWorkflowVersion(); - const addWorkflowRunActions = () => { - if (!isWorkflowEnabled) { - return; - } + if (!isWorkflowEnabled) { + return { runWorkflowActions: [] }; + } - for (const [ - index, - activeWorkflowVersion, - ] of activeWorkflowVersions.entries()) { + const runWorkflowActions = activeWorkflowVersions + .map((activeWorkflowVersion, index) => { if (!isDefined(activeWorkflowVersion.workflow)) { - continue; + return undefined; } const name = capitalize(activeWorkflowVersion.workflow.name); - addActionMenuEntry({ + return { type: ActionMenuEntryType.WorkflowRun, key: `workflow-run-${activeWorkflowVersion.id}`, scope: ActionMenuEntryScope.Global, label: name, position: index, Icon: IconSettingsAutomation, - onClick: async () => { - await runWorkflowVersion({ - workflowVersionId: activeWorkflowVersion.id, - }); + useAction: () => { + return { + shouldBeRegistered: true, + onClick: async () => { + await runWorkflowVersion({ + workflowVersionId: activeWorkflowVersion.id, + }); + }, + }; }, - }); - } - }; + }; + }) + .filter(isDefined); - const removeWorkflowRunActions = () => { - for (const activeWorkflowVersion of activeWorkflowVersions) { - removeActionMenuEntry(`workflow-run-${activeWorkflowVersion.id}`); - } - }; - - return { addWorkflowRunActions, removeWorkflowRunActions }; + return { runWorkflowActions }; }; diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/types/RecordAgnosticActionsKey.ts b/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/types/RecordAgnosticActionsKey.ts new file mode 100644 index 000000000..68df5a588 --- /dev/null +++ b/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/types/RecordAgnosticActionsKey.ts @@ -0,0 +1,3 @@ +export enum RecordAgnosticActionsKey { + SEARCH_RECORDS = 'search-records', +} diff --git a/packages/twenty-front/src/modules/action-menu/actions/types/ActionViewType.ts b/packages/twenty-front/src/modules/action-menu/actions/types/ActionViewType.ts index 36c42382e..db450f084 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/types/ActionViewType.ts +++ b/packages/twenty-front/src/modules/action-menu/actions/types/ActionViewType.ts @@ -1,4 +1,5 @@ export enum ActionViewType { + GLOBAL = 'GLOBAL', INDEX_PAGE_BULK_SELECTION = 'INDEX_PAGE_BULK_SELECTION', INDEX_PAGE_SINGLE_RECORD_SELECTION = 'INDEX_PAGE_SINGLE_RECORD_SELECTION', INDEX_PAGE_NO_SELECTION = 'INDEX_PAGE_NO_SELECTION', diff --git a/packages/twenty-front/src/modules/action-menu/components/RecordIndexActionMenu.tsx b/packages/twenty-front/src/modules/action-menu/components/RecordIndexActionMenu.tsx index 2590dadd2..5fa370179 100644 --- a/packages/twenty-front/src/modules/action-menu/components/RecordIndexActionMenu.tsx +++ b/packages/twenty-front/src/modules/action-menu/components/RecordIndexActionMenu.tsx @@ -1,6 +1,7 @@ import { RecordActionMenuEntriesSetter } from '@/action-menu/actions/record-actions/components/RecordActionMenuEntriesSetter'; import { MultipleRecordsActionKeys } from '@/action-menu/actions/record-actions/multiple-records/types/MultipleRecordsActionKeys'; -import { RecordAgnosticActionsSetterEffect } from '@/action-menu/actions/record-agnostic-actions/components/RecordAgnosticActionsSetterEffect'; +import { RecordAgnosticActionMenuEntriesSetter } from '@/action-menu/actions/record-agnostic-actions/components/RecordAgnosticActionMenuEntriesSetter'; +import { RunWorkflowRecordAgnosticActionMenuEntriesSetter } from '@/action-menu/actions/record-agnostic-actions/components/RunWorkflowRecordAgnosticActionMenuEntriesSetter'; import { ActionMenuConfirmationModals } from '@/action-menu/components/ActionMenuConfirmationModals'; import { RecordIndexActionMenuBar } from '@/action-menu/components/RecordIndexActionMenuBar'; import { RecordIndexActionMenuButtons } from '@/action-menu/components/RecordIndexActionMenuButtons'; @@ -21,14 +22,14 @@ export const RecordIndexActionMenu = ({ indexId }: { indexId: string }) => { contextStoreCurrentObjectMetadataIdComponentState, ); - const isWorkflowEnabled = useIsFeatureEnabled( - FeatureFlagKey.IsWorkflowEnabled, - ); - const isCommandMenuV2Enabled = useIsFeatureEnabled( FeatureFlagKey.IsCommandMenuV2Enabled, ); + const isWorkflowEnabled = useIsFeatureEnabled( + FeatureFlagKey.IsWorkflowEnabled, + ); + const isMobile = useIsMobile(); const setIsLoadMoreLocked = useSetRecoilComponentStateV2( @@ -63,7 +64,10 @@ export const RecordIndexActionMenu = ({ indexId }: { indexId: string }) => { - {isWorkflowEnabled && } + + {isWorkflowEnabled && ( + + )} )} diff --git a/packages/twenty-front/src/modules/action-menu/components/RecordShowActionMenu.tsx b/packages/twenty-front/src/modules/action-menu/components/RecordShowActionMenu.tsx index 3d032945b..0fce78a33 100644 --- a/packages/twenty-front/src/modules/action-menu/components/RecordShowActionMenu.tsx +++ b/packages/twenty-front/src/modules/action-menu/components/RecordShowActionMenu.tsx @@ -1,5 +1,6 @@ import { RecordActionMenuEntriesSetter } from '@/action-menu/actions/record-actions/components/RecordActionMenuEntriesSetter'; -import { RecordAgnosticActionsSetterEffect } from '@/action-menu/actions/record-agnostic-actions/components/RecordAgnosticActionsSetterEffect'; +import { RecordAgnosticActionMenuEntriesSetter } from '@/action-menu/actions/record-agnostic-actions/components/RecordAgnosticActionMenuEntriesSetter'; +import { RunWorkflowRecordAgnosticActionMenuEntriesSetter } from '@/action-menu/actions/record-agnostic-actions/components/RunWorkflowRecordAgnosticActionMenuEntriesSetter'; import { ActionMenuConfirmationModals } from '@/action-menu/components/ActionMenuConfirmationModals'; import { RecordShowActionMenuButtons } from '@/action-menu/components/RecordShowActionMenuButtons'; import { ActionMenuContext } from '@/action-menu/contexts/ActionMenuContext'; @@ -29,14 +30,14 @@ export const RecordShowActionMenu = ({ contextStoreCurrentObjectMetadataIdComponentState, ); - const isWorkflowEnabled = useIsFeatureEnabled( - FeatureFlagKey.IsWorkflowEnabled, - ); - const isCommandMenuV2Enabled = useIsFeatureEnabled( FeatureFlagKey.IsCommandMenuV2Enabled, ); + const isWorkflowEnabled = useIsFeatureEnabled( + FeatureFlagKey.IsWorkflowEnabled, + ); + // TODO: refactor RecordShowPageBaseHeader to use the context store return ( @@ -63,7 +64,10 @@ export const RecordShowActionMenu = ({ )} - {isWorkflowEnabled && } + + {isWorkflowEnabled && ( + + )} )} diff --git a/packages/twenty-front/src/modules/action-menu/components/RecordShowRightDrawerActionMenu.tsx b/packages/twenty-front/src/modules/action-menu/components/RecordShowRightDrawerActionMenu.tsx index ac27204f3..754abaf6d 100644 --- a/packages/twenty-front/src/modules/action-menu/components/RecordShowRightDrawerActionMenu.tsx +++ b/packages/twenty-front/src/modules/action-menu/components/RecordShowRightDrawerActionMenu.tsx @@ -1,5 +1,6 @@ import { RecordActionMenuEntriesSetter } from '@/action-menu/actions/record-actions/components/RecordActionMenuEntriesSetter'; -import { RecordAgnosticActionsSetterEffect } from '@/action-menu/actions/record-agnostic-actions/components/RecordAgnosticActionsSetterEffect'; +import { RecordAgnosticActionMenuEntriesSetter } from '@/action-menu/actions/record-agnostic-actions/components/RecordAgnosticActionMenuEntriesSetter'; +import { RunWorkflowRecordAgnosticActionMenuEntriesSetter } from '@/action-menu/actions/record-agnostic-actions/components/RunWorkflowRecordAgnosticActionMenuEntriesSetter'; import { ActionMenuConfirmationModals } from '@/action-menu/components/ActionMenuConfirmationModals'; import { RightDrawerActionMenuDropdown } from '@/action-menu/components/RightDrawerActionMenuDropdown'; import { ActionMenuContext } from '@/action-menu/contexts/ActionMenuContext'; @@ -7,7 +8,7 @@ import { ActionMenuContext } from '@/action-menu/contexts/ActionMenuContext'; import { contextStoreCurrentObjectMetadataIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataIdComponentState'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled'; -import { FeatureFlagKey } from '~/generated/graphql'; +import { FeatureFlagKey } from '~/generated-metadata/graphql'; export const RecordShowRightDrawerActionMenu = () => { const contextStoreCurrentObjectMetadataId = useRecoilComponentValueV2( @@ -25,7 +26,10 @@ export const RecordShowRightDrawerActionMenu = () => { - {isWorkflowEnabled && } + + {isWorkflowEnabled && ( + + )} )} diff --git a/packages/twenty-front/src/modules/action-menu/types/ActionMenuEntry.ts b/packages/twenty-front/src/modules/action-menu/types/ActionMenuEntry.ts index a6df7bbc5..5131b8849 100644 --- a/packages/twenty-front/src/modules/action-menu/types/ActionMenuEntry.ts +++ b/packages/twenty-front/src/modules/action-menu/types/ActionMenuEntry.ts @@ -11,6 +11,7 @@ export enum ActionMenuEntryType { export enum ActionMenuEntryScope { Global = 'Global', RecordSelection = 'RecordSelection', + Object = 'Object', } export type ActionMenuEntry = { @@ -26,4 +27,5 @@ export type ActionMenuEntry = { availableOn?: ActionViewType[]; onClick?: (event?: MouseEvent) => void; ConfirmationModal?: ReactElement; + hotKeys?: string[]; }; diff --git a/packages/twenty-front/src/modules/command-menu/components/CommandMenu.tsx b/packages/twenty-front/src/modules/command-menu/components/CommandMenu.tsx index 17fafdde3..5981639e8 100644 --- a/packages/twenty-front/src/modules/command-menu/components/CommandMenu.tsx +++ b/packages/twenty-front/src/modules/command-menu/components/CommandMenu.tsx @@ -1,92 +1,37 @@ import { CommandGroup } from '@/command-menu/components/CommandGroup'; -import { CommandMenuDefaultSelectionEffect } from '@/command-menu/components/CommandMenuDefaultSelectionEffect'; -import { CommandMenuItem } from '@/command-menu/components/CommandMenuItem'; +import { CommandMenuList } from '@/command-menu/components/CommandMenuList'; import { ResetContextToSelectionCommandButton } from '@/command-menu/components/ResetContextToSelectionCommandButton'; -import { COMMAND_MENU_SEARCH_BAR_HEIGHT } from '@/command-menu/constants/CommandMenuSearchBarHeight'; -import { COMMAND_MENU_SEARCH_BAR_PADDING } from '@/command-menu/constants/CommandMenuSearchBarPadding'; -import { useCommandMenuOnItemClick } from '@/command-menu/hooks/useCommandMenuOnItemClick'; +import { RESET_CONTEXT_TO_SELECTION } from '@/command-menu/constants/ResetContextToSelection'; import { useMatchingCommandMenuCommands } from '@/command-menu/hooks/useMatchingCommandMenuCommands'; -import { useResetPreviousCommandMenuContext } from '@/command-menu/hooks/useResetPreviousCommandMenuContext'; import { commandMenuSearchState } from '@/command-menu/states/commandMenuSearchState'; import { Command } from '@/command-menu/types/Command'; import { contextStoreCurrentObjectMetadataIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataIdComponentState'; import { SelectableItem } from '@/ui/layout/selectable-list/components/SelectableItem'; -import { SelectableList } from '@/ui/layout/selectable-list/components/SelectableList'; -import { AppHotkeyScope } from '@/ui/utilities/hotkey/types/AppHotkeyScope'; -import { useIsMobile } from '@/ui/utilities/responsive/hooks/useIsMobile'; -import { ScrollWrapper } from '@/ui/utilities/scroll/components/ScrollWrapper'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; -import styled from '@emotion/styled'; import { useLingui } from '@lingui/react/macro'; import { isNonEmptyString } from '@sniptt/guards'; import { useRecoilValue } from 'recoil'; import { isDefined } from 'twenty-ui'; -const MOBILE_NAVIGATION_BAR_HEIGHT = 64; - -type CommandGroupConfig = { +export type CommandGroupConfig = { heading: string; items?: Command[]; }; -const StyledList = styled.div` - background: ${({ theme }) => theme.background.secondary}; - overscroll-behavior: contain; - transition: 100ms ease; - transition-property: height; -`; - -const StyledInnerList = styled.div<{ isMobile: boolean }>` - max-height: ${({ isMobile }) => - isMobile - ? `calc(100dvh - ${COMMAND_MENU_SEARCH_BAR_HEIGHT}px - ${ - COMMAND_MENU_SEARCH_BAR_PADDING * 2 - }px - ${MOBILE_NAVIGATION_BAR_HEIGHT}px)` - : `calc(100dvh - ${COMMAND_MENU_SEARCH_BAR_HEIGHT}px - ${ - COMMAND_MENU_SEARCH_BAR_PADDING * 2 - }px)`}; - padding-left: ${({ theme }) => theme.spacing(2)}; - padding-right: ${({ theme }) => theme.spacing(2)}; - padding-top: ${({ theme }) => theme.spacing(1)}; - width: calc(100% - ${({ theme }) => theme.spacing(4)}); -`; - -const StyledEmpty = styled.div` - align-items: center; - color: ${({ theme }) => theme.font.color.light}; - display: flex; - font-size: ${({ theme }) => theme.font.size.md}; - height: 64px; - justify-content: center; - white-space: pre-wrap; -`; - export const CommandMenu = () => { const { t } = useLingui(); - const { onItemClick } = useCommandMenuOnItemClick(); - const { resetPreviousCommandMenuContext } = - useResetPreviousCommandMenuContext(); - const commandMenuSearch = useRecoilValue(commandMenuSearchState); - const isMobile = useIsMobile(); - const { - isNoResults, - isLoading, + noResults, copilotCommands, matchingStandardActionRecordSelectionCommands, + matchingStandardActionObjectCommands, matchingWorkflowRunRecordSelectionCommands, matchingStandardActionGlobalCommands, matchingWorkflowRunGlobalCommands, - matchingNavigateCommand, - peopleCommands, - companyCommands, - opportunityCommands, - noteCommands, - tasksCommands, - customObjectCommands, + matchingNavigateCommands, } = useMatchingCommandMenuCommands({ commandMenuSearch, }); @@ -94,16 +39,11 @@ export const CommandMenu = () => { const selectableItems: Command[] = copilotCommands .concat( matchingStandardActionRecordSelectionCommands, + matchingStandardActionObjectCommands, matchingWorkflowRunRecordSelectionCommands, matchingStandardActionGlobalCommands, matchingWorkflowRunGlobalCommands, - matchingNavigateCommand, - peopleCommands, - companyCommands, - opportunityCommands, - noteCommands, - tasksCommands, - customObjectCommands, + matchingNavigateCommands, ) .filter(isDefined); @@ -115,7 +55,7 @@ export const CommandMenu = () => { const selectableItemIds = selectableItems.map((item) => item.id); if (isNonEmptyString(previousContextStoreCurrentObjectMetadataId)) { - selectableItemIds.unshift('reset-context-to-selection'); + selectableItemIds.unshift(RESET_CONTEXT_TO_SELECTION); } const commandGroups: CommandGroupConfig[] = [ @@ -125,130 +65,35 @@ export const CommandMenu = () => { }, { heading: t`Record Selection`, - items: matchingStandardActionRecordSelectionCommands, + items: matchingStandardActionRecordSelectionCommands.concat( + matchingWorkflowRunRecordSelectionCommands, + ), }, { - heading: t`Workflow Record Selection`, - items: matchingWorkflowRunRecordSelectionCommands, + heading: t`Object`, + items: matchingStandardActionObjectCommands, }, { - heading: t`View`, - items: matchingStandardActionGlobalCommands, - }, - { - heading: t`Workflows`, - items: matchingWorkflowRunGlobalCommands, - }, - { - heading: t`Navigate`, - items: matchingNavigateCommand, - }, - { - heading: t`People`, - items: peopleCommands, - }, - { - heading: t`Companies`, - items: companyCommands, - }, - { - heading: t`Opportunities`, - items: opportunityCommands, - }, - { - heading: t`Notes`, - items: noteCommands, - }, - { - heading: t`Tasks`, - items: tasksCommands, - }, - { - heading: t`Custom Objects`, - items: customObjectCommands, + heading: t`Global`, + items: matchingStandardActionGlobalCommands + .concat(matchingNavigateCommands) + .concat(matchingWorkflowRunGlobalCommands), }, ]; return ( - <> - - - - - - { - if (itemId === 'reset-context-to-selection') { - resetPreviousCommandMenuContext(); - return; - } - - const command = selectableItems.find( - (item) => item.id === itemId, - ); - - if (isDefined(command)) { - const { to, onCommandClick, shouldCloseCommandMenuOnClick } = - command; - - onItemClick({ - shouldCloseCommandMenuOnClick, - onClick: onCommandClick, - to, - }); - } - }} - > - {isNonEmptyString( - previousContextStoreCurrentObjectMetadataId, - ) && ( - - - - - - )} - - {isNoResults && !isLoading && ( - No results found - )} - {commandGroups.map(({ heading, items }) => - items?.length ? ( - - {items.map((item) => { - return ( - - - - ); - })} - - ) : null, - )} - - - - - + + {isNonEmptyString(previousContextStoreCurrentObjectMetadataId) && ( + + + + + + )} + ); }; diff --git a/packages/twenty-front/src/modules/command-menu/components/CommandMenuContainer.tsx b/packages/twenty-front/src/modules/command-menu/components/CommandMenuContainer.tsx index 694637ed7..b5e2f027d 100644 --- a/packages/twenty-front/src/modules/command-menu/components/CommandMenuContainer.tsx +++ b/packages/twenty-front/src/modules/command-menu/components/CommandMenuContainer.tsx @@ -1,5 +1,7 @@ import { RecordActionMenuEntriesSetter } from '@/action-menu/actions/record-actions/components/RecordActionMenuEntriesSetter'; -import { RecordAgnosticActionsSetterEffect } from '@/action-menu/actions/record-agnostic-actions/components/RecordAgnosticActionsSetterEffect'; +import { RecordAgnosticActionMenuEntriesSetter } from '@/action-menu/actions/record-agnostic-actions/components/RecordAgnosticActionMenuEntriesSetter'; +import { RunWorkflowRecordAgnosticActionMenuEntriesSetter } from '@/action-menu/actions/record-agnostic-actions/components/RunWorkflowRecordAgnosticActionMenuEntriesSetter'; +import { RecordAgnosticActionsKey } from '@/action-menu/actions/record-agnostic-actions/types/RecordAgnosticActionsKey'; import { ActionMenuConfirmationModals } from '@/action-menu/components/ActionMenuConfirmationModals'; import { ActionMenuContext } from '@/action-menu/contexts/ActionMenuContext'; import { ActionMenuComponentInstanceContext } from '@/action-menu/states/contexts/ActionMenuComponentInstanceContext'; @@ -20,7 +22,7 @@ import { motion } from 'framer-motion'; import { useRef } from 'react'; import { useRecoilValue } from 'recoil'; import { useIsMobile } from 'twenty-ui'; -import { FeatureFlagKey } from '~/generated/graphql'; +import { FeatureFlagKey } from '~/generated-metadata/graphql'; const StyledCommandMenu = styled(motion.div)` background: ${({ theme }) => theme.background.secondary}; @@ -45,9 +47,6 @@ export const CommandMenuContainer = ({ }) => { const { toggleCommandMenu, closeCommandMenu } = useCommandMenu(); - const isWorkflowEnabled = useIsFeatureEnabled( - FeatureFlagKey.IsWorkflowEnabled, - ); const isCommandMenuOpened = useRecoilValue(isCommandMenuOpenedState); const commandMenuRef = useRef(null); @@ -74,6 +73,10 @@ export const CommandMenuContainer = ({ const theme = useTheme(); + const isWorkflowEnabled = useIsFeatureEnabled( + FeatureFlagKey.IsWorkflowEnabled, + ); + return ( { + if (key !== RecordAgnosticActionsKey.SEARCH_RECORDS) { + toggleCommandMenu(); + } + }, }} > - {isWorkflowEnabled && } + + {isWorkflowEnabled && ( + + )} {isCommandMenuOpened && ( void; Icon?: IconComponent; - firstHotKey?: string; - secondHotKey?: string; + hotKeys?: string[]; shouldCloseCommandMenuOnClick?: boolean; RightComponent?: ReactNode; }; @@ -24,8 +23,7 @@ export const CommandMenuItem = ({ id, onClick, Icon, - firstHotKey, - secondHotKey, + hotKeys, shouldCloseCommandMenuOnClick, RightComponent, }: CommandMenuItemProps) => { @@ -42,8 +40,7 @@ export const CommandMenuItem = ({ onItemClick({ shouldCloseCommandMenuOnClick, diff --git a/packages/twenty-front/src/modules/command-menu/components/CommandMenuList.tsx b/packages/twenty-front/src/modules/command-menu/components/CommandMenuList.tsx new file mode 100644 index 000000000..a84de6ec2 --- /dev/null +++ b/packages/twenty-front/src/modules/command-menu/components/CommandMenuList.tsx @@ -0,0 +1,146 @@ +import { CommandGroup } from '@/command-menu/components/CommandGroup'; +import { CommandGroupConfig } from '@/command-menu/components/CommandMenu'; +import { CommandMenuDefaultSelectionEffect } from '@/command-menu/components/CommandMenuDefaultSelectionEffect'; +import { CommandMenuItem } from '@/command-menu/components/CommandMenuItem'; +import { COMMAND_MENU_SEARCH_BAR_HEIGHT } from '@/command-menu/constants/CommandMenuSearchBarHeight'; +import { COMMAND_MENU_SEARCH_BAR_PADDING } from '@/command-menu/constants/CommandMenuSearchBarPadding'; +import { RESET_CONTEXT_TO_SELECTION } from '@/command-menu/constants/ResetContextToSelection'; +import { useCommandMenuOnItemClick } from '@/command-menu/hooks/useCommandMenuOnItemClick'; +import { useResetPreviousCommandMenuContext } from '@/command-menu/hooks/useResetPreviousCommandMenuContext'; +import { SelectableItem } from '@/ui/layout/selectable-list/components/SelectableItem'; +import { SelectableList } from '@/ui/layout/selectable-list/components/SelectableList'; +import { AppHotkeyScope } from '@/ui/utilities/hotkey/types/AppHotkeyScope'; +import { ScrollWrapper } from '@/ui/utilities/scroll/components/ScrollWrapper'; +import styled from '@emotion/styled'; +import { MOBILE_VIEWPORT, isDefined } from 'twenty-ui'; + +const MOBILE_NAVIGATION_BAR_HEIGHT = 64; + +export type CommandMenuListProps = { + commandGroups: CommandGroupConfig[]; + selectableItemIds: string[]; + children?: React.ReactNode; + loading?: boolean; + noResults?: boolean; +}; + +const StyledList = styled.div` + background: ${({ theme }) => theme.background.secondary}; + overscroll-behavior: contain; + transition: 100ms ease; + transition-property: height; +`; + +const StyledInnerList = styled.div` + max-height: calc( + 100dvh - ${COMMAND_MENU_SEARCH_BAR_HEIGHT}px - + ${COMMAND_MENU_SEARCH_BAR_PADDING * 2}px - + ${MOBILE_NAVIGATION_BAR_HEIGHT}px + ); + padding-left: ${({ theme }) => theme.spacing(2)}; + padding-right: ${({ theme }) => theme.spacing(2)}; + padding-top: ${({ theme }) => theme.spacing(1)}; + width: calc(100% - ${({ theme }) => theme.spacing(4)}); + + @media (min-width: ${MOBILE_VIEWPORT}px) { + max-height: calc( + 100dvh - ${COMMAND_MENU_SEARCH_BAR_HEIGHT}px - + ${COMMAND_MENU_SEARCH_BAR_PADDING * 2}px + ); + } +`; + +const StyledEmpty = styled.div` + align-items: center; + color: ${({ theme }) => theme.font.color.light}; + display: flex; + font-size: ${({ theme }) => theme.font.size.md}; + height: 64px; + justify-content: center; + white-space: pre-wrap; +`; + +export const CommandMenuList = ({ + commandGroups, + selectableItemIds, + children, + loading = false, + noResults = false, +}: CommandMenuListProps) => { + const { onItemClick } = useCommandMenuOnItemClick(); + + const commands = commandGroups.flatMap((group) => group.items ?? []); + + const { resetPreviousCommandMenuContext } = + useResetPreviousCommandMenuContext(); + + return ( + <> + + + + + { + if (itemId === RESET_CONTEXT_TO_SELECTION) { + resetPreviousCommandMenuContext(); + return; + } + + const command = commands.find((item) => item.id === itemId); + + if (isDefined(command)) { + const { to, onCommandClick, shouldCloseCommandMenuOnClick } = + command; + + onItemClick({ + shouldCloseCommandMenuOnClick, + onClick: onCommandClick, + to, + }); + } + }} + > + {children} + {noResults && !loading && ( + No result found + )} + {commandGroups.map(({ heading, items }) => + items?.length ? ( + + {items.map((item) => { + return ( + + + + ); + })} + + ) : null, + )} + + + + + + ); +}; diff --git a/packages/twenty-front/src/modules/command-menu/components/CommandMenuTopBar.tsx b/packages/twenty-front/src/modules/command-menu/components/CommandMenuTopBar.tsx index 72bad17e2..e71b4fe30 100644 --- a/packages/twenty-front/src/modules/command-menu/components/CommandMenuTopBar.tsx +++ b/packages/twenty-front/src/modules/command-menu/components/CommandMenuTopBar.tsx @@ -1,12 +1,12 @@ import { CommandMenuContextChip } from '@/command-menu/components/CommandMenuContextChip'; import { CommandMenuContextRecordChip } from '@/command-menu/components/CommandMenuContextRecordChip'; -import { CommandMenuPages } from '@/command-menu/components/CommandMenuPages'; import { COMMAND_MENU_SEARCH_BAR_HEIGHT } from '@/command-menu/constants/CommandMenuSearchBarHeight'; import { COMMAND_MENU_SEARCH_BAR_PADDING } from '@/command-menu/constants/CommandMenuSearchBarPadding'; import { useCommandMenu } from '@/command-menu/hooks/useCommandMenu'; import { commandMenuPageState } from '@/command-menu/states/commandMenuPageState'; import { commandMenuPageInfoState } from '@/command-menu/states/commandMenuPageTitle'; import { commandMenuSearchState } from '@/command-menu/states/commandMenuSearchState'; +import { CommandMenuPages } from '@/command-menu/types/CommandMenuPages'; import { contextStoreCurrentObjectMetadataIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataIdComponentState'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { useTheme } from '@emotion/react'; @@ -95,11 +95,12 @@ export const CommandMenuTopBar = () => { return ( - {isDefined(contextStoreCurrentObjectMetadataId) && ( - - )} + {commandMenuPage !== CommandMenuPages.SearchRecords && + isDefined(contextStoreCurrentObjectMetadataId) && ( + + )} {isDefined(Icon) && ( ]} @@ -107,7 +108,8 @@ export const CommandMenuTopBar = () => { /> )} - {commandMenuPage === CommandMenuPages.Root && ( + {(commandMenuPage === CommandMenuPages.Root || + commandMenuPage === CommandMenuPages.SearchRecords) && ( { return ( { const canvas = within(document.body); - expect(await canvas.findByText('Go to People')).toBeInTheDocument(); - expect(await canvas.findByText('Go to Companies')).toBeInTheDocument(); - expect(await canvas.findByText('Go to Opportunities')).toBeInTheDocument(); - expect(await canvas.findByText('Go to Settings')).toBeInTheDocument(); - expect(await canvas.findByText('Go to Tasks')).toBeInTheDocument(); + expect(await canvas.findByText('Go to People')).toBeVisible(); + expect(await canvas.findByText('Go to Companies')).toBeVisible(); + expect(await canvas.findByText('Go to Opportunities')).toBeVisible(); + expect(await canvas.findByText('Go to Settings')).toBeVisible(); + expect(await canvas.findByText('Go to Tasks')).toBeVisible(); }, }; -export const MatchingPersonCompanyActivityCreateNavigate: Story = { - play: async () => { - const canvas = within(document.body); - const searchInput = await canvas.findByPlaceholderText('Type anything'); - await sleep(openTimeout); - await userEvent.type(searchInput, 'n'); - expect(await canvas.findByText('Linkedin')).toBeInTheDocument(); - expect(await canvas.findByText(companiesMock[0].name)).toBeInTheDocument(); - expect(await canvas.findByText('Go to Companies')).toBeInTheDocument(); - }, -}; - -export const OnlyMatchingCreateAndNavigate: Story = { +export const MatchingNavigate: Story = { play: async () => { const canvas = within(document.body); const searchInput = await canvas.findByPlaceholderText('Type anything'); await sleep(openTimeout); await userEvent.type(searchInput, 'ta'); - expect(await canvas.findByText('Go to Tasks')).toBeInTheDocument(); + expect(await canvas.findByText('Go to Tasks')).toBeVisible(); }, }; -export const AtleastMatchingOnePerson: Story = { +export const MatchingNavigateShortcuts: Story = { play: async () => { const canvas = within(document.body); const searchInput = await canvas.findByPlaceholderText('Type anything'); await sleep(openTimeout); - await userEvent.type(searchInput, 'alex'); - expect(await canvas.findByText('Sylvie Palmer')).toBeInTheDocument(); + await userEvent.type(searchInput, 'gp'); + expect(await canvas.findByText('Go to People')).toBeVisible(); + }, +}; + +export const SearchRecordsAction: Story = { + play: async () => { + const canvas = within(document.body); + const searchRecordsButton = await canvas.findByText('Search records'); + await userEvent.click(searchRecordsButton); + const searchInput = await canvas.findByPlaceholderText('Type anything'); + await sleep(openTimeout); + await userEvent.type(searchInput, 'n'); + expect(await canvas.findByText('Linkedin')).toBeVisible(); + expect(await canvas.findByText(companiesMock[0].name)).toBeVisible(); }, }; diff --git a/packages/twenty-front/src/modules/command-menu/constants/CommandMenuNavigateCommands.ts b/packages/twenty-front/src/modules/command-menu/constants/CommandMenuNavigateCommands.ts index 93ca1f9df..261d6bd57 100644 --- a/packages/twenty-front/src/modules/command-menu/constants/CommandMenuNavigateCommands.ts +++ b/packages/twenty-front/src/modules/command-menu/constants/CommandMenuNavigateCommands.ts @@ -21,8 +21,7 @@ export const COMMAND_MENU_NAVIGATE_COMMANDS: { [key: string]: Command } = { }), label: 'Go to People', type: CommandType.Navigate, - firstHotKey: 'G', - secondHotKey: 'P', + hotKeys: ['G', 'P'], Icon: IconUser, shouldCloseCommandMenuOnClick: true, }, @@ -33,8 +32,7 @@ export const COMMAND_MENU_NAVIGATE_COMMANDS: { [key: string]: Command } = { }), label: 'Go to Companies', type: CommandType.Navigate, - firstHotKey: 'G', - secondHotKey: 'C', + hotKeys: ['G', 'C'], Icon: IconBuildingSkyscraper, shouldCloseCommandMenuOnClick: true, }, @@ -45,8 +43,7 @@ export const COMMAND_MENU_NAVIGATE_COMMANDS: { [key: string]: Command } = { }), label: 'Go to Opportunities', type: CommandType.Navigate, - firstHotKey: 'G', - secondHotKey: 'O', + hotKeys: ['G', 'O'], Icon: IconTargetArrow, shouldCloseCommandMenuOnClick: true, }, @@ -55,8 +52,7 @@ export const COMMAND_MENU_NAVIGATE_COMMANDS: { [key: string]: Command } = { to: getSettingsPath(SettingsPath.ProfilePage), label: 'Go to Settings', type: CommandType.Navigate, - firstHotKey: 'G', - secondHotKey: 'S', + hotKeys: ['G', 'S'], Icon: IconSettings, shouldCloseCommandMenuOnClick: true, }, @@ -67,8 +63,7 @@ export const COMMAND_MENU_NAVIGATE_COMMANDS: { [key: string]: Command } = { }), label: 'Go to Tasks', type: CommandType.Navigate, - firstHotKey: 'G', - secondHotKey: 'T', + hotKeys: ['G', 'T'], Icon: IconCheckbox, shouldCloseCommandMenuOnClick: true, }, diff --git a/packages/twenty-front/src/modules/command-menu/constants/CommandMenuPagesConfig.tsx b/packages/twenty-front/src/modules/command-menu/constants/CommandMenuPagesConfig.tsx index dbb14d854..16832c625 100644 --- a/packages/twenty-front/src/modules/command-menu/constants/CommandMenuPagesConfig.tsx +++ b/packages/twenty-front/src/modules/command-menu/constants/CommandMenuPagesConfig.tsx @@ -2,7 +2,8 @@ import { RightDrawerCalendarEvent } from '@/activities/calendar/right-drawer/com import { RightDrawerAIChat } from '@/activities/copilot/right-drawer/components/RightDrawerAIChat'; import { RightDrawerEmailThread } from '@/activities/emails/right-drawer/components/RightDrawerEmailThread'; import { CommandMenu } from '@/command-menu/components/CommandMenu'; -import { CommandMenuPages } from '@/command-menu/components/CommandMenuPages'; +import { CommandMenuSearchRecordsPage } from '@/command-menu/pages/components/CommandMenuSearchRecordsPage'; +import { CommandMenuPages } from '@/command-menu/types/CommandMenuPages'; import { RightDrawerRecord } from '@/object-record/record-right-drawer/components/RightDrawerRecord'; import { RightDrawerWorkflowEditStep } from '@/workflow/workflow-steps/components/RightDrawerWorkflowEditStep'; import { RightDrawerWorkflowViewStep } from '@/workflow/workflow-steps/components/RightDrawerWorkflowViewStep'; @@ -28,4 +29,5 @@ export const COMMAND_MENU_PAGES_CONFIG = new Map< ], [CommandMenuPages.WorkflowStepEdit, ], [CommandMenuPages.WorkflowStepView, ], + [CommandMenuPages.SearchRecords, ], ]); diff --git a/packages/twenty-front/src/modules/command-menu/constants/ResetContextToSelection.ts b/packages/twenty-front/src/modules/command-menu/constants/ResetContextToSelection.ts new file mode 100644 index 000000000..7c49587cf --- /dev/null +++ b/packages/twenty-front/src/modules/command-menu/constants/ResetContextToSelection.ts @@ -0,0 +1 @@ +export const RESET_CONTEXT_TO_SELECTION = 'reset-context-to-selection'; diff --git a/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenu.ts b/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenu.ts index 7e65610c3..b4ce57fd3 100644 --- a/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenu.ts +++ b/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenu.ts @@ -5,11 +5,11 @@ import { useSelectableList } from '@/ui/layout/selectable-list/hooks/useSelectab import { usePreviousHotkeyScope } from '@/ui/utilities/hotkey/hooks/usePreviousHotkeyScope'; import { AppHotkeyScope } from '@/ui/utilities/hotkey/types/AppHotkeyScope'; -import { CommandMenuPages } from '@/command-menu/components/CommandMenuPages'; import { useCopyContextStoreStates } from '@/command-menu/hooks/useCopyContextStoreAndActionMenuStates'; import { useResetContextStoreStates } from '@/command-menu/hooks/useResetContextStoreStates'; import { commandMenuPageState } from '@/command-menu/states/commandMenuPageState'; import { commandMenuPageInfoState } from '@/command-menu/states/commandMenuPageTitle'; +import { CommandMenuPages } from '@/command-menu/types/CommandMenuPages'; import { contextStoreCurrentViewTypeComponentState } from '@/context-store/states/contextStoreCurrentViewTypeComponentState'; import { contextStoreFiltersComponentState } from '@/context-store/states/contextStoreFiltersComponentState'; import { contextStoreNumberOfSelectedRecordsComponentState } from '@/context-store/states/contextStoreNumberOfSelectedRecordsComponentState'; @@ -19,6 +19,7 @@ import { ContextStoreViewType } from '@/context-store/types/ContextStoreViewType import { viewableRecordIdState } from '@/object-record/record-right-drawer/states/viewableRecordIdState'; import { viewableRecordNameSingularState } from '@/object-record/record-right-drawer/states/viewableRecordNameSingularState'; import { emitRightDrawerCloseEvent } from '@/ui/layout/right-drawer/utils/emitRightDrawerCloseEvent'; +import { IconSearch } from 'twenty-ui'; import { isCommandMenuOpenedState } from '../states/isCommandMenuOpenedState'; export const useCommandMenu = () => { @@ -71,6 +72,7 @@ export const useCommandMenu = () => { Icon: undefined, }); set(isCommandMenuOpenedState, false); + set(commandMenuSearchState, ''); resetSelectedItem(); goBackToPreviousHotkeyScope(); @@ -110,6 +112,20 @@ export const useCommandMenu = () => { [openCommandMenu], ); + const openRecordsSearchPage = useRecoilCallback( + ({ set }) => { + return () => { + set(commandMenuPageState, CommandMenuPages.SearchRecords); + set(commandMenuPageInfoState, { + title: 'Search', + Icon: IconSearch, + }); + openCommandMenu(); + }; + }, + [openCommandMenu], + ); + const setGlobalCommandMenuContext = useRecoilCallback( ({ set }) => { return () => { @@ -161,6 +177,7 @@ export const useCommandMenu = () => { return { openCommandMenu, closeCommandMenu, + openRecordsSearchPage, openRecordInCommandMenu, toggleCommandMenu, setGlobalCommandMenuContext, diff --git a/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenuCommands.tsx b/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenuCommands.tsx index bc081c252..d75f5978e 100644 --- a/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenuCommands.tsx +++ b/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenuCommands.tsx @@ -5,43 +5,25 @@ import { } from '@/action-menu/types/ActionMenuEntry'; import { useOpenCopilotRightDrawer } from '@/activities/copilot/right-drawer/hooks/useOpenCopilotRightDrawer'; import { copilotQueryState } from '@/activities/copilot/right-drawer/states/copilotQueryState'; -import { useOpenActivityRightDrawer } from '@/activities/hooks/useOpenActivityRightDrawer'; -import { Note } from '@/activities/types/Note'; -import { Task } from '@/activities/types/Task'; import { COMMAND_MENU_NAVIGATE_COMMANDS } from '@/command-menu/constants/CommandMenuNavigateCommands'; import { commandMenuSearchState } from '@/command-menu/states/commandMenuSearchState'; -import { isCommandMenuOpenedState } from '@/command-menu/states/isCommandMenuOpenedState'; import { Command, CommandScope, CommandType, } from '@/command-menu/types/Command'; -import { Company } from '@/companies/types/Company'; -import { CoreObjectNamePlural } from '@/object-metadata/types/CoreObjectNamePlural'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; -import { getCompanyDomainName } from '@/object-metadata/utils/getCompanyDomainName'; -import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords'; -import { useMultiObjectSearch } from '@/object-record/relation-picker/hooks/useMultiObjectSearch'; -import { useMultiObjectSearchQueryResultFormattedAsObjectRecordsMap } from '@/object-record/relation-picker/hooks/useMultiObjectSearchQueryResultFormattedAsObjectRecordsMap'; -import { makeOrFilterVariables } from '@/object-record/utils/makeOrFilterVariables'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled'; -import isEmpty from 'lodash.isempty'; -import { useMemo } from 'react'; import { useRecoilValue, useSetRecoilState } from 'recoil'; -import { Avatar, IconCheckbox, IconNotes, IconSparkles } from 'twenty-ui'; +import { IconSparkles } from 'twenty-ui'; import { useDebounce } from 'use-debounce'; import { FeatureFlagKey } from '~/generated/graphql'; -import { getLogoUrlFromDomainName } from '~/utils'; export const useCommandMenuCommands = () => { const actionMenuEntries = useRecoilComponentValueV2( actionMenuEntriesComponentSelector, ); - const openActivityRightDrawer = useOpenActivityRightDrawer({ - objectNameSingular: CoreObjectNameSingular.Note, - }); - const isCommandMenuOpened = useRecoilValue(isCommandMenuOpenedState); + const commandMenuSearch = useRecoilValue(commandMenuSearchState); const [deferredCommandMenuSearch] = useDebounce(commandMenuSearch, 300); // 200ms - 500ms @@ -78,6 +60,23 @@ export const useCommandMenuCommands = () => { onCommandClick: actionMenuEntry.onClick, type: CommandType.StandardAction, scope: CommandScope.RecordSelection, + hotKeys: actionMenuEntry.hotKeys, + })); + + const actionObjectCommands: Command[] = actionMenuEntries + ?.filter( + (actionMenuEntry) => + actionMenuEntry.type === ActionMenuEntryType.Standard && + actionMenuEntry.scope === ActionMenuEntryScope.Object, + ) + ?.map((actionMenuEntry) => ({ + id: actionMenuEntry.key, + label: actionMenuEntry.label, + Icon: actionMenuEntry.Icon, + onCommandClick: actionMenuEntry.onClick, + type: CommandType.StandardAction, + scope: CommandScope.Object, + hotKeys: actionMenuEntry.hotKeys, })); const actionGlobalCommands: Command[] = actionMenuEntries @@ -93,6 +92,7 @@ export const useCommandMenuCommands = () => { onCommandClick: actionMenuEntry.onClick, type: CommandType.StandardAction, scope: CommandScope.Global, + hotKeys: actionMenuEntry.hotKeys, })); const workflowRunRecordSelectionCommands: Command[] = actionMenuEntries @@ -108,6 +108,7 @@ export const useCommandMenuCommands = () => { onCommandClick: actionMenuEntry.onClick, type: CommandType.WorkflowRun, scope: CommandScope.RecordSelection, + hotKeys: actionMenuEntry.hotKeys, })); const workflowRunGlobalCommands: Command[] = actionMenuEntries @@ -123,193 +124,16 @@ export const useCommandMenuCommands = () => { onCommandClick: actionMenuEntry.onClick, type: CommandType.WorkflowRun, scope: CommandScope.Global, + hotKeys: actionMenuEntry.hotKeys, })); - const { - matchesSearchFilterObjectRecordsQueryResult, - matchesSearchFilterObjectRecordsLoading: loading, - } = useMultiObjectSearch({ - excludedObjects: [CoreObjectNameSingular.Task, CoreObjectNameSingular.Note], - searchFilterValue: deferredCommandMenuSearch ?? undefined, - limit: 3, - }); - - const { objectRecordsMap: matchesSearchFilterObjectRecords } = - useMultiObjectSearchQueryResultFormattedAsObjectRecordsMap({ - multiObjectRecordsQueryResult: - matchesSearchFilterObjectRecordsQueryResult, - }); - - const { loading: isNotesLoading, records: notes } = useFindManyRecords({ - skip: !isCommandMenuOpened, - objectNameSingular: CoreObjectNameSingular.Note, - filter: deferredCommandMenuSearch - ? makeOrFilterVariables([ - { title: { ilike: `%${deferredCommandMenuSearch}%` } }, - { body: { ilike: `%${deferredCommandMenuSearch}%` } }, - ]) - : undefined, - limit: 3, - }); - - const { loading: isTasksLoading, records: tasks } = useFindManyRecords({ - skip: !isCommandMenuOpened, - objectNameSingular: CoreObjectNameSingular.Task, - filter: deferredCommandMenuSearch - ? makeOrFilterVariables([ - { title: { ilike: `%${deferredCommandMenuSearch}%` } }, - { body: { ilike: `%${deferredCommandMenuSearch}%` } }, - ]) - : undefined, - limit: 3, - }); - - const people = matchesSearchFilterObjectRecords.people?.map( - (people) => people.record, - ); - const companies = matchesSearchFilterObjectRecords.companies?.map( - (companies) => companies.record, - ); - const opportunities = matchesSearchFilterObjectRecords.opportunities?.map( - (opportunities) => opportunities.record, - ); - - const peopleCommands = useMemo( - () => - people?.map(({ id, name: { firstName, lastName }, avatarUrl }) => ({ - id, - label: `${firstName} ${lastName}`, - to: `object/person/${id}`, - shouldCloseCommandMenuOnClick: true, - Icon: () => ( - - ), - })), - [people], - ); - - const companyCommands = useMemo( - () => - companies?.map((company) => ({ - id: company.id, - label: company.name ?? '', - to: `object/company/${company.id}`, - shouldCloseCommandMenuOnClick: true, - Icon: () => ( - - ), - })), - [companies], - ); - - const opportunityCommands = useMemo( - () => - opportunities?.map(({ id, name }) => ({ - id, - label: name ?? '', - to: `object/opportunity/${id}`, - shouldCloseCommandMenuOnClick: true, - Icon: () => ( - - ), - })), - [opportunities], - ); - - const noteCommands = useMemo( - () => - notes?.map((note) => ({ - id: note.id, - label: note.title ?? '', - to: '', - onCommandClick: () => openActivityRightDrawer(note.id), - shouldCloseCommandMenuOnClick: true, - Icon: IconNotes, - })), - [notes, openActivityRightDrawer], - ); - - const tasksCommands = useMemo( - () => - tasks?.map((task) => ({ - id: task.id, - label: task.title ?? '', - to: '', - onCommandClick: () => openActivityRightDrawer(task.id), - shouldCloseCommandMenuOnClick: true, - Icon: IconCheckbox, - })), - [tasks, openActivityRightDrawer], - ); - - const customObjectRecordsMap = useMemo(() => { - return Object.fromEntries( - Object.entries(matchesSearchFilterObjectRecords).filter( - ([namePlural, records]) => - ![ - CoreObjectNamePlural.Person, - CoreObjectNamePlural.Opportunity, - CoreObjectNamePlural.Company, - ].includes(namePlural as CoreObjectNamePlural) && !isEmpty(records), - ), - ); - }, [matchesSearchFilterObjectRecords]); - - const customObjectCommands = useMemo(() => { - const customObjectCommandsArray: Command[] = []; - Object.values(customObjectRecordsMap).forEach((objectRecords) => { - customObjectCommandsArray.push( - ...objectRecords.map((objectRecord) => ({ - id: objectRecord.record.id, - label: objectRecord.recordIdentifier.name, - to: `object/${objectRecord.objectMetadataItem.nameSingular}/${objectRecord.record.id}`, - shouldCloseCommandMenuOnClick: true, - Icon: () => ( - - ), - })), - ); - }); - - return customObjectCommandsArray; - }, [customObjectRecordsMap]); - - const isLoading = loading || isNotesLoading || isTasksLoading; - return { copilotCommands, navigateCommands, actionRecordSelectionCommands, actionGlobalCommands, + actionObjectCommands, workflowRunRecordSelectionCommands, workflowRunGlobalCommands, - peopleCommands, - companyCommands, - opportunityCommands, - noteCommands, - tasksCommands, - customObjectCommands, - isLoading, }; }; diff --git a/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenuHotKeys.ts b/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenuHotKeys.ts index c8c6e32a4..fe5dc1365 100644 --- a/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenuHotKeys.ts +++ b/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenuHotKeys.ts @@ -1,7 +1,7 @@ -import { CommandMenuPages } from '@/command-menu/components/CommandMenuPages'; import { useCommandMenu } from '@/command-menu/hooks/useCommandMenu'; import { commandMenuPageState } from '@/command-menu/states/commandMenuPageState'; import { commandMenuSearchState } from '@/command-menu/states/commandMenuSearchState'; +import { CommandMenuPages } from '@/command-menu/types/CommandMenuPages'; import { contextStoreTargetedRecordsRuleComponentState } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState'; import { useKeyboardShortcutMenu } from '@/keyboard-shortcut-menu/hooks/useKeyboardShortcutMenu'; import { useScopedHotkeys } from '@/ui/utilities/hotkey/hooks/useScopedHotkeys'; @@ -12,8 +12,12 @@ import { useRecoilValue } from 'recoil'; import { Key } from 'ts-key-enum'; export const useCommandMenuHotKeys = () => { - const { closeCommandMenu, toggleCommandMenu, setGlobalCommandMenuContext } = - useCommandMenu(); + const { + closeCommandMenu, + openRecordsSearchPage, + toggleCommandMenu, + setGlobalCommandMenuContext, + } = useCommandMenu(); const commandMenuSearch = useRecoilValue(commandMenuSearchState); @@ -36,6 +40,18 @@ export const useCommandMenuHotKeys = () => { [toggleCommandMenu], ); + useScopedHotkeys( + ['/'], + () => { + openRecordsSearchPage(); + }, + AppHotkeyScope.KeyboardShortcutMenu, + [openRecordsSearchPage], + { + ignoreModifiers: true, + }, + ); + useScopedHotkeys( [Key.Escape], () => { diff --git a/packages/twenty-front/src/modules/command-menu/hooks/useMatchCommands.ts b/packages/twenty-front/src/modules/command-menu/hooks/useMatchCommands.ts index 42bf653a3..1c0b3d976 100644 --- a/packages/twenty-front/src/modules/command-menu/hooks/useMatchCommands.ts +++ b/packages/twenty-front/src/modules/command-menu/hooks/useMatchCommands.ts @@ -10,9 +10,10 @@ export const useMatchCommands = ({ const [deferredCommandMenuSearch] = useDebounce(commandMenuSearch, 300); // 200ms - 500ms const checkInShortcuts = (cmd: Command, search: string) => { - return (cmd.firstHotKey + (cmd.secondHotKey ?? '')) + const concatenatedString = cmd.hotKeys?.join('') ?? ''; + return concatenatedString .toLowerCase() - .includes(search.toLowerCase()); + .includes(search.toLowerCase().trim()); }; const checkInLabels = (cmd: Command, search: string) => { diff --git a/packages/twenty-front/src/modules/command-menu/hooks/useMatchingCommandMenuCommands.ts b/packages/twenty-front/src/modules/command-menu/hooks/useMatchingCommandMenuCommands.ts index b4607ada7..698b0e179 100644 --- a/packages/twenty-front/src/modules/command-menu/hooks/useMatchingCommandMenuCommands.ts +++ b/packages/twenty-front/src/modules/command-menu/hooks/useMatchingCommandMenuCommands.ts @@ -12,24 +12,21 @@ export const useMatchingCommandMenuCommands = ({ copilotCommands, navigateCommands, actionRecordSelectionCommands, + actionObjectCommands, actionGlobalCommands, workflowRunRecordSelectionCommands, workflowRunGlobalCommands, - peopleCommands, - companyCommands, - opportunityCommands, - noteCommands, - tasksCommands, - customObjectCommands, - isLoading, } = useCommandMenuCommands(); - const matchingNavigateCommand = matchCommands(navigateCommands); + const matchingNavigateCommands = matchCommands(navigateCommands); const matchingStandardActionRecordSelectionCommands = matchCommands( actionRecordSelectionCommands, ); + const matchingStandardActionObjectCommands = + matchCommands(actionObjectCommands); + const matchingStandardActionGlobalCommands = matchCommands(actionGlobalCommands); @@ -41,33 +38,22 @@ export const useMatchingCommandMenuCommands = ({ workflowRunGlobalCommands, ); - const isNoResults = + const noResults = !matchingStandardActionRecordSelectionCommands.length && !matchingWorkflowRunRecordSelectionCommands.length && !matchingStandardActionGlobalCommands.length && !matchingWorkflowRunGlobalCommands.length && - !matchingNavigateCommand.length && - !peopleCommands?.length && - !companyCommands?.length && - !opportunityCommands?.length && - !noteCommands?.length && - !tasksCommands?.length && - !customObjectCommands?.length; + !matchingStandardActionObjectCommands.length && + !matchingNavigateCommands.length; return { - isNoResults, - isLoading, + noResults, copilotCommands, matchingStandardActionRecordSelectionCommands, + matchingStandardActionObjectCommands, matchingWorkflowRunRecordSelectionCommands, matchingStandardActionGlobalCommands, matchingWorkflowRunGlobalCommands, - matchingNavigateCommand, - peopleCommands, - companyCommands, - opportunityCommands, - noteCommands, - tasksCommands, - customObjectCommands, + matchingNavigateCommands, }; }; diff --git a/packages/twenty-front/src/modules/command-menu/hooks/useSearchRecords.tsx b/packages/twenty-front/src/modules/command-menu/hooks/useSearchRecords.tsx new file mode 100644 index 000000000..599279cc5 --- /dev/null +++ b/packages/twenty-front/src/modules/command-menu/hooks/useSearchRecords.tsx @@ -0,0 +1,229 @@ +import { useOpenActivityRightDrawer } from '@/activities/hooks/useOpenActivityRightDrawer'; +import { Note } from '@/activities/types/Note'; +import { Task } from '@/activities/types/Task'; +import { commandMenuSearchState } from '@/command-menu/states/commandMenuSearchState'; +import { Company } from '@/companies/types/Company'; +import { CoreObjectNamePlural } from '@/object-metadata/types/CoreObjectNamePlural'; +import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { getCompanyDomainName } from '@/object-metadata/utils/getCompanyDomainName'; +import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords'; +import { useMultiObjectSearch } from '@/object-record/relation-picker/hooks/useMultiObjectSearch'; +import { useMultiObjectSearchQueryResultFormattedAsObjectRecordsMap } from '@/object-record/relation-picker/hooks/useMultiObjectSearchQueryResultFormattedAsObjectRecordsMap'; +import { makeOrFilterVariables } from '@/object-record/utils/makeOrFilterVariables'; +import { t } from '@lingui/core/macro'; +import isEmpty from 'lodash.isempty'; +import { useMemo } from 'react'; +import { useRecoilValue } from 'recoil'; +import { Avatar, IconCheckbox, IconNotes } from 'twenty-ui'; +import { useDebounce } from 'use-debounce'; +import { getLogoUrlFromDomainName } from '~/utils'; + +const MAX_SEARCH_RESULTS_PER_OBJECT = 8; + +export const useSearchRecords = () => { + const commandMenuSearch = useRecoilValue(commandMenuSearchState); + + const [deferredCommandMenuSearch] = useDebounce(commandMenuSearch, 300); + + const { + matchesSearchFilterObjectRecordsQueryResult, + matchesSearchFilterObjectRecordsLoading: loading, + } = useMultiObjectSearch({ + excludedObjects: [CoreObjectNameSingular.Task, CoreObjectNameSingular.Note], + searchFilterValue: deferredCommandMenuSearch ?? undefined, + limit: MAX_SEARCH_RESULTS_PER_OBJECT, + }); + + const { objectRecordsMap: matchesSearchFilterObjectRecords } = + useMultiObjectSearchQueryResultFormattedAsObjectRecordsMap({ + multiObjectRecordsQueryResult: + matchesSearchFilterObjectRecordsQueryResult, + }); + + const { loading: isNotesLoading, records: notes } = useFindManyRecords({ + objectNameSingular: CoreObjectNameSingular.Note, + filter: deferredCommandMenuSearch + ? makeOrFilterVariables([ + { title: { ilike: `%${deferredCommandMenuSearch}%` } }, + { body: { ilike: `%${deferredCommandMenuSearch}%` } }, + ]) + : undefined, + limit: MAX_SEARCH_RESULTS_PER_OBJECT, + }); + + const { loading: isTasksLoading, records: tasks } = useFindManyRecords({ + objectNameSingular: CoreObjectNameSingular.Task, + filter: deferredCommandMenuSearch + ? makeOrFilterVariables([ + { title: { ilike: `%${deferredCommandMenuSearch}%` } }, + { body: { ilike: `%${deferredCommandMenuSearch}%` } }, + ]) + : undefined, + limit: MAX_SEARCH_RESULTS_PER_OBJECT, + }); + + const people = matchesSearchFilterObjectRecords.people?.map( + (people) => people.record, + ); + const companies = matchesSearchFilterObjectRecords.companies?.map( + (companies) => companies.record, + ); + const opportunities = matchesSearchFilterObjectRecords.opportunities?.map( + (opportunities) => opportunities.record, + ); + + const peopleCommands = useMemo( + () => + people?.map(({ id, name: { firstName, lastName }, avatarUrl }) => ({ + id, + label: `${firstName} ${lastName}`, + to: `object/person/${id}`, + shouldCloseCommandMenuOnClick: true, + Icon: () => ( + + ), + })), + [people], + ); + + const companyCommands = useMemo( + () => + companies?.map((company) => ({ + id: company.id, + label: company.name ?? '', + to: `object/company/${company.id}`, + shouldCloseCommandMenuOnClick: true, + Icon: () => ( + + ), + })), + [companies], + ); + + const opportunityCommands = useMemo( + () => + opportunities?.map(({ id, name }) => ({ + id, + label: name ?? '', + to: `object/opportunity/${id}`, + shouldCloseCommandMenuOnClick: true, + Icon: () => ( + + ), + })), + [opportunities], + ); + + const openNoteRightDrawer = useOpenActivityRightDrawer({ + objectNameSingular: CoreObjectNameSingular.Note, + }); + + const openTaskRightDrawer = useOpenActivityRightDrawer({ + objectNameSingular: CoreObjectNameSingular.Task, + }); + + const noteCommands = useMemo( + () => + notes?.map((note) => ({ + id: note.id, + label: note.title ?? '', + to: '', + onCommandClick: () => openNoteRightDrawer(note.id), + shouldCloseCommandMenuOnClick: true, + Icon: IconNotes, + })), + [notes, openNoteRightDrawer], + ); + + const tasksCommands = useMemo( + () => + tasks?.map((task) => ({ + id: task.id, + label: task.title ?? '', + to: '', + onCommandClick: () => openTaskRightDrawer(task.id), + shouldCloseCommandMenuOnClick: true, + Icon: IconCheckbox, + })), + [tasks, openTaskRightDrawer], + ); + + const customObjectRecordsMap = useMemo(() => { + return Object.fromEntries( + Object.entries(matchesSearchFilterObjectRecords).filter( + ([namePlural, records]) => + ![ + CoreObjectNamePlural.Person, + CoreObjectNamePlural.Opportunity, + CoreObjectNamePlural.Company, + ].includes(namePlural as CoreObjectNamePlural) && !isEmpty(records), + ), + ); + }, [matchesSearchFilterObjectRecords]); + + const customObjectCommands = useMemo(() => { + return Object.values(customObjectRecordsMap).flatMap((objectRecords) => + objectRecords.map((objectRecord) => ({ + id: objectRecord.record.id, + label: objectRecord.recordIdentifier.name, + to: `object/${objectRecord.objectMetadataItem.nameSingular}/${objectRecord.record.id}`, + shouldCloseCommandMenuOnClick: true, + Icon: () => ( + + ), + })), + ); + }, [customObjectRecordsMap]); + + const commands = [ + ...(peopleCommands ?? []), + ...(companyCommands ?? []), + ...(opportunityCommands ?? []), + ...(noteCommands ?? []), + ...(tasksCommands ?? []), + ...(customObjectCommands ?? []), + ]; + + const noResults = + !peopleCommands?.length && + !companyCommands?.length && + !opportunityCommands?.length && + !noteCommands?.length && + !tasksCommands?.length && + !customObjectCommands?.length; + + return { + loading: loading || isNotesLoading || isTasksLoading, + noResults, + commandGroups: [ + { + heading: t`Results`, + items: commands, + }, + ], + hasMore: false, + pageSize: 0, + onLoadMore: () => {}, + }; +}; diff --git a/packages/twenty-front/src/modules/command-menu/pages/components/CommandMenuSearchRecordsPage.tsx b/packages/twenty-front/src/modules/command-menu/pages/components/CommandMenuSearchRecordsPage.tsx new file mode 100644 index 000000000..75e17e437 --- /dev/null +++ b/packages/twenty-front/src/modules/command-menu/pages/components/CommandMenuSearchRecordsPage.tsx @@ -0,0 +1,20 @@ +import { CommandMenuList } from '@/command-menu/components/CommandMenuList'; +import { useSearchRecords } from '@/command-menu/hooks/useSearchRecords'; +import { useMemo } from 'react'; + +export const CommandMenuSearchRecordsPage = () => { + const { commandGroups, loading, noResults } = useSearchRecords(); + + const selectableItemIds = useMemo(() => { + return commandGroups.flatMap((group) => group.items).map((item) => item.id); + }, [commandGroups]); + + return ( + + ); +}; diff --git a/packages/twenty-front/src/modules/command-menu/states/commandMenuPageState.ts b/packages/twenty-front/src/modules/command-menu/states/commandMenuPageState.ts index d5a41917d..34b1253d3 100644 --- a/packages/twenty-front/src/modules/command-menu/states/commandMenuPageState.ts +++ b/packages/twenty-front/src/modules/command-menu/states/commandMenuPageState.ts @@ -1,4 +1,4 @@ -import { CommandMenuPages } from '@/command-menu/components/CommandMenuPages'; +import { CommandMenuPages } from '@/command-menu/types/CommandMenuPages'; import { createState } from '@ui/utilities/state/utils/createState'; export const commandMenuPageState = createState({ diff --git a/packages/twenty-front/src/modules/command-menu/types/Command.ts b/packages/twenty-front/src/modules/command-menu/types/Command.ts index 1c23c100c..0e004e963 100644 --- a/packages/twenty-front/src/modules/command-menu/types/Command.ts +++ b/packages/twenty-front/src/modules/command-menu/types/Command.ts @@ -9,6 +9,7 @@ export enum CommandType { export enum CommandScope { Global = 'Global', RecordSelection = 'RecordSelection', + Object = 'Object', } export type Command = { @@ -18,8 +19,7 @@ export type Command = { type?: CommandType; scope?: CommandScope; Icon?: IconComponent; - firstHotKey?: string; - secondHotKey?: string; + hotKeys?: string[]; onCommandClick?: () => void; shouldCloseCommandMenuOnClick?: boolean; }; diff --git a/packages/twenty-front/src/modules/command-menu/components/CommandMenuPages.ts b/packages/twenty-front/src/modules/command-menu/types/CommandMenuPages.ts similarity index 91% rename from packages/twenty-front/src/modules/command-menu/components/CommandMenuPages.ts rename to packages/twenty-front/src/modules/command-menu/types/CommandMenuPages.ts index 7959680de..4911abc81 100644 --- a/packages/twenty-front/src/modules/command-menu/components/CommandMenuPages.ts +++ b/packages/twenty-front/src/modules/command-menu/types/CommandMenuPages.ts @@ -8,4 +8,5 @@ export enum CommandMenuPages { WorkflowStepSelectAction = 'workflow-step-select-action', WorkflowStepView = 'workflow-step-view', WorkflowStepEdit = 'workflow-step-edit', + SearchRecords = 'search-records', } diff --git a/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawerItems.tsx b/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawerItems.tsx index 1783347c8..c9a1b81a4 100644 --- a/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawerItems.tsx +++ b/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawerItems.tsx @@ -1,6 +1,6 @@ import { useLocation } from 'react-router-dom'; import { useRecoilState, useSetRecoilState } from 'recoil'; -import { IconSearch, IconSettings, getOsControlSymbol } from 'twenty-ui'; +import { IconSearch, IconSettings } from 'twenty-ui'; import { useCommandMenu } from '@/command-menu/hooks/useCommandMenu'; import { CurrentWorkspaceMemberFavoritesFolders } from '@/favorites/components/CurrentWorkspaceMemberFavoritesFolders'; @@ -28,7 +28,6 @@ const StyledInnerContainer = styled.div` export const MainNavigationDrawerItems = () => { const isMobile = useIsMobile(); - const { toggleCommandMenu } = useCommandMenu(); const location = useLocation(); const setNavigationMemorizedUrl = useSetRecoilState( navigationMemorizedUrlState, @@ -42,6 +41,8 @@ export const MainNavigationDrawerItems = () => { const { t } = useLingui(); + const { openRecordsSearchPage } = useCommandMenu(); + return ( <> {!isMobile && ( @@ -49,8 +50,8 @@ export const MainNavigationDrawerItems = () => { { const [isCommandMenuOpened] = useRecoilState(isCommandMenuOpenedState); - const { closeCommandMenu, openCommandMenu } = useCommandMenu(); + const { closeCommandMenu, openRecordsSearchPage } = useCommandMenu(); const isSettingsPage = useIsSettingsPage(); const [isNavigationDrawerExpanded, setIsNavigationDrawerExpanded] = useRecoilState(isNavigationDrawerExpandedState); @@ -53,12 +53,7 @@ export const MobileNavigationBar = () => { { name: 'search', Icon: IconSearch, - onClick: () => { - if (!isCommandMenuOpened) { - openCommandMenu(); - } - setIsNavigationDrawerExpanded(false); - }, + onClick: openRecordsSearchPage, }, { name: 'settings', diff --git a/packages/twenty-front/src/modules/ui/layout/right-drawer/utils/mapRightDrawerPageToCommandMenuPage.ts b/packages/twenty-front/src/modules/ui/layout/right-drawer/utils/mapRightDrawerPageToCommandMenuPage.ts index c5e56420c..6a42ddc38 100644 --- a/packages/twenty-front/src/modules/ui/layout/right-drawer/utils/mapRightDrawerPageToCommandMenuPage.ts +++ b/packages/twenty-front/src/modules/ui/layout/right-drawer/utils/mapRightDrawerPageToCommandMenuPage.ts @@ -1,4 +1,4 @@ -import { CommandMenuPages } from '@/command-menu/components/CommandMenuPages'; +import { CommandMenuPages } from '@/command-menu/types/CommandMenuPages'; import { RightDrawerPages } from '@/ui/layout/right-drawer/types/RightDrawerPages'; export const mapRightDrawerPageToCommandMenuPage = ( diff --git a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerItem.tsx b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerItem.tsx index bd9c6b5e5..4f61530b7 100644 --- a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerItem.tsx +++ b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerItem.tsx @@ -14,6 +14,7 @@ import { useRecoilState } from 'recoil'; import { capitalize } from 'twenty-shared'; import { IconComponent, + Label, MOBILE_VIEWPORT, Pill, TablerIconsProps, @@ -163,13 +164,16 @@ const StyledItemCount = styled.span` const StyledKeyBoardShortcut = styled.span` align-items: center; - border-radius: 4px; - color: ${({ theme }) => theme.font.color.light}; display: flex; + flex-direction: column; + gap: ${({ theme }) => theme.spacing(2)}; + height: ${({ theme }) => theme.spacing(4)}; justify-content: center; - letter-spacing: 1px; - margin-left: auto; - visibility: hidden; + width: ${({ theme }) => theme.spacing(4)}; + + border-radius: ${({ theme }) => theme.border.radius.sm}; + border: 1px solid ${({ theme }) => theme.border.color.strong}; + background: ${({ theme }) => theme.background.transparent.lighter}; `; const StyledNavigationDrawerItemContainer = styled.div` @@ -339,7 +343,7 @@ export const NavigationDrawerItem = ({ {keyboard && ( - {keyboard} + )} diff --git a/packages/twenty-front/src/modules/ui/utilities/hotkey/hooks/useScopedHotkeys.ts b/packages/twenty-front/src/modules/ui/utilities/hotkey/hooks/useScopedHotkeys.ts index 6722214b3..45e0fd414 100644 --- a/packages/twenty-front/src/modules/ui/utilities/hotkey/hooks/useScopedHotkeys.ts +++ b/packages/twenty-front/src/modules/ui/utilities/hotkey/hooks/useScopedHotkeys.ts @@ -32,6 +32,10 @@ export const useScopedHotkeys = ( ? options.preventDefault === true : true; + const ignoreModifiers = isDefined(options?.ignoreModifiers) + ? options.ignoreModifiers === true + : false; + return useHotkeys( keys, (keyboardEvent, hotkeysEvent) => { @@ -52,6 +56,7 @@ export const useScopedHotkeys = ( { enableOnContentEditable, enableOnFormTags, + ignoreModifiers, }, dependencies, ); diff --git a/packages/twenty-server/src/engine/core-modules/i18n/locales/en.po b/packages/twenty-server/src/engine/core-modules/i18n/locales/en.po index dcad96291..d12b22849 100644 --- a/packages/twenty-server/src/engine/core-modules/i18n/locales/en.po +++ b/packages/twenty-server/src/engine/core-modules/i18n/locales/en.po @@ -1,17 +1,11 @@ msgid "" msgstr "" -"POT-Creation-Date: 2025-01-28 21:09+0100\n" +"POT-Creation-Date: 2025-01-29 18:14+0100\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: @lingui/cli\n" "Language: en\n" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: \n" -"Last-Translator: \n" -"Language-Team: \n" -"Plural-Forms: \n" #: src/modules/view/standard-objects/view-field.workspace-entity.ts:32 msgid "(System) View Fields" @@ -916,10 +910,6 @@ msgstr "Ideal Customer Profile: Indicates whether the company is the most suita msgid "If the event is related to a particular object" msgstr "If the event is related to a particular object" -#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:94 -#~ msgid "inked Object Metadata Id" -#~ msgstr "inked Object Metadata Id" - #: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:48 #: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:49 msgid "Is canceled" diff --git a/packages/twenty-server/src/engine/core-modules/i18n/locales/fr.po b/packages/twenty-server/src/engine/core-modules/i18n/locales/fr.po index 974cfffb1..d3f075a43 100644 --- a/packages/twenty-server/src/engine/core-modules/i18n/locales/fr.po +++ b/packages/twenty-server/src/engine/core-modules/i18n/locales/fr.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"POT-Creation-Date: 2025-01-29 15:07+0100\n" +"POT-Creation-Date: 2025-01-29 18:14+0100\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -9,242 +9,242 @@ msgstr "" #: src/modules/view/standard-objects/view-field.workspace-entity.ts:32 msgid "(System) View Fields" -msgstr "(Système) Champs de visualisation" +msgstr "" #: src/modules/view/standard-objects/view-filter-group.workspace-entity.ts:29 msgid "(System) View Filter Groups" -msgstr "(Système) Voir les groupes de filtres" +msgstr "" #: src/modules/view/standard-objects/view-filter.workspace-entity.ts:25 msgid "(System) View Filters" -msgstr "(Système) Voir les filtres" +msgstr "" #: src/modules/view/standard-objects/view-group.workspace-entity.ts:23 msgid "(System) View Groups" -msgstr "(Système) Groupes de vues" +msgstr "" #: src/modules/view/standard-objects/view-sort.workspace-entity.ts:26 msgid "(System) View Sorts" -msgstr "(Système) Afficher les tris" +msgstr "" #: src/modules/view/standard-objects/view.workspace-entity.ts:33 msgid "(System) Views" -msgstr "vues (système)" - -#: src/modules/favorite-folder/standard-objects/favorite-folder.workspace-entity.ts:24 -msgid "A Folder of favorites" -msgstr "Un dossier de favoris" +msgstr "" #: src/modules/company/standard-objects/company.workspace-entity.ts:58 msgid "A company" -msgstr "Une entreprise" +msgstr "" #: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:35 msgid "A connected account" -msgstr "Un compte connecté" +msgstr "" #: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:37 msgid "A favorite that can be accessed from the left menu" -msgstr "Un favori accessible à partir du menu de gauche" +msgstr "" + +#: src/modules/favorite-folder/standard-objects/favorite-folder.workspace-entity.ts:24 +msgid "A Folder of favorites" +msgstr "" #: src/modules/messaging/common/standard-objects/message-thread.workspace-entity.ts:25 msgid "A group of related messages (e.g. email thread, chat thread)" -msgstr "Un groupe de messages liés (par exemple, un fil de discussion sur un courriel, un fil de discussion sur un chat)" +msgstr "" #: src/modules/messaging/common/standard-objects/message.workspace-entity.ts:30 msgid "A message sent or received through a messaging channel (email, chat, etc.)" -msgstr "Un message envoyé ou reçu par l'intermédiaire d'un canal de messagerie (courriel, chat, etc.)" +msgstr "" #: src/modules/note/standard-objects/note.workspace-entity.ts:49 msgid "A note" -msgstr "Une note" +msgstr "" #: src/modules/note/standard-objects/note-target.workspace-entity.ts:27 msgid "A note target" -msgstr "Une note cible" +msgstr "" #: src/modules/person/standard-objects/person.workspace-entity.ts:62 msgid "A person" -msgstr "Une personne" +msgstr "" #: src/modules/task/standard-objects/task.workspace-entity.ts:51 msgid "A task" -msgstr "Une tâche" +msgstr "" #: src/modules/task/standard-objects/task-target.workspace-entity.ts:27 msgid "A task target" -msgstr "Un objectif de tâche" +msgstr "" #: src/modules/webhook/standard-objects/webhook.workspace-entity.ts:20 msgid "A webhook" -msgstr "Un webhook" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:62 msgid "A workflow" -msgstr "Un flux de travail" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow-event-listener.workspace-entity.ts:24 msgid "A workflow event listener" -msgstr "Un récepteur d'événements de flux de travail" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:57 msgid "A workflow run" -msgstr "Un flux de travail" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:67 msgid "A workflow version" -msgstr "Une version du flux de travail" +msgstr "" #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:78 msgid "A workspace member" -msgstr "Un membre de l'espace de travail" - -#: src/modules/api-key/standard-objects/api-key.workspace-entity.ts:17 -msgid "API Key" -msgstr "Clé API" - -#: src/modules/api-key/standard-objects/api-key.workspace-entity.ts:18 -msgid "API Keys" -msgstr "Clés API" - -#: src/modules/company/standard-objects/company.workspace-entity.ts:116 -msgid "ARR" -msgstr "ARR" +msgstr "" #: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:63 msgid "Access Token" -msgstr "Jeton d'accès" +msgstr "" #: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:119 #: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:120 #: src/modules/company/standard-objects/company.workspace-entity.ts:183 msgid "Account Owner" -msgstr "Propriétaire de compte" - -#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:168 -msgid "Account Owner For Companies" -msgstr "Propriétaire de compte pour les entreprises" +msgstr "" #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:169 msgid "Account owner for companies" -msgstr "Propriétaire de compte pour les entreprises" +msgstr "" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:168 +msgid "Account Owner For Companies" +msgstr "" #: src/modules/company/standard-objects/company.workspace-entity.ts:126 msgid "Address" -msgstr "Adresse" +msgstr "" #: src/modules/company/standard-objects/company.workspace-entity.ts:271 msgid "Address (deprecated) " -msgstr "Adresse (obsolète) " +msgstr "" #: src/modules/company/standard-objects/company.workspace-entity.ts:127 msgid "Address of the company" -msgstr "Adresse de l'entreprise" +msgstr "" #: src/modules/company/standard-objects/company.workspace-entity.ts:272 msgid "Address of the company - deprecated in favor of new address field" -msgstr "Adresse de l'entreprise - obsolète en faveur du nouveau champ d'adresse" +msgstr "" #: src/modules/view/standard-objects/view.workspace-entity.ts:189 #: src/modules/view/standard-objects/view-field.workspace-entity.ts:96 msgid "Aggregate operation" -msgstr "Fonctionnement des agrégats" +msgstr "" #: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:35 msgid "Aggregated / filtered event to be displayed on the timeline" -msgstr "Événement agrégé / filtré à afficher sur la ligne de temps" +msgstr "" #: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:72 msgid "Amount" -msgstr "Montant" +msgstr "" #: src/modules/api-key/standard-objects/api-key.workspace-entity.ts:19 msgid "An API key" -msgstr "Une clé API" +msgstr "" #: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:32 msgid "An attachment" -msgstr "Une pièce jointe" +msgstr "" #: src/modules/timeline/standard-objects/audit-log.workspace-entity.ts:24 msgid "An audit log of actions performed in the system" -msgstr "Un journal d'audit des actions effectuées dans le système" +msgstr "" #: src/modules/timeline/standard-objects/behavioral-event.workspace-entity.ts:20 msgid "An event related to user behavior" -msgstr "Un événement lié au comportement de l'utilisateur" +msgstr "" #: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:53 msgid "An opportunity" -msgstr "Une opportunité" +msgstr "" #: src/modules/company/standard-objects/company.workspace-entity.ts:117 msgid "Annual Recurring Revenue: The actual or estimated annual revenue of the company" -msgstr "Revenu annuel récurrent : Le revenu annuel réel ou estimé de l'entreprise" +msgstr "" + +#: src/modules/api-key/standard-objects/api-key.workspace-entity.ts:17 +msgid "API Key" +msgstr "" + +#: src/modules/api-key/standard-objects/api-key.workspace-entity.ts:18 +msgid "API Keys" +msgstr "" #: src/modules/api-key/standard-objects/api-key.workspace-entity.ts:39 msgid "ApiKey expiration date" -msgstr "Date d'expiration de la clé ApiKey" +msgstr "" #: src/modules/api-key/standard-objects/api-key.workspace-entity.ts:30 msgid "ApiKey name" -msgstr "Nom de la clé Api" +msgstr "" #: src/modules/api-key/standard-objects/api-key.workspace-entity.ts:48 msgid "ApiKey revocation date" -msgstr "Date de révocation de la clé ApiKey" +msgstr "" + +#: src/modules/company/standard-objects/company.workspace-entity.ts:116 +msgid "ARR" +msgstr "" #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:145 msgid "Assigned tasks" -msgstr "Tâches assignées" +msgstr "" #: src/modules/task/standard-objects/task.workspace-entity.ts:175 msgid "Assignee" -msgstr "Cessionnaire" +msgstr "" #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:136 msgid "Associated User Id" -msgstr "Identité de l'utilisateur associé" +msgstr "" #: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:30 msgid "Attachment" -msgstr "Pièce jointe" +msgstr "" #: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:70 msgid "Attachment author" -msgstr "Auteur de la pièce jointe" +msgstr "" #: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:129 msgid "Attachment company" -msgstr "Entreprise de rattachement" +msgstr "" #: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:52 msgid "Attachment full path" -msgstr "Chemin d'accès complet de la pièce jointe" +msgstr "" #: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:43 msgid "Attachment name" -msgstr "Nom de la pièce jointe" +msgstr "" #: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:99 msgid "Attachment note" -msgstr "Note d'accompagnement" +msgstr "" #: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:144 msgid "Attachment opportunity" -msgstr "Opportunité de rattachement" +msgstr "" #: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:114 msgid "Attachment person" -msgstr "Personne rattachée" +msgstr "" #: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:84 msgid "Attachment task" -msgstr "Tâche de rattachement" +msgstr "" #: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:61 msgid "Attachment type" -msgstr "Type d'attachement" +msgstr "" #: src/modules/task/standard-objects/task.workspace-entity.ts:163 #: src/modules/person/standard-objects/person.workspace-entity.ts:245 @@ -254,110 +254,110 @@ msgstr "Type d'attachement" #: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:31 #: src/engine/twenty-orm/custom.workspace-entity.ts:125 msgid "Attachments" -msgstr "Pièces jointes" +msgstr "" #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:181 msgid "Attachments created by the workspace member" -msgstr "Pièces jointes créées par le membre de l'espace de travail" +msgstr "" #: src/modules/company/standard-objects/company.workspace-entity.ts:247 msgid "Attachments linked to the company" -msgstr "Pièces jointes liées à l'entreprise" +msgstr "" #: src/modules/person/standard-objects/person.workspace-entity.ts:246 msgid "Attachments linked to the contact." -msgstr "Pièces jointes liées au contact." +msgstr "" #: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:207 msgid "Attachments linked to the opportunity" -msgstr "Pièces jointes liées à l'opportunité" +msgstr "" #: src/engine/twenty-orm/custom.workspace-entity.ts:130 msgid "Attachments tied to the {label}" -msgstr "Pièces jointes liées au {label}" +msgstr "" #: src/modules/timeline/standard-objects/audit-log.workspace-entity.ts:22 msgid "Audit Log" -msgstr "Journal d'audit" +msgstr "" #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:255 #: src/modules/timeline/standard-objects/audit-log.workspace-entity.ts:23 msgid "Audit Logs" -msgstr "Journaux d'audit" +msgstr "" #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:256 msgid "Audit Logs linked to the workspace member" -msgstr "Journaux d'audit liés au membre de l'espace de travail" +msgstr "" #: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:90 #: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:91 msgid "Auth failed at" -msgstr "L'authentification a échoué à" +msgstr "" #: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:69 msgid "Author" -msgstr "Auteur" +msgstr "" #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:180 msgid "Authored attachments" -msgstr "Auteur des pièces jointes" +msgstr "" #: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:170 msgid "Automatically create People records when receiving or sending emails" -msgstr "Création automatique d'enregistrements de personnes lors de la réception ou de l'envoi de courriels" +msgstr "" #: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:222 msgid "Automatically create records for people you participated with in an event." -msgstr "Créez automatiquement des enregistrements pour les personnes avec lesquelles vous avez participé à un événement." +msgstr "" #: src/modules/person/standard-objects/person.workspace-entity.ts:149 msgid "Avatar" -msgstr "Avatar" +msgstr "" #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:117 msgid "Avatar Url" -msgstr "Url de l'avatar" +msgstr "" #: src/modules/timeline/standard-objects/behavioral-event.workspace-entity.ts:18 msgid "Behavioral Event" -msgstr "Événement comportemental" +msgstr "" #: src/modules/timeline/standard-objects/behavioral-event.workspace-entity.ts:19 msgid "Behavioral Events" -msgstr "Événements comportementaux" +msgstr "" #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:216 #: src/modules/blocklist/standard-objects/blocklist.workspace-entity.ts:22 #: src/modules/blocklist/standard-objects/blocklist.workspace-entity.ts:24 msgid "Blocklist" -msgstr "Liste de blocage" +msgstr "" #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:217 msgid "Blocklisted handles" -msgstr "Poignées en liste bloquée" +msgstr "" #: src/modules/blocklist/standard-objects/blocklist.workspace-entity.ts:23 msgid "Blocklists" -msgstr "Listes de blocage" +msgstr "" #: src/modules/task/standard-objects/task.workspace-entity.ts:80 #: src/modules/task/standard-objects/task.workspace-entity.ts:90 #: src/modules/note/standard-objects/note.workspace-entity.ts:78 #: src/modules/note/standard-objects/note.workspace-entity.ts:88 msgid "Body" -msgstr "Corps" +msgstr "" #: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:75 msgid "Cached record name" -msgstr "Nom de l'enregistrement mis en cache" +msgstr "" #: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:74 msgid "Calendar Channel" -msgstr "Canal Calendrier" +msgstr "" #: src/modules/calendar/common/standard-objects/calendar-channel-event-association.workspace-entity.ts:23 msgid "Calendar Channel Event Association" -msgstr "Calendrier Association des événements de la Manche" +msgstr "" #: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:155 #: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:156 @@ -366,68 +366,68 @@ msgstr "Calendrier Association des événements de la Manche" #: src/modules/calendar/common/standard-objects/calendar-channel-event-association.workspace-entity.ts:24 #: src/modules/calendar/common/standard-objects/calendar-channel-event-association.workspace-entity.ts:25 msgid "Calendar Channel Event Associations" -msgstr "Associations d'événements du canal Calendrier" +msgstr "" #: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:144 #: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:145 #: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:75 #: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:76 msgid "Calendar Channels" -msgstr "Canaux du calendrier" +msgstr "" + +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:27 +msgid "Calendar event" +msgstr "" + +#: src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts:32 +msgid "Calendar event participant" +msgstr "" + +#: src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts:33 +#: src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts:34 +msgid "Calendar event participants" +msgstr "" #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:228 #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:229 #: src/modules/person/standard-objects/person.workspace-entity.ts:269 #: src/modules/person/standard-objects/person.workspace-entity.ts:270 msgid "Calendar Event Participants" -msgstr "Calendrier Participants aux événements" - -#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:27 -msgid "Calendar event" -msgstr "Calendrier" - -#: src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts:32 -msgid "Calendar event participant" -msgstr "Participant à un événement du calendrier" - -#: src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts:33 -#: src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts:34 -msgid "Calendar event participants" -msgstr "Participants aux événements du calendrier" +msgstr "" #: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:28 #: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:29 msgid "Calendar events" -msgstr "Calendrier des événements" +msgstr "" #: src/modules/calendar/common/standard-objects/calendar-channel-event-association.workspace-entity.ts:55 #: src/modules/calendar/common/standard-objects/calendar-channel-event-association.workspace-entity.ts:56 msgid "Channel ID" -msgstr "ID du canal" +msgstr "" #: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:135 msgid "Channel Type" -msgstr "Type de canal" +msgstr "" #: src/modules/person/standard-objects/person.workspace-entity.ts:140 msgid "City" -msgstr "Ville" +msgstr "" #: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:82 msgid "Close date" -msgstr "Date de clôture" +msgstr "" #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:97 msgid "Color Scheme" -msgstr "Schéma de couleurs" +msgstr "" #: src/modules/view/standard-objects/view.workspace-entity.ts:108 msgid "Compact View" -msgstr "Vue compacte" +msgstr "" #: src/modules/company/standard-objects/company.workspace-entity.ts:57 msgid "Companies" -msgstr "Entreprises" +msgstr "" #: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:134 #: src/modules/task/standard-objects/task-target.workspace-entity.ts:65 @@ -438,16 +438,16 @@ msgstr "Entreprises" #: src/modules/company/standard-objects/company.workspace-entity.ts:56 #: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:128 msgid "Company" -msgstr "Entreprise" +msgstr "" #: src/modules/company/standard-objects/company.workspace-entity.ts:147 msgid "Company record position" -msgstr "Position d'enregistrement de l'entreprise" +msgstr "" #: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:135 #: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:136 msgid "Conference Solution" -msgstr "Solution pour les conférences" +msgstr "" #: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:358 #: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:359 @@ -455,61 +455,61 @@ msgstr "Solution pour les conférences" #: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:307 #: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:308 msgid "Connected Account" -msgstr "Compte connecté" - -#: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:34 -msgid "Connected Accounts" -msgstr "Comptes connectés" +msgstr "" #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:192 #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:193 msgid "Connected accounts" -msgstr "Comptes connectés" +msgstr "" + +#: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:34 +msgid "Connected Accounts" +msgstr "" #: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:169 #: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:221 msgid "Contact auto creation policy" -msgstr "Politique de création automatique de contacts" - -#: src/modules/person/standard-objects/person.workspace-entity.ts:83 -msgid "Contact’s Emails" -msgstr "Emails du contact" - -#: src/modules/person/standard-objects/person.workspace-entity.ts:93 -msgid "Contact’s Linkedin account" -msgstr "Compte Linkedin du contact" - -#: src/modules/person/standard-objects/person.workspace-entity.ts:103 -msgid "Contact’s X/Twitter account" -msgstr "Compte X/Twitter du contact" +msgstr "" #: src/modules/person/standard-objects/person.workspace-entity.ts:150 msgid "Contact’s avatar" -msgstr "Avatar du contact" +msgstr "" #: src/modules/person/standard-objects/person.workspace-entity.ts:141 msgid "Contact’s city" -msgstr "Ville du contact" +msgstr "" #: src/modules/person/standard-objects/person.workspace-entity.ts:185 msgid "Contact’s company" -msgstr "Société du contact" +msgstr "" + +#: src/modules/person/standard-objects/person.workspace-entity.ts:83 +msgid "Contact’s Emails" +msgstr "" #: src/modules/person/standard-objects/person.workspace-entity.ts:113 msgid "Contact’s job title" -msgstr "Titre du poste du contact" +msgstr "" + +#: src/modules/person/standard-objects/person.workspace-entity.ts:93 +msgid "Contact’s Linkedin account" +msgstr "" #: src/modules/person/standard-objects/person.workspace-entity.ts:73 msgid "Contact’s name" -msgstr "Nom du contact" +msgstr "" #: src/modules/person/standard-objects/person.workspace-entity.ts:122 msgid "Contact’s phone number" -msgstr "Numéro de téléphone du contact" +msgstr "" #: src/modules/person/standard-objects/person.workspace-entity.ts:132 msgid "Contact’s phone numbers" -msgstr "Numéros de téléphone des personnes à contacter" +msgstr "" + +#: src/modules/person/standard-objects/person.workspace-entity.ts:103 +msgid "Contact’s X/Twitter account" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:169 #: src/modules/task/standard-objects/task.workspace-entity.ts:139 @@ -519,114 +519,109 @@ msgstr "Numéros de téléphone des personnes à contacter" #: src/modules/company/standard-objects/company.workspace-entity.ts:157 #: src/engine/twenty-orm/custom.workspace-entity.ts:64 msgid "Created by" -msgstr "Créé par" - -#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:88 -#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:89 -msgid "Creation DateTime" -msgstr "Date de création" +msgstr "" #: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:44 #: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:45 #: src/engine/twenty-orm/base.workspace-entity.ts:26 #: src/engine/twenty-orm/base.workspace-entity.ts:27 msgid "Creation date" -msgstr "Date de création" +msgstr "" + +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:88 +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:89 +msgid "Creation DateTime" +msgstr "" #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:278 msgid "Date format" -msgstr "Format de la date" +msgstr "" #: src/engine/twenty-orm/base.workspace-entity.ts:53 msgid "Date when the record was deleted" -msgstr "Date de suppression de l'enregistrement" +msgstr "" #: src/engine/twenty-orm/base.workspace-entity.ts:52 msgid "Deleted at" -msgstr "Supprimé à" +msgstr "" #: src/modules/view/standard-objects/view.workspace-entity.ts:109 msgid "Describes if the view is in compact mode" -msgstr "Indique si la vue est en mode compact" +msgstr "" #: src/modules/webhook/standard-objects/webhook.workspace-entity.ts:59 #: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:108 #: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:109 msgid "Description" -msgstr "Description" +msgstr "" #: src/modules/view/standard-objects/view-sort.workspace-entity.ts:48 #: src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity.ts:66 msgid "Direction" -msgstr "Direction" +msgstr "" #: src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts:62 #: src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts:63 #: src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts:54 #: src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts:55 msgid "Display Name" -msgstr "Nom d'affichage" +msgstr "" #: src/modules/view/standard-objects/view-filter.workspace-entity.ts:59 msgid "Display Value" -msgstr "Valeur d'affichage" +msgstr "" #: src/modules/company/standard-objects/company.workspace-entity.ts:76 msgid "Domain Name" -msgstr "Nom de domaine" +msgstr "" #: src/modules/task/standard-objects/task.workspace-entity.ts:103 msgid "Due Date" -msgstr "Date d'échéance" +msgstr "" #: src/modules/person/standard-objects/person.workspace-entity.ts:82 msgid "Emails" -msgstr "Emails" +msgstr "" #: src/modules/company/standard-objects/company.workspace-entity.ts:86 msgid "Employees" -msgstr "Salariés" +msgstr "" #: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:78 #: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:79 msgid "End Date" -msgstr "Date de fin" +msgstr "" + +#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:135 +msgid "Event company" +msgstr "" + +#: src/modules/timeline/standard-objects/behavioral-event.workspace-entity.ts:67 +#: src/modules/timeline/standard-objects/audit-log.workspace-entity.ts:52 +msgid "Event context" +msgstr "" + +#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:63 +#: src/modules/timeline/standard-objects/behavioral-event.workspace-entity.ts:57 +#: src/modules/timeline/standard-objects/audit-log.workspace-entity.ts:42 +msgid "Event details" +msgstr "" + +#: src/modules/calendar/common/standard-objects/calendar-channel-event-association.workspace-entity.ts:35 +#: src/modules/calendar/common/standard-objects/calendar-channel-event-association.workspace-entity.ts:36 +msgid "Event external ID" +msgstr "" #: src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts:109 #: src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts:110 #: src/modules/calendar/common/standard-objects/calendar-channel-event-association.workspace-entity.ts:70 #: src/modules/calendar/common/standard-objects/calendar-channel-event-association.workspace-entity.ts:71 msgid "Event ID" -msgstr "ID de l'événement" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:135 msgid "Event Listeners" -msgstr "Écouteurs d'événements" - -#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:168 -#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:169 -msgid "Event Participants" -msgstr "Participants à l'événement" - -#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:135 -msgid "Event company" -msgstr "Entreprise événementielle" - -#: src/modules/timeline/standard-objects/behavioral-event.workspace-entity.ts:67 -#: src/modules/timeline/standard-objects/audit-log.workspace-entity.ts:52 -msgid "Event context" -msgstr "Contexte de l'événement" - -#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:63 -#: src/modules/timeline/standard-objects/behavioral-event.workspace-entity.ts:57 -#: src/modules/timeline/standard-objects/audit-log.workspace-entity.ts:42 -msgid "Event details" -msgstr "Détails de l'événement" - -#: src/modules/calendar/common/standard-objects/calendar-channel-event-association.workspace-entity.ts:35 -#: src/modules/calendar/common/standard-objects/calendar-channel-event-association.workspace-entity.ts:36 -msgid "Event external ID" -msgstr "ID externe de l'événement" +msgstr "" #: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:54 #: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:55 @@ -634,137 +629,142 @@ msgstr "ID externe de l'événement" #: src/modules/timeline/standard-objects/behavioral-event.workspace-entity.ts:49 #: src/modules/timeline/standard-objects/audit-log.workspace-entity.ts:33 msgid "Event name" -msgstr "Nom de l'événement" +msgstr "" #: src/modules/timeline/standard-objects/behavioral-event.workspace-entity.ts:87 #: src/modules/timeline/standard-objects/audit-log.workspace-entity.ts:34 msgid "Event name/type" -msgstr "Nom/type de l'événement" +msgstr "" #: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:165 msgid "Event note" -msgstr "Note d'information" +msgstr "" #: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:150 msgid "Event opportunity" -msgstr "Opportunité d'événement" +msgstr "" + +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:168 +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:169 +msgid "Event Participants" +msgstr "" #: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:120 msgid "Event person" -msgstr "Personne de l'événement" +msgstr "" #: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:180 msgid "Event task" -msgstr "Tâche événementielle" +msgstr "" #: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:195 msgid "Event workflow" -msgstr "Déroulement de l'événement" +msgstr "" #: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:225 msgid "Event workflow run" -msgstr "Exécution du flux de travail de l'événement" +msgstr "" #: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:210 msgid "Event workflow version" -msgstr "Version du flux d'événements" +msgstr "" #: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:105 #: src/modules/timeline/standard-objects/audit-log.workspace-entity.ts:91 msgid "Event workspace member" -msgstr "Membre de l'espace de travail de l'événement" +msgstr "" #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:242 #: src/modules/person/standard-objects/person.workspace-entity.ts:283 msgid "Events" -msgstr "Evénements" +msgstr "" #: src/modules/person/standard-objects/person.workspace-entity.ts:284 msgid "Events linked to the person" -msgstr "Événements liés à la personne" +msgstr "" #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:243 msgid "Events linked to the workspace member" -msgstr "Événements liés au membre de l'espace de travail" +msgstr "" #: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:209 #: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:210 msgid "Exclude group emails" -msgstr "Exclure les courriels de groupe" +msgstr "" #: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:199 #: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:200 msgid "Exclude non professional emails" -msgstr "Exclure les courriels non professionnels" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:130 msgid "Executed by" -msgstr "Exécuté par" +msgstr "" #: src/modules/api-key/standard-objects/api-key.workspace-entity.ts:38 msgid "Expiration date" -msgstr "Date d'expiration" +msgstr "" #: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:35 msgid "Favorite" -msgstr "Favoris" +msgstr "" + +#: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:89 +msgid "Favorite company" +msgstr "" #: src/modules/favorite-folder/standard-objects/favorite-folder.workspace-entity.ts:22 #: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:103 msgid "Favorite Folder" -msgstr "Dossier favori" - -#: src/modules/favorite-folder/standard-objects/favorite-folder.workspace-entity.ts:23 -msgid "Favorite Folders" -msgstr "Dossiers favoris" - -#: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:89 -msgid "Favorite company" -msgstr "Entreprise préférée" +msgstr "" #: src/modules/favorite-folder/standard-objects/favorite-folder.workspace-entity.ts:33 msgid "Favorite folder position" -msgstr "Position du dossier favori" +msgstr "" + +#: src/modules/favorite-folder/standard-objects/favorite-folder.workspace-entity.ts:23 +msgid "Favorite Folders" +msgstr "" #: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:194 msgid "Favorite note" -msgstr "Note préférée" +msgstr "" #: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:119 msgid "Favorite opportunity" -msgstr "Opportunité préférée" +msgstr "" #: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:74 msgid "Favorite person" -msgstr "Personne préférée" +msgstr "" #: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:47 msgid "Favorite position" -msgstr "Position préférée" +msgstr "" #: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:179 msgid "Favorite task" -msgstr "Tâche préférée" +msgstr "" #: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:209 msgid "Favorite view" -msgstr "Vue préférée" +msgstr "" #: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:134 msgid "Favorite workflow" -msgstr "Flux de travail préféré" +msgstr "" #: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:164 msgid "Favorite workflow run" -msgstr "Course de flux de travail préférée" +msgstr "" #: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:149 msgid "Favorite workflow version" -msgstr "Version préférée du flux de travail" +msgstr "" #: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:59 msgid "Favorite workspace member" -msgstr "Membre de l'espace de travail préféré" +msgstr "" #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:157 #: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:146 @@ -780,83 +780,87 @@ msgstr "Membre de l'espace de travail préféré" #: src/modules/company/standard-objects/company.workspace-entity.ts:233 #: src/engine/twenty-orm/custom.workspace-entity.ts:108 msgid "Favorites" -msgstr "Favoris" +msgstr "" #: src/modules/favorite-folder/standard-objects/favorite-folder.workspace-entity.ts:53 msgid "Favorites in this folder" -msgstr "Favoris de ce dossier" +msgstr "" #: src/modules/company/standard-objects/company.workspace-entity.ts:234 msgid "Favorites linked to the company" -msgstr "Favoris liés à l'entreprise" +msgstr "" #: src/modules/person/standard-objects/person.workspace-entity.ts:234 msgid "Favorites linked to the contact" -msgstr "Favoris liés au contact" +msgstr "" #: src/modules/note/standard-objects/note.workspace-entity.ts:151 msgid "Favorites linked to the note" -msgstr "Favoris liés à la note" +msgstr "" #: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:172 msgid "Favorites linked to the opportunity" -msgstr "Favoris liés à l'opportunité" +msgstr "" #: src/modules/task/standard-objects/task.workspace-entity.ts:205 msgid "Favorites linked to the task" -msgstr "Favoris liés à la tâche" +msgstr "" #: src/modules/view/standard-objects/view.workspace-entity.ts:178 msgid "Favorites linked to the view" -msgstr "Favoris liés à la vue" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:147 msgid "Favorites linked to the workflow" -msgstr "Favoris liés au flux de travail" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:194 msgid "Favorites linked to the workflow run" -msgstr "Favoris liés à l'exécution du flux de travail" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:155 msgid "Favorites linked to the workflow version" -msgstr "Favoris liés à la version du flux de travail" +msgstr "" #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:158 msgid "Favorites linked to the workspace member" -msgstr "Favoris liés au membre de l'espace de travail" +msgstr "" #: src/engine/twenty-orm/custom.workspace-entity.ts:113 msgid "Favorites tied to the {label}" -msgstr "Favoris liés à {label}" +msgstr "" #: src/modules/view/standard-objects/view-sort.workspace-entity.ts:39 #: src/modules/view/standard-objects/view-group.workspace-entity.ts:32 #: src/modules/view/standard-objects/view-filter.workspace-entity.ts:34 #: src/modules/view/standard-objects/view-field.workspace-entity.ts:45 msgid "Field Metadata Id" -msgstr "Champ Métadonnées Id" - -#: src/modules/view/standard-objects/view-group.workspace-entity.ts:51 -msgid "Field Value" -msgstr "Valeur du champ" +msgstr "" #: src/modules/view/standard-objects/view.workspace-entity.ts:262 #: src/modules/view/standard-objects/view.workspace-entity.ts:263 msgid "Field metadata used for aggregate operation" -msgstr "Métadonnées de champ utilisées pour l'opération d'agrégation" +msgstr "" #: src/engine/metadata-modules/constants/search-vector-field.constants.ts:6 msgid "Field used for full-text search" -msgstr "Champ utilisé pour la recherche en texte intégral" +msgstr "" + +#: src/modules/view/standard-objects/view-group.workspace-entity.ts:51 +msgid "Field Value" +msgstr "" #: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:51 msgid "Full path" -msgstr "Chemin d'accès complet" +msgstr "" #: src/modules/view/standard-objects/view-group.workspace-entity.ts:52 msgid "Group by this field value" -msgstr "Grouper par la valeur de ce champ" +msgstr "" + +#: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:45 +msgid "handle" +msgstr "" #: src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts:53 #: src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts:54 @@ -869,227 +873,244 @@ msgstr "Grouper par la valeur de ce champ" #: src/modules/blocklist/standard-objects/blocklist.workspace-entity.ts:34 #: src/modules/blocklist/standard-objects/blocklist.workspace-entity.ts:35 msgid "Handle" -msgstr "Poignée" +msgstr "" #: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:100 #: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:101 msgid "Handle Aliases" -msgstr "Alias de poignée" +msgstr "" #: src/modules/messaging/common/standard-objects/message.workspace-entity.ts:40 msgid "Header message Id" -msgstr "Message d'en-tête Id" +msgstr "" -#: src/modules/company/standard-objects/company.workspace-entity.ts:136 -msgid "ICP" -msgstr "PIC" +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:126 +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:127 +msgid "iCal UID" +msgstr "" #: src/modules/view/standard-objects/view.workspace-entity.ts:79 msgid "Icon" -msgstr "Icône" +msgstr "" + +#: src/modules/company/standard-objects/company.workspace-entity.ts:136 +msgid "ICP" +msgstr "" #: src/engine/twenty-orm/base.workspace-entity.ts:14 #: src/engine/twenty-orm/base.workspace-entity.ts:15 msgid "Id" -msgstr "Id" +msgstr "" #: src/modules/company/standard-objects/company.workspace-entity.ts:137 msgid "Ideal Customer Profile: Indicates whether the company is the most suitable and valuable customer for you" -msgstr "Profil du client idéal : Indique si l'entreprise est le client le plus approprié et le plus précieux pour vous" +msgstr "" #: src/modules/timeline/standard-objects/behavioral-event.workspace-entity.ts:78 msgid "If the event is related to a particular object" -msgstr "Si l'événement est lié à un objet particulier" +msgstr "" + +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:48 +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:49 +msgid "Is canceled" +msgstr "" #: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:159 #: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:160 #: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:211 #: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:212 msgid "Is Contact Auto Creation Enabled" -msgstr "La création automatique de contacts est-elle activée ?" +msgstr "" #: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:58 #: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:59 msgid "Is Full Day" -msgstr "Est une journée entière" +msgstr "" #: src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts:63 #: src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts:64 msgid "Is Organizer" -msgstr "Est Organisateur" +msgstr "" #: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:219 #: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:220 #: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:258 #: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:259 msgid "Is Sync Enabled" -msgstr "La synchronisation est-elle activée ?" - -#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:48 -#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:49 -msgid "Is canceled" -msgstr "Est annulé" +msgstr "" #: src/modules/person/standard-objects/person.workspace-entity.ts:112 msgid "Job Title" -msgstr "Titre du poste" +msgstr "" #: src/modules/timeline/standard-objects/behavioral-event.workspace-entity.ts:68 #: src/modules/timeline/standard-objects/audit-log.workspace-entity.ts:53 msgid "Json object to provide context (user, device, workspace, etc.)" -msgstr "Objet Json pour fournir le contexte (utilisateur, appareil, espace de travail, etc.)" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:144 msgid "Json object to provide output of the workflow run" -msgstr "Objet Json pour fournir les résultats de l'exécution du flux de travail" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:95 msgid "Json object to provide steps" -msgstr "Objet Json pour fournir les étapes" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:85 msgid "Json object to provide trigger" -msgstr "Objet Json pour fournir le déclencheur" +msgstr "" #: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:64 #: src/modules/timeline/standard-objects/behavioral-event.workspace-entity.ts:58 #: src/modules/timeline/standard-objects/audit-log.workspace-entity.ts:43 msgid "Json value for event details" -msgstr "Valeur Json pour les détails de l'événement" +msgstr "" + +#: src/modules/view/standard-objects/view.workspace-entity.ts:87 +msgid "kanbanfieldMetadataId" +msgstr "" #: src/modules/view/standard-objects/view.workspace-entity.ts:68 msgid "Key" -msgstr "Clé" +msgstr "" #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:107 msgid "Language" -msgstr "Langue" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:80 msgid "Last published Version Id" -msgstr "Dernière version publiée Identité de la version" +msgstr "" #: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:229 #: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:230 msgid "Last sync cursor" -msgstr "Dernier curseur de synchronisation" +msgstr "" #: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:238 #: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:239 #: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:277 #: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:278 msgid "Last sync date" -msgstr "Date de la dernière synchronisation" +msgstr "" #: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:81 #: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:82 msgid "Last sync history ID" -msgstr "ID du dernier historique de synchronisation" +msgstr "" #: src/engine/twenty-orm/base.workspace-entity.ts:40 msgid "Last time the record was changed" -msgstr "Dernière modification de l'enregistrement" +msgstr "" #: src/engine/twenty-orm/base.workspace-entity.ts:39 msgid "Last update" -msgstr "Dernière mise à jour" +msgstr "" #: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:93 #: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:94 msgid "Linked Object Metadata Id" -msgstr "Métadonnées de l'objet lié Id" +msgstr "" #: src/modules/person/standard-objects/person.workspace-entity.ts:199 msgid "Linked Opportunities" -msgstr "Opportunités liées" +msgstr "" #: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:74 msgid "Linked Record cached name" -msgstr "Nom de l'enregistrement lié mis en cache" +msgstr "" #: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:83 #: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:84 msgid "Linked Record id" -msgstr "Identifiant de l'enregistrement lié" +msgstr "" #: src/modules/person/standard-objects/person.workspace-entity.ts:92 #: src/modules/company/standard-objects/company.workspace-entity.ts:96 msgid "Linkedin" -msgstr "Linkedin" +msgstr "" #: src/modules/person/standard-objects/person.workspace-entity.ts:200 msgid "List of opportunities for which that person is the point of contact" -msgstr "Liste des opportunités pour lesquelles cette personne est le point de contact" +msgstr "" #: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:117 #: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:118 msgid "Location" -msgstr "Localisation" +msgstr "" #: src/modules/view/standard-objects/view-filter-group.workspace-entity.ts:60 msgid "Logical Operator" -msgstr "Opérateur logique" +msgstr "" #: src/modules/view/standard-objects/view-filter-group.workspace-entity.ts:61 msgid "Logical operator for the filter group" -msgstr "Opérateur logique pour le groupe de filtres" +msgstr "" #: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:144 #: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:145 msgid "Meet Link" -msgstr "Lien de rencontre" +msgstr "" #: src/modules/messaging/common/standard-objects/message.workspace-entity.ts:28 #: src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts:71 #: src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts:72 msgid "Message" -msgstr "Message" +msgstr "" #: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:83 msgid "Message Channel" -msgstr "Canal de messages" +msgstr "" #: src/modules/messaging/common/standard-objects/message.workspace-entity.ts:105 #: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:373 msgid "Message Channel Association" -msgstr "Association de canaux de messages" +msgstr "" #: src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity.ts:91 #: src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity.ts:92 msgid "Message Channel Id" -msgstr "Id du canal de message" +msgstr "" #: src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity.ts:29 msgid "Message Channel Message Association" -msgstr "Canal de messages Association de messages" +msgstr "" #: src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity.ts:30 msgid "Message Channel Message Associations" -msgstr "Canal de messages Associations de messages" +msgstr "" #: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:84 #: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:85 #: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:133 #: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:134 msgid "Message Channels" -msgstr "Canaux de messages" +msgstr "" #: src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity.ts:67 msgid "Message Direction" -msgstr "Direction du message" +msgstr "" #: src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity.ts:45 msgid "Message External Id" -msgstr "Message Identité externe" +msgstr "" #: src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity.ts:106 #: src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity.ts:107 msgid "Message Id" -msgstr "Id du message" +msgstr "" + +#: src/modules/messaging/common/standard-objects/message.workspace-entity.ts:41 +msgid "Message id from the message header" +msgstr "" + +#: src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity.ts:46 +msgid "Message id from the messaging provider" +msgstr "" #: src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts:25 msgid "Message Participant" -msgstr "Message Participant" +msgstr "" #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:204 #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:205 @@ -1100,54 +1121,46 @@ msgstr "Message Participant" #: src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts:26 #: src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts:27 msgid "Message Participants" -msgstr "Message Participants" +msgstr "" #: src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity.ts:31 msgid "Message Synced with a Message Channel" -msgstr "Message synchronisé avec un canal de messages" +msgstr "" #: src/modules/messaging/common/standard-objects/message-thread.workspace-entity.ts:23 msgid "Message Thread" -msgstr "Fil de messages" +msgstr "" #: src/modules/messaging/common/standard-objects/message.workspace-entity.ts:77 #: src/modules/messaging/common/standard-objects/message.workspace-entity.ts:78 msgid "Message Thread Id" -msgstr "Message Thread Id" +msgstr "" #: src/modules/messaging/common/standard-objects/message-thread.workspace-entity.ts:24 msgid "Message Threads" -msgstr "Fils de messages" - -#: src/modules/messaging/common/standard-objects/message.workspace-entity.ts:41 -msgid "Message id from the message header" -msgstr "Numéro d'identification du message figurant dans l'en-tête du message" - -#: src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity.ts:46 -msgid "Message id from the messaging provider" -msgstr "Identifiant du message provenant du fournisseur de services de messagerie" +msgstr "" #: src/modules/messaging/common/standard-objects/message.workspace-entity.ts:29 #: src/modules/messaging/common/standard-objects/message-thread.workspace-entity.ts:34 msgid "Messages" -msgstr "Messages" +msgstr "" #: src/modules/messaging/common/standard-objects/message.workspace-entity.ts:106 #: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:374 msgid "Messages from the channel." -msgstr "Messages de la chaîne." +msgstr "" #: src/modules/messaging/common/standard-objects/message-thread.workspace-entity.ts:35 msgid "Messages from the thread." -msgstr "Messages du fil de discussion." +msgstr "" #: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:64 msgid "Messaging provider access token" -msgstr "Jeton d'accès au fournisseur de messagerie" +msgstr "" #: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:73 msgid "Messaging provider refresh token" -msgstr "Jeton de rafraîchissement du fournisseur de messagerie" +msgstr "" #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:88 #: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:71 @@ -1164,15 +1177,15 @@ msgstr "Jeton de rafraîchissement du fournisseur de messagerie" #: src/engine/twenty-orm/custom.workspace-entity.ts:43 #: src/engine/twenty-orm/custom.workspace-entity.ts:44 msgid "Name" -msgstr "Nom" +msgstr "" #: src/modules/favorite-folder/standard-objects/favorite-folder.workspace-entity.ts:44 msgid "Name of the favorite folder" -msgstr "Nom du dossier favori" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:66 msgid "Name of the workflow run" -msgstr "Nom de l'exécution du flux de travail" +msgstr "" #: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:164 #: src/modules/note/standard-objects/note.workspace-entity.ts:47 @@ -1180,52 +1193,36 @@ msgstr "Nom de l'exécution du flux de travail" #: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:193 #: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:98 msgid "Note" -msgstr "Note" - -#: src/modules/note/standard-objects/note-target.workspace-entity.ts:25 -msgid "Note Target" -msgstr "Note Cible" - -#: src/modules/note/standard-objects/note-target.workspace-entity.ts:26 -msgid "Note Targets" -msgstr "Note Objectifs" +msgstr "" #: src/modules/note/standard-objects/note.workspace-entity.ts:126 msgid "Note attachments" -msgstr "Annexes aux notes" +msgstr "" #: src/modules/note/standard-objects/note.workspace-entity.ts:79 #: src/modules/note/standard-objects/note.workspace-entity.ts:89 msgid "Note body" -msgstr "Corps de note" +msgstr "" #: src/modules/note/standard-objects/note.workspace-entity.ts:59 msgid "Note record position" -msgstr "Position de l'enregistrement de la note" +msgstr "" + +#: src/modules/note/standard-objects/note-target.workspace-entity.ts:25 +msgid "Note Target" +msgstr "" #: src/modules/note/standard-objects/note.workspace-entity.ts:114 msgid "Note targets" -msgstr "Objectifs de la note" +msgstr "" + +#: src/modules/note/standard-objects/note-target.workspace-entity.ts:26 +msgid "Note Targets" +msgstr "" #: src/modules/note/standard-objects/note.workspace-entity.ts:70 msgid "Note title" -msgstr "Titre de la note" - -#: src/modules/note/standard-objects/note-target.workspace-entity.ts:66 -msgid "NoteTarget company" -msgstr "NoteEntreprise cible" - -#: src/modules/note/standard-objects/note-target.workspace-entity.ts:36 -msgid "NoteTarget note" -msgstr "NoteNote cible" - -#: src/modules/note/standard-objects/note-target.workspace-entity.ts:81 -msgid "NoteTarget opportunity" -msgstr "NoteOpportunité ciblée" - -#: src/modules/note/standard-objects/note-target.workspace-entity.ts:51 -msgid "NoteTarget person" -msgstr "NotePersonne cible" +msgstr "" #: src/modules/person/standard-objects/person.workspace-entity.ts:222 #: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:195 @@ -1233,67 +1230,83 @@ msgstr "NotePersonne cible" #: src/modules/company/standard-objects/company.workspace-entity.ts:210 #: src/engine/twenty-orm/custom.workspace-entity.ts:76 msgid "Notes" -msgstr "Notes" - -#: src/modules/company/standard-objects/company.workspace-entity.ts:211 -msgid "Notes tied to the company" -msgstr "Notes liées à l'entreprise" - -#: src/modules/person/standard-objects/person.workspace-entity.ts:223 -msgid "Notes tied to the contact" -msgstr "Notes liées au contact" - -#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:196 -msgid "Notes tied to the opportunity" -msgstr "Notes liées à l'opportunité" +msgstr "" #: src/engine/twenty-orm/custom.workspace-entity.ts:81 msgid "Notes tied to the {label}" -msgstr "Notes liées à l'article {label}" +msgstr "" + +#: src/modules/company/standard-objects/company.workspace-entity.ts:211 +msgid "Notes tied to the company" +msgstr "" + +#: src/modules/person/standard-objects/person.workspace-entity.ts:223 +msgid "Notes tied to the contact" +msgstr "" + +#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:196 +msgid "Notes tied to the opportunity" +msgstr "" + +#: src/modules/note/standard-objects/note-target.workspace-entity.ts:66 +msgid "NoteTarget company" +msgstr "" + +#: src/modules/note/standard-objects/note-target.workspace-entity.ts:36 +msgid "NoteTarget note" +msgstr "" + +#: src/modules/note/standard-objects/note-target.workspace-entity.ts:81 +msgid "NoteTarget opportunity" +msgstr "" + +#: src/modules/note/standard-objects/note-target.workspace-entity.ts:51 +msgid "NoteTarget person" +msgstr "" #: src/modules/company/standard-objects/company.workspace-entity.ts:87 msgid "Number of employees in the company" -msgstr "Nombre de salariés dans l'entreprise" - -#: src/modules/view/standard-objects/view.workspace-entity.ts:51 -msgid "Object Metadata Id" -msgstr "Id des métadonnées de l'objet" +msgstr "" #: src/modules/timeline/standard-objects/behavioral-event.workspace-entity.ts:86 msgid "Object id" -msgstr "Identité de l'objet" +msgstr "" #: src/modules/timeline/standard-objects/audit-log.workspace-entity.ts:71 #: src/modules/timeline/standard-objects/audit-log.workspace-entity.ts:72 msgid "Object metadata id" -msgstr "Identifiant des métadonnées de l'objet" +msgstr "" + +#: src/modules/view/standard-objects/view.workspace-entity.ts:51 +msgid "Object Metadata Id" +msgstr "" #: src/modules/timeline/standard-objects/behavioral-event.workspace-entity.ts:77 #: src/modules/timeline/standard-objects/audit-log.workspace-entity.ts:62 #: src/modules/timeline/standard-objects/audit-log.workspace-entity.ts:63 msgid "Object name" -msgstr "Nom de l'objet" +msgstr "" #: src/modules/view/standard-objects/view-filter.workspace-entity.ts:42 msgid "Operand" -msgstr "Opérande" +msgstr "" #: src/modules/webhook/standard-objects/webhook.workspace-entity.ts:39 msgid "Operation" -msgstr "Fonctionnement" +msgstr "" #: src/modules/webhook/standard-objects/webhook.workspace-entity.ts:49 msgid "Operations" -msgstr "Opérations" +msgstr "" #: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:52 #: src/modules/company/standard-objects/company.workspace-entity.ts:221 msgid "Opportunities" -msgstr "Opportunités" +msgstr "" #: src/modules/company/standard-objects/company.workspace-entity.ts:222 msgid "Opportunities linked to the company." -msgstr "Opportunités liées à l'entreprise." +msgstr "" #: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:149 #: src/modules/task/standard-objects/task-target.workspace-entity.ts:80 @@ -1302,65 +1315,65 @@ msgstr "Opportunités liées à l'entreprise." #: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:118 #: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:143 msgid "Opportunity" -msgstr "Opportunité" +msgstr "" #: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:73 msgid "Opportunity amount" -msgstr "Montant de l'opportunité" +msgstr "" #: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:83 msgid "Opportunity close date" -msgstr "Date de clôture de l'opportunité" +msgstr "" #: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:156 msgid "Opportunity company" -msgstr "Entreprise d'opportunité" +msgstr "" #: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:140 msgid "Opportunity point of contact" -msgstr "Point de contact pour les opportunités" +msgstr "" #: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:231 msgid "Opportunity probability" -msgstr "Probabilité d'opportunité" +msgstr "" #: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:116 msgid "Opportunity record position" -msgstr "Position d'enregistrement d'opportunité" +msgstr "" #: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:93 msgid "Opportunity stage" -msgstr "Stade de l'opportunité" +msgstr "" #: src/modules/view/standard-objects/view.workspace-entity.ts:190 #: src/modules/view/standard-objects/view-field.workspace-entity.ts:97 msgid "Optional aggregate operation" -msgstr "Opération d'agrégation facultative" +msgstr "" #: src/modules/webhook/standard-objects/webhook.workspace-entity.ts:70 msgid "Optional secret used to compute the HMAC signature for webhook payloads. This secret is shared between Twenty and the webhook consumer to authenticate webhook requests." -msgstr "Secret facultatif utilisé pour calculer la signature HMAC des données utiles du webhook. Ce secret est partagé entre Twenty et le consommateur de webhook pour authentifier les demandes de webhook." +msgstr "" #: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:143 msgid "Output" -msgstr "Sortie" +msgstr "" #: src/modules/view/standard-objects/view-filter-group.workspace-entity.ts:52 msgid "Parent View Filter Group" -msgstr "Groupe de filtres de la vue parentale" +msgstr "" #: src/modules/view/standard-objects/view-filter-group.workspace-entity.ts:51 msgid "Parent View Filter Group Id" -msgstr "Vue parentale Filtre Groupe Id" +msgstr "" #: src/modules/person/standard-objects/person.workspace-entity.ts:61 #: src/modules/company/standard-objects/company.workspace-entity.ts:171 msgid "People" -msgstr "Les personnes" +msgstr "" #: src/modules/company/standard-objects/company.workspace-entity.ts:172 msgid "People linked to the company." -msgstr "Personnes liées à l'entreprise." +msgstr "" #: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:119 #: src/modules/task/standard-objects/task-target.workspace-entity.ts:50 @@ -1373,23 +1386,23 @@ msgstr "Personnes liées à l'entreprise." #: src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts:124 #: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:113 msgid "Person" -msgstr "Personne" +msgstr "" #: src/modules/person/standard-objects/person.workspace-entity.ts:160 msgid "Person record Position" -msgstr "Fiche de personne Position" +msgstr "" #: src/modules/person/standard-objects/person.workspace-entity.ts:121 msgid "Phone" -msgstr "Téléphone" +msgstr "" #: src/modules/person/standard-objects/person.workspace-entity.ts:131 msgid "Phones" -msgstr "Téléphones" +msgstr "" #: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:139 msgid "Point of Contact" -msgstr "Point de contact" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:101 #: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:115 @@ -1407,150 +1420,154 @@ msgstr "Point de contact" #: src/engine/twenty-orm/custom.workspace-entity.ts:52 #: src/engine/twenty-orm/custom.workspace-entity.ts:53 msgid "Position" -msgstr "Position" +msgstr "" #: src/modules/view/standard-objects/view-filter-group.workspace-entity.ts:90 msgid "Position in the parent view filter group" -msgstr "Position dans le groupe de filtres de la vue parentale" +msgstr "" #: src/modules/view/standard-objects/view-filter.workspace-entity.ts:92 msgid "Position in the view filter group" -msgstr "Position dans le groupe de filtres de vue" +msgstr "" #: src/modules/view/standard-objects/view-filter.workspace-entity.ts:91 #: src/modules/view/standard-objects/view-filter-group.workspace-entity.ts:89 msgid "Position in view filter group" -msgstr "Position dans le groupe de filtres de vue" +msgstr "" #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:98 msgid "Preferred color scheme" -msgstr "Schéma de couleurs préféré" +msgstr "" #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:108 msgid "Preferred language" -msgstr "Langue préférée" +msgstr "" #: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:230 msgid "Probability" -msgstr "Probabilité" +msgstr "" + +#: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:54 +msgid "provider" +msgstr "" #: src/modules/messaging/common/standard-objects/message.workspace-entity.ts:67 msgid "Received At" -msgstr "Reçu à" +msgstr "" #: src/modules/timeline/standard-objects/audit-log.workspace-entity.ts:80 #: src/modules/timeline/standard-objects/audit-log.workspace-entity.ts:81 msgid "Record id" -msgstr "Identifiant de l'enregistrement" +msgstr "" #: src/modules/calendar/common/standard-objects/calendar-channel-event-association.workspace-entity.ts:45 #: src/modules/calendar/common/standard-objects/calendar-channel-event-association.workspace-entity.ts:46 msgid "Recurring Event ID" -msgstr "ID de l'événement récurrent" +msgstr "" #: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:72 msgid "Refresh Token" -msgstr "Jeton de rafraîchissement" +msgstr "" #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:127 msgid "Related user email address" -msgstr "Adresse électronique de l'utilisateur concerné" +msgstr "" #: src/modules/task/standard-objects/task.workspace-entity.ts:151 #: src/modules/note/standard-objects/note.workspace-entity.ts:113 msgid "Relations" -msgstr "Relations" +msgstr "" #: src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts:73 #: src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts:74 msgid "Response Status" -msgstr "État de la réponse" +msgstr "" #: src/modules/api-key/standard-objects/api-key.workspace-entity.ts:47 msgid "Revocation date" -msgstr "Date de révocation" +msgstr "" #: src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts:37 #: src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts:38 msgid "Role" -msgstr "Rôle" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:124 #: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:142 msgid "Runs" -msgstr "Courses" +msgstr "" #: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:109 #: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:110 msgid "Scopes" -msgstr "Scopes" +msgstr "" #: src/engine/metadata-modules/constants/search-vector-field.constants.ts:5 msgid "Search vector" -msgstr "Vecteur de recherche" +msgstr "" #: src/modules/webhook/standard-objects/webhook.workspace-entity.ts:69 msgid "Secret" -msgstr "Secret" +msgstr "" #: src/modules/view/standard-objects/view-field.workspace-entity.ts:64 msgid "Size" -msgstr "Taille" +msgstr "" #: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:92 msgid "Stage" -msgstr "Stade" +msgstr "" #: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:68 #: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:69 msgid "Start Date" -msgstr "Date de début" +msgstr "" #: src/modules/task/standard-objects/task.workspace-entity.ts:113 msgid "Status" -msgstr "Statut" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:90 msgid "Statuses" -msgstr "Statuts" +msgstr "" #: src/modules/messaging/common/standard-objects/message.workspace-entity.ts:49 #: src/modules/messaging/common/standard-objects/message.workspace-entity.ts:50 msgid "Subject" -msgstr "Sujet" +msgstr "" #: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:268 msgid "Sync Cursor" -msgstr "Curseur de synchronisation" +msgstr "" #: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:269 msgid "Sync Cursor. Used for syncing events from the calendar provider" -msgstr "Curseur de synchronisation. Utilisé pour synchroniser les événements du fournisseur de calendrier" +msgstr "" #: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:290 #: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:291 #: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:137 #: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:138 msgid "Sync stage" -msgstr "Phase de synchronisation" +msgstr "" #: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:338 #: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:339 #: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:287 #: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:288 msgid "Sync stage started at" -msgstr "L'étape de synchronisation a commencé à" +msgstr "" #: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:248 #: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:249 #: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:95 #: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:96 msgid "Sync status" -msgstr "État de la synchronisation" +msgstr "" #: src/modules/webhook/standard-objects/webhook.workspace-entity.ts:30 msgid "Target Url" -msgstr "Url cible" +msgstr "" #: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:179 #: src/modules/task/standard-objects/task.workspace-entity.ts:49 @@ -1558,64 +1575,48 @@ msgstr "Url cible" #: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:178 #: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:83 msgid "Task" -msgstr "Tâche" - -#: src/modules/task/standard-objects/task-target.workspace-entity.ts:25 -msgid "Task Target" -msgstr "Tâche Cible" - -#: src/modules/task/standard-objects/task-target.workspace-entity.ts:26 -msgid "Task Targets" -msgstr "Objectifs de la tâche" +msgstr "" #: src/modules/task/standard-objects/task.workspace-entity.ts:176 msgid "Task assignee" -msgstr "Destinataire de la tâche" +msgstr "" #: src/modules/task/standard-objects/task.workspace-entity.ts:164 msgid "Task attachments" -msgstr "Pièces jointes aux tâches" +msgstr "" #: src/modules/task/standard-objects/task.workspace-entity.ts:81 #: src/modules/task/standard-objects/task.workspace-entity.ts:91 msgid "Task body" -msgstr "Organe d'exécution" +msgstr "" #: src/modules/task/standard-objects/task.workspace-entity.ts:104 msgid "Task due date" -msgstr "Date d'échéance de la tâche" +msgstr "" #: src/modules/task/standard-objects/task.workspace-entity.ts:61 msgid "Task record position" -msgstr "Position de l'enregistrement de la tâche" +msgstr "" #: src/modules/task/standard-objects/task.workspace-entity.ts:114 msgid "Task status" -msgstr "Statut de la tâche" +msgstr "" + +#: src/modules/task/standard-objects/task-target.workspace-entity.ts:25 +msgid "Task Target" +msgstr "" #: src/modules/task/standard-objects/task.workspace-entity.ts:152 msgid "Task targets" -msgstr "Objectifs de la tâche" +msgstr "" + +#: src/modules/task/standard-objects/task-target.workspace-entity.ts:26 +msgid "Task Targets" +msgstr "" #: src/modules/task/standard-objects/task.workspace-entity.ts:72 msgid "Task title" -msgstr "Titre de la tâche" - -#: src/modules/task/standard-objects/task-target.workspace-entity.ts:66 -msgid "TaskTarget company" -msgstr "TâcheL'entreprise cible" - -#: src/modules/task/standard-objects/task-target.workspace-entity.ts:81 -msgid "TaskTarget opportunity" -msgstr "TaskTarget opportunity" - -#: src/modules/task/standard-objects/task-target.workspace-entity.ts:51 -msgid "TaskTarget person" -msgstr "TaskTarget personne" - -#: src/modules/task/standard-objects/task-target.workspace-entity.ts:36 -msgid "TaskTarget task" -msgstr "TaskTarget task" +msgstr "" #: src/modules/task/standard-objects/task.workspace-entity.ts:50 #: src/modules/person/standard-objects/person.workspace-entity.ts:211 @@ -1623,56 +1624,72 @@ msgstr "TaskTarget task" #: src/modules/company/standard-objects/company.workspace-entity.ts:199 #: src/engine/twenty-orm/custom.workspace-entity.ts:92 msgid "Tasks" -msgstr "Tâches" +msgstr "" #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:146 msgid "Tasks assigned to the workspace member" -msgstr "Tâches assignées au membre de l'espace de travail" - -#: src/modules/company/standard-objects/company.workspace-entity.ts:200 -msgid "Tasks tied to the company" -msgstr "Tâches liées à l'entreprise" - -#: src/modules/person/standard-objects/person.workspace-entity.ts:212 -msgid "Tasks tied to the contact" -msgstr "Tâches liées au contact" - -#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:185 -msgid "Tasks tied to the opportunity" -msgstr "Tâches liées à l'opportunité" +msgstr "" #: src/engine/twenty-orm/custom.workspace-entity.ts:97 msgid "Tasks tied to the {label}" -msgstr "Tâches liées à l'{label}" +msgstr "" + +#: src/modules/company/standard-objects/company.workspace-entity.ts:200 +msgid "Tasks tied to the company" +msgstr "" + +#: src/modules/person/standard-objects/person.workspace-entity.ts:212 +msgid "Tasks tied to the contact" +msgstr "" + +#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:185 +msgid "Tasks tied to the opportunity" +msgstr "" + +#: src/modules/task/standard-objects/task-target.workspace-entity.ts:66 +msgid "TaskTarget company" +msgstr "" + +#: src/modules/task/standard-objects/task-target.workspace-entity.ts:81 +msgid "TaskTarget opportunity" +msgstr "" + +#: src/modules/task/standard-objects/task-target.workspace-entity.ts:51 +msgid "TaskTarget person" +msgstr "" + +#: src/modules/task/standard-objects/task-target.workspace-entity.ts:36 +msgid "TaskTarget task" +msgstr "" #: src/modules/messaging/common/standard-objects/message.workspace-entity.ts:58 #: src/modules/messaging/common/standard-objects/message.workspace-entity.ts:59 msgid "Text" -msgstr "Texte" +msgstr "" #: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:46 msgid "The account handle (email, username, phone number, etc.)" -msgstr "L'identifiant du compte (email, nom d'utilisateur, numéro de téléphone, etc.)" +msgstr "" #: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:55 msgid "The account provider" -msgstr "Le fournisseur de compte" +msgstr "" #: src/modules/company/standard-objects/company.workspace-entity.ts:97 msgid "The company Linkedin account" -msgstr "Le compte Linkedin de l'entreprise" - -#: src/modules/company/standard-objects/company.workspace-entity.ts:107 -msgid "The company Twitter/X account" -msgstr "Le compte Twitter/X de l'entreprise" +msgstr "" #: src/modules/company/standard-objects/company.workspace-entity.ts:68 msgid "The company name" -msgstr "Le nom de l'entreprise" +msgstr "" + +#: src/modules/company/standard-objects/company.workspace-entity.ts:107 +msgid "The company Twitter/X account" +msgstr "" #: src/modules/company/standard-objects/company.workspace-entity.ts:77 msgid "The company website URL. We use this url to fetch the company icon" -msgstr "L'URL du site web de l'entreprise. Nous utilisons cette URL pour récupérer l'icône de l'entreprise" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:171 #: src/modules/task/standard-objects/task.workspace-entity.ts:141 @@ -1682,70 +1699,70 @@ msgstr "L'URL du site web de l'entreprise. Nous utilisons cette URL pour récup #: src/modules/company/standard-objects/company.workspace-entity.ts:159 #: src/engine/twenty-orm/custom.workspace-entity.ts:66 msgid "The creator of the record" -msgstr "Le créateur de l'enregistrement" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:91 msgid "The current statuses of the workflow versions" -msgstr "L'état actuel des versions du flux de travail" +msgstr "" #: src/modules/messaging/common/standard-objects/message.workspace-entity.ts:68 msgid "The date the message was received" -msgstr "Date de réception du message" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:132 msgid "The executor of the workflow" -msgstr "L'exécutant du flux de travail" +msgstr "" #: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:104 msgid "The folder this favorite belongs to" -msgstr "Le dossier auquel appartient ce favori" +msgstr "" #: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:64 msgid "The opportunity name" -msgstr "Le nom de l'opportunité" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow-event-listener.workspace-entity.ts:35 msgid "The workflow event listener name" -msgstr "Le nom de l'auditeur de l'événement du flux de travail" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:81 msgid "The workflow last published version id" -msgstr "L'identifiant de la dernière version publiée du flux de travail" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:72 msgid "The workflow name" -msgstr "Le nom du flux de travail" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:76 msgid "The workflow version name" -msgstr "Le nom de la version du flux de travail" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:105 msgid "The workflow version status" -msgstr "L'état de la version du flux de travail" +msgstr "" #: src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity.ts:56 msgid "Thread External Id" -msgstr "Filet Id externe" +msgstr "" #: src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity.ts:57 msgid "Thread id from the messaging provider" -msgstr "Identité de la file d'attente du fournisseur de services de messagerie" +msgstr "" #: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:348 #: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:349 #: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:297 #: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:298 msgid "Throttle Failure Count" -msgstr "Comptage des défaillances de l'accélérateur" +msgstr "" #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:314 msgid "Time format" -msgstr "Format de l'heure" +msgstr "" #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:268 msgid "Time zone" -msgstr "Fuseau horaire" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:158 #: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:166 @@ -1757,101 +1774,101 @@ msgstr "Fuseau horaire" #: src/modules/company/standard-objects/company.workspace-entity.ts:258 #: src/engine/twenty-orm/custom.workspace-entity.ts:141 msgid "Timeline Activities" -msgstr "Calendrier des activités" +msgstr "" #: src/modules/company/standard-objects/company.workspace-entity.ts:259 msgid "Timeline Activities linked to the company" -msgstr "Chronologie Activités liées à l'entreprise" +msgstr "" #: src/modules/note/standard-objects/note.workspace-entity.ts:139 msgid "Timeline Activities linked to the note." -msgstr "Activités de la chronologie liées à la note." +msgstr "" #: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:219 msgid "Timeline Activities linked to the opportunity." -msgstr "Calendrier Activités liées à l'opportunité." - -#: src/modules/task/standard-objects/task.workspace-entity.ts:193 -msgid "Timeline Activities linked to the task." -msgstr "Calendrier Activités liées à la tâche." - -#: src/engine/twenty-orm/custom.workspace-entity.ts:146 -msgid "Timeline Activities tied to the {label}" -msgstr "Calendrier Activités liées à l'{label}" - -#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:33 -msgid "Timeline Activity" -msgstr "Activité chronologique" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:206 msgid "Timeline activities linked to the run" -msgstr "Calendrier des activités liées à la course" +msgstr "" + +#: src/modules/task/standard-objects/task.workspace-entity.ts:193 +msgid "Timeline Activities linked to the task." +msgstr "" #: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:167 msgid "Timeline activities linked to the version" -msgstr "Calendrier des activités liées à la version" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:159 msgid "Timeline activities linked to the workflow" -msgstr "Activités de la chronologie liées au flux de travail" +msgstr "" + +#: src/engine/twenty-orm/custom.workspace-entity.ts:146 +msgid "Timeline Activities tied to the {label}" +msgstr "" + +#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:33 +msgid "Timeline Activity" +msgstr "" #: src/modules/task/standard-objects/task.workspace-entity.ts:71 #: src/modules/note/standard-objects/note.workspace-entity.ts:69 #: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:39 #: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:40 msgid "Title" -msgstr "Titre" +msgstr "" #: src/modules/view/standard-objects/view.workspace-entity.ts:59 #: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:134 #: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:60 msgid "Type" -msgstr "Type" +msgstr "" #: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:98 #: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:99 msgid "Update DateTime" -msgstr "Mise à jour de la date et de l'heure" +msgstr "" #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:126 msgid "User Email" -msgstr "Courriel de l'utilisateur" +msgstr "" #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:135 msgid "User Id" -msgstr "Identité de l'utilisateur" +msgstr "" #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:270 msgid "User time zone" -msgstr "Fuseau horaire de l'utilisateur" +msgstr "" #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:279 msgid "User's preferred date format" -msgstr "Format de date préféré par l'utilisateur" +msgstr "" #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:315 msgid "User's preferred time format" -msgstr "Format horaire préféré de l'utilisateur" +msgstr "" #: src/modules/view/standard-objects/view-filter.workspace-entity.ts:51 msgid "Value" -msgstr "Valeur" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:104 msgid "Version status" -msgstr "Statut de la version" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:94 msgid "Version steps" -msgstr "Étapes de la version" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:84 msgid "Version trigger" -msgstr "Déclencheur de version" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:113 msgid "Versions" -msgstr "Versions" +msgstr "" #: src/modules/view/standard-objects/view.workspace-entity.ts:31 #: src/modules/view/standard-objects/view-sort.workspace-entity.ts:57 @@ -1862,191 +1879,191 @@ msgstr "Versions" #: src/modules/view/standard-objects/view-field.workspace-entity.ts:85 #: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:208 msgid "View" -msgstr "Voir" +msgstr "" #: src/modules/view/standard-objects/view-field.workspace-entity.ts:30 msgid "View Field" -msgstr "Voir le champ" +msgstr "" #: src/modules/view/standard-objects/view-group.workspace-entity.ts:60 #: src/modules/view/standard-objects/view-field.workspace-entity.ts:75 msgid "View Field position" -msgstr "Voir la position sur le terrain" +msgstr "" #: src/modules/view/standard-objects/view-field.workspace-entity.ts:86 msgid "View Field related view" -msgstr "Vue Champ de vision connexe" +msgstr "" #: src/modules/view/standard-objects/view-field.workspace-entity.ts:65 msgid "View Field size" -msgstr "Vue Taille du champ" +msgstr "" #: src/modules/view/standard-objects/view-field.workspace-entity.ts:46 msgid "View Field target field" -msgstr "Champ de vision Champ cible" +msgstr "" #: src/modules/view/standard-objects/view-field.workspace-entity.ts:55 msgid "View Field visibility" -msgstr "Vue Visibilité du champ" +msgstr "" #: src/modules/view/standard-objects/view.workspace-entity.ts:117 #: src/modules/view/standard-objects/view.workspace-entity.ts:118 #: src/modules/view/standard-objects/view-field.workspace-entity.ts:31 msgid "View Fields" -msgstr "Voir les champs" +msgstr "" #: src/modules/view/standard-objects/view-filter.workspace-entity.ts:23 msgid "View Filter" -msgstr "Voir le filtre" +msgstr "" #: src/modules/view/standard-objects/view-filter.workspace-entity.ts:60 msgid "View Filter Display Value" -msgstr "Voir la valeur d'affichage du filtre" +msgstr "" #: src/modules/view/standard-objects/view-filter.workspace-entity.ts:83 #: src/modules/view/standard-objects/view-filter-group.workspace-entity.ts:27 msgid "View Filter Group" -msgstr "Voir le groupe de filtres" +msgstr "" #: src/modules/view/standard-objects/view-filter.workspace-entity.ts:82 msgid "View Filter Group Id" -msgstr "Visualiser l'identifiant du groupe de filtrage" +msgstr "" #: src/modules/view/standard-objects/view.workspace-entity.ts:153 #: src/modules/view/standard-objects/view.workspace-entity.ts:154 #: src/modules/view/standard-objects/view-filter-group.workspace-entity.ts:28 msgid "View Filter Groups" -msgstr "Voir les groupes de filtres" +msgstr "" #: src/modules/view/standard-objects/view-filter.workspace-entity.ts:43 msgid "View Filter operand" -msgstr "Voir l'opérande Filtre" +msgstr "" #: src/modules/view/standard-objects/view-filter.workspace-entity.ts:68 msgid "View Filter related view" -msgstr "Vue Filtre Vue associée" +msgstr "" #: src/modules/view/standard-objects/view-filter.workspace-entity.ts:35 msgid "View Filter target field" -msgstr "Visualiser le champ cible du filtre" +msgstr "" #: src/modules/view/standard-objects/view-filter.workspace-entity.ts:52 msgid "View Filter value" -msgstr "Voir la valeur du filtre" +msgstr "" #: src/modules/view/standard-objects/view.workspace-entity.ts:141 #: src/modules/view/standard-objects/view.workspace-entity.ts:142 #: src/modules/view/standard-objects/view-filter.workspace-entity.ts:24 msgid "View Filters" -msgstr "Voir les filtres" +msgstr "" #: src/modules/view/standard-objects/view-group.workspace-entity.ts:21 msgid "View Group" -msgstr "Voir le groupe" +msgstr "" #: src/modules/view/standard-objects/view-group.workspace-entity.ts:71 msgid "View Group related view" -msgstr "Vue du groupe" +msgstr "" #: src/modules/view/standard-objects/view-group.workspace-entity.ts:33 msgid "View Group target field" -msgstr "Visualiser le champ cible du groupe" +msgstr "" #: src/modules/view/standard-objects/view-group.workspace-entity.ts:42 msgid "View Group visibility" -msgstr "Voir la visibilité du groupe" +msgstr "" #: src/modules/view/standard-objects/view.workspace-entity.ts:129 #: src/modules/view/standard-objects/view.workspace-entity.ts:130 #: src/modules/view/standard-objects/view-group.workspace-entity.ts:22 msgid "View Groups" -msgstr "Voir les groupes" +msgstr "" + +#: src/modules/view/standard-objects/view.workspace-entity.ts:80 +msgid "View icon" +msgstr "" #: src/modules/view/standard-objects/view.workspace-entity.ts:88 msgid "View Kanban column field" -msgstr "Voir le champ de la colonne Kanban" +msgstr "" + +#: src/modules/view/standard-objects/view.workspace-entity.ts:69 +msgid "View key" +msgstr "" + +#: src/modules/view/standard-objects/view.workspace-entity.ts:44 +msgid "View name" +msgstr "" + +#: src/modules/view/standard-objects/view.workspace-entity.ts:99 +msgid "View position" +msgstr "" #: src/modules/view/standard-objects/view-sort.workspace-entity.ts:24 msgid "View Sort" -msgstr "Voir le tri" +msgstr "" #: src/modules/view/standard-objects/view-sort.workspace-entity.ts:49 msgid "View Sort direction" -msgstr "Voir le sens du tri" +msgstr "" #: src/modules/view/standard-objects/view-sort.workspace-entity.ts:58 msgid "View Sort related view" -msgstr "Vue Trier la vue associée" +msgstr "" #: src/modules/view/standard-objects/view-sort.workspace-entity.ts:40 msgid "View Sort target field" -msgstr "Visualiser le champ cible du tri" +msgstr "" #: src/modules/view/standard-objects/view.workspace-entity.ts:165 #: src/modules/view/standard-objects/view.workspace-entity.ts:166 #: src/modules/view/standard-objects/view-sort.workspace-entity.ts:25 msgid "View Sorts" -msgstr "Voir les tris" - -#: src/modules/view/standard-objects/view.workspace-entity.ts:80 -msgid "View icon" -msgstr "Voir l'icône" - -#: src/modules/view/standard-objects/view.workspace-entity.ts:69 -msgid "View key" -msgstr "Voir la clé" - -#: src/modules/view/standard-objects/view.workspace-entity.ts:44 -msgid "View name" -msgstr "Voir le nom" - -#: src/modules/view/standard-objects/view.workspace-entity.ts:99 -msgid "View position" -msgstr "Voir la position" +msgstr "" #: src/modules/view/standard-objects/view.workspace-entity.ts:52 msgid "View target object" -msgstr "Visualiser l'objet cible" +msgstr "" #: src/modules/view/standard-objects/view.workspace-entity.ts:60 msgid "View type" -msgstr "Voir le type" +msgstr "" #: src/modules/view/standard-objects/view.workspace-entity.ts:32 msgid "Views" -msgstr "Points de vue" +msgstr "" #: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:95 #: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:96 #: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:186 #: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:187 msgid "Visibility" -msgstr "Visibilité" +msgstr "" #: src/modules/view/standard-objects/view-group.workspace-entity.ts:41 #: src/modules/view/standard-objects/view-field.workspace-entity.ts:54 msgid "Visible" -msgstr "Visible" +msgstr "" #: src/modules/webhook/standard-objects/webhook.workspace-entity.ts:18 msgid "Webhook" -msgstr "Crochet Web" +msgstr "" #: src/modules/webhook/standard-objects/webhook.workspace-entity.ts:40 msgid "Webhook operation" -msgstr "Opération Webhook" +msgstr "" #: src/modules/webhook/standard-objects/webhook.workspace-entity.ts:50 msgid "Webhook operations" -msgstr "Opérations de webhook" +msgstr "" #: src/modules/webhook/standard-objects/webhook.workspace-entity.ts:31 msgid "Webhook target url" -msgstr "URL cible du webhook" +msgstr "" #: src/modules/webhook/standard-objects/webhook.workspace-entity.ts:19 msgid "Webhooks" -msgstr "Crochets Web" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:60 #: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:127 @@ -2057,103 +2074,107 @@ msgstr "Crochets Web" #: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:148 #: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:163 msgid "Workflow" -msgstr "Flux de travail" +msgstr "" + +#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:136 +msgid "Workflow event listeners linked to the workflow." +msgstr "" + +#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:180 +msgid "Workflow linked to the run." +msgstr "" + +#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:102 +msgid "Workflow record position" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:55 #: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:224 msgid "Workflow Run" -msgstr "Exécution du flux de travail" - -#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:56 -msgid "Workflow Runs" -msgstr "Exécution du flux de travail" - -#: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:65 -msgid "Workflow Version" -msgstr "Version du flux de travail" - -#: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:66 -msgid "Workflow Versions" -msgstr "Versions du flux de travail" - -#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:136 -msgid "Workflow event listeners linked to the workflow." -msgstr "Les auditeurs d'événements de flux de travail liés au flux de travail." - -#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:180 -msgid "Workflow linked to the run." -msgstr "Flux de travail lié à l'exécution." - -#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:102 -msgid "Workflow record position" -msgstr "Position de l'enregistrement du flux de travail" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:84 #: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:85 msgid "Workflow run ended at" -msgstr "L'exécution du flux de travail s'est terminée à" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:154 msgid "Workflow run position" -msgstr "Position d'exécution du flux de travail" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:74 #: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:75 msgid "Workflow run started at" -msgstr "L'exécution du flux de travail a commencé à" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:94 #: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:95 msgid "Workflow run status" -msgstr "Statut d'exécution du flux de travail" +msgstr "" + +#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:56 +msgid "Workflow Runs" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:143 msgid "Workflow runs linked to the version." -msgstr "Exécution du flux de travail lié à la version." +msgstr "" #: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:125 msgid "Workflow runs linked to the workflow." -msgstr "Exécutions de flux de travail liées au flux de travail." +msgstr "" #: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:165 msgid "Workflow version" -msgstr "Version du flux de travail" +msgstr "" + +#: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:65 +msgid "Workflow Version" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:166 msgid "Workflow version linked to the run." -msgstr "Version du flux de travail liée à l'exécution." +msgstr "" #: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:116 msgid "Workflow version position" -msgstr "Position de la version du flux de travail" +msgstr "" + +#: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:66 +msgid "Workflow Versions" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:114 msgid "Workflow versions linked to the workflow." -msgstr "Versions du flux de travail liées au flux de travail." +msgstr "" #: src/modules/workflow/common/standard-objects/workflow-event-listener.workspace-entity.ts:22 msgid "WorkflowEventListener" -msgstr "WorkflowEventListener" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow-event-listener.workspace-entity.ts:44 msgid "WorkflowEventListener workflow" -msgstr "WorkflowEventListener workflow" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow-event-listener.workspace-entity.ts:23 msgid "WorkflowEventListeners" -msgstr "Écouteurs de flux de travail (WorkflowEventListeners)" - -#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:209 -msgid "WorkflowVersion" -msgstr "WorkflowVersion" - -#: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:128 -msgid "WorkflowVersion workflow" -msgstr "WorkflowVersion workflow" +msgstr "" #: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:61 msgid "Workflows" -msgstr "Flux de travail" +msgstr "" + +#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:209 +msgid "WorkflowVersion" +msgstr "" + +#: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:128 +msgid "WorkflowVersion workflow" +msgstr "" + +#: src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts:101 +msgid "Workspace member" +msgstr "" #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:76 #: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:104 @@ -2163,51 +2184,30 @@ msgstr "Flux de travail" #: src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts:138 #: src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts:139 msgid "Workspace Member" -msgstr "Membre de l'espace de travail" - -#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:77 -msgid "Workspace Members" -msgstr "Membres de l'espace de travail" - -#: src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts:101 -msgid "Workspace member" -msgstr "Membre de l'espace de travail" +msgstr "" #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:118 msgid "Workspace member avatar" -msgstr "Avatar du membre de l'espace de travail" +msgstr "" #: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:89 msgid "Workspace member name" -msgstr "Nom du membre de l'espace de travail" +msgstr "" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:77 +msgid "Workspace Members" +msgstr "" #: src/modules/blocklist/standard-objects/blocklist.workspace-entity.ts:43 #: src/modules/blocklist/standard-objects/blocklist.workspace-entity.ts:44 msgid "WorkspaceMember" -msgstr "Membre de l'espace de travail" +msgstr "" #: src/modules/person/standard-objects/person.workspace-entity.ts:102 #: src/modules/company/standard-objects/company.workspace-entity.ts:106 msgid "X" -msgstr "X" +msgstr "" #: src/modules/company/standard-objects/company.workspace-entity.ts:184 msgid "Your team member responsible for managing the company account" -msgstr "Le membre de votre équipe responsable de la gestion du compte de l'entreprise" - -#: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:45 -msgid "handle" -msgstr "poignée" - -#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:126 -#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:127 -msgid "iCal UID" -msgstr "uID iCal" - -#: src/modules/view/standard-objects/view.workspace-entity.ts:87 -msgid "kanbanfieldMetadataId" -msgstr "kanbanfieldMetadataId" - -#: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:54 -msgid "provider" -msgstr "fournisseur" +msgstr "" diff --git a/packages/twenty-server/src/engine/core-modules/i18n/locales/generated/en.js b/packages/twenty-server/src/engine/core-modules/i18n/locales/generated/en.js index e93874163..5db2b2996 100644 --- a/packages/twenty-server/src/engine/core-modules/i18n/locales/generated/en.js +++ b/packages/twenty-server/src/engine/core-modules/i18n/locales/generated/en.js @@ -1 +1 @@ -/*eslint-disable*/module.exports={messages:JSON.parse("{\"Qyrd7v\":[\"(System) View Fields\"],\"9Y3fTB\":[\"(System) View Filter Groups\"],\"TB2jLV\":[\"(System) View Filters\"],\"Y7M7Ro\":[\"(System) View Groups\"],\"9vliLw\":[\"(System) View Sorts\"],\"5B59WE\":[\"(System) Views\"],\"kZR6+h\":[\"A company\"],\"+aeifv\":[\"A connected account\"],\"HCoswz\":[\"A favorite that can be accessed from the left menu\"],\"6w8bHl\":[\"A Folder of favorites\"],\"sSGYmf\":[\"A group of related messages (e.g. email thread, chat thread)\"],\"vZj1Xc\":[\"A message sent or received through a messaging channel (email, chat, etc.)\"],\"bufuBA\":[\"A note\"],\"6kUkZW\":[\"A note target\"],\"Io42ej\":[\"A person\"],\"mkFXEH\":[\"A task\"],\"hk2NzW\":[\"A task target\"],\"HTSJFW\":[\"A webhook\"],\"ZIN9Ga\":[\"A workflow\"],\"juBVjt\":[\"A workflow event listener\"],\"1+xDbI\":[\"A workflow run\"],\"N0g7rp\":[\"A workflow version\"],\"HpZ/I5\":[\"A workspace member\"],\"GDKKxT\":[\"Access Token\"],\"pd81Qb\":[\"Account Owner\"],\"loqL/f\":[\"Account owner for companies\"],\"HZosRi\":[\"Account Owner For Companies\"],\"Du6bPw\":[\"Address\"],\"JiOJxf\":[\"Address (deprecated) \"],\"Knl3c9\":[\"Address of the company\"],\"zJhwjv\":[\"Address of the company - deprecated in favor of new address field\"],\"ZfVqbP\":[\"Aggregate operation\"],\"W58PBh\":[\"Aggregated / filtered event to be displayed on the timeline\"],\"hehnjM\":[\"Amount\"],\"qeHcQj\":[\"An API key\"],\"MjyFvC\":[\"An attachment\"],\"+bL++X\":[\"An audit log of actions performed in the system\"],\"muVHgL\":[\"An event related to user behavior\"],\"bZq8rL\":[\"An opportunity\"],\"JKWicb\":[\"Annual Recurring Revenue: The actual or estimated annual revenue of the company\"],\"yRnk5W\":[\"API Key\"],\"FfSJ1Y\":[\"API Keys\"],\"puNs/l\":[\"ApiKey expiration date\"],\"YHiNxr\":[\"ApiKey name\"],\"xrndTt\":[\"ApiKey revocation date\"],\"3EiOLz\":[\"ARR\"],\"Ek7xGj\":[\"Assigned tasks\"],\"ojKCLU\":[\"Assignee\"],\"Max2GU\":[\"Associated User Id\"],\"UY1vmE\":[\"Attachment\"],\"JAefBH\":[\"Attachment author\"],\"bIaesZ\":[\"Attachment company\"],\"gfGYcl\":[\"Attachment full path\"],\"wjocwa\":[\"Attachment name\"],\"FWlOXr\":[\"Attachment note\"],\"YASWpH\":[\"Attachment opportunity\"],\"P38yED\":[\"Attachment person\"],\"Tx1DxS\":[\"Attachment task\"],\"4qqxMt\":[\"Attachment type\"],\"w/Sphq\":[\"Attachments\"],\"2tQOVc\":[\"Attachments created by the workspace member\"],\"iVnA89\":[\"Attachments linked to the company\"],\"MuTXtT\":[\"Attachments linked to the contact.\"],\"kw0mLu\":[\"Attachments linked to the opportunity\"],\"fCbqr7\":[\"Attachments tied to the \",[\"label\"]],\"ilRCh1\":[\"Audit Log\"],\"EPEFrH\":[\"Audit Logs\"],\"RqCC/0\":[\"Audit Logs linked to the workspace member\"],\"cNBqH+\":[\"Auth failed at\"],\"VbeIOx\":[\"Author\"],\"XJONK6\":[\"Authored attachments\"],\"RpExX0\":[\"Automatically create People records when receiving or sending emails\"],\"lXxdId\":[\"Automatically create records for people you participated with in an event.\"],\"kfcRb0\":[\"Avatar\"],\"S/mJUR\":[\"Avatar Url\"],\"20B9kW\":[\"Behavioral Event\"],\"Jeh/Q/\":[\"Behavioral Events\"],\"K1172m\":[\"Blocklist\"],\"Tv2hxv\":[\"Blocklisted handles\"],\"L5JhJe\":[\"Blocklists\"],\"bGQplw\":[\"Body\"],\"8mVqF7\":[\"Cached record name\"],\"Nh6GTX\":[\"Calendar Channel\"],\"jfNQ0m\":[\"Calendar Channel Event Association\"],\"kYNT3F\":[\"Calendar Channel Event Associations\"],\"Znix/S\":[\"Calendar Channels\"],\"bRk+FR\":[\"Calendar event\"],\"N2kMfO\":[\"Calendar event participant\"],\"AWDqkQ\":[\"Calendar event participants\"],\"ZI2UyM\":[\"Calendar Event Participants\"],\"X9A2xC\":[\"Calendar events\"],\"4IVK41\":[\"Channel ID\"],\"Ubg/B+\":[\"Channel Type\"],\"3wV73y\":[\"City\"],\"NRF7pg\":[\"Close date\"],\"96YB1a\":[\"Color Scheme\"],\"07OSD1\":[\"Compact View\"],\"s2QZS6\":[\"Companies\"],\"7i8j3G\":[\"Company\"],\"yA1de7\":[\"Company record position\"],\"AgktVC\":[\"Conference Solution\"],\"PQ1Dw2\":[\"Connected Account\"],\"9TzudL\":[\"Connected accounts\"],\"AMDUqA\":[\"Connected Accounts\"],\"bA6O5B\":[\"Contact auto creation policy\"],\"RnsmQs\":[\"Contact’s avatar\"],\"pL+pqi\":[\"Contact’s city\"],\"VnWMlz\":[\"Contact’s company\"],\"ITlFIB\":[\"Contact’s Emails\"],\"GuRtLY\":[\"Contact’s job title\"],\"QrCvRQ\":[\"Contact’s Linkedin account\"],\"6xPSVt\":[\"Contact’s name\"],\"Y37CZ4\":[\"Contact’s phone number\"],\"zsW3gg\":[\"Contact’s phone numbers\"],\"uuZ00G\":[\"Contact’s X/Twitter account\"],\"NCIYDF\":[\"Created by\"],\"wPvFAD\":[\"Creation date\"],\"CJXWmO\":[\"Creation DateTime\"],\"Lhd0oQ\":[\"Date format\"],\"1lL5Iu\":[\"Date when the record was deleted\"],\"QN9ahV\":[\"Deleted at\"],\"U1bSSI\":[\"Describes if the view is in compact mode\"],\"Nu4oKW\":[\"Description\"],\"MRB7nI\":[\"Direction\"],\"0gS7M5\":[\"Display Name\"],\"0H/D9K\":[\"Display Value\"],\"wMncXq\":[\"Domain Name\"],\"YOowcq\":[\"Due Date\"],\"BXEcos\":[\"Emails\"],\"gqv5ZL\":[\"Employees\"],\"VFv2ZC\":[\"End Date\"],\"k//6Xs\":[\"Event company\"],\"FJ7QI4\":[\"Event context\"],\"kJDmsI\":[\"Event details\"],\"0JhmlM\":[\"Event external ID\"],\"aZJLAR\":[\"Event ID\"],\"81maJp\":[\"Event Listeners\"],\"PYs3rP\":[\"Event name\"],\"evIGwh\":[\"Event name/type\"],\"vv99Wu\":[\"Event note\"],\"eSt759\":[\"Event opportunity\"],\"aicVfT\":[\"Event Participants\"],\"0mp45a\":[\"Event person\"],\"mMq0Wy\":[\"Event task\"],\"dCV1dS\":[\"Event workflow\"],\"W84pl6\":[\"Event workflow run\"],\"vUpps9\":[\"Event workflow version\"],\"LxOGsB\":[\"Event workspace member\"],\"tst44n\":[\"Events\"],\"fHL+iH\":[\"Events linked to the person\"],\"3/O8MM\":[\"Events linked to the workspace member\"],\"QQlMid\":[\"Exclude group emails\"],\"kenYGr\":[\"Exclude non professional emails\"],\"Lo5U0b\":[\"Executed by\"],\"sZg7s1\":[\"Expiration date\"],\"6Ki4Pv\":[\"Favorite\"],\"aKUOPp\":[\"Favorite company\"],\"TDlZ/o\":[\"Favorite Folder\"],\"WDVfUH\":[\"Favorite folder position\"],\"SStz54\":[\"Favorite Folders\"],\"dz/fFp\":[\"Favorite note\"],\"RRr9Bp\":[\"Favorite opportunity\"],\"RM6B6V\":[\"Favorite person\"],\"oVA9vM\":[\"Favorite position\"],\"OaQVQH\":[\"Favorite task\"],\"VkWV1s\":[\"Favorite view\"],\"l+lx2f\":[\"Favorite workflow\"],\"BPBnux\":[\"Favorite workflow run\"],\"5X6Vlz\":[\"Favorite workflow version\"],\"FDpezg\":[\"Favorite workspace member\"],\"X9kySA\":[\"Favorites\"],\"0CzeFL\":[\"Favorites in this folder\"],\"zQponA\":[\"Favorites linked to the company\"],\"VaKLrB\":[\"Favorites linked to the contact\"],\"GOfcBt\":[\"Favorites linked to the note\"],\"9zd8hg\":[\"Favorites linked to the opportunity\"],\"L5ccWD\":[\"Favorites linked to the task\"],\"R+1ib/\":[\"Favorites linked to the view\"],\"ee0tmj\":[\"Favorites linked to the workflow\"],\"zar5jz\":[\"Favorites linked to the workflow run\"],\"499/sw\":[\"Favorites linked to the workflow version\"],\"rgmtb4\":[\"Favorites linked to the workspace member\"],\"GyXrE1\":[\"Favorites tied to the \",[\"label\"]],\"nSFFML\":[\"Field Metadata Id\"],\"g+t8w9\":[\"Field metadata used for aggregate operation\"],\"J4hC2m\":[\"Field used for full-text search\"],\"zuDgzc\":[\"Field Value\"],\"oQA+cA\":[\"Full path\"],\"UzpVUy\":[\"Group by this field value\"],\"TkE8dW\":[\"handle\"],\"Nf7oXL\":[\"Handle\"],\"GvgxWx\":[\"Handle Aliases\"],\"VehAU2\":[\"Header message Id\"],\"NNJnBi\":[\"iCal UID\"],\"wwu18a\":[\"Icon\"],\"CiyiKN\":[\"ICP\"],\"dFb5Nt\":[\"Id\"],\"Ebc83S\":[\"Ideal Customer Profile: Indicates whether the company is the most suitable and valuable customer for you\"],\"NrA0WZ\":[\"If the event is related to a particular object\"],\"HRYXAA\":[\"inked Object Metadata Id\"],\"grHYXZ\":[\"Is canceled\"],\"k+g9Uh\":[\"Is Contact Auto Creation Enabled\"],\"uBx1xd\":[\"Is Full Day\"],\"3iAfL2\":[\"Is Organizer\"],\"Mqzqb8\":[\"Is Sync Enabled\"],\"27z+FV\":[\"Job Title\"],\"shbh25\":[\"Json object to provide context (user, device, workspace, etc.)\"],\"HgJ9jQ\":[\"Json object to provide output of the workflow run\"],\"AQuLwi\":[\"Json object to provide steps\"],\"fOjmZ1\":[\"Json object to provide trigger\"],\"TVc0/Q\":[\"Json value for event details\"],\"qmarO2\":[\"kanbanfieldMetadataId\"],\"7sMeHQ\":[\"Key\"],\"vXIe7J\":[\"Language\"],\"WvYp6o\":[\"Last published Version Id\"],\"Y60/DC\":[\"Last sync cursor\"],\"Zdx9Qq\":[\"Last sync date\"],\"c7uqNg\":[\"Last sync history ID\"],\"tGwswq\":[\"Last time the record was changed\"],\"o1zvNS\":[\"Last update\"],\"wR9USP\":[\"Linked Object Metadata Id\"],\"PV1Nm7\":[\"Linked Opportunities\"],\"6YiMr4\":[\"Linked Record cached name\"],\"sgHAxx\":[\"Linked Record id\"],\"uCA6be\":[\"Linkedin\"],\"LeFv/R\":[\"List of opportunities for which that person is the point of contact\"],\"wJijgU\":[\"Location\"],\"y+q8Lv\":[\"Logical Operator\"],\"6kQXsS\":[\"Logical operator for the filter group\"],\"EnfPm2\":[\"Meet Link\"],\"xDAtGP\":[\"Message\"],\"g+QGD6\":[\"Message Channel\"],\"DzU4a3\":[\"Message Channel Association\"],\"wd/R++\":[\"Message Channel Id\"],\"disipM\":[\"Message Channel Message Association\"],\"ijQY3P\":[\"Message Channel Message Associations\"],\"k7LXPQ\":[\"Message Channels\"],\"/4uGJc\":[\"Message Direction\"],\"fBw8fQ\":[\"Message External Id\"],\"6icznk\":[\"Message Id\"],\"9FJSpK\":[\"Message id from the message header\"],\"yaC1Aq\":[\"Message id from the messaging provider\"],\"IUmVwu\":[\"Message Participant\"],\"FhIFx7\":[\"Message Participants\"],\"IC5A8V\":[\"Message Synced with a Message Channel\"],\"de2nM/\":[\"Message Thread\"],\"km1jgD\":[\"Message Thread Id\"],\"RD0ecC\":[\"Message Threads\"],\"t7TeQU\":[\"Messages\"],\"WoWdku\":[\"Messages from the channel.\"],\"rYPBO7\":[\"Messages from the thread.\"],\"XcKQrV\":[\"Messaging provider access token\"],\"80EvIk\":[\"Messaging provider refresh token\"],\"6YtxFj\":[\"Name\"],\"EEVPOx\":[\"Name of the favorite folder\"],\"csMjko\":[\"Name of the workflow run\"],\"KiJn9B\":[\"Note\"],\"GGlkb7\":[\"Note attachments\"],\"Q1Rz+6\":[\"Note body\"],\"Yp057F\":[\"Note record position\"],\"spaO7l\":[\"Note Target\"],\"mkchvJ\":[\"Note targets\"],\"tD4BxK\":[\"Note Targets\"],\"jDThel\":[\"Note title\"],\"1DBGsz\":[\"Notes\"],\"Ne73P/\":[\"Notes tied to the \",[\"label\"]],\"fXBE74\":[\"Notes tied to the company\"],\"iQ5AH6\":[\"Notes tied to the contact\"],\"0bi/Eh\":[\"Notes tied to the opportunity\"],\"B2Y6QU\":[\"NoteTarget company\"],\"/mH0jo\":[\"NoteTarget note\"],\"DTs4tO\":[\"NoteTarget opportunity\"],\"gBwbnk\":[\"NoteTarget person\"],\"ioJFzx\":[\"Number of employees in the company\"],\"hhe7Ce\":[\"Object id\"],\"dnPgTI\":[\"Object metadata id\"],\"T/nPf5\":[\"Object Metadata Id\"],\"afsWF6\":[\"Object name\"],\"Fzfj4N\":[\"Operand\"],\"FZg3wM\":[\"Operation\"],\"B1MDds\":[\"Operations\"],\"4MyDFl\":[\"Opportunities\"],\"5QgKbT\":[\"Opportunities linked to the company.\"],\"SV/iis\":[\"Opportunity\"],\"WnMlKn\":[\"Opportunity amount\"],\"aj3fnv\":[\"Opportunity close date\"],\"3NYczb\":[\"Opportunity company\"],\"as45IN\":[\"Opportunity point of contact\"],\"5Nu7Uw\":[\"Opportunity probability\"],\"Q1dzBp\":[\"Opportunity record position\"],\"5ugYS3\":[\"Opportunity stage\"],\"eLggyd\":[\"Optional aggregate operation\"],\"kdClJ/\":[\"Optional secret used to compute the HMAC signature for webhook payloads. This secret is shared between Twenty and the webhook consumer to authenticate webhook requests.\"],\"gh06VD\":[\"Output\"],\"pDUbN1\":[\"Parent View Filter Group\"],\"YKSmIP\":[\"Parent View Filter Group Id\"],\"1wdjme\":[\"People\"],\"E1zc7W\":[\"People linked to the company.\"],\"OZdaTZ\":[\"Person\"],\"c3Qq6o\":[\"Person record Position\"],\"zmwvG2\":[\"Phone\"],\"m2ivgq\":[\"Phones\"],\"P04j61\":[\"Point of Contact\"],\"p/78dY\":[\"Position\"],\"HH1bMC\":[\"Position in the parent view filter group\"],\"CvOSME\":[\"Position in the view filter group\"],\"h8PGuF\":[\"Position in view filter group\"],\"TTHIbk\":[\"Preferred color scheme\"],\"5v4qYi\":[\"Preferred language\"],\"WJIL29\":[\"Probability\"],\"CrfRPa\":[\"provider\"],\"YfbwOB\":[\"Received At\"],\"4Tvtbu\":[\"Record id\"],\"9gXJw8\":[\"Recurring Event ID\"],\"2rvMKg\":[\"Refresh Token\"],\"2LpFdR\":[\"Related user email address\"],\"g87L9j\":[\"Relations\"],\"rnCndp\":[\"Response Status\"],\"MCWKAU\":[\"Revocation date\"],\"GDvlUT\":[\"Role\"],\"Tpm2G9\":[\"Runs\"],\"N/rFzD\":[\"Scopes\"],\"PdVIJC\":[\"Search vector\"],\"8VEDbV\":[\"Secret\"],\"Cj2Gtd\":[\"Size\"],\"3PRxO3\":[\"Stage\"],\"D3iCkb\":[\"Start Date\"],\"uAQUqI\":[\"Status\"],\"Db4W3/\":[\"Statuses\"],\"UJmAAK\":[\"Subject\"],\"oyJYg7\":[\"Sync Cursor\"],\"awvBUx\":[\"Sync Cursor. Used for syncing events from the calendar provider\"],\"dNAbG6\":[\"Sync stage\"],\"aqNjQE\":[\"Sync stage started at\"],\"bRUdLR\":[\"Sync status\"],\"4SHJe4\":[\"Target Url\"],\"Q3P/4s\":[\"Task\"],\"kS+Ym6\":[\"Task assignee\"],\"7fYQ6E\":[\"Task attachments\"],\"X8fs74\":[\"Task body\"],\"EPxYHS\":[\"Task due date\"],\"fUw1j+\":[\"Task record position\"],\"I6+0ph\":[\"Task status\"],\"WSiiWf\":[\"Task Target\"],\"khGQLP\":[\"Task targets\"],\"836FiO\":[\"Task Targets\"],\"R+s8S+\":[\"Task title\"],\"GtycJ/\":[\"Tasks\"],\"HlDeG3\":[\"Tasks assigned to the workspace member\"],\"Ca/n4T\":[\"Tasks tied to the \",[\"label\"]],\"M4rBti\":[\"Tasks tied to the company\"],\"/VaiDW\":[\"Tasks tied to the contact\"],\"1TfX9U\":[\"Tasks tied to the opportunity\"],\"pP0Dt9\":[\"TaskTarget company\"],\"UJ2aPi\":[\"TaskTarget opportunity\"],\"I1MiSs\":[\"TaskTarget person\"],\"pciKLT\":[\"TaskTarget task\"],\"xeiujy\":[\"Text\"],\"6PJbR2\":[\"The account handle (email, username, phone number, etc.)\"],\"zUXOAB\":[\"The account provider\"],\"qnNFrW\":[\"The company Linkedin account\"],\"N31Pso\":[\"The company name\"],\"BHFCqB\":[\"The company Twitter/X account\"],\"OBmU0K\":[\"The company website URL. We use this url to fetch the company icon\"],\"zGBDEH\":[\"The creator of the record\"],\"bMyVOx\":[\"The current statuses of the workflow versions\"],\"0bo4Q0\":[\"The date the message was received\"],\"8h4mhq\":[\"The executor of the workflow\"],\"W3raza\":[\"The folder this favorite belongs to\"],\"DbWmKZ\":[\"The opportunity name\"],\"7mPrpl\":[\"The workflow event listener name\"],\"od0omS\":[\"The workflow last published version id\"],\"/EdWx6\":[\"The workflow name\"],\"EhAsND\":[\"The workflow version name\"],\"dhx13p\":[\"The workflow version status\"],\"Zl0BJl\":[\"Thread External Id\"],\"RSSbWN\":[\"Thread id from the messaging provider\"],\"sS8v5K\":[\"Throttle Failure Count\"],\"n9nSNJ\":[\"Time format\"],\"Mz2JN2\":[\"Time zone\"],\"az1boY\":[\"Timeline Activities\"],\"fqKMpF\":[\"Timeline Activities linked to the company\"],\"4/UzU5\":[\"Timeline Activities linked to the note.\"],\"p6feIz\":[\"Timeline Activities linked to the opportunity.\"],\"yvPwuF\":[\"Timeline activities linked to the run\"],\"q96UvB\":[\"Timeline Activities linked to the task.\"],\"N9HMa/\":[\"Timeline activities linked to the version\"],\"B1CYKX\":[\"Timeline activities linked to the workflow\"],\"G0UmtQ\":[\"Timeline Activities tied to the \",[\"label\"]],\"K/kU4E\":[\"Timeline Activity\"],\"MHrjPM\":[\"Title\"],\"+zy2Nq\":[\"Type\"],\"0gY5lO\":[\"Update DateTime\"],\"YFciqL\":[\"User Email\"],\"d1BTW8\":[\"User Id\"],\"4juE7s\":[\"User time zone\"],\"43zCwQ\":[\"User's preferred date format\"],\"kJuoKm\":[\"User's preferred time format\"],\"wMHvYH\":[\"Value\"],\"7aatUy\":[\"Version status\"],\"CdQeU7\":[\"Version steps\"],\"PGMPIi\":[\"Version trigger\"],\"IYNSdp\":[\"Versions\"],\"jpctdh\":[\"View\"],\"cZPDyy\":[\"View Field\"],\"6jpoH4\":[\"View Field position\"],\"Ju6gri\":[\"View Field related view\"],\"tvTr2y\":[\"View Field size\"],\"BkII8t\":[\"View Field target field\"],\"Gd/LzL\":[\"View Field visibility\"],\"GUFYyq\":[\"View Fields\"],\"JRtI7Y\":[\"View Filter\"],\"L2gQ5q\":[\"View Filter Display Value\"],\"l9/6pD\":[\"View Filter Group\"],\"Mbosm8\":[\"View Filter Group Id\"],\"/aP3iG\":[\"View Filter Groups\"],\"4MG8+B\":[\"View Filter operand\"],\"OrUkUF\":[\"View Filter related view\"],\"TyXOtD\":[\"View Filter target field\"],\"3KzkxN\":[\"View Filter value\"],\"vj5JsR\":[\"View Filters\"],\"ziEP12\":[\"View Group\"],\"uQ3c2q\":[\"View Group related view\"],\"EFlLpQ\":[\"View Group target field\"],\"b1Vc+l\":[\"View Group visibility\"],\"V4nZs/\":[\"View Groups\"],\"qXlovu\":[\"View icon\"],\"cd/+ZD\":[\"View Kanban column field\"],\"vdfZ+A\":[\"View key\"],\"oOljSE\":[\"View name\"],\"rhO8zp\":[\"View position\"],\"EUjpwJ\":[\"View Sort\"],\"6ZUale\":[\"View Sort direction\"],\"/rCPqN\":[\"View Sort related view\"],\"+du2wy\":[\"View Sort target field\"],\"UsdY3K\":[\"View Sorts\"],\"clWwIZ\":[\"View target object\"],\"bJAIqT\":[\"View type\"],\"1I6UoR\":[\"Views\"],\"2q/Q7x\":[\"Visibility\"],\"oh8+os\":[\"Visible\"],\"TRDppN\":[\"Webhook\"],\"fyB2Wp\":[\"Webhook operation\"],\"gONLmX\":[\"Webhook operations\"],\"cPoSTF\":[\"Webhook target url\"],\"v1kQyJ\":[\"Webhooks\"],\"bLt/0J\":[\"Workflow\"],\"E03XpH\":[\"Workflow event listeners linked to the workflow.\"],\"vwSkSW\":[\"Workflow linked to the run.\"],\"y9tnFx\":[\"Workflow record position\"],\"5vIcqC\":[\"Workflow Run\"],\"3Iz+qz\":[\"Workflow run ended at\"],\"IUaK6s\":[\"Workflow run position\"],\"zaN7tH\":[\"Workflow run started at\"],\"1TU2A8\":[\"Workflow run status\"],\"u6DF/V\":[\"Workflow Runs\"],\"9nOy7k\":[\"Workflow runs linked to the version.\"],\"c37F3j\":[\"Workflow runs linked to the workflow.\"],\"lTXctu\":[\"Workflow version\"],\"+wYPET\":[\"Workflow Version\"],\"CocTJJ\":[\"Workflow version linked to the run.\"],\"9l+pJT\":[\"Workflow version position\"],\"OCyhkn\":[\"Workflow Versions\"],\"018fP9\":[\"Workflow versions linked to the workflow.\"],\"ENOy6I\":[\"WorkflowEventListener\"],\"HN90FO\":[\"WorkflowEventListener workflow\"],\"3JA9se\":[\"WorkflowEventListeners\"],\"woYYQq\":[\"Workflows\"],\"urCUgs\":[\"WorkflowVersion\"],\"b4kire\":[\"WorkflowVersion workflow\"],\"CbGxon\":[\"Workspace member\"],\"qc38qR\":[\"Workspace Member\"],\"R1S9pO\":[\"Workspace member avatar\"],\"5VCX7o\":[\"Workspace member name\"],\"YCAEr+\":[\"Workspace Members\"],\"EtzFC0\":[\"WorkspaceMember\"],\"0gv+T2\":[\"X\"],\"vPccnr\":[\"Your team member responsible for managing the company account\"]}")}; \ No newline at end of file +/*eslint-disable*/module.exports={messages:JSON.parse("{\"Qyrd7v\":[\"(System) View Fields\"],\"9Y3fTB\":[\"(System) View Filter Groups\"],\"TB2jLV\":[\"(System) View Filters\"],\"Y7M7Ro\":[\"(System) View Groups\"],\"9vliLw\":[\"(System) View Sorts\"],\"5B59WE\":[\"(System) Views\"],\"kZR6+h\":[\"A company\"],\"+aeifv\":[\"A connected account\"],\"HCoswz\":[\"A favorite that can be accessed from the left menu\"],\"6w8bHl\":[\"A Folder of favorites\"],\"sSGYmf\":[\"A group of related messages (e.g. email thread, chat thread)\"],\"vZj1Xc\":[\"A message sent or received through a messaging channel (email, chat, etc.)\"],\"bufuBA\":[\"A note\"],\"6kUkZW\":[\"A note target\"],\"Io42ej\":[\"A person\"],\"mkFXEH\":[\"A task\"],\"hk2NzW\":[\"A task target\"],\"HTSJFW\":[\"A webhook\"],\"ZIN9Ga\":[\"A workflow\"],\"juBVjt\":[\"A workflow event listener\"],\"1+xDbI\":[\"A workflow run\"],\"N0g7rp\":[\"A workflow version\"],\"HpZ/I5\":[\"A workspace member\"],\"GDKKxT\":[\"Access Token\"],\"pd81Qb\":[\"Account Owner\"],\"loqL/f\":[\"Account owner for companies\"],\"HZosRi\":[\"Account Owner For Companies\"],\"Du6bPw\":[\"Address\"],\"JiOJxf\":[\"Address (deprecated) \"],\"Knl3c9\":[\"Address of the company\"],\"zJhwjv\":[\"Address of the company - deprecated in favor of new address field\"],\"ZfVqbP\":[\"Aggregate operation\"],\"W58PBh\":[\"Aggregated / filtered event to be displayed on the timeline\"],\"hehnjM\":[\"Amount\"],\"qeHcQj\":[\"An API key\"],\"MjyFvC\":[\"An attachment\"],\"+bL++X\":[\"An audit log of actions performed in the system\"],\"muVHgL\":[\"An event related to user behavior\"],\"bZq8rL\":[\"An opportunity\"],\"JKWicb\":[\"Annual Recurring Revenue: The actual or estimated annual revenue of the company\"],\"yRnk5W\":[\"API Key\"],\"FfSJ1Y\":[\"API Keys\"],\"puNs/l\":[\"ApiKey expiration date\"],\"YHiNxr\":[\"ApiKey name\"],\"xrndTt\":[\"ApiKey revocation date\"],\"3EiOLz\":[\"ARR\"],\"Ek7xGj\":[\"Assigned tasks\"],\"ojKCLU\":[\"Assignee\"],\"Max2GU\":[\"Associated User Id\"],\"UY1vmE\":[\"Attachment\"],\"JAefBH\":[\"Attachment author\"],\"bIaesZ\":[\"Attachment company\"],\"gfGYcl\":[\"Attachment full path\"],\"wjocwa\":[\"Attachment name\"],\"FWlOXr\":[\"Attachment note\"],\"YASWpH\":[\"Attachment opportunity\"],\"P38yED\":[\"Attachment person\"],\"Tx1DxS\":[\"Attachment task\"],\"4qqxMt\":[\"Attachment type\"],\"w/Sphq\":[\"Attachments\"],\"2tQOVc\":[\"Attachments created by the workspace member\"],\"iVnA89\":[\"Attachments linked to the company\"],\"MuTXtT\":[\"Attachments linked to the contact.\"],\"kw0mLu\":[\"Attachments linked to the opportunity\"],\"fCbqr7\":[\"Attachments tied to the \",[\"label\"]],\"ilRCh1\":[\"Audit Log\"],\"EPEFrH\":[\"Audit Logs\"],\"RqCC/0\":[\"Audit Logs linked to the workspace member\"],\"cNBqH+\":[\"Auth failed at\"],\"VbeIOx\":[\"Author\"],\"XJONK6\":[\"Authored attachments\"],\"RpExX0\":[\"Automatically create People records when receiving or sending emails\"],\"lXxdId\":[\"Automatically create records for people you participated with in an event.\"],\"kfcRb0\":[\"Avatar\"],\"S/mJUR\":[\"Avatar Url\"],\"20B9kW\":[\"Behavioral Event\"],\"Jeh/Q/\":[\"Behavioral Events\"],\"K1172m\":[\"Blocklist\"],\"Tv2hxv\":[\"Blocklisted handles\"],\"L5JhJe\":[\"Blocklists\"],\"bGQplw\":[\"Body\"],\"8mVqF7\":[\"Cached record name\"],\"Nh6GTX\":[\"Calendar Channel\"],\"jfNQ0m\":[\"Calendar Channel Event Association\"],\"kYNT3F\":[\"Calendar Channel Event Associations\"],\"Znix/S\":[\"Calendar Channels\"],\"bRk+FR\":[\"Calendar event\"],\"N2kMfO\":[\"Calendar event participant\"],\"AWDqkQ\":[\"Calendar event participants\"],\"ZI2UyM\":[\"Calendar Event Participants\"],\"X9A2xC\":[\"Calendar events\"],\"4IVK41\":[\"Channel ID\"],\"Ubg/B+\":[\"Channel Type\"],\"3wV73y\":[\"City\"],\"NRF7pg\":[\"Close date\"],\"96YB1a\":[\"Color Scheme\"],\"07OSD1\":[\"Compact View\"],\"s2QZS6\":[\"Companies\"],\"7i8j3G\":[\"Company\"],\"yA1de7\":[\"Company record position\"],\"AgktVC\":[\"Conference Solution\"],\"PQ1Dw2\":[\"Connected Account\"],\"9TzudL\":[\"Connected accounts\"],\"AMDUqA\":[\"Connected Accounts\"],\"bA6O5B\":[\"Contact auto creation policy\"],\"RnsmQs\":[\"Contact’s avatar\"],\"pL+pqi\":[\"Contact’s city\"],\"VnWMlz\":[\"Contact’s company\"],\"ITlFIB\":[\"Contact’s Emails\"],\"GuRtLY\":[\"Contact’s job title\"],\"QrCvRQ\":[\"Contact’s Linkedin account\"],\"6xPSVt\":[\"Contact’s name\"],\"Y37CZ4\":[\"Contact’s phone number\"],\"zsW3gg\":[\"Contact’s phone numbers\"],\"uuZ00G\":[\"Contact’s X/Twitter account\"],\"NCIYDF\":[\"Created by\"],\"wPvFAD\":[\"Creation date\"],\"CJXWmO\":[\"Creation DateTime\"],\"Lhd0oQ\":[\"Date format\"],\"1lL5Iu\":[\"Date when the record was deleted\"],\"QN9ahV\":[\"Deleted at\"],\"U1bSSI\":[\"Describes if the view is in compact mode\"],\"Nu4oKW\":[\"Description\"],\"MRB7nI\":[\"Direction\"],\"0gS7M5\":[\"Display Name\"],\"0H/D9K\":[\"Display Value\"],\"wMncXq\":[\"Domain Name\"],\"YOowcq\":[\"Due Date\"],\"BXEcos\":[\"Emails\"],\"gqv5ZL\":[\"Employees\"],\"VFv2ZC\":[\"End Date\"],\"k//6Xs\":[\"Event company\"],\"FJ7QI4\":[\"Event context\"],\"kJDmsI\":[\"Event details\"],\"0JhmlM\":[\"Event external ID\"],\"aZJLAR\":[\"Event ID\"],\"81maJp\":[\"Event Listeners\"],\"PYs3rP\":[\"Event name\"],\"evIGwh\":[\"Event name/type\"],\"vv99Wu\":[\"Event note\"],\"eSt759\":[\"Event opportunity\"],\"aicVfT\":[\"Event Participants\"],\"0mp45a\":[\"Event person\"],\"mMq0Wy\":[\"Event task\"],\"dCV1dS\":[\"Event workflow\"],\"W84pl6\":[\"Event workflow run\"],\"vUpps9\":[\"Event workflow version\"],\"LxOGsB\":[\"Event workspace member\"],\"tst44n\":[\"Events\"],\"fHL+iH\":[\"Events linked to the person\"],\"3/O8MM\":[\"Events linked to the workspace member\"],\"QQlMid\":[\"Exclude group emails\"],\"kenYGr\":[\"Exclude non professional emails\"],\"Lo5U0b\":[\"Executed by\"],\"sZg7s1\":[\"Expiration date\"],\"6Ki4Pv\":[\"Favorite\"],\"aKUOPp\":[\"Favorite company\"],\"TDlZ/o\":[\"Favorite Folder\"],\"WDVfUH\":[\"Favorite folder position\"],\"SStz54\":[\"Favorite Folders\"],\"dz/fFp\":[\"Favorite note\"],\"RRr9Bp\":[\"Favorite opportunity\"],\"RM6B6V\":[\"Favorite person\"],\"oVA9vM\":[\"Favorite position\"],\"OaQVQH\":[\"Favorite task\"],\"VkWV1s\":[\"Favorite view\"],\"l+lx2f\":[\"Favorite workflow\"],\"BPBnux\":[\"Favorite workflow run\"],\"5X6Vlz\":[\"Favorite workflow version\"],\"FDpezg\":[\"Favorite workspace member\"],\"X9kySA\":[\"Favorites\"],\"0CzeFL\":[\"Favorites in this folder\"],\"zQponA\":[\"Favorites linked to the company\"],\"VaKLrB\":[\"Favorites linked to the contact\"],\"GOfcBt\":[\"Favorites linked to the note\"],\"9zd8hg\":[\"Favorites linked to the opportunity\"],\"L5ccWD\":[\"Favorites linked to the task\"],\"R+1ib/\":[\"Favorites linked to the view\"],\"ee0tmj\":[\"Favorites linked to the workflow\"],\"zar5jz\":[\"Favorites linked to the workflow run\"],\"499/sw\":[\"Favorites linked to the workflow version\"],\"rgmtb4\":[\"Favorites linked to the workspace member\"],\"GyXrE1\":[\"Favorites tied to the \",[\"label\"]],\"nSFFML\":[\"Field Metadata Id\"],\"g+t8w9\":[\"Field metadata used for aggregate operation\"],\"J4hC2m\":[\"Field used for full-text search\"],\"zuDgzc\":[\"Field Value\"],\"oQA+cA\":[\"Full path\"],\"UzpVUy\":[\"Group by this field value\"],\"TkE8dW\":[\"handle\"],\"Nf7oXL\":[\"Handle\"],\"GvgxWx\":[\"Handle Aliases\"],\"VehAU2\":[\"Header message Id\"],\"NNJnBi\":[\"iCal UID\"],\"wwu18a\":[\"Icon\"],\"CiyiKN\":[\"ICP\"],\"dFb5Nt\":[\"Id\"],\"Ebc83S\":[\"Ideal Customer Profile: Indicates whether the company is the most suitable and valuable customer for you\"],\"NrA0WZ\":[\"If the event is related to a particular object\"],\"grHYXZ\":[\"Is canceled\"],\"k+g9Uh\":[\"Is Contact Auto Creation Enabled\"],\"uBx1xd\":[\"Is Full Day\"],\"3iAfL2\":[\"Is Organizer\"],\"Mqzqb8\":[\"Is Sync Enabled\"],\"27z+FV\":[\"Job Title\"],\"shbh25\":[\"Json object to provide context (user, device, workspace, etc.)\"],\"HgJ9jQ\":[\"Json object to provide output of the workflow run\"],\"AQuLwi\":[\"Json object to provide steps\"],\"fOjmZ1\":[\"Json object to provide trigger\"],\"TVc0/Q\":[\"Json value for event details\"],\"qmarO2\":[\"kanbanfieldMetadataId\"],\"7sMeHQ\":[\"Key\"],\"vXIe7J\":[\"Language\"],\"WvYp6o\":[\"Last published Version Id\"],\"Y60/DC\":[\"Last sync cursor\"],\"Zdx9Qq\":[\"Last sync date\"],\"c7uqNg\":[\"Last sync history ID\"],\"tGwswq\":[\"Last time the record was changed\"],\"o1zvNS\":[\"Last update\"],\"wR9USP\":[\"Linked Object Metadata Id\"],\"PV1Nm7\":[\"Linked Opportunities\"],\"6YiMr4\":[\"Linked Record cached name\"],\"sgHAxx\":[\"Linked Record id\"],\"uCA6be\":[\"Linkedin\"],\"LeFv/R\":[\"List of opportunities for which that person is the point of contact\"],\"wJijgU\":[\"Location\"],\"y+q8Lv\":[\"Logical Operator\"],\"6kQXsS\":[\"Logical operator for the filter group\"],\"EnfPm2\":[\"Meet Link\"],\"xDAtGP\":[\"Message\"],\"g+QGD6\":[\"Message Channel\"],\"DzU4a3\":[\"Message Channel Association\"],\"wd/R++\":[\"Message Channel Id\"],\"disipM\":[\"Message Channel Message Association\"],\"ijQY3P\":[\"Message Channel Message Associations\"],\"k7LXPQ\":[\"Message Channels\"],\"/4uGJc\":[\"Message Direction\"],\"fBw8fQ\":[\"Message External Id\"],\"6icznk\":[\"Message Id\"],\"9FJSpK\":[\"Message id from the message header\"],\"yaC1Aq\":[\"Message id from the messaging provider\"],\"IUmVwu\":[\"Message Participant\"],\"FhIFx7\":[\"Message Participants\"],\"IC5A8V\":[\"Message Synced with a Message Channel\"],\"de2nM/\":[\"Message Thread\"],\"km1jgD\":[\"Message Thread Id\"],\"RD0ecC\":[\"Message Threads\"],\"t7TeQU\":[\"Messages\"],\"WoWdku\":[\"Messages from the channel.\"],\"rYPBO7\":[\"Messages from the thread.\"],\"XcKQrV\":[\"Messaging provider access token\"],\"80EvIk\":[\"Messaging provider refresh token\"],\"6YtxFj\":[\"Name\"],\"EEVPOx\":[\"Name of the favorite folder\"],\"csMjko\":[\"Name of the workflow run\"],\"KiJn9B\":[\"Note\"],\"GGlkb7\":[\"Note attachments\"],\"Q1Rz+6\":[\"Note body\"],\"Yp057F\":[\"Note record position\"],\"spaO7l\":[\"Note Target\"],\"mkchvJ\":[\"Note targets\"],\"tD4BxK\":[\"Note Targets\"],\"jDThel\":[\"Note title\"],\"1DBGsz\":[\"Notes\"],\"Ne73P/\":[\"Notes tied to the \",[\"label\"]],\"fXBE74\":[\"Notes tied to the company\"],\"iQ5AH6\":[\"Notes tied to the contact\"],\"0bi/Eh\":[\"Notes tied to the opportunity\"],\"B2Y6QU\":[\"NoteTarget company\"],\"/mH0jo\":[\"NoteTarget note\"],\"DTs4tO\":[\"NoteTarget opportunity\"],\"gBwbnk\":[\"NoteTarget person\"],\"ioJFzx\":[\"Number of employees in the company\"],\"hhe7Ce\":[\"Object id\"],\"dnPgTI\":[\"Object metadata id\"],\"T/nPf5\":[\"Object Metadata Id\"],\"afsWF6\":[\"Object name\"],\"Fzfj4N\":[\"Operand\"],\"FZg3wM\":[\"Operation\"],\"B1MDds\":[\"Operations\"],\"4MyDFl\":[\"Opportunities\"],\"5QgKbT\":[\"Opportunities linked to the company.\"],\"SV/iis\":[\"Opportunity\"],\"WnMlKn\":[\"Opportunity amount\"],\"aj3fnv\":[\"Opportunity close date\"],\"3NYczb\":[\"Opportunity company\"],\"as45IN\":[\"Opportunity point of contact\"],\"5Nu7Uw\":[\"Opportunity probability\"],\"Q1dzBp\":[\"Opportunity record position\"],\"5ugYS3\":[\"Opportunity stage\"],\"eLggyd\":[\"Optional aggregate operation\"],\"kdClJ/\":[\"Optional secret used to compute the HMAC signature for webhook payloads. This secret is shared between Twenty and the webhook consumer to authenticate webhook requests.\"],\"gh06VD\":[\"Output\"],\"pDUbN1\":[\"Parent View Filter Group\"],\"YKSmIP\":[\"Parent View Filter Group Id\"],\"1wdjme\":[\"People\"],\"E1zc7W\":[\"People linked to the company.\"],\"OZdaTZ\":[\"Person\"],\"c3Qq6o\":[\"Person record Position\"],\"zmwvG2\":[\"Phone\"],\"m2ivgq\":[\"Phones\"],\"P04j61\":[\"Point of Contact\"],\"p/78dY\":[\"Position\"],\"HH1bMC\":[\"Position in the parent view filter group\"],\"CvOSME\":[\"Position in the view filter group\"],\"h8PGuF\":[\"Position in view filter group\"],\"TTHIbk\":[\"Preferred color scheme\"],\"5v4qYi\":[\"Preferred language\"],\"WJIL29\":[\"Probability\"],\"CrfRPa\":[\"provider\"],\"YfbwOB\":[\"Received At\"],\"4Tvtbu\":[\"Record id\"],\"9gXJw8\":[\"Recurring Event ID\"],\"2rvMKg\":[\"Refresh Token\"],\"2LpFdR\":[\"Related user email address\"],\"g87L9j\":[\"Relations\"],\"rnCndp\":[\"Response Status\"],\"MCWKAU\":[\"Revocation date\"],\"GDvlUT\":[\"Role\"],\"Tpm2G9\":[\"Runs\"],\"N/rFzD\":[\"Scopes\"],\"PdVIJC\":[\"Search vector\"],\"8VEDbV\":[\"Secret\"],\"Cj2Gtd\":[\"Size\"],\"3PRxO3\":[\"Stage\"],\"D3iCkb\":[\"Start Date\"],\"uAQUqI\":[\"Status\"],\"Db4W3/\":[\"Statuses\"],\"UJmAAK\":[\"Subject\"],\"oyJYg7\":[\"Sync Cursor\"],\"awvBUx\":[\"Sync Cursor. Used for syncing events from the calendar provider\"],\"dNAbG6\":[\"Sync stage\"],\"aqNjQE\":[\"Sync stage started at\"],\"bRUdLR\":[\"Sync status\"],\"4SHJe4\":[\"Target Url\"],\"Q3P/4s\":[\"Task\"],\"kS+Ym6\":[\"Task assignee\"],\"7fYQ6E\":[\"Task attachments\"],\"X8fs74\":[\"Task body\"],\"EPxYHS\":[\"Task due date\"],\"fUw1j+\":[\"Task record position\"],\"I6+0ph\":[\"Task status\"],\"WSiiWf\":[\"Task Target\"],\"khGQLP\":[\"Task targets\"],\"836FiO\":[\"Task Targets\"],\"R+s8S+\":[\"Task title\"],\"GtycJ/\":[\"Tasks\"],\"HlDeG3\":[\"Tasks assigned to the workspace member\"],\"Ca/n4T\":[\"Tasks tied to the \",[\"label\"]],\"M4rBti\":[\"Tasks tied to the company\"],\"/VaiDW\":[\"Tasks tied to the contact\"],\"1TfX9U\":[\"Tasks tied to the opportunity\"],\"pP0Dt9\":[\"TaskTarget company\"],\"UJ2aPi\":[\"TaskTarget opportunity\"],\"I1MiSs\":[\"TaskTarget person\"],\"pciKLT\":[\"TaskTarget task\"],\"xeiujy\":[\"Text\"],\"6PJbR2\":[\"The account handle (email, username, phone number, etc.)\"],\"zUXOAB\":[\"The account provider\"],\"qnNFrW\":[\"The company Linkedin account\"],\"N31Pso\":[\"The company name\"],\"BHFCqB\":[\"The company Twitter/X account\"],\"OBmU0K\":[\"The company website URL. We use this url to fetch the company icon\"],\"zGBDEH\":[\"The creator of the record\"],\"bMyVOx\":[\"The current statuses of the workflow versions\"],\"0bo4Q0\":[\"The date the message was received\"],\"8h4mhq\":[\"The executor of the workflow\"],\"W3raza\":[\"The folder this favorite belongs to\"],\"DbWmKZ\":[\"The opportunity name\"],\"7mPrpl\":[\"The workflow event listener name\"],\"od0omS\":[\"The workflow last published version id\"],\"/EdWx6\":[\"The workflow name\"],\"EhAsND\":[\"The workflow version name\"],\"dhx13p\":[\"The workflow version status\"],\"Zl0BJl\":[\"Thread External Id\"],\"RSSbWN\":[\"Thread id from the messaging provider\"],\"sS8v5K\":[\"Throttle Failure Count\"],\"n9nSNJ\":[\"Time format\"],\"Mz2JN2\":[\"Time zone\"],\"az1boY\":[\"Timeline Activities\"],\"fqKMpF\":[\"Timeline Activities linked to the company\"],\"4/UzU5\":[\"Timeline Activities linked to the note.\"],\"p6feIz\":[\"Timeline Activities linked to the opportunity.\"],\"yvPwuF\":[\"Timeline activities linked to the run\"],\"q96UvB\":[\"Timeline Activities linked to the task.\"],\"N9HMa/\":[\"Timeline activities linked to the version\"],\"B1CYKX\":[\"Timeline activities linked to the workflow\"],\"G0UmtQ\":[\"Timeline Activities tied to the \",[\"label\"]],\"K/kU4E\":[\"Timeline Activity\"],\"MHrjPM\":[\"Title\"],\"+zy2Nq\":[\"Type\"],\"0gY5lO\":[\"Update DateTime\"],\"YFciqL\":[\"User Email\"],\"d1BTW8\":[\"User Id\"],\"4juE7s\":[\"User time zone\"],\"43zCwQ\":[\"User's preferred date format\"],\"kJuoKm\":[\"User's preferred time format\"],\"wMHvYH\":[\"Value\"],\"7aatUy\":[\"Version status\"],\"CdQeU7\":[\"Version steps\"],\"PGMPIi\":[\"Version trigger\"],\"IYNSdp\":[\"Versions\"],\"jpctdh\":[\"View\"],\"cZPDyy\":[\"View Field\"],\"6jpoH4\":[\"View Field position\"],\"Ju6gri\":[\"View Field related view\"],\"tvTr2y\":[\"View Field size\"],\"BkII8t\":[\"View Field target field\"],\"Gd/LzL\":[\"View Field visibility\"],\"GUFYyq\":[\"View Fields\"],\"JRtI7Y\":[\"View Filter\"],\"L2gQ5q\":[\"View Filter Display Value\"],\"l9/6pD\":[\"View Filter Group\"],\"Mbosm8\":[\"View Filter Group Id\"],\"/aP3iG\":[\"View Filter Groups\"],\"4MG8+B\":[\"View Filter operand\"],\"OrUkUF\":[\"View Filter related view\"],\"TyXOtD\":[\"View Filter target field\"],\"3KzkxN\":[\"View Filter value\"],\"vj5JsR\":[\"View Filters\"],\"ziEP12\":[\"View Group\"],\"uQ3c2q\":[\"View Group related view\"],\"EFlLpQ\":[\"View Group target field\"],\"b1Vc+l\":[\"View Group visibility\"],\"V4nZs/\":[\"View Groups\"],\"qXlovu\":[\"View icon\"],\"cd/+ZD\":[\"View Kanban column field\"],\"vdfZ+A\":[\"View key\"],\"oOljSE\":[\"View name\"],\"rhO8zp\":[\"View position\"],\"EUjpwJ\":[\"View Sort\"],\"6ZUale\":[\"View Sort direction\"],\"/rCPqN\":[\"View Sort related view\"],\"+du2wy\":[\"View Sort target field\"],\"UsdY3K\":[\"View Sorts\"],\"clWwIZ\":[\"View target object\"],\"bJAIqT\":[\"View type\"],\"1I6UoR\":[\"Views\"],\"2q/Q7x\":[\"Visibility\"],\"oh8+os\":[\"Visible\"],\"TRDppN\":[\"Webhook\"],\"fyB2Wp\":[\"Webhook operation\"],\"gONLmX\":[\"Webhook operations\"],\"cPoSTF\":[\"Webhook target url\"],\"v1kQyJ\":[\"Webhooks\"],\"bLt/0J\":[\"Workflow\"],\"E03XpH\":[\"Workflow event listeners linked to the workflow.\"],\"vwSkSW\":[\"Workflow linked to the run.\"],\"y9tnFx\":[\"Workflow record position\"],\"5vIcqC\":[\"Workflow Run\"],\"3Iz+qz\":[\"Workflow run ended at\"],\"IUaK6s\":[\"Workflow run position\"],\"zaN7tH\":[\"Workflow run started at\"],\"1TU2A8\":[\"Workflow run status\"],\"u6DF/V\":[\"Workflow Runs\"],\"9nOy7k\":[\"Workflow runs linked to the version.\"],\"c37F3j\":[\"Workflow runs linked to the workflow.\"],\"lTXctu\":[\"Workflow version\"],\"+wYPET\":[\"Workflow Version\"],\"CocTJJ\":[\"Workflow version linked to the run.\"],\"9l+pJT\":[\"Workflow version position\"],\"OCyhkn\":[\"Workflow Versions\"],\"018fP9\":[\"Workflow versions linked to the workflow.\"],\"ENOy6I\":[\"WorkflowEventListener\"],\"HN90FO\":[\"WorkflowEventListener workflow\"],\"3JA9se\":[\"WorkflowEventListeners\"],\"woYYQq\":[\"Workflows\"],\"urCUgs\":[\"WorkflowVersion\"],\"b4kire\":[\"WorkflowVersion workflow\"],\"CbGxon\":[\"Workspace member\"],\"qc38qR\":[\"Workspace Member\"],\"R1S9pO\":[\"Workspace member avatar\"],\"5VCX7o\":[\"Workspace member name\"],\"YCAEr+\":[\"Workspace Members\"],\"EtzFC0\":[\"WorkspaceMember\"],\"0gv+T2\":[\"X\"],\"vPccnr\":[\"Your team member responsible for managing the company account\"]}")}; \ No newline at end of file diff --git a/packages/twenty-server/src/engine/core-modules/i18n/locales/generated/fr.js b/packages/twenty-server/src/engine/core-modules/i18n/locales/generated/fr.js index c61e12413..5db2b2996 100644 --- a/packages/twenty-server/src/engine/core-modules/i18n/locales/generated/fr.js +++ b/packages/twenty-server/src/engine/core-modules/i18n/locales/generated/fr.js @@ -1 +1 @@ -/*eslint-disable*/module.exports={messages:JSON.parse("{\"Qyrd7v\":[\"(Système) Champs de visualisation\"],\"9Y3fTB\":[\"(Système) Voir les groupes de filtres\"],\"TB2jLV\":[\"(Système) Voir les filtres\"],\"Y7M7Ro\":[\"(Système) Groupes de vues\"],\"9vliLw\":[\"(Système) Afficher les tris\"],\"5B59WE\":[\"vues (système)\"],\"kZR6+h\":[\"Une entreprise\"],\"+aeifv\":[\"Un compte connecté\"],\"HCoswz\":[\"Un favori accessible à partir du menu de gauche\"],\"6w8bHl\":[\"Un dossier de favoris\"],\"sSGYmf\":[\"Un groupe de messages liés (par exemple, un fil de discussion sur un courriel, un fil de discussion sur un chat)\"],\"vZj1Xc\":[\"Un message envoyé ou reçu par l'intermédiaire d'un canal de messagerie (courriel, chat, etc.)\"],\"bufuBA\":[\"Une note\"],\"6kUkZW\":[\"Une note cible\"],\"Io42ej\":[\"Une personne\"],\"mkFXEH\":[\"Une tâche\"],\"hk2NzW\":[\"Un objectif de tâche\"],\"HTSJFW\":[\"Un webhook\"],\"ZIN9Ga\":[\"Un flux de travail\"],\"juBVjt\":[\"Un récepteur d'événements de flux de travail\"],\"1+xDbI\":[\"Un flux de travail\"],\"N0g7rp\":[\"Une version du flux de travail\"],\"HpZ/I5\":[\"Un membre de l'espace de travail\"],\"GDKKxT\":[\"Jeton d'accès\"],\"pd81Qb\":[\"Propriétaire de compte\"],\"loqL/f\":[\"Propriétaire de compte pour les entreprises\"],\"HZosRi\":[\"Propriétaire de compte pour les entreprises\"],\"Du6bPw\":[\"Adresse\"],\"JiOJxf\":[\"Adresse (obsolète) \"],\"Knl3c9\":[\"Adresse de l'entreprise\"],\"zJhwjv\":[\"Adresse de l'entreprise - obsolète en faveur du nouveau champ d'adresse\"],\"ZfVqbP\":[\"Fonctionnement des agrégats\"],\"W58PBh\":[\"Événement agrégé / filtré à afficher sur la ligne de temps\"],\"hehnjM\":[\"Montant\"],\"qeHcQj\":[\"Une clé API\"],\"MjyFvC\":[\"Une pièce jointe\"],\"+bL++X\":[\"Un journal d'audit des actions effectuées dans le système\"],\"muVHgL\":[\"Un événement lié au comportement de l'utilisateur\"],\"bZq8rL\":[\"Une opportunité\"],\"JKWicb\":[\"Revenu annuel récurrent : Le revenu annuel réel ou estimé de l'entreprise\"],\"yRnk5W\":[\"Clé API\"],\"FfSJ1Y\":[\"Clés API\"],\"puNs/l\":[\"Date d'expiration de la clé ApiKey\"],\"YHiNxr\":[\"Nom de la clé Api\"],\"xrndTt\":[\"Date de révocation de la clé ApiKey\"],\"3EiOLz\":[\"ARR\"],\"Ek7xGj\":[\"Tâches assignées\"],\"ojKCLU\":[\"Cessionnaire\"],\"Max2GU\":[\"Identité de l'utilisateur associé\"],\"UY1vmE\":[\"Pièce jointe\"],\"JAefBH\":[\"Auteur de la pièce jointe\"],\"bIaesZ\":[\"Entreprise de rattachement\"],\"gfGYcl\":[\"Chemin d'accès complet de la pièce jointe\"],\"wjocwa\":[\"Nom de la pièce jointe\"],\"FWlOXr\":[\"Note d'accompagnement\"],\"YASWpH\":[\"Opportunité de rattachement\"],\"P38yED\":[\"Personne rattachée\"],\"Tx1DxS\":[\"Tâche de rattachement\"],\"4qqxMt\":[\"Type d'attachement\"],\"w/Sphq\":[\"Pièces jointes\"],\"2tQOVc\":[\"Pièces jointes créées par le membre de l'espace de travail\"],\"iVnA89\":[\"Pièces jointes liées à l'entreprise\"],\"MuTXtT\":[\"Pièces jointes liées au contact.\"],\"kw0mLu\":[\"Pièces jointes liées à l'opportunité\"],\"fCbqr7\":[\"Pièces jointes liées au \",[\"label\"]],\"ilRCh1\":[\"Journal d'audit\"],\"EPEFrH\":[\"Journaux d'audit\"],\"RqCC/0\":[\"Journaux d'audit liés au membre de l'espace de travail\"],\"cNBqH+\":[\"L'authentification a échoué à\"],\"VbeIOx\":[\"Auteur\"],\"XJONK6\":[\"Auteur des pièces jointes\"],\"RpExX0\":[\"Création automatique d'enregistrements de personnes lors de la réception ou de l'envoi de courriels\"],\"lXxdId\":[\"Créez automatiquement des enregistrements pour les personnes avec lesquelles vous avez participé à un événement.\"],\"kfcRb0\":[\"Avatar\"],\"S/mJUR\":[\"Url de l'avatar\"],\"20B9kW\":[\"Événement comportemental\"],\"Jeh/Q/\":[\"Événements comportementaux\"],\"K1172m\":[\"Liste de blocage\"],\"Tv2hxv\":[\"Poignées en liste bloquée\"],\"L5JhJe\":[\"Listes de blocage\"],\"bGQplw\":[\"Corps\"],\"8mVqF7\":[\"Nom de l'enregistrement mis en cache\"],\"Nh6GTX\":[\"Canal Calendrier\"],\"jfNQ0m\":[\"Calendrier Association des événements de la Manche\"],\"kYNT3F\":[\"Associations d'événements du canal Calendrier\"],\"Znix/S\":[\"Canaux du calendrier\"],\"bRk+FR\":[\"Calendrier\"],\"N2kMfO\":[\"Participant à un événement du calendrier\"],\"AWDqkQ\":[\"Participants aux événements du calendrier\"],\"ZI2UyM\":[\"Calendrier Participants aux événements\"],\"X9A2xC\":[\"Calendrier des événements\"],\"4IVK41\":[\"ID du canal\"],\"Ubg/B+\":[\"Type de canal\"],\"3wV73y\":[\"Ville\"],\"NRF7pg\":[\"Date de clôture\"],\"96YB1a\":[\"Schéma de couleurs\"],\"07OSD1\":[\"Vue compacte\"],\"s2QZS6\":[\"Entreprises\"],\"7i8j3G\":[\"Entreprise\"],\"yA1de7\":[\"Position d'enregistrement de l'entreprise\"],\"AgktVC\":[\"Solution pour les conférences\"],\"PQ1Dw2\":[\"Compte connecté\"],\"9TzudL\":[\"Comptes connectés\"],\"AMDUqA\":[\"Comptes connectés\"],\"bA6O5B\":[\"Politique de création automatique de contacts\"],\"RnsmQs\":[\"Avatar du contact\"],\"pL+pqi\":[\"Ville du contact\"],\"VnWMlz\":[\"Société du contact\"],\"ITlFIB\":[\"Emails du contact\"],\"GuRtLY\":[\"Titre du poste du contact\"],\"QrCvRQ\":[\"Compte Linkedin du contact\"],\"6xPSVt\":[\"Nom du contact\"],\"Y37CZ4\":[\"Numéro de téléphone du contact\"],\"zsW3gg\":[\"Numéros de téléphone des personnes à contacter\"],\"uuZ00G\":[\"Compte X/Twitter du contact\"],\"NCIYDF\":[\"Créé par\"],\"wPvFAD\":[\"Date de création\"],\"CJXWmO\":[\"Date de création\"],\"Lhd0oQ\":[\"Format de la date\"],\"1lL5Iu\":[\"Date de suppression de l'enregistrement\"],\"QN9ahV\":[\"Supprimé à\"],\"U1bSSI\":[\"Indique si la vue est en mode compact\"],\"Nu4oKW\":[\"Description\"],\"MRB7nI\":[\"Direction\"],\"0gS7M5\":[\"Nom d'affichage\"],\"0H/D9K\":[\"Valeur d'affichage\"],\"wMncXq\":[\"Nom de domaine\"],\"YOowcq\":[\"Date d'échéance\"],\"BXEcos\":[\"Emails\"],\"gqv5ZL\":[\"Salariés\"],\"VFv2ZC\":[\"Date de fin\"],\"k//6Xs\":[\"Entreprise événementielle\"],\"FJ7QI4\":[\"Contexte de l'événement\"],\"kJDmsI\":[\"Détails de l'événement\"],\"0JhmlM\":[\"ID externe de l'événement\"],\"aZJLAR\":[\"ID de l'événement\"],\"81maJp\":[\"Écouteurs d'événements\"],\"PYs3rP\":[\"Nom de l'événement\"],\"evIGwh\":[\"Nom/type de l'événement\"],\"vv99Wu\":[\"Note d'information\"],\"eSt759\":[\"Opportunité d'événement\"],\"aicVfT\":[\"Participants à l'événement\"],\"0mp45a\":[\"Personne de l'événement\"],\"mMq0Wy\":[\"Tâche événementielle\"],\"dCV1dS\":[\"Déroulement de l'événement\"],\"W84pl6\":[\"Exécution du flux de travail de l'événement\"],\"vUpps9\":[\"Version du flux d'événements\"],\"LxOGsB\":[\"Membre de l'espace de travail de l'événement\"],\"tst44n\":[\"Evénements\"],\"fHL+iH\":[\"Événements liés à la personne\"],\"3/O8MM\":[\"Événements liés au membre de l'espace de travail\"],\"QQlMid\":[\"Exclure les courriels de groupe\"],\"kenYGr\":[\"Exclure les courriels non professionnels\"],\"Lo5U0b\":[\"Exécuté par\"],\"sZg7s1\":[\"Date d'expiration\"],\"6Ki4Pv\":[\"Favoris\"],\"aKUOPp\":[\"Entreprise préférée\"],\"TDlZ/o\":[\"Dossier favori\"],\"WDVfUH\":[\"Position du dossier favori\"],\"SStz54\":[\"Dossiers favoris\"],\"dz/fFp\":[\"Note préférée\"],\"RRr9Bp\":[\"Opportunité préférée\"],\"RM6B6V\":[\"Personne préférée\"],\"oVA9vM\":[\"Position préférée\"],\"OaQVQH\":[\"Tâche préférée\"],\"VkWV1s\":[\"Vue préférée\"],\"l+lx2f\":[\"Flux de travail préféré\"],\"BPBnux\":[\"Course de flux de travail préférée\"],\"5X6Vlz\":[\"Version préférée du flux de travail\"],\"FDpezg\":[\"Membre de l'espace de travail préféré\"],\"X9kySA\":[\"Favoris\"],\"0CzeFL\":[\"Favoris de ce dossier\"],\"zQponA\":[\"Favoris liés à l'entreprise\"],\"VaKLrB\":[\"Favoris liés au contact\"],\"GOfcBt\":[\"Favoris liés à la note\"],\"9zd8hg\":[\"Favoris liés à l'opportunité\"],\"L5ccWD\":[\"Favoris liés à la tâche\"],\"R+1ib/\":[\"Favoris liés à la vue\"],\"ee0tmj\":[\"Favoris liés au flux de travail\"],\"zar5jz\":[\"Favoris liés à l'exécution du flux de travail\"],\"499/sw\":[\"Favoris liés à la version du flux de travail\"],\"rgmtb4\":[\"Favoris liés au membre de l'espace de travail\"],\"GyXrE1\":[\"Favoris liés à \",[\"label\"]],\"nSFFML\":[\"Champ Métadonnées Id\"],\"g+t8w9\":[\"Métadonnées de champ utilisées pour l'opération d'agrégation\"],\"J4hC2m\":[\"Champ utilisé pour la recherche en texte intégral\"],\"zuDgzc\":[\"Valeur du champ\"],\"oQA+cA\":[\"Chemin d'accès complet\"],\"UzpVUy\":[\"Grouper par la valeur de ce champ\"],\"TkE8dW\":[\"poignée\"],\"Nf7oXL\":[\"Poignée\"],\"GvgxWx\":[\"Alias de poignée\"],\"VehAU2\":[\"Message d'en-tête Id\"],\"NNJnBi\":[\"uID iCal\"],\"wwu18a\":[\"Icône\"],\"CiyiKN\":[\"PIC\"],\"dFb5Nt\":[\"Id\"],\"Ebc83S\":[\"Profil du client idéal : Indique si l'entreprise est le client le plus approprié et le plus précieux pour vous\"],\"NrA0WZ\":[\"Si l'événement est lié à un objet particulier\"],\"HRYXAA\":[\"inked Object Metadata Id\"],\"grHYXZ\":[\"Est annulé\"],\"k+g9Uh\":[\"La création automatique de contacts est-elle activée ?\"],\"uBx1xd\":[\"Est une journée entière\"],\"3iAfL2\":[\"Est Organisateur\"],\"Mqzqb8\":[\"La synchronisation est-elle activée ?\"],\"27z+FV\":[\"Titre du poste\"],\"shbh25\":[\"Objet Json pour fournir le contexte (utilisateur, appareil, espace de travail, etc.)\"],\"HgJ9jQ\":[\"Objet Json pour fournir les résultats de l'exécution du flux de travail\"],\"AQuLwi\":[\"Objet Json pour fournir les étapes\"],\"fOjmZ1\":[\"Objet Json pour fournir le déclencheur\"],\"TVc0/Q\":[\"Valeur Json pour les détails de l'événement\"],\"qmarO2\":[\"kanbanfieldMetadataId\"],\"7sMeHQ\":[\"Clé\"],\"vXIe7J\":[\"Langue\"],\"WvYp6o\":[\"Dernière version publiée Identité de la version\"],\"Y60/DC\":[\"Dernier curseur de synchronisation\"],\"Zdx9Qq\":[\"Date de la dernière synchronisation\"],\"c7uqNg\":[\"ID du dernier historique de synchronisation\"],\"tGwswq\":[\"Dernière modification de l'enregistrement\"],\"o1zvNS\":[\"Dernière mise à jour\"],\"wR9USP\":[\"Métadonnées de l'objet lié Id\"],\"PV1Nm7\":[\"Opportunités liées\"],\"6YiMr4\":[\"Nom de l'enregistrement lié mis en cache\"],\"sgHAxx\":[\"Identifiant de l'enregistrement lié\"],\"uCA6be\":[\"Linkedin\"],\"LeFv/R\":[\"Liste des opportunités pour lesquelles cette personne est le point de contact\"],\"wJijgU\":[\"Localisation\"],\"y+q8Lv\":[\"Opérateur logique\"],\"6kQXsS\":[\"Opérateur logique pour le groupe de filtres\"],\"EnfPm2\":[\"Lien de rencontre\"],\"xDAtGP\":[\"Message\"],\"g+QGD6\":[\"Canal de messages\"],\"DzU4a3\":[\"Association de canaux de messages\"],\"wd/R++\":[\"Id du canal de message\"],\"disipM\":[\"Canal de messages Association de messages\"],\"ijQY3P\":[\"Canal de messages Associations de messages\"],\"k7LXPQ\":[\"Canaux de messages\"],\"/4uGJc\":[\"Direction du message\"],\"fBw8fQ\":[\"Message Identité externe\"],\"6icznk\":[\"Id du message\"],\"9FJSpK\":[\"Numéro d'identification du message figurant dans l'en-tête du message\"],\"yaC1Aq\":[\"Identifiant du message provenant du fournisseur de services de messagerie\"],\"IUmVwu\":[\"Message Participant\"],\"FhIFx7\":[\"Message Participants\"],\"IC5A8V\":[\"Message synchronisé avec un canal de messages\"],\"de2nM/\":[\"Fil de messages\"],\"km1jgD\":[\"Message Thread Id\"],\"RD0ecC\":[\"Fils de messages\"],\"t7TeQU\":[\"Messages\"],\"WoWdku\":[\"Messages de la chaîne.\"],\"rYPBO7\":[\"Messages du fil de discussion.\"],\"XcKQrV\":[\"Jeton d'accès au fournisseur de messagerie\"],\"80EvIk\":[\"Jeton de rafraîchissement du fournisseur de messagerie\"],\"6YtxFj\":[\"Nom\"],\"EEVPOx\":[\"Nom du dossier favori\"],\"csMjko\":[\"Nom de l'exécution du flux de travail\"],\"KiJn9B\":[\"Note\"],\"GGlkb7\":[\"Annexes aux notes\"],\"Q1Rz+6\":[\"Corps de note\"],\"Yp057F\":[\"Position de l'enregistrement de la note\"],\"spaO7l\":[\"Note Cible\"],\"mkchvJ\":[\"Objectifs de la note\"],\"tD4BxK\":[\"Note Objectifs\"],\"jDThel\":[\"Titre de la note\"],\"1DBGsz\":[\"Notes\"],\"Ne73P/\":[\"Notes liées à l'article \",[\"label\"]],\"fXBE74\":[\"Notes liées à l'entreprise\"],\"iQ5AH6\":[\"Notes liées au contact\"],\"0bi/Eh\":[\"Notes liées à l'opportunité\"],\"B2Y6QU\":[\"NoteEntreprise cible\"],\"/mH0jo\":[\"NoteNote cible\"],\"DTs4tO\":[\"NoteOpportunité ciblée\"],\"gBwbnk\":[\"NotePersonne cible\"],\"ioJFzx\":[\"Nombre de salariés dans l'entreprise\"],\"hhe7Ce\":[\"Identité de l'objet\"],\"dnPgTI\":[\"Identifiant des métadonnées de l'objet\"],\"T/nPf5\":[\"Id des métadonnées de l'objet\"],\"afsWF6\":[\"Nom de l'objet\"],\"Fzfj4N\":[\"Opérande\"],\"FZg3wM\":[\"Fonctionnement\"],\"B1MDds\":[\"Opérations\"],\"4MyDFl\":[\"Opportunités\"],\"5QgKbT\":[\"Opportunités liées à l'entreprise.\"],\"SV/iis\":[\"Opportunité\"],\"WnMlKn\":[\"Montant de l'opportunité\"],\"aj3fnv\":[\"Date de clôture de l'opportunité\"],\"3NYczb\":[\"Entreprise d'opportunité\"],\"as45IN\":[\"Point de contact pour les opportunités\"],\"5Nu7Uw\":[\"Probabilité d'opportunité\"],\"Q1dzBp\":[\"Position d'enregistrement d'opportunité\"],\"5ugYS3\":[\"Stade de l'opportunité\"],\"eLggyd\":[\"Opération d'agrégation facultative\"],\"kdClJ/\":[\"Secret facultatif utilisé pour calculer la signature HMAC des données utiles du webhook. Ce secret est partagé entre Twenty et le consommateur de webhook pour authentifier les demandes de webhook.\"],\"gh06VD\":[\"Sortie\"],\"pDUbN1\":[\"Groupe de filtres de la vue parentale\"],\"YKSmIP\":[\"Vue parentale Filtre Groupe Id\"],\"1wdjme\":[\"Les personnes\"],\"E1zc7W\":[\"Personnes liées à l'entreprise.\"],\"OZdaTZ\":[\"Personne\"],\"c3Qq6o\":[\"Fiche de personne Position\"],\"zmwvG2\":[\"Téléphone\"],\"m2ivgq\":[\"Téléphones\"],\"P04j61\":[\"Point de contact\"],\"p/78dY\":[\"Position\"],\"HH1bMC\":[\"Position dans le groupe de filtres de la vue parentale\"],\"CvOSME\":[\"Position dans le groupe de filtres de vue\"],\"h8PGuF\":[\"Position dans le groupe de filtres de vue\"],\"TTHIbk\":[\"Schéma de couleurs préféré\"],\"5v4qYi\":[\"Langue préférée\"],\"WJIL29\":[\"Probabilité\"],\"CrfRPa\":[\"fournisseur\"],\"YfbwOB\":[\"Reçu à\"],\"4Tvtbu\":[\"Identifiant de l'enregistrement\"],\"9gXJw8\":[\"ID de l'événement récurrent\"],\"2rvMKg\":[\"Jeton de rafraîchissement\"],\"2LpFdR\":[\"Adresse électronique de l'utilisateur concerné\"],\"g87L9j\":[\"Relations\"],\"rnCndp\":[\"État de la réponse\"],\"MCWKAU\":[\"Date de révocation\"],\"GDvlUT\":[\"Rôle\"],\"Tpm2G9\":[\"Courses\"],\"N/rFzD\":[\"Scopes\"],\"PdVIJC\":[\"Vecteur de recherche\"],\"8VEDbV\":[\"Secret\"],\"Cj2Gtd\":[\"Taille\"],\"3PRxO3\":[\"Stade\"],\"D3iCkb\":[\"Date de début\"],\"uAQUqI\":[\"Statut\"],\"Db4W3/\":[\"Statuts\"],\"UJmAAK\":[\"Sujet\"],\"oyJYg7\":[\"Curseur de synchronisation\"],\"awvBUx\":[\"Curseur de synchronisation. Utilisé pour synchroniser les événements du fournisseur de calendrier\"],\"dNAbG6\":[\"Phase de synchronisation\"],\"aqNjQE\":[\"L'étape de synchronisation a commencé à\"],\"bRUdLR\":[\"État de la synchronisation\"],\"4SHJe4\":[\"Url cible\"],\"Q3P/4s\":[\"Tâche\"],\"kS+Ym6\":[\"Destinataire de la tâche\"],\"7fYQ6E\":[\"Pièces jointes aux tâches\"],\"X8fs74\":[\"Organe d'exécution\"],\"EPxYHS\":[\"Date d'échéance de la tâche\"],\"fUw1j+\":[\"Position de l'enregistrement de la tâche\"],\"I6+0ph\":[\"Statut de la tâche\"],\"WSiiWf\":[\"Tâche Cible\"],\"khGQLP\":[\"Objectifs de la tâche\"],\"836FiO\":[\"Objectifs de la tâche\"],\"R+s8S+\":[\"Titre de la tâche\"],\"GtycJ/\":[\"Tâches\"],\"HlDeG3\":[\"Tâches assignées au membre de l'espace de travail\"],\"Ca/n4T\":[\"Tâches liées à l'\",[\"label\"]],\"M4rBti\":[\"Tâches liées à l'entreprise\"],\"/VaiDW\":[\"Tâches liées au contact\"],\"1TfX9U\":[\"Tâches liées à l'opportunité\"],\"pP0Dt9\":[\"TâcheL'entreprise cible\"],\"UJ2aPi\":[\"TaskTarget opportunity\"],\"I1MiSs\":[\"TaskTarget personne\"],\"pciKLT\":[\"TaskTarget task\"],\"xeiujy\":[\"Texte\"],\"6PJbR2\":[\"L'identifiant du compte (email, nom d'utilisateur, numéro de téléphone, etc.)\"],\"zUXOAB\":[\"Le fournisseur de compte\"],\"qnNFrW\":[\"Le compte Linkedin de l'entreprise\"],\"N31Pso\":[\"Le nom de l'entreprise\"],\"BHFCqB\":[\"Le compte Twitter/X de l'entreprise\"],\"OBmU0K\":[\"L'URL du site web de l'entreprise. Nous utilisons cette URL pour récupérer l'icône de l'entreprise\"],\"zGBDEH\":[\"Le créateur de l'enregistrement\"],\"bMyVOx\":[\"L'état actuel des versions du flux de travail\"],\"0bo4Q0\":[\"Date de réception du message\"],\"8h4mhq\":[\"L'exécutant du flux de travail\"],\"W3raza\":[\"Le dossier auquel appartient ce favori\"],\"DbWmKZ\":[\"Le nom de l'opportunité\"],\"7mPrpl\":[\"Le nom de l'auditeur de l'événement du flux de travail\"],\"od0omS\":[\"L'identifiant de la dernière version publiée du flux de travail\"],\"/EdWx6\":[\"Le nom du flux de travail\"],\"EhAsND\":[\"Le nom de la version du flux de travail\"],\"dhx13p\":[\"L'état de la version du flux de travail\"],\"Zl0BJl\":[\"Filet Id externe\"],\"RSSbWN\":[\"Identité de la file d'attente du fournisseur de services de messagerie\"],\"sS8v5K\":[\"Comptage des défaillances de l'accélérateur\"],\"n9nSNJ\":[\"Format de l'heure\"],\"Mz2JN2\":[\"Fuseau horaire\"],\"az1boY\":[\"Calendrier des activités\"],\"fqKMpF\":[\"Chronologie Activités liées à l'entreprise\"],\"4/UzU5\":[\"Activités de la chronologie liées à la note.\"],\"p6feIz\":[\"Calendrier Activités liées à l'opportunité.\"],\"yvPwuF\":[\"Calendrier des activités liées à la course\"],\"q96UvB\":[\"Calendrier Activités liées à la tâche.\"],\"N9HMa/\":[\"Calendrier des activités liées à la version\"],\"B1CYKX\":[\"Activités de la chronologie liées au flux de travail\"],\"G0UmtQ\":[\"Calendrier Activités liées à l'\",[\"label\"]],\"K/kU4E\":[\"Activité chronologique\"],\"MHrjPM\":[\"Titre\"],\"+zy2Nq\":[\"Type\"],\"0gY5lO\":[\"Mise à jour de la date et de l'heure\"],\"YFciqL\":[\"Courriel de l'utilisateur\"],\"d1BTW8\":[\"Identité de l'utilisateur\"],\"4juE7s\":[\"Fuseau horaire de l'utilisateur\"],\"43zCwQ\":[\"Format de date préféré par l'utilisateur\"],\"kJuoKm\":[\"Format horaire préféré de l'utilisateur\"],\"wMHvYH\":[\"Valeur\"],\"7aatUy\":[\"Statut de la version\"],\"CdQeU7\":[\"Étapes de la version\"],\"PGMPIi\":[\"Déclencheur de version\"],\"IYNSdp\":[\"Versions\"],\"jpctdh\":[\"Voir\"],\"cZPDyy\":[\"Voir le champ\"],\"6jpoH4\":[\"Voir la position sur le terrain\"],\"Ju6gri\":[\"Vue Champ de vision connexe\"],\"tvTr2y\":[\"Vue Taille du champ\"],\"BkII8t\":[\"Champ de vision Champ cible\"],\"Gd/LzL\":[\"Vue Visibilité du champ\"],\"GUFYyq\":[\"Voir les champs\"],\"JRtI7Y\":[\"Voir le filtre\"],\"L2gQ5q\":[\"Voir la valeur d'affichage du filtre\"],\"l9/6pD\":[\"Voir le groupe de filtres\"],\"Mbosm8\":[\"Visualiser l'identifiant du groupe de filtrage\"],\"/aP3iG\":[\"Voir les groupes de filtres\"],\"4MG8+B\":[\"Voir l'opérande Filtre\"],\"OrUkUF\":[\"Vue Filtre Vue associée\"],\"TyXOtD\":[\"Visualiser le champ cible du filtre\"],\"3KzkxN\":[\"Voir la valeur du filtre\"],\"vj5JsR\":[\"Voir les filtres\"],\"ziEP12\":[\"Voir le groupe\"],\"uQ3c2q\":[\"Vue du groupe\"],\"EFlLpQ\":[\"Visualiser le champ cible du groupe\"],\"b1Vc+l\":[\"Voir la visibilité du groupe\"],\"V4nZs/\":[\"Voir les groupes\"],\"qXlovu\":[\"Voir l'icône\"],\"cd/+ZD\":[\"Voir le champ de la colonne Kanban\"],\"vdfZ+A\":[\"Voir la clé\"],\"oOljSE\":[\"Voir le nom\"],\"rhO8zp\":[\"Voir la position\"],\"EUjpwJ\":[\"Voir le tri\"],\"6ZUale\":[\"Voir le sens du tri\"],\"/rCPqN\":[\"Vue Trier la vue associée\"],\"+du2wy\":[\"Visualiser le champ cible du tri\"],\"UsdY3K\":[\"Voir les tris\"],\"clWwIZ\":[\"Visualiser l'objet cible\"],\"bJAIqT\":[\"Voir le type\"],\"1I6UoR\":[\"Points de vue\"],\"2q/Q7x\":[\"Visibilité\"],\"oh8+os\":[\"Visible\"],\"TRDppN\":[\"Crochet Web\"],\"fyB2Wp\":[\"Opération Webhook\"],\"gONLmX\":[\"Opérations de webhook\"],\"cPoSTF\":[\"URL cible du webhook\"],\"v1kQyJ\":[\"Crochets Web\"],\"bLt/0J\":[\"Flux de travail\"],\"E03XpH\":[\"Les auditeurs d'événements de flux de travail liés au flux de travail.\"],\"vwSkSW\":[\"Flux de travail lié à l'exécution.\"],\"y9tnFx\":[\"Position de l'enregistrement du flux de travail\"],\"5vIcqC\":[\"Exécution du flux de travail\"],\"3Iz+qz\":[\"L'exécution du flux de travail s'est terminée à\"],\"IUaK6s\":[\"Position d'exécution du flux de travail\"],\"zaN7tH\":[\"L'exécution du flux de travail a commencé à\"],\"1TU2A8\":[\"Statut d'exécution du flux de travail\"],\"u6DF/V\":[\"Exécution du flux de travail\"],\"9nOy7k\":[\"Exécution du flux de travail lié à la version.\"],\"c37F3j\":[\"Exécutions de flux de travail liées au flux de travail.\"],\"lTXctu\":[\"Version du flux de travail\"],\"+wYPET\":[\"Version du flux de travail\"],\"CocTJJ\":[\"Version du flux de travail liée à l'exécution.\"],\"9l+pJT\":[\"Position de la version du flux de travail\"],\"OCyhkn\":[\"Versions du flux de travail\"],\"018fP9\":[\"Versions du flux de travail liées au flux de travail.\"],\"ENOy6I\":[\"WorkflowEventListener\"],\"HN90FO\":[\"WorkflowEventListener workflow\"],\"3JA9se\":[\"Écouteurs de flux de travail (WorkflowEventListeners)\"],\"woYYQq\":[\"Flux de travail\"],\"urCUgs\":[\"WorkflowVersion\"],\"b4kire\":[\"WorkflowVersion workflow\"],\"CbGxon\":[\"Membre de l'espace de travail\"],\"qc38qR\":[\"Membre de l'espace de travail\"],\"R1S9pO\":[\"Avatar du membre de l'espace de travail\"],\"5VCX7o\":[\"Nom du membre de l'espace de travail\"],\"YCAEr+\":[\"Membres de l'espace de travail\"],\"EtzFC0\":[\"Membre de l'espace de travail\"],\"0gv+T2\":[\"X\"],\"vPccnr\":[\"Le membre de votre équipe responsable de la gestion du compte de l'entreprise\"]}")}; \ No newline at end of file +/*eslint-disable*/module.exports={messages:JSON.parse("{\"Qyrd7v\":[\"(System) View Fields\"],\"9Y3fTB\":[\"(System) View Filter Groups\"],\"TB2jLV\":[\"(System) View Filters\"],\"Y7M7Ro\":[\"(System) View Groups\"],\"9vliLw\":[\"(System) View Sorts\"],\"5B59WE\":[\"(System) Views\"],\"kZR6+h\":[\"A company\"],\"+aeifv\":[\"A connected account\"],\"HCoswz\":[\"A favorite that can be accessed from the left menu\"],\"6w8bHl\":[\"A Folder of favorites\"],\"sSGYmf\":[\"A group of related messages (e.g. email thread, chat thread)\"],\"vZj1Xc\":[\"A message sent or received through a messaging channel (email, chat, etc.)\"],\"bufuBA\":[\"A note\"],\"6kUkZW\":[\"A note target\"],\"Io42ej\":[\"A person\"],\"mkFXEH\":[\"A task\"],\"hk2NzW\":[\"A task target\"],\"HTSJFW\":[\"A webhook\"],\"ZIN9Ga\":[\"A workflow\"],\"juBVjt\":[\"A workflow event listener\"],\"1+xDbI\":[\"A workflow run\"],\"N0g7rp\":[\"A workflow version\"],\"HpZ/I5\":[\"A workspace member\"],\"GDKKxT\":[\"Access Token\"],\"pd81Qb\":[\"Account Owner\"],\"loqL/f\":[\"Account owner for companies\"],\"HZosRi\":[\"Account Owner For Companies\"],\"Du6bPw\":[\"Address\"],\"JiOJxf\":[\"Address (deprecated) \"],\"Knl3c9\":[\"Address of the company\"],\"zJhwjv\":[\"Address of the company - deprecated in favor of new address field\"],\"ZfVqbP\":[\"Aggregate operation\"],\"W58PBh\":[\"Aggregated / filtered event to be displayed on the timeline\"],\"hehnjM\":[\"Amount\"],\"qeHcQj\":[\"An API key\"],\"MjyFvC\":[\"An attachment\"],\"+bL++X\":[\"An audit log of actions performed in the system\"],\"muVHgL\":[\"An event related to user behavior\"],\"bZq8rL\":[\"An opportunity\"],\"JKWicb\":[\"Annual Recurring Revenue: The actual or estimated annual revenue of the company\"],\"yRnk5W\":[\"API Key\"],\"FfSJ1Y\":[\"API Keys\"],\"puNs/l\":[\"ApiKey expiration date\"],\"YHiNxr\":[\"ApiKey name\"],\"xrndTt\":[\"ApiKey revocation date\"],\"3EiOLz\":[\"ARR\"],\"Ek7xGj\":[\"Assigned tasks\"],\"ojKCLU\":[\"Assignee\"],\"Max2GU\":[\"Associated User Id\"],\"UY1vmE\":[\"Attachment\"],\"JAefBH\":[\"Attachment author\"],\"bIaesZ\":[\"Attachment company\"],\"gfGYcl\":[\"Attachment full path\"],\"wjocwa\":[\"Attachment name\"],\"FWlOXr\":[\"Attachment note\"],\"YASWpH\":[\"Attachment opportunity\"],\"P38yED\":[\"Attachment person\"],\"Tx1DxS\":[\"Attachment task\"],\"4qqxMt\":[\"Attachment type\"],\"w/Sphq\":[\"Attachments\"],\"2tQOVc\":[\"Attachments created by the workspace member\"],\"iVnA89\":[\"Attachments linked to the company\"],\"MuTXtT\":[\"Attachments linked to the contact.\"],\"kw0mLu\":[\"Attachments linked to the opportunity\"],\"fCbqr7\":[\"Attachments tied to the \",[\"label\"]],\"ilRCh1\":[\"Audit Log\"],\"EPEFrH\":[\"Audit Logs\"],\"RqCC/0\":[\"Audit Logs linked to the workspace member\"],\"cNBqH+\":[\"Auth failed at\"],\"VbeIOx\":[\"Author\"],\"XJONK6\":[\"Authored attachments\"],\"RpExX0\":[\"Automatically create People records when receiving or sending emails\"],\"lXxdId\":[\"Automatically create records for people you participated with in an event.\"],\"kfcRb0\":[\"Avatar\"],\"S/mJUR\":[\"Avatar Url\"],\"20B9kW\":[\"Behavioral Event\"],\"Jeh/Q/\":[\"Behavioral Events\"],\"K1172m\":[\"Blocklist\"],\"Tv2hxv\":[\"Blocklisted handles\"],\"L5JhJe\":[\"Blocklists\"],\"bGQplw\":[\"Body\"],\"8mVqF7\":[\"Cached record name\"],\"Nh6GTX\":[\"Calendar Channel\"],\"jfNQ0m\":[\"Calendar Channel Event Association\"],\"kYNT3F\":[\"Calendar Channel Event Associations\"],\"Znix/S\":[\"Calendar Channels\"],\"bRk+FR\":[\"Calendar event\"],\"N2kMfO\":[\"Calendar event participant\"],\"AWDqkQ\":[\"Calendar event participants\"],\"ZI2UyM\":[\"Calendar Event Participants\"],\"X9A2xC\":[\"Calendar events\"],\"4IVK41\":[\"Channel ID\"],\"Ubg/B+\":[\"Channel Type\"],\"3wV73y\":[\"City\"],\"NRF7pg\":[\"Close date\"],\"96YB1a\":[\"Color Scheme\"],\"07OSD1\":[\"Compact View\"],\"s2QZS6\":[\"Companies\"],\"7i8j3G\":[\"Company\"],\"yA1de7\":[\"Company record position\"],\"AgktVC\":[\"Conference Solution\"],\"PQ1Dw2\":[\"Connected Account\"],\"9TzudL\":[\"Connected accounts\"],\"AMDUqA\":[\"Connected Accounts\"],\"bA6O5B\":[\"Contact auto creation policy\"],\"RnsmQs\":[\"Contact’s avatar\"],\"pL+pqi\":[\"Contact’s city\"],\"VnWMlz\":[\"Contact’s company\"],\"ITlFIB\":[\"Contact’s Emails\"],\"GuRtLY\":[\"Contact’s job title\"],\"QrCvRQ\":[\"Contact’s Linkedin account\"],\"6xPSVt\":[\"Contact’s name\"],\"Y37CZ4\":[\"Contact’s phone number\"],\"zsW3gg\":[\"Contact’s phone numbers\"],\"uuZ00G\":[\"Contact’s X/Twitter account\"],\"NCIYDF\":[\"Created by\"],\"wPvFAD\":[\"Creation date\"],\"CJXWmO\":[\"Creation DateTime\"],\"Lhd0oQ\":[\"Date format\"],\"1lL5Iu\":[\"Date when the record was deleted\"],\"QN9ahV\":[\"Deleted at\"],\"U1bSSI\":[\"Describes if the view is in compact mode\"],\"Nu4oKW\":[\"Description\"],\"MRB7nI\":[\"Direction\"],\"0gS7M5\":[\"Display Name\"],\"0H/D9K\":[\"Display Value\"],\"wMncXq\":[\"Domain Name\"],\"YOowcq\":[\"Due Date\"],\"BXEcos\":[\"Emails\"],\"gqv5ZL\":[\"Employees\"],\"VFv2ZC\":[\"End Date\"],\"k//6Xs\":[\"Event company\"],\"FJ7QI4\":[\"Event context\"],\"kJDmsI\":[\"Event details\"],\"0JhmlM\":[\"Event external ID\"],\"aZJLAR\":[\"Event ID\"],\"81maJp\":[\"Event Listeners\"],\"PYs3rP\":[\"Event name\"],\"evIGwh\":[\"Event name/type\"],\"vv99Wu\":[\"Event note\"],\"eSt759\":[\"Event opportunity\"],\"aicVfT\":[\"Event Participants\"],\"0mp45a\":[\"Event person\"],\"mMq0Wy\":[\"Event task\"],\"dCV1dS\":[\"Event workflow\"],\"W84pl6\":[\"Event workflow run\"],\"vUpps9\":[\"Event workflow version\"],\"LxOGsB\":[\"Event workspace member\"],\"tst44n\":[\"Events\"],\"fHL+iH\":[\"Events linked to the person\"],\"3/O8MM\":[\"Events linked to the workspace member\"],\"QQlMid\":[\"Exclude group emails\"],\"kenYGr\":[\"Exclude non professional emails\"],\"Lo5U0b\":[\"Executed by\"],\"sZg7s1\":[\"Expiration date\"],\"6Ki4Pv\":[\"Favorite\"],\"aKUOPp\":[\"Favorite company\"],\"TDlZ/o\":[\"Favorite Folder\"],\"WDVfUH\":[\"Favorite folder position\"],\"SStz54\":[\"Favorite Folders\"],\"dz/fFp\":[\"Favorite note\"],\"RRr9Bp\":[\"Favorite opportunity\"],\"RM6B6V\":[\"Favorite person\"],\"oVA9vM\":[\"Favorite position\"],\"OaQVQH\":[\"Favorite task\"],\"VkWV1s\":[\"Favorite view\"],\"l+lx2f\":[\"Favorite workflow\"],\"BPBnux\":[\"Favorite workflow run\"],\"5X6Vlz\":[\"Favorite workflow version\"],\"FDpezg\":[\"Favorite workspace member\"],\"X9kySA\":[\"Favorites\"],\"0CzeFL\":[\"Favorites in this folder\"],\"zQponA\":[\"Favorites linked to the company\"],\"VaKLrB\":[\"Favorites linked to the contact\"],\"GOfcBt\":[\"Favorites linked to the note\"],\"9zd8hg\":[\"Favorites linked to the opportunity\"],\"L5ccWD\":[\"Favorites linked to the task\"],\"R+1ib/\":[\"Favorites linked to the view\"],\"ee0tmj\":[\"Favorites linked to the workflow\"],\"zar5jz\":[\"Favorites linked to the workflow run\"],\"499/sw\":[\"Favorites linked to the workflow version\"],\"rgmtb4\":[\"Favorites linked to the workspace member\"],\"GyXrE1\":[\"Favorites tied to the \",[\"label\"]],\"nSFFML\":[\"Field Metadata Id\"],\"g+t8w9\":[\"Field metadata used for aggregate operation\"],\"J4hC2m\":[\"Field used for full-text search\"],\"zuDgzc\":[\"Field Value\"],\"oQA+cA\":[\"Full path\"],\"UzpVUy\":[\"Group by this field value\"],\"TkE8dW\":[\"handle\"],\"Nf7oXL\":[\"Handle\"],\"GvgxWx\":[\"Handle Aliases\"],\"VehAU2\":[\"Header message Id\"],\"NNJnBi\":[\"iCal UID\"],\"wwu18a\":[\"Icon\"],\"CiyiKN\":[\"ICP\"],\"dFb5Nt\":[\"Id\"],\"Ebc83S\":[\"Ideal Customer Profile: Indicates whether the company is the most suitable and valuable customer for you\"],\"NrA0WZ\":[\"If the event is related to a particular object\"],\"grHYXZ\":[\"Is canceled\"],\"k+g9Uh\":[\"Is Contact Auto Creation Enabled\"],\"uBx1xd\":[\"Is Full Day\"],\"3iAfL2\":[\"Is Organizer\"],\"Mqzqb8\":[\"Is Sync Enabled\"],\"27z+FV\":[\"Job Title\"],\"shbh25\":[\"Json object to provide context (user, device, workspace, etc.)\"],\"HgJ9jQ\":[\"Json object to provide output of the workflow run\"],\"AQuLwi\":[\"Json object to provide steps\"],\"fOjmZ1\":[\"Json object to provide trigger\"],\"TVc0/Q\":[\"Json value for event details\"],\"qmarO2\":[\"kanbanfieldMetadataId\"],\"7sMeHQ\":[\"Key\"],\"vXIe7J\":[\"Language\"],\"WvYp6o\":[\"Last published Version Id\"],\"Y60/DC\":[\"Last sync cursor\"],\"Zdx9Qq\":[\"Last sync date\"],\"c7uqNg\":[\"Last sync history ID\"],\"tGwswq\":[\"Last time the record was changed\"],\"o1zvNS\":[\"Last update\"],\"wR9USP\":[\"Linked Object Metadata Id\"],\"PV1Nm7\":[\"Linked Opportunities\"],\"6YiMr4\":[\"Linked Record cached name\"],\"sgHAxx\":[\"Linked Record id\"],\"uCA6be\":[\"Linkedin\"],\"LeFv/R\":[\"List of opportunities for which that person is the point of contact\"],\"wJijgU\":[\"Location\"],\"y+q8Lv\":[\"Logical Operator\"],\"6kQXsS\":[\"Logical operator for the filter group\"],\"EnfPm2\":[\"Meet Link\"],\"xDAtGP\":[\"Message\"],\"g+QGD6\":[\"Message Channel\"],\"DzU4a3\":[\"Message Channel Association\"],\"wd/R++\":[\"Message Channel Id\"],\"disipM\":[\"Message Channel Message Association\"],\"ijQY3P\":[\"Message Channel Message Associations\"],\"k7LXPQ\":[\"Message Channels\"],\"/4uGJc\":[\"Message Direction\"],\"fBw8fQ\":[\"Message External Id\"],\"6icznk\":[\"Message Id\"],\"9FJSpK\":[\"Message id from the message header\"],\"yaC1Aq\":[\"Message id from the messaging provider\"],\"IUmVwu\":[\"Message Participant\"],\"FhIFx7\":[\"Message Participants\"],\"IC5A8V\":[\"Message Synced with a Message Channel\"],\"de2nM/\":[\"Message Thread\"],\"km1jgD\":[\"Message Thread Id\"],\"RD0ecC\":[\"Message Threads\"],\"t7TeQU\":[\"Messages\"],\"WoWdku\":[\"Messages from the channel.\"],\"rYPBO7\":[\"Messages from the thread.\"],\"XcKQrV\":[\"Messaging provider access token\"],\"80EvIk\":[\"Messaging provider refresh token\"],\"6YtxFj\":[\"Name\"],\"EEVPOx\":[\"Name of the favorite folder\"],\"csMjko\":[\"Name of the workflow run\"],\"KiJn9B\":[\"Note\"],\"GGlkb7\":[\"Note attachments\"],\"Q1Rz+6\":[\"Note body\"],\"Yp057F\":[\"Note record position\"],\"spaO7l\":[\"Note Target\"],\"mkchvJ\":[\"Note targets\"],\"tD4BxK\":[\"Note Targets\"],\"jDThel\":[\"Note title\"],\"1DBGsz\":[\"Notes\"],\"Ne73P/\":[\"Notes tied to the \",[\"label\"]],\"fXBE74\":[\"Notes tied to the company\"],\"iQ5AH6\":[\"Notes tied to the contact\"],\"0bi/Eh\":[\"Notes tied to the opportunity\"],\"B2Y6QU\":[\"NoteTarget company\"],\"/mH0jo\":[\"NoteTarget note\"],\"DTs4tO\":[\"NoteTarget opportunity\"],\"gBwbnk\":[\"NoteTarget person\"],\"ioJFzx\":[\"Number of employees in the company\"],\"hhe7Ce\":[\"Object id\"],\"dnPgTI\":[\"Object metadata id\"],\"T/nPf5\":[\"Object Metadata Id\"],\"afsWF6\":[\"Object name\"],\"Fzfj4N\":[\"Operand\"],\"FZg3wM\":[\"Operation\"],\"B1MDds\":[\"Operations\"],\"4MyDFl\":[\"Opportunities\"],\"5QgKbT\":[\"Opportunities linked to the company.\"],\"SV/iis\":[\"Opportunity\"],\"WnMlKn\":[\"Opportunity amount\"],\"aj3fnv\":[\"Opportunity close date\"],\"3NYczb\":[\"Opportunity company\"],\"as45IN\":[\"Opportunity point of contact\"],\"5Nu7Uw\":[\"Opportunity probability\"],\"Q1dzBp\":[\"Opportunity record position\"],\"5ugYS3\":[\"Opportunity stage\"],\"eLggyd\":[\"Optional aggregate operation\"],\"kdClJ/\":[\"Optional secret used to compute the HMAC signature for webhook payloads. This secret is shared between Twenty and the webhook consumer to authenticate webhook requests.\"],\"gh06VD\":[\"Output\"],\"pDUbN1\":[\"Parent View Filter Group\"],\"YKSmIP\":[\"Parent View Filter Group Id\"],\"1wdjme\":[\"People\"],\"E1zc7W\":[\"People linked to the company.\"],\"OZdaTZ\":[\"Person\"],\"c3Qq6o\":[\"Person record Position\"],\"zmwvG2\":[\"Phone\"],\"m2ivgq\":[\"Phones\"],\"P04j61\":[\"Point of Contact\"],\"p/78dY\":[\"Position\"],\"HH1bMC\":[\"Position in the parent view filter group\"],\"CvOSME\":[\"Position in the view filter group\"],\"h8PGuF\":[\"Position in view filter group\"],\"TTHIbk\":[\"Preferred color scheme\"],\"5v4qYi\":[\"Preferred language\"],\"WJIL29\":[\"Probability\"],\"CrfRPa\":[\"provider\"],\"YfbwOB\":[\"Received At\"],\"4Tvtbu\":[\"Record id\"],\"9gXJw8\":[\"Recurring Event ID\"],\"2rvMKg\":[\"Refresh Token\"],\"2LpFdR\":[\"Related user email address\"],\"g87L9j\":[\"Relations\"],\"rnCndp\":[\"Response Status\"],\"MCWKAU\":[\"Revocation date\"],\"GDvlUT\":[\"Role\"],\"Tpm2G9\":[\"Runs\"],\"N/rFzD\":[\"Scopes\"],\"PdVIJC\":[\"Search vector\"],\"8VEDbV\":[\"Secret\"],\"Cj2Gtd\":[\"Size\"],\"3PRxO3\":[\"Stage\"],\"D3iCkb\":[\"Start Date\"],\"uAQUqI\":[\"Status\"],\"Db4W3/\":[\"Statuses\"],\"UJmAAK\":[\"Subject\"],\"oyJYg7\":[\"Sync Cursor\"],\"awvBUx\":[\"Sync Cursor. Used for syncing events from the calendar provider\"],\"dNAbG6\":[\"Sync stage\"],\"aqNjQE\":[\"Sync stage started at\"],\"bRUdLR\":[\"Sync status\"],\"4SHJe4\":[\"Target Url\"],\"Q3P/4s\":[\"Task\"],\"kS+Ym6\":[\"Task assignee\"],\"7fYQ6E\":[\"Task attachments\"],\"X8fs74\":[\"Task body\"],\"EPxYHS\":[\"Task due date\"],\"fUw1j+\":[\"Task record position\"],\"I6+0ph\":[\"Task status\"],\"WSiiWf\":[\"Task Target\"],\"khGQLP\":[\"Task targets\"],\"836FiO\":[\"Task Targets\"],\"R+s8S+\":[\"Task title\"],\"GtycJ/\":[\"Tasks\"],\"HlDeG3\":[\"Tasks assigned to the workspace member\"],\"Ca/n4T\":[\"Tasks tied to the \",[\"label\"]],\"M4rBti\":[\"Tasks tied to the company\"],\"/VaiDW\":[\"Tasks tied to the contact\"],\"1TfX9U\":[\"Tasks tied to the opportunity\"],\"pP0Dt9\":[\"TaskTarget company\"],\"UJ2aPi\":[\"TaskTarget opportunity\"],\"I1MiSs\":[\"TaskTarget person\"],\"pciKLT\":[\"TaskTarget task\"],\"xeiujy\":[\"Text\"],\"6PJbR2\":[\"The account handle (email, username, phone number, etc.)\"],\"zUXOAB\":[\"The account provider\"],\"qnNFrW\":[\"The company Linkedin account\"],\"N31Pso\":[\"The company name\"],\"BHFCqB\":[\"The company Twitter/X account\"],\"OBmU0K\":[\"The company website URL. We use this url to fetch the company icon\"],\"zGBDEH\":[\"The creator of the record\"],\"bMyVOx\":[\"The current statuses of the workflow versions\"],\"0bo4Q0\":[\"The date the message was received\"],\"8h4mhq\":[\"The executor of the workflow\"],\"W3raza\":[\"The folder this favorite belongs to\"],\"DbWmKZ\":[\"The opportunity name\"],\"7mPrpl\":[\"The workflow event listener name\"],\"od0omS\":[\"The workflow last published version id\"],\"/EdWx6\":[\"The workflow name\"],\"EhAsND\":[\"The workflow version name\"],\"dhx13p\":[\"The workflow version status\"],\"Zl0BJl\":[\"Thread External Id\"],\"RSSbWN\":[\"Thread id from the messaging provider\"],\"sS8v5K\":[\"Throttle Failure Count\"],\"n9nSNJ\":[\"Time format\"],\"Mz2JN2\":[\"Time zone\"],\"az1boY\":[\"Timeline Activities\"],\"fqKMpF\":[\"Timeline Activities linked to the company\"],\"4/UzU5\":[\"Timeline Activities linked to the note.\"],\"p6feIz\":[\"Timeline Activities linked to the opportunity.\"],\"yvPwuF\":[\"Timeline activities linked to the run\"],\"q96UvB\":[\"Timeline Activities linked to the task.\"],\"N9HMa/\":[\"Timeline activities linked to the version\"],\"B1CYKX\":[\"Timeline activities linked to the workflow\"],\"G0UmtQ\":[\"Timeline Activities tied to the \",[\"label\"]],\"K/kU4E\":[\"Timeline Activity\"],\"MHrjPM\":[\"Title\"],\"+zy2Nq\":[\"Type\"],\"0gY5lO\":[\"Update DateTime\"],\"YFciqL\":[\"User Email\"],\"d1BTW8\":[\"User Id\"],\"4juE7s\":[\"User time zone\"],\"43zCwQ\":[\"User's preferred date format\"],\"kJuoKm\":[\"User's preferred time format\"],\"wMHvYH\":[\"Value\"],\"7aatUy\":[\"Version status\"],\"CdQeU7\":[\"Version steps\"],\"PGMPIi\":[\"Version trigger\"],\"IYNSdp\":[\"Versions\"],\"jpctdh\":[\"View\"],\"cZPDyy\":[\"View Field\"],\"6jpoH4\":[\"View Field position\"],\"Ju6gri\":[\"View Field related view\"],\"tvTr2y\":[\"View Field size\"],\"BkII8t\":[\"View Field target field\"],\"Gd/LzL\":[\"View Field visibility\"],\"GUFYyq\":[\"View Fields\"],\"JRtI7Y\":[\"View Filter\"],\"L2gQ5q\":[\"View Filter Display Value\"],\"l9/6pD\":[\"View Filter Group\"],\"Mbosm8\":[\"View Filter Group Id\"],\"/aP3iG\":[\"View Filter Groups\"],\"4MG8+B\":[\"View Filter operand\"],\"OrUkUF\":[\"View Filter related view\"],\"TyXOtD\":[\"View Filter target field\"],\"3KzkxN\":[\"View Filter value\"],\"vj5JsR\":[\"View Filters\"],\"ziEP12\":[\"View Group\"],\"uQ3c2q\":[\"View Group related view\"],\"EFlLpQ\":[\"View Group target field\"],\"b1Vc+l\":[\"View Group visibility\"],\"V4nZs/\":[\"View Groups\"],\"qXlovu\":[\"View icon\"],\"cd/+ZD\":[\"View Kanban column field\"],\"vdfZ+A\":[\"View key\"],\"oOljSE\":[\"View name\"],\"rhO8zp\":[\"View position\"],\"EUjpwJ\":[\"View Sort\"],\"6ZUale\":[\"View Sort direction\"],\"/rCPqN\":[\"View Sort related view\"],\"+du2wy\":[\"View Sort target field\"],\"UsdY3K\":[\"View Sorts\"],\"clWwIZ\":[\"View target object\"],\"bJAIqT\":[\"View type\"],\"1I6UoR\":[\"Views\"],\"2q/Q7x\":[\"Visibility\"],\"oh8+os\":[\"Visible\"],\"TRDppN\":[\"Webhook\"],\"fyB2Wp\":[\"Webhook operation\"],\"gONLmX\":[\"Webhook operations\"],\"cPoSTF\":[\"Webhook target url\"],\"v1kQyJ\":[\"Webhooks\"],\"bLt/0J\":[\"Workflow\"],\"E03XpH\":[\"Workflow event listeners linked to the workflow.\"],\"vwSkSW\":[\"Workflow linked to the run.\"],\"y9tnFx\":[\"Workflow record position\"],\"5vIcqC\":[\"Workflow Run\"],\"3Iz+qz\":[\"Workflow run ended at\"],\"IUaK6s\":[\"Workflow run position\"],\"zaN7tH\":[\"Workflow run started at\"],\"1TU2A8\":[\"Workflow run status\"],\"u6DF/V\":[\"Workflow Runs\"],\"9nOy7k\":[\"Workflow runs linked to the version.\"],\"c37F3j\":[\"Workflow runs linked to the workflow.\"],\"lTXctu\":[\"Workflow version\"],\"+wYPET\":[\"Workflow Version\"],\"CocTJJ\":[\"Workflow version linked to the run.\"],\"9l+pJT\":[\"Workflow version position\"],\"OCyhkn\":[\"Workflow Versions\"],\"018fP9\":[\"Workflow versions linked to the workflow.\"],\"ENOy6I\":[\"WorkflowEventListener\"],\"HN90FO\":[\"WorkflowEventListener workflow\"],\"3JA9se\":[\"WorkflowEventListeners\"],\"woYYQq\":[\"Workflows\"],\"urCUgs\":[\"WorkflowVersion\"],\"b4kire\":[\"WorkflowVersion workflow\"],\"CbGxon\":[\"Workspace member\"],\"qc38qR\":[\"Workspace Member\"],\"R1S9pO\":[\"Workspace member avatar\"],\"5VCX7o\":[\"Workspace member name\"],\"YCAEr+\":[\"Workspace Members\"],\"EtzFC0\":[\"WorkspaceMember\"],\"0gv+T2\":[\"X\"],\"vPccnr\":[\"Your team member responsible for managing the company account\"]}")}; \ No newline at end of file diff --git a/packages/twenty-ui/src/navigation/menu-item/components/MenuItemCommand.tsx b/packages/twenty-ui/src/navigation/menu-item/components/MenuItemCommand.tsx index 895f68263..f32be3366 100644 --- a/packages/twenty-ui/src/navigation/menu-item/components/MenuItemCommand.tsx +++ b/packages/twenty-ui/src/navigation/menu-item/components/MenuItemCommand.tsx @@ -66,8 +66,7 @@ const StyledMenuItemCommandContainer = styled.div<{ isSelected?: boolean }>` export type MenuItemCommandProps = { LeftIcon?: IconComponent; text: string; - firstHotKey?: string; - secondHotKey?: string; + hotKeys?: string[]; className?: string; isSelected?: boolean; onClick?: () => void; @@ -77,8 +76,7 @@ export type MenuItemCommandProps = { export const MenuItemCommand = ({ LeftIcon, text, - firstHotKey, - secondHotKey, + hotKeys, className, isSelected, onClick, @@ -102,12 +100,7 @@ export const MenuItemCommand = ({ {text} {RightComponent} - {!isMobile && ( - - )} + {!isMobile && } ); }; diff --git a/packages/twenty-ui/src/navigation/menu-item/components/MenuItemCommandHotKeys.tsx b/packages/twenty-ui/src/navigation/menu-item/components/MenuItemCommandHotKeys.tsx index bfebf4683..23e10d2e0 100644 --- a/packages/twenty-ui/src/navigation/menu-item/components/MenuItemCommandHotKeys.tsx +++ b/packages/twenty-ui/src/navigation/menu-item/components/MenuItemCommandHotKeys.tsx @@ -34,27 +34,24 @@ const StyledCommandKey = styled.div` `; export type MenuItemCommandHotKeysProps = { - firstHotKey?: string; + hotKeys?: string[]; joinLabel?: string; - secondHotKey?: string; }; export const MenuItemCommandHotKeys = ({ - firstHotKey, - secondHotKey, + hotKeys, joinLabel = 'then', }: MenuItemCommandHotKeysProps) => { return ( - {firstHotKey && ( + {hotKeys && ( - {firstHotKey} - {secondHotKey && ( + {hotKeys.map((hotKey, index) => ( <> - {joinLabel} - {secondHotKey} + {hotKey} + {index < hotKeys.length - 1 && joinLabel} - )} + ))} )} diff --git a/packages/twenty-ui/src/navigation/menu-item/components/__stories__/MenuItemCommand.stories.tsx b/packages/twenty-ui/src/navigation/menu-item/components/__stories__/MenuItemCommand.stories.tsx index 3e8ccfe9c..f1d16e2ac 100644 --- a/packages/twenty-ui/src/navigation/menu-item/components/__stories__/MenuItemCommand.stories.tsx +++ b/packages/twenty-ui/src/navigation/menu-item/components/__stories__/MenuItemCommand.stories.tsx @@ -20,15 +20,13 @@ type Story = StoryObj; export const Default: Story = { args: { text: 'First option', - firstHotKey: '⌘', - secondHotKey: '1', + hotKeys: ['⌘', '1'], }, render: (props) => ( = { args: { text: 'Menu item', - firstHotKey: '⌘', - secondHotKey: '1', + hotKeys: ['⌘', '1'], }, argTypes: { className: { control: false }, @@ -85,8 +82,7 @@ export const Catalog: CatalogStory = {