diff --git a/packages/twenty-front/src/generated-metadata/graphql.ts b/packages/twenty-front/src/generated-metadata/graphql.ts index 2b581f9c53..944e2da7cc 100644 --- a/packages/twenty-front/src/generated-metadata/graphql.ts +++ b/packages/twenty-front/src/generated-metadata/graphql.ts @@ -1285,7 +1285,6 @@ export enum FeatureFlagKey { IS_GLOBAL_WORKSPACE_DATASOURCE_ENABLED = 'IS_GLOBAL_WORKSPACE_DATASOURCE_ENABLED', IS_IMAP_SMTP_CALDAV_ENABLED = 'IS_IMAP_SMTP_CALDAV_ENABLED', IS_JSON_FILTER_ENABLED = 'IS_JSON_FILTER_ENABLED', - IS_MESSAGE_FOLDER_CONTROL_ENABLED = 'IS_MESSAGE_FOLDER_CONTROL_ENABLED', IS_NULL_EQUIVALENCE_ENABLED = 'IS_NULL_EQUIVALENCE_ENABLED', IS_PAGE_LAYOUT_ENABLED = 'IS_PAGE_LAYOUT_ENABLED', IS_POSTGRESQL_INTEGRATION_ENABLED = 'IS_POSTGRESQL_INTEGRATION_ENABLED', diff --git a/packages/twenty-front/src/generated/graphql.ts b/packages/twenty-front/src/generated/graphql.ts index faeed3cd23..3fe264cc82 100644 --- a/packages/twenty-front/src/generated/graphql.ts +++ b/packages/twenty-front/src/generated/graphql.ts @@ -1268,7 +1268,6 @@ export enum FeatureFlagKey { IS_GLOBAL_WORKSPACE_DATASOURCE_ENABLED = 'IS_GLOBAL_WORKSPACE_DATASOURCE_ENABLED', IS_IMAP_SMTP_CALDAV_ENABLED = 'IS_IMAP_SMTP_CALDAV_ENABLED', IS_JSON_FILTER_ENABLED = 'IS_JSON_FILTER_ENABLED', - IS_MESSAGE_FOLDER_CONTROL_ENABLED = 'IS_MESSAGE_FOLDER_CONTROL_ENABLED', IS_NULL_EQUIVALENCE_ENABLED = 'IS_NULL_EQUIVALENCE_ENABLED', IS_PAGE_LAYOUT_ENABLED = 'IS_PAGE_LAYOUT_ENABLED', IS_POSTGRESQL_INTEGRATION_ENABLED = 'IS_POSTGRESQL_INTEGRATION_ENABLED', diff --git a/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsMessageChannelDetails.tsx b/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsMessageChannelDetails.tsx index 4cb0caa20c..e335bcf87e 100644 --- a/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsMessageChannelDetails.tsx +++ b/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsMessageChannelDetails.tsx @@ -11,14 +11,10 @@ import { SettingsAccountsMessageAutoCreationCard } from '@/settings/accounts/com import { SettingsAccountsMessageFolderCard } from '@/settings/accounts/components/SettingsAccountsMessageFolderCard'; import { SettingsAccountsMessageVisibilityCard } from '@/settings/accounts/components/SettingsAccountsMessageVisibilityCard'; import { SettingsOptionCardContentToggle } from '@/settings/components/SettingsOptions/SettingsOptionCardContentToggle'; -import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled'; import { t } from '@lingui/core/macro'; import { H2Title, IconBriefcase, IconUsers } from 'twenty-ui/display'; import { Card, Section } from 'twenty-ui/layout'; -import { - FeatureFlagKey, - type MessageChannelVisibility, -} from '~/generated-metadata/graphql'; +import { type MessageChannelVisibility } from '~/generated-metadata/graphql'; type SettingsAccountsMessageChannelDetailsProps = { messageChannel: Pick< @@ -47,10 +43,6 @@ export const SettingsAccountsMessageChannelDetails = ({ objectNameSingular: CoreObjectNameSingular.MessageChannel, }); - const isFolderControlEnabled = useIsFeatureEnabled( - FeatureFlagKey.IS_MESSAGE_FOLDER_CONTROL_ENABLED, - ); - const handleVisibilityChange = (value: MessageChannelVisibility) => { updateOneRecord({ idToUpdate: messageChannel.id, @@ -100,35 +92,31 @@ export const SettingsAccountsMessageChannelDetails = ({ return ( - {isFolderControlEnabled && messageChannel.messageFolders && ( - <> -
- - -
-
- - - handleIsGroupEmailExcludedToggle( - !messageChannel.excludeGroupEmails, - ) - } - /> - -
- - )} +
+ + +
+
+ + + handleIsGroupEmailExcludedToggle( + !messageChannel.excludeGroupEmails, + ) + } + /> + +
{ const { enqueueSuccessSnackBar, enqueueErrorSnackBar } = useSnackBar(); const [startChannelSyncMutation, { loading: isSubmitting }] = useStartChannelSyncMutation(); + const setSelectedMessageChannel = useSetRecoilState( + settingsAccountsSelectedMessageChannelState, + ); const [currentStep, setCurrentStep] = useState( SettingsAccountsConfigurationStep.Email, ); + const { recordGqlFields } = useGenerateDepthRecordGqlFieldsFromObject({ + objectNameSingular: CoreObjectNameSingular.MessageChannel, + depth: 1, + shouldOnlyLoadRelationIdentifiers: false, + }); + const { records: messageChannels } = useFindManyRecords({ objectNameSingular: CoreObjectNameSingular.MessageChannel, filter: { @@ -40,6 +52,12 @@ export const SettingsAccountsConfiguration = () => { eq: connectedAccountId, }, }, + recordGqlFields, + onCompleted: (data) => { + if (isDefined(data[0])) { + setSelectedMessageChannel(data[0]); + } + }, skip: !connectedAccountId, }); diff --git a/packages/twenty-server/src/engine/core-modules/feature-flag/constants/public-feature-flag.const.ts b/packages/twenty-server/src/engine/core-modules/feature-flag/constants/public-feature-flag.const.ts index 6fde505ee9..aa79c6c289 100644 --- a/packages/twenty-server/src/engine/core-modules/feature-flag/constants/public-feature-flag.const.ts +++ b/packages/twenty-server/src/engine/core-modules/feature-flag/constants/public-feature-flag.const.ts @@ -22,15 +22,6 @@ export const PUBLIC_FEATURE_FLAGS: PublicFeatureFlag[] = [ 'https://twenty.com/images/lab/is-imap-smtp-caldav-enabled.png', }, }, - { - key: FeatureFlagKey.IS_MESSAGE_FOLDER_CONTROL_ENABLED, - metadata: { - label: 'Message Folder Control', - description: 'Control which folders are synced', - imagePath: - 'https://twenty.com/images/lab/is-message-folder-control-enabled.png', - }, - }, { key: FeatureFlagKey.IS_PAGE_LAYOUT_ENABLED, metadata: { diff --git a/packages/twenty-server/src/engine/core-modules/feature-flag/enums/feature-flag-key.enum.ts b/packages/twenty-server/src/engine/core-modules/feature-flag/enums/feature-flag-key.enum.ts index f2f77696d0..6e3ad3c8df 100644 --- a/packages/twenty-server/src/engine/core-modules/feature-flag/enums/feature-flag-key.enum.ts +++ b/packages/twenty-server/src/engine/core-modules/feature-flag/enums/feature-flag-key.enum.ts @@ -10,7 +10,6 @@ export enum FeatureFlagKey { IS_WORKSPACE_MIGRATION_V2_ENABLED = 'IS_WORKSPACE_MIGRATION_V2_ENABLED', IS_PAGE_LAYOUT_ENABLED = 'IS_PAGE_LAYOUT_ENABLED', IS_RECORD_PAGE_LAYOUT_ENABLED = 'IS_RECORD_PAGE_LAYOUT_ENABLED', - IS_MESSAGE_FOLDER_CONTROL_ENABLED = 'IS_MESSAGE_FOLDER_CONTROL_ENABLED', IS_PUBLIC_DOMAIN_ENABLED = 'IS_PUBLIC_DOMAIN_ENABLED', IS_EMAILING_DOMAIN_ENABLED = 'IS_EMAILING_DOMAIN_ENABLED', IS_WORKFLOW_RUN_STOPPAGE_ENABLED = 'IS_WORKFLOW_RUN_STOPPAGE_ENABLED', diff --git a/packages/twenty-server/src/engine/twenty-orm/entity-manager/workspace-entity-manager.spec.ts b/packages/twenty-server/src/engine/twenty-orm/entity-manager/workspace-entity-manager.spec.ts index 671b9c7372..5e7d4b256d 100644 --- a/packages/twenty-server/src/engine/twenty-orm/entity-manager/workspace-entity-manager.spec.ts +++ b/packages/twenty-server/src/engine/twenty-orm/entity-manager/workspace-entity-manager.spec.ts @@ -202,7 +202,6 @@ describe('WorkspaceEntityManager', () => { IS_WORKSPACE_MIGRATION_V2_ENABLED: false, IS_PAGE_LAYOUT_ENABLED: false, IS_RECORD_PAGE_LAYOUT_ENABLED: false, - IS_MESSAGE_FOLDER_CONTROL_ENABLED: false, IS_PUBLIC_DOMAIN_ENABLED: false, IS_EMAILING_DOMAIN_ENABLED: false, IS_WORKFLOW_RUN_STOPPAGE_ENABLED: false, @@ -230,7 +229,6 @@ describe('WorkspaceEntityManager', () => { IS_WORKSPACE_MIGRATION_V2_ENABLED: false, IS_PAGE_LAYOUT_ENABLED: false, IS_RECORD_PAGE_LAYOUT_ENABLED: false, - IS_MESSAGE_FOLDER_CONTROL_ENABLED: false, IS_PUBLIC_DOMAIN_ENABLED: false, IS_EMAILING_DOMAIN_ENABLED: false, IS_WORKFLOW_RUN_STOPPAGE_ENABLED: false, diff --git a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/utils/seed-feature-flags.util.ts b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/utils/seed-feature-flags.util.ts index 75eefe3f44..ee34a837aa 100644 --- a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/utils/seed-feature-flags.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/utils/seed-feature-flags.util.ts @@ -92,11 +92,6 @@ export const seedFeatureFlags = async ({ workspaceId: workspaceId, value: true, }, - { - key: FeatureFlagKey.IS_MESSAGE_FOLDER_CONTROL_ENABLED, - workspaceId: workspaceId, - value: true, - }, { key: FeatureFlagKey.IS_NULL_EQUIVALENCE_ENABLED, workspaceId: workspaceId, diff --git a/packages/twenty-server/src/modules/messaging/message-folder-manager/services/sync-message-folders.service.ts b/packages/twenty-server/src/modules/messaging/message-folder-manager/services/sync-message-folders.service.ts index 2a879824db..1167808d93 100644 --- a/packages/twenty-server/src/modules/messaging/message-folder-manager/services/sync-message-folders.service.ts +++ b/packages/twenty-server/src/modules/messaging/message-folder-manager/services/sync-message-folders.service.ts @@ -1,5 +1,7 @@ import { Injectable } from '@nestjs/common'; +import { isNonEmptyString } from '@sniptt/guards'; +import deepEqual from 'deep-equal'; import { ConnectedAccountProvider } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; import { v4 } from 'uuid'; @@ -120,15 +122,27 @@ export class SyncMessageFoldersService { ); if (existingFolder) { - updates.push([ - existingFolder.id, - { - name: folder.name, - externalId: folder.externalId, - isSentFolder: folder.isSentFolder, - parentFolderId: folder.parentFolderId, - }, - ]); + const folderSyncData = { + name: folder.name, + externalId: folder.externalId, + isSentFolder: folder.isSentFolder, + parentFolderId: isNonEmptyString(folder.parentFolderId) + ? folder.parentFolderId + : null, + }; + + const existingFolderData = { + name: existingFolder.name, + externalId: existingFolder.externalId, + isSentFolder: existingFolder.isSentFolder, + parentFolderId: isNonEmptyString(existingFolder.parentFolderId) + ? existingFolder.parentFolderId + : null, + }; + + if (!deepEqual(folderSyncData, existingFolderData)) { + updates.push([existingFolder.id, folderSyncData]); + } continue; }