diff --git a/packages/twenty-front/src/modules/app/components/SettingsRoutes.tsx b/packages/twenty-front/src/modules/app/components/SettingsRoutes.tsx
index dee3dfea9..c77884b1a 100644
--- a/packages/twenty-front/src/modules/app/components/SettingsRoutes.tsx
+++ b/packages/twenty-front/src/modules/app/components/SettingsRoutes.tsx
@@ -431,15 +431,15 @@ export const SettingsRoutes = ({
element={}
/>
}
/>
}
/>
}
/>
theme.border.color.light};
@@ -55,7 +55,7 @@ export const SettingsApiKeysTable = () => {
diff --git a/packages/twenty-front/src/modules/settings/developers/components/SettingsWebhooksTable.tsx b/packages/twenty-front/src/modules/settings/developers/components/SettingsWebhooksTable.tsx
index 11321b99d..5d191f6ee 100644
--- a/packages/twenty-front/src/modules/settings/developers/components/SettingsWebhooksTable.tsx
+++ b/packages/twenty-front/src/modules/settings/developers/components/SettingsWebhooksTable.tsx
@@ -4,10 +4,12 @@ import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSi
import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords';
import { SettingsDevelopersWebhookTableRow } from '@/settings/developers/components/SettingsDevelopersWebhookTableRow';
import { Webhook } from '@/settings/developers/types/webhook/Webhook';
+import { SettingsPath } from '@/types/SettingsPath';
import { Table } from '@/ui/layout/table/components/Table';
import { TableBody } from '@/ui/layout/table/components/TableBody';
import { TableHeader } from '@/ui/layout/table/components/TableHeader';
import { TableRow } from '@/ui/layout/table/components/TableRow';
+import { getSettingsPath } from '~/utils/navigation/getSettingsPath';
const StyledTableBody = styled(TableBody)`
border-bottom: 1px solid ${({ theme }) => theme.border.color.light};
@@ -36,7 +38,9 @@ export const SettingsWebhooksTable = () => {
))}
diff --git a/packages/twenty-front/src/modules/settings/hooks/useSettingsNavigationItems.tsx b/packages/twenty-front/src/modules/settings/hooks/useSettingsNavigationItems.tsx
index 4cfc355ed..7b3e374dc 100644
--- a/packages/twenty-front/src/modules/settings/hooks/useSettingsNavigationItems.tsx
+++ b/packages/twenty-front/src/modules/settings/hooks/useSettingsNavigationItems.tsx
@@ -8,7 +8,6 @@ import { useSettingsPermissionMap } from '@/settings/roles/hooks/useSettingsPerm
import { NavigationDrawerItemIndentationLevel } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerItem';
import { t } from '@lingui/core/macro';
import { useRecoilValue } from 'recoil';
-import { SettingPermissionType } from '~/generated/graphql';
import {
IconApi,
IconApps,
@@ -31,6 +30,7 @@ import {
IconUsers,
IconWebhook,
} from 'twenty-ui/display';
+import { SettingPermissionType } from '~/generated/graphql';
export type SettingsNavigationSection = {
label: string;
@@ -203,6 +203,7 @@ const useSettingsNavigationItems = (): SettingsNavigationSection[] => {
label: t`Logout`,
onClick: signOut,
Icon: IconDoorEnter,
+ matchSubPages: false,
},
],
},
diff --git a/packages/twenty-front/src/modules/types/SettingsPath.ts b/packages/twenty-front/src/modules/types/SettingsPath.ts
index 8ee7cebf7..9e45b83c4 100644
--- a/packages/twenty-front/src/modules/types/SettingsPath.ts
+++ b/packages/twenty-front/src/modules/types/SettingsPath.ts
@@ -16,14 +16,14 @@ export enum SettingsPath {
ServerlessFunctions = 'functions',
NewServerlessFunction = 'functions/new',
ServerlessFunctionDetail = 'functions/:serverlessFunctionId',
- WorkspaceMembersPage = 'workspace-members',
- Workspace = 'workspace',
- Domain = 'domain',
- APIs = 'api-keys',
+ WorkspaceMembersPage = 'members',
+ Workspace = 'general',
+ Domain = 'general/domain',
+ APIs = 'apis',
RestPlayground = 'playground/rest/:schema',
GraphQLPlayground = 'playground/graphql/:schema',
- DevelopersNewApiKey = 'api-keys/new',
- DevelopersApiKeyDetail = 'api-keys/:apiKeyId',
+ NewApiKey = 'apis/new',
+ ApiKeyDetail = 'apis/:apiKeyId',
Integrations = 'integrations',
IntegrationDatabase = 'integrations/:databaseKey',
IntegrationDatabaseConnection = 'integrations/:databaseKey/:connectionId',
@@ -33,8 +33,7 @@ export enum SettingsPath {
NewSSOIdentityProvider = 'security/sso/new',
NewApprovedAccessDomain = 'security/approved-access-domain/new',
Webhooks = 'webhooks',
- DevelopersNewWebhook = 'developers/webhooks/new',
- DevelopersNewWebhookDetail = 'developers/webhooks/:webhookId',
+ WebhookDetail = 'webhooks/:webhookId',
Releases = 'releases',
AdminPanel = 'admin-panel',
AdminPanelHealthStatus = 'admin-panel#health-status',
diff --git a/packages/twenty-front/src/pages/settings/SettingsWorkspaceMembers.tsx b/packages/twenty-front/src/pages/settings/SettingsWorkspaceMembers.tsx
index 55d96592d..ad671d5da 100644
--- a/packages/twenty-front/src/pages/settings/SettingsWorkspaceMembers.tsx
+++ b/packages/twenty-front/src/pages/settings/SettingsWorkspaceMembers.tsx
@@ -208,7 +208,7 @@ export const SettingsWorkspaceMembers = () => {
= {
title: 'Pages/Settings/SettingsWorkspace',
component: SettingsWorkspace,
decorators: [PageDecorator],
- args: { routePath: '/settings/workspace' },
+ args: { routePath: '/settings/general' },
parameters: {
msw: graphqlMocks,
},
diff --git a/packages/twenty-front/src/pages/settings/__stories__/SettingsWorkspaceMembers.stories.tsx b/packages/twenty-front/src/pages/settings/__stories__/SettingsWorkspaceMembers.stories.tsx
index e03563b52..8f3cb0a38 100644
--- a/packages/twenty-front/src/pages/settings/__stories__/SettingsWorkspaceMembers.stories.tsx
+++ b/packages/twenty-front/src/pages/settings/__stories__/SettingsWorkspaceMembers.stories.tsx
@@ -15,7 +15,7 @@ const meta: Meta = {
title: 'Pages/Settings/SettingsWorkspaceMembers',
component: SettingsWorkspaceMembers,
decorators: [PageDecorator],
- args: { routePath: '/settings/workspace-members' },
+ args: { routePath: '/settings/members' },
parameters: {
msw: graphqlMocks,
},
diff --git a/packages/twenty-front/src/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldSelect.tsx b/packages/twenty-front/src/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldSelect.tsx
index 884918113..0c4570975 100644
--- a/packages/twenty-front/src/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldSelect.tsx
+++ b/packages/twenty-front/src/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldSelect.tsx
@@ -69,7 +69,7 @@ export const SettingsObjectNewFieldSelect = () => {
= {
component: SettingsDevelopersApiKeyDetail,
decorators: [PageDecorator],
args: {
- routePath: '/settings/developers/api-keys/:apiKeyId',
+ routePath: '/settings/apis/:apiKeyId',
routeParams: {
':apiKeyId': 'f7c6d736-8fcd-4e9c-ab99-28f6a9031570',
},
@@ -50,14 +50,14 @@ export type Story = StoryObj;
export const Default: Story = {
play: async ({ canvasElement }) => {
const canvas = within(canvasElement);
- await canvas.findByText('sfsfdsf API Key', undefined, { timeout: 3000 });
+ await canvas.findByText('sfsfdsf', undefined, { timeout: 3000 });
},
};
export const RegenerateApiKey: Story = {
play: async ({ step }) => {
const canvas = within(document.body);
- await canvas.findByText('sfsfdsf API Key', undefined, { timeout: 3000 });
+ await canvas.findByText('sfsfdsf', undefined, { timeout: 3000 });
await userEvent.click(await canvas.findByText('Regenerate Key'));
@@ -85,7 +85,7 @@ export const RegenerateApiKey: Story = {
export const DeleteApiKey: Story = {
play: async ({ canvasElement, step }) => {
const canvas = within(canvasElement);
- await canvas.findByText('sfsfdsf API Key', undefined, { timeout: 3000 });
+ await canvas.findByText('sfsfdsf', undefined, { timeout: 3000 });
await userEvent.click(await canvas.findByText('Delete'));
diff --git a/packages/twenty-front/src/pages/settings/developers/__stories__/api-keys/SettingsDevelopersApiKeysNew.stories.tsx b/packages/twenty-front/src/pages/settings/developers/__stories__/api-keys/SettingsDevelopersApiKeysNew.stories.tsx
index d1e5ba1e7..a7a82c9d9 100644
--- a/packages/twenty-front/src/pages/settings/developers/__stories__/api-keys/SettingsDevelopersApiKeysNew.stories.tsx
+++ b/packages/twenty-front/src/pages/settings/developers/__stories__/api-keys/SettingsDevelopersApiKeysNew.stories.tsx
@@ -14,7 +14,7 @@ const meta: Meta = {
title: 'Pages/Settings/ApiKeys/SettingsDevelopersApiKeysNew',
component: SettingsDevelopersApiKeysNew,
decorators: [PageDecorator],
- args: { routePath: getSettingsPath(SettingsPath.DevelopersNewApiKey) },
+ args: { routePath: getSettingsPath(SettingsPath.NewApiKey) },
parameters: {
msw: graphqlMocks,
},
diff --git a/packages/twenty-front/src/pages/settings/developers/__stories__/webhooks/SettingsDevelopersWebhooksDetail.stories.tsx b/packages/twenty-front/src/pages/settings/developers/__stories__/webhooks/SettingsDevelopersWebhooksDetail.stories.tsx
index e59b04a84..b6fc47e77 100644
--- a/packages/twenty-front/src/pages/settings/developers/__stories__/webhooks/SettingsDevelopersWebhooksDetail.stories.tsx
+++ b/packages/twenty-front/src/pages/settings/developers/__stories__/webhooks/SettingsDevelopersWebhooksDetail.stories.tsx
@@ -14,7 +14,7 @@ const meta: Meta = {
component: SettingsDevelopersWebhooksDetail,
decorators: [PageDecorator],
args: {
- routePath: '/settings/developers/webhooks/:webhookId',
+ routePath: '/settings/webhooks/:webhookId',
routeParams: { ':webhookId': '1234' },
},
parameters: {
diff --git a/packages/twenty-front/src/pages/settings/developers/api-keys/SettingsApiKeys.tsx b/packages/twenty-front/src/pages/settings/developers/api-keys/SettingsApiKeys.tsx
index 50de32bd2..4f2aa21d5 100644
--- a/packages/twenty-front/src/pages/settings/developers/api-keys/SettingsApiKeys.tsx
+++ b/packages/twenty-front/src/pages/settings/developers/api-keys/SettingsApiKeys.tsx
@@ -66,7 +66,7 @@ export const SettingsApiKeys = () => {
title={t`Create API key`}
size="small"
variant="secondary"
- to={getSettingsPath(SettingsPath.DevelopersNewApiKey)}
+ to={getSettingsPath(SettingsPath.NewApiKey)}
/>
diff --git a/packages/twenty-front/src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx b/packages/twenty-front/src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
index f7a7ac33f..ce5fd7b58 100644
--- a/packages/twenty-front/src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
+++ b/packages/twenty-front/src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
@@ -143,7 +143,7 @@ export const SettingsDevelopersApiKeyDetail = () => {
if (isNonEmptyString(apiKey?.token)) {
setApiKeyTokenCallback(apiKey.id, apiKey.token);
- navigate(SettingsPath.DevelopersApiKeyDetail, {
+ navigate(SettingsPath.ApiKeyDetail, {
apiKeyId: apiKey.id,
});
}
@@ -173,7 +173,7 @@ export const SettingsDevelopersApiKeyDetail = () => {
children: t`APIs`,
href: getSettingsPath(SettingsPath.APIs),
},
- { children: t`${apiKeyName} API Key` },
+ { children: t`${apiKeyName}` },
]}
>
diff --git a/packages/twenty-front/src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx b/packages/twenty-front/src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
index 4c0544200..34f681f20 100644
--- a/packages/twenty-front/src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
+++ b/packages/twenty-front/src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
@@ -15,12 +15,12 @@ import { SubMenuTopBarContainer } from '@/ui/layout/page/components/SubMenuTopBa
import { useLingui } from '@lingui/react/macro';
import { useRecoilCallback } from 'recoil';
import { Key } from 'ts-key-enum';
-import { useGenerateApiKeyTokenMutation } from '~/generated/graphql';
-import { useNavigateSettings } from '~/hooks/useNavigateSettings';
-import { getSettingsPath } from '~/utils/navigation/getSettingsPath';
import { isDefined } from 'twenty-shared/utils';
import { H2Title } from 'twenty-ui/display';
import { Section } from 'twenty-ui/layout';
+import { useGenerateApiKeyTokenMutation } from '~/generated/graphql';
+import { useNavigateSettings } from '~/hooks/useNavigateSettings';
+import { getSettingsPath } from '~/utils/navigation/getSettingsPath';
export const SettingsDevelopersApiKeysNew = () => {
const { t } = useLingui();
@@ -72,7 +72,7 @@ export const SettingsDevelopersApiKeysNew = () => {
newApiKey.id,
tokenData.data.generateApiKeyToken.token,
);
- navigateSettings(SettingsPath.DevelopersApiKeyDetail, {
+ navigateSettings(SettingsPath.ApiKeyDetail, {
apiKeyId: newApiKey.id,
});
}
diff --git a/packages/twenty-front/src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhookDetail.tsx b/packages/twenty-front/src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhookDetail.tsx
index 47fe83954..aaae58f20 100644
--- a/packages/twenty-front/src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhookDetail.tsx
+++ b/packages/twenty-front/src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhookDetail.tsx
@@ -5,6 +5,7 @@ import { useParams, useSearchParams } from 'react-router-dom';
import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems';
import { SettingsPageContainer } from '@/settings/components/SettingsPageContainer';
+import { SettingsSkeletonLoader } from '@/settings/components/SettingsSkeletonLoader';
import { useWebhookUpdateForm } from '@/settings/developers/hooks/useWebhookUpdateForm';
import { SettingsPath } from '@/types/SettingsPath';
import { Select } from '@/ui/input/components/Select';
@@ -101,7 +102,7 @@ export const SettingsDevelopersWebhooksDetail = () => {
];
if (loading || !formData) {
- return <>>;
+ return ;
}
const confirmationText = t`yes`;
@@ -115,7 +116,11 @@ export const SettingsDevelopersWebhooksDetail = () => {
children: t`Workspace`,
href: getSettingsPath(SettingsPath.Workspace),
},
- { children: t`Webhook` },
+ {
+ children: t`Webhooks`,
+ href: getSettingsPath(SettingsPath.Webhooks),
+ },
+ { children: title },
]}
>
diff --git a/packages/twenty-front/src/pages/settings/developers/webhooks/components/SettingsWebhooks.tsx b/packages/twenty-front/src/pages/settings/developers/webhooks/components/SettingsWebhooks.tsx
index 2952cbbf6..4262e0307 100644
--- a/packages/twenty-front/src/pages/settings/developers/webhooks/components/SettingsWebhooks.tsx
+++ b/packages/twenty-front/src/pages/settings/developers/webhooks/components/SettingsWebhooks.tsx
@@ -5,12 +5,12 @@ import { SubMenuTopBarContainer } from '@/ui/layout/page/components/SubMenuTopBa
import { useIsMobile } from '@/ui/utilities/responsive/hooks/useIsMobile';
import styled from '@emotion/styled';
import { Trans, useLingui } from '@lingui/react/macro';
+import { H2Title, IconPlus } from 'twenty-ui/display';
+import { Button } from 'twenty-ui/input';
+import { Section } from 'twenty-ui/layout';
+import { MOBILE_VIEWPORT } from 'twenty-ui/theme';
import { v4 } from 'uuid';
import { getSettingsPath } from '~/utils/navigation/getSettingsPath';
-import { Button } from 'twenty-ui/input';
-import { H2Title, IconPlus } from 'twenty-ui/display';
-import { MOBILE_VIEWPORT } from 'twenty-ui/theme';
-import { Section } from 'twenty-ui/layout';
const StyledButtonContainer = styled.div`
display: flex;
@@ -58,7 +58,7 @@ export const SettingsWebhooks = () => {
size="small"
variant="secondary"
to={getSettingsPath(
- SettingsPath.DevelopersNewWebhookDetail,
+ SettingsPath.WebhookDetail,
{
webhookId: v4(),
},
diff --git a/packages/twenty-front/src/utils/__tests__/title-utils.test.ts b/packages/twenty-front/src/utils/__tests__/title-utils.test.ts
index c5d9168ed..82dc34c56 100644
--- a/packages/twenty-front/src/utils/__tests__/title-utils.test.ts
+++ b/packages/twenty-front/src/utils/__tests__/title-utils.test.ts
@@ -36,10 +36,10 @@ describe('title-utils', () => {
expect(getPageTitleFromPath('/settings/accounts/emails/:accountUuid')).toBe(
SettingsPageTitles.Accounts,
);
- expect(getPageTitleFromPath('/settings/workspace-members')).toBe(
+ expect(getPageTitleFromPath('/settings/members')).toBe(
SettingsPageTitles.Members,
);
- expect(getPageTitleFromPath('/settings/workspace')).toBe(
+ expect(getPageTitleFromPath('/settings/general')).toBe(
SettingsPageTitles.General,
);
expect(getPageTitleFromPath('/')).toBe('Twenty');
diff --git a/packages/twenty-server/src/engine/api/rest/core/query-builder/core-query-builder.factory.ts b/packages/twenty-server/src/engine/api/rest/core/query-builder/core-query-builder.factory.ts
index 882b2518c..2103627f9 100644
--- a/packages/twenty-server/src/engine/api/rest/core/query-builder/core-query-builder.factory.ts
+++ b/packages/twenty-server/src/engine/api/rest/core/query-builder/core-query-builder.factory.ts
@@ -3,6 +3,7 @@ import { BadRequestException, Injectable } from '@nestjs/common';
import { Request } from 'express';
import { CreateManyQueryFactory } from 'src/engine/api/rest/core/query-builder/factories/create-many-query.factory';
+import { CreateVariablesFactory } from 'src/engine/api/rest/core/query-builder/factories/create-variables.factory';
import { FindDuplicatesQueryFactory } from 'src/engine/api/rest/core/query-builder/factories/find-duplicates-query.factory';
import { FindDuplicatesVariablesFactory } from 'src/engine/api/rest/core/query-builder/factories/find-duplicates-variables.factory';
import { computeDepth } from 'src/engine/api/rest/core/query-builder/utils/compute-depth.utils';
@@ -17,7 +18,6 @@ import { getObjectMetadataMapItemByNamePlural } from 'src/engine/metadata-module
import { getObjectMetadataMapItemByNameSingular } from 'src/engine/metadata-modules/utils/get-object-metadata-map-item-by-name-singular.util';
import { WorkspaceMetadataCacheService } from 'src/engine/metadata-modules/workspace-metadata-cache/services/workspace-metadata-cache.service';
import { WorkspaceCacheStorageService } from 'src/engine/workspace-cache-storage/workspace-cache-storage.service';
-import { CreateVariablesFactory } from 'src/engine/api/rest/core/query-builder/factories/create-variables.factory';
@Injectable()
export class CoreQueryBuilderFactory {
@@ -63,7 +63,7 @@ export class CoreQueryBuilderFactory {
`No object was found for the workspace associated with this API key. You may generate a new one here ${this.domainManagerService
.buildWorkspaceURL({
workspace,
- pathname: '/settings/developers',
+ pathname: '/settings/apis',
})
.toString()}`,
);
diff --git a/packages/twenty-website/src/app/_components/playground/playground.tsx b/packages/twenty-website/src/app/_components/playground/playground.tsx
index 836184282..5ce774490 100644
--- a/packages/twenty-website/src/app/_components/playground/playground.tsx
+++ b/packages/twenty-website/src/app/_components/playground/playground.tsx
@@ -61,11 +61,8 @@ const Playground = ({
A token is required as APIs are dynamically generated for each
workspace based on their unique metadata.
Generate your token
under{' '}
-
- Settings > Developers
+
+ Settings > APIs
{isLoading && (
diff --git a/packages/twenty-zapier/src/authentication.ts b/packages/twenty-zapier/src/authentication.ts
index f2e694a79..93a16cfd6 100644
--- a/packages/twenty-zapier/src/authentication.ts
+++ b/packages/twenty-zapier/src/authentication.ts
@@ -21,7 +21,7 @@ export default {
label: 'Api Key',
type: 'string',
helpText:
- 'Create an API key in [your twenty workspace](https://app.twenty.com/settings/developers)',
+ 'Create an API key in [your twenty workspace](https://app.twenty.com/settings/apis)',
},
{
computed: false,