diff --git a/packages/twenty-front/src/modules/app/components/SettingsRoutes.tsx b/packages/twenty-front/src/modules/app/components/SettingsRoutes.tsx
index 98c0607f4a..cf7cc1b22d 100644
--- a/packages/twenty-front/src/modules/app/components/SettingsRoutes.tsx
+++ b/packages/twenty-front/src/modules/app/components/SettingsRoutes.tsx
@@ -128,6 +128,12 @@ const SettingsWorkspace = lazy(() =>
})),
);
+const SettingsWorkspaceEmail = lazy(() =>
+ import('~/pages/settings/SettingsWorkspaceEmail').then((module) => ({
+ default: module.SettingsWorkspaceEmail,
+ })),
+);
+
const SettingsWorkspaceEmailGroupChannelDetail = lazy(() =>
import('~/pages/settings/workspace/SettingsWorkspaceEmailGroupChannelDetail').then(
(module) => ({
@@ -636,6 +642,10 @@ export const SettingsRoutes = ({ isAdminPageEnabled }: SettingsRoutesProps) => (
}
>
} />
+ }
+ />
}
diff --git a/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsNewEmailGroupChannel.tsx b/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsNewEmailGroupChannel.tsx
index 4159a61b30..fa07c2abc0 100644
--- a/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsNewEmailGroupChannel.tsx
+++ b/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsNewEmailGroupChannel.tsx
@@ -53,8 +53,8 @@ export const SettingsAccountsNewEmailGroupChannel = () => {
href: getSettingsPath(SettingsPath.Workspace),
},
{
- children: t`General`,
- href: getSettingsPath(SettingsPath.Workspace),
+ children: t`Email`,
+ href: getSettingsPath(SettingsPath.WorkspaceEmail),
},
{ children: t`New Email Handle` },
]}
@@ -63,7 +63,7 @@ export const SettingsAccountsNewEmailGroupChannel = () => {
isSaveDisabled={!canSave}
isCancelDisabled={loading}
isLoading={loading}
- onCancel={() => navigate(SettingsPath.Workspace)}
+ onCancel={() => navigate(SettingsPath.WorkspaceEmail)}
onSave={handleSave}
/>
}
diff --git a/packages/twenty-front/src/modules/settings/hooks/useSettingsNavigationItems.tsx b/packages/twenty-front/src/modules/settings/hooks/useSettingsNavigationItems.tsx
index 4a23f88b9f..6e8c9f4968 100644
--- a/packages/twenty-front/src/modules/settings/hooks/useSettingsNavigationItems.tsx
+++ b/packages/twenty-front/src/modules/settings/hooks/useSettingsNavigationItems.tsx
@@ -1,4 +1,4 @@
-import { SettingsPath } from 'twenty-shared/types';
+import { FeatureFlagKey, SettingsPath } from 'twenty-shared/types';
import { useAuth } from '@/auth/hooks/useAuth';
import { currentUserState } from '@/auth/states/currentUserState';
@@ -12,6 +12,7 @@ import {
type NavigationDrawerItemModifier,
} from '@/ui/navigation/navigation-drawer/components/NavigationDrawerItem';
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
+import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled';
import { t } from '@lingui/core/macro';
import { isNonEmptyString } from '@sniptt/guards';
import {
@@ -73,6 +74,9 @@ const useSettingsNavigationItems = (): SettingsNavigationSection[] => {
isNonEmptyString(supportChat.supportFrontChatId);
const permissionMap = usePermissionFlagMap();
+ const isEmailGroupFeatureEnabled = useIsFeatureEnabled(
+ FeatureFlagKey.IS_EMAIL_GROUP_ENABLED,
+ );
return [
{
label: t`User`,
@@ -120,6 +124,14 @@ const useSettingsNavigationItems = (): SettingsNavigationSection[] => {
Icon: IconSettings,
isHidden: !permissionMap[PermissionFlagType.WORKSPACE],
},
+ {
+ label: t`Email`,
+ path: SettingsPath.WorkspaceEmail,
+ Icon: IconMail,
+ isHidden:
+ !isEmailGroupFeatureEnabled ||
+ !permissionMap[PermissionFlagType.WORKSPACE],
+ },
{
label: t`Data model`,
path: SettingsPath.Objects,
diff --git a/packages/twenty-front/src/pages/settings/SettingsWorkspace.tsx b/packages/twenty-front/src/pages/settings/SettingsWorkspace.tsx
index 89d393519e..81f8680426 100644
--- a/packages/twenty-front/src/pages/settings/SettingsWorkspace.tsx
+++ b/packages/twenty-front/src/pages/settings/SettingsWorkspace.tsx
@@ -1,18 +1,14 @@
import { useLingui } from '@lingui/react/macro';
-import { isEmailGroupEnabledState } from '@/client-config/states/isEmailGroupEnabledState';
import { SettingsPageContainer } from '@/settings/components/SettingsPageContainer';
import { SettingsWorkspaceDomainCard } from '@/settings/domains/components/SettingsWorkspaceDomainCard';
import { DeleteWorkspace } from '@/settings/profile/components/DeleteWorkspace';
-import { SettingsWorkspaceEmailGroupSection } from '@/settings/workspace/components/SettingsWorkspaceEmailGroupSection';
-import { SettingsWorkspaceEmailingDomainsSection } from '@/settings/workspace/components/SettingsWorkspaceEmailingDomainsSection';
import { NameField } from '@/settings/workspace/components/NameField';
import { WorkspaceLogoUploader } from '@/settings/workspace/components/WorkspaceLogoUploader';
import { SubMenuTopBarContainer } from '@/ui/layout/page/components/SubMenuTopBarContainer';
import { isMultiWorkspaceEnabledState } from '@/client-config/states/isMultiWorkspaceEnabledState';
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
-import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled';
-import { FeatureFlagKey, SettingsPath } from 'twenty-shared/types';
+import { SettingsPath } from 'twenty-shared/types';
import { getSettingsPath } from 'twenty-shared/utils';
import { H2Title } from 'twenty-ui/display';
import { Section } from 'twenty-ui/layout';
@@ -24,14 +20,6 @@ export const SettingsWorkspace = () => {
isMultiWorkspaceEnabledState,
);
- const isEmailGroupEnabled = useAtomStateValue(isEmailGroupEnabledState);
- const isEmailGroupFeatureEnabled = useIsFeatureEnabled(
- FeatureFlagKey.IS_EMAIL_GROUP_ENABLED,
- );
- const showEmailGroupSection =
- isEmailGroupEnabled && isEmailGroupFeatureEnabled;
- const showEmailingDomainsSection = isEmailGroupFeatureEnabled;
-
return (
{
)}
- {showEmailGroupSection && }
- {showEmailingDomainsSection && (
-
- )}
diff --git a/packages/twenty-front/src/pages/settings/SettingsWorkspaceEmail.tsx b/packages/twenty-front/src/pages/settings/SettingsWorkspaceEmail.tsx
new file mode 100644
index 0000000000..d2b5d9bccc
--- /dev/null
+++ b/packages/twenty-front/src/pages/settings/SettingsWorkspaceEmail.tsx
@@ -0,0 +1,44 @@
+import { useLingui } from '@lingui/react/macro';
+
+import { isEmailGroupEnabledState } from '@/client-config/states/isEmailGroupEnabledState';
+import { SettingsPageContainer } from '@/settings/components/SettingsPageContainer';
+import { SettingsWorkspaceEmailGroupSection } from '@/settings/workspace/components/SettingsWorkspaceEmailGroupSection';
+import { SettingsWorkspaceEmailingDomainsSection } from '@/settings/workspace/components/SettingsWorkspaceEmailingDomainsSection';
+import { SubMenuTopBarContainer } from '@/ui/layout/page/components/SubMenuTopBarContainer';
+import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
+import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled';
+import { FeatureFlagKey, SettingsPath } from 'twenty-shared/types';
+import { getSettingsPath } from 'twenty-shared/utils';
+
+export const SettingsWorkspaceEmail = () => {
+ const { t } = useLingui();
+
+ const isEmailGroupEnabled = useAtomStateValue(isEmailGroupEnabledState);
+ const isEmailGroupFeatureEnabled = useIsFeatureEnabled(
+ FeatureFlagKey.IS_EMAIL_GROUP_ENABLED,
+ );
+
+ if (!isEmailGroupFeatureEnabled) {
+ return null;
+ }
+
+ const showEmailGroupSection = isEmailGroupEnabled;
+
+ return (
+
+
+ {showEmailGroupSection && }
+
+
+
+ );
+};
diff --git a/packages/twenty-front/src/pages/settings/emailing-domains/SettingsEmailingDomainDetail.tsx b/packages/twenty-front/src/pages/settings/emailing-domains/SettingsEmailingDomainDetail.tsx
index ca2cce2841..06beff5185 100644
--- a/packages/twenty-front/src/pages/settings/emailing-domains/SettingsEmailingDomainDetail.tsx
+++ b/packages/twenty-front/src/pages/settings/emailing-domains/SettingsEmailingDomainDetail.tsx
@@ -64,7 +64,7 @@ export const SettingsEmailingDomainDetail = () => {
enqueueSuccessSnackBar({
message: t`Emailing domain deleted successfully`,
});
- navigateSettings(SettingsPath.Workspace);
+ navigateSettings(SettingsPath.WorkspaceEmail);
} catch (deleteError) {
enqueueErrorSnackBar({
...(CombinedGraphQLErrors.is(deleteError)
@@ -83,8 +83,8 @@ export const SettingsEmailingDomainDetail = () => {
href: getSettingsPath(SettingsPath.Workspace),
},
{
- children: Emailing Domains,
- href: getSettingsPath(SettingsPath.Workspace),
+ children: Email,
+ href: getSettingsPath(SettingsPath.WorkspaceEmail),
},
{ children: emailingDomain.domain },
]}
diff --git a/packages/twenty-front/src/pages/settings/emailing-domains/SettingsNewEmailingDomain.tsx b/packages/twenty-front/src/pages/settings/emailing-domains/SettingsNewEmailingDomain.tsx
index fb9f892be8..b29d8e1c08 100644
--- a/packages/twenty-front/src/pages/settings/emailing-domains/SettingsNewEmailingDomain.tsx
+++ b/packages/twenty-front/src/pages/settings/emailing-domains/SettingsNewEmailingDomain.tsx
@@ -114,7 +114,7 @@ export const SettingsNewEmailingDomain = () => {
title={t`New Emailing Domain`}
actionButton={
navigate(SettingsPath.Workspace)}
+ onCancel={() => navigate(SettingsPath.WorkspaceEmail)}
onSave={handleSave}
isSaveDisabled={!canSave}
/>
@@ -125,8 +125,8 @@ export const SettingsNewEmailingDomain = () => {
href: getSettingsPath(SettingsPath.Workspace),
},
{
- children: Emailing Domains,
- href: getSettingsPath(SettingsPath.Workspace),
+ children: Email,
+ href: getSettingsPath(SettingsPath.WorkspaceEmail),
},
{ children: New Emailing Domain },
]}
diff --git a/packages/twenty-front/src/pages/settings/workspace/SettingsWorkspaceEmailGroupChannelDetail.tsx b/packages/twenty-front/src/pages/settings/workspace/SettingsWorkspaceEmailGroupChannelDetail.tsx
index 16615dbb4c..2e261fa94e 100644
--- a/packages/twenty-front/src/pages/settings/workspace/SettingsWorkspaceEmailGroupChannelDetail.tsx
+++ b/packages/twenty-front/src/pages/settings/workspace/SettingsWorkspaceEmailGroupChannelDetail.tsx
@@ -76,7 +76,7 @@ export const SettingsWorkspaceEmailGroupChannelDetail = () => {
const handleDelete = async () => {
try {
await deleteEmailGroupChannel(channel.id);
- navigateSettings(SettingsPath.Workspace);
+ navigateSettings(SettingsPath.WorkspaceEmail);
} catch {
enqueueErrorSnackBar({
message: t`Failed to delete email handle.`,
@@ -93,8 +93,8 @@ export const SettingsWorkspaceEmailGroupChannelDetail = () => {
href: getSettingsPath(SettingsPath.Workspace),
},
{
- children: t`General`,
- href: getSettingsPath(SettingsPath.Workspace),
+ children: t`Email`,
+ href: getSettingsPath(SettingsPath.WorkspaceEmail),
},
{ children: sourceHandle },
]}
diff --git a/packages/twenty-shared/src/types/SettingsPath.ts b/packages/twenty-shared/src/types/SettingsPath.ts
index c124a9f622..cd0742d999 100644
--- a/packages/twenty-shared/src/types/SettingsPath.ts
+++ b/packages/twenty-shared/src/types/SettingsPath.ts
@@ -26,12 +26,13 @@ export enum SettingsPath {
Workspace = 'general',
Subdomain = 'general/subdomain',
CustomDomain = 'general/custom-domain',
- EmailGroupChannelDetail = 'general/email-group/:messageChannelId',
- NewEmailGroupChannel = 'general/new-email-group',
+ WorkspaceEmail = 'email',
+ EmailGroupChannelDetail = 'email/email-group/:messageChannelId',
+ NewEmailGroupChannel = 'email/new-email-group',
PublicDomain = 'applications/public-domain',
NewApprovedAccessDomain = 'members/approved-access-domain/new',
- NewEmailingDomain = 'general/emailing-domain/new',
- EmailingDomainDetail = 'general/emailing-domain/:domainId',
+ NewEmailingDomain = 'email/emailing-domain/new',
+ EmailingDomainDetail = 'email/emailing-domain/:domainId',
Updates = 'updates',
AI = 'ai',
AiUsageUserDetail = 'ai/usage/user/:userWorkspaceId',