From c07eeba178f8b2e3110899a805cb4d11eb549f39 Mon Sep 17 00:00:00 2001 From: ephraimduncan Date: Tue, 7 Jul 2026 10:28:19 +0000 Subject: [PATCH] refactor: unify settings layout, navigation and copy Consolidate the personal, team and organisation settings surfaces behind a single system so every page shares one width, one navigation implementation and one copy standard. - add shared SettingsNav (aria-current active state, exact matching for the team General route, non-interactive section labels) and delete the four divergent nav implementations it replaces - constrain the settings content column to max-w-3xl in all three layouts and strip the per-page max-w-2xl/max-w-xl wrappers so forms and tables render identically - rewrite SettingsHeader subtitles to remove "Here you can" / "On this page" filler, normalize title casing and punctuation, and translate the hardcoded team general header - align the billing header with SettingsHeader typography and drop redundant fieldset width constraints in the document/email preference forms - fix the wrong team group success toast, team email meta title, misnamed page exports, untranslated Manage label and Create Team casing mismatch - update manage-organisation e2e assertions for the corrected copy --- .../components/dialogs/team-create-dialog.tsx | 4 +- .../dialogs/team-group-create-dialog.tsx | 8 +- .../dialogs/webhook-create-dialog.tsx | 2 +- .../forms/document-preferences-form.tsx | 2 +- .../forms/email-preferences-form.tsx | 2 +- .../general/settings-nav-desktop.tsx | 137 ----------------- .../general/settings-nav-mobile.tsx | 144 ------------------ .../app/components/general/settings-nav.tsx | 62 ++++++++ .../organisation-email-domains-table.tsx | 4 +- .../o.$orgUrl.settings._layout.tsx | 39 +---- .../o.$orgUrl.settings.billing.tsx | 4 +- .../o.$orgUrl.settings.branding.tsx | 8 +- .../o.$orgUrl.settings.document.tsx | 6 +- .../o.$orgUrl.settings.email-domains.$id.tsx | 2 +- ....$orgUrl.settings.email-domains._index.tsx | 2 +- .../o.$orgUrl.settings.email.tsx | 19 ++- .../o.$orgUrl.settings.general.tsx | 4 +- .../o.$orgUrl.settings.groups.$id.tsx | 2 +- .../o.$orgUrl.settings.groups._index.tsx | 2 +- .../o.$orgUrl.settings.members.tsx | 5 +- .../o.$orgUrl.settings.sso.tsx | 2 +- .../_authenticated+/settings+/_layout.tsx | 100 +++++++++++- .../settings+/organisations.tsx | 5 +- .../_authenticated+/settings+/profile.tsx | 10 +- .../settings+/security._index.tsx | 5 +- .../settings+/security.activity.tsx | 2 +- .../settings+/security.sessions.tsx | 2 +- .../t.$teamUrl+/settings._index.tsx | 8 +- .../t.$teamUrl+/settings._layout.tsx | 35 +---- .../t.$teamUrl+/settings.branding.tsx | 4 +- .../t.$teamUrl+/settings.document.tsx | 7 +- .../t.$teamUrl+/settings.email.tsx | 8 +- .../t.$teamUrl+/settings.public-profile.tsx | 9 +- .../t.$teamUrl+/settings.tokens.tsx | 6 +- .../t.$teamUrl+/settings.webhooks._index.tsx | 5 +- .../organisations/manage-organisation.spec.ts | 8 +- 36 files changed, 252 insertions(+), 422 deletions(-) delete mode 100644 apps/remix/app/components/general/settings-nav-desktop.tsx delete mode 100644 apps/remix/app/components/general/settings-nav-mobile.tsx create mode 100644 apps/remix/app/components/general/settings-nav.tsx diff --git a/apps/remix/app/components/dialogs/team-create-dialog.tsx b/apps/remix/app/components/dialogs/team-create-dialog.tsx index 4b0ba8ede..bbeffa60a 100644 --- a/apps/remix/app/components/dialogs/team-create-dialog.tsx +++ b/apps/remix/app/components/dialogs/team-create-dialog.tsx @@ -155,7 +155,7 @@ export const TeamCreateDialog = ({ trigger, onCreated, ...props }: TeamCreateDia e.stopPropagation()} asChild={true}> {trigger ?? ( )} @@ -163,7 +163,7 @@ export const TeamCreateDialog = ({ trigger, onCreated, ...props }: TeamCreateDia - Create team + Create Team diff --git a/apps/remix/app/components/dialogs/team-group-create-dialog.tsx b/apps/remix/app/components/dialogs/team-group-create-dialog.tsx index 5c1744807..8561f4c99 100644 --- a/apps/remix/app/components/dialogs/team-group-create-dialog.tsx +++ b/apps/remix/app/components/dialogs/team-group-create-dialog.tsx @@ -79,7 +79,7 @@ export const TeamGroupCreateDialog = ({ ...props }: TeamGroupCreateDialogProps) toast({ title: t`Success`, - description: t`Team members have been added.`, + description: t`Team groups have been added.`, duration: 5000, }); @@ -87,7 +87,7 @@ export const TeamGroupCreateDialog = ({ ...props }: TeamGroupCreateDialogProps) } catch { toast({ title: t`An unknown error occurred`, - description: t`We encountered an unknown error while attempting to add team members. Please try again later.`, + description: t`We encountered an unknown error while attempting to add the groups. Please try again later.`, variant: 'destructive', }); } @@ -134,7 +134,7 @@ export const TeamGroupCreateDialog = ({ ...props }: TeamGroupCreateDialogProps) - Configure the team roles for each group + Configure the team roles for each group. )) @@ -260,7 +260,7 @@ export const TeamGroupCreateDialog = ({ ...props }: TeamGroupCreateDialogProps) diff --git a/apps/remix/app/components/dialogs/webhook-create-dialog.tsx b/apps/remix/app/components/dialogs/webhook-create-dialog.tsx index 49ecd7968..2ac71f636 100644 --- a/apps/remix/app/components/dialogs/webhook-create-dialog.tsx +++ b/apps/remix/app/components/dialogs/webhook-create-dialog.tsx @@ -106,7 +106,7 @@ export const WebhookCreateDialog = ({ trigger, ...props }: WebhookCreateDialogPr Create webhook - On this page, you can create a new webhook. + Receive real-time notifications when document events occur. diff --git a/apps/remix/app/components/forms/document-preferences-form.tsx b/apps/remix/app/components/forms/document-preferences-form.tsx index f1a0b6d8a..ffeac025c 100644 --- a/apps/remix/app/components/forms/document-preferences-form.tsx +++ b/apps/remix/app/components/forms/document-preferences-form.tsx @@ -162,7 +162,7 @@ export const DocumentPreferencesForm = ({ return (
-
+
{!isPersonalLayoutMode && ( -
+
{organisation.organisationClaim.flags.emailDomains && ( ; - -export const SettingsDesktopNav = ({ className, ...props }: SettingsDesktopNavProps) => { - const { pathname } = useLocation(); - - const { organisations } = useSession(); - - const isPersonalLayoutMode = isPersonalLayout(organisations); - - const hasManageableBillingOrgs = organisations.some((org) => - canExecuteOrganisationAction('MANAGE_BILLING', org.currentOrganisationRole), - ); - - return ( -
- - - - - {isPersonalLayoutMode && ( - <> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - )} - - - - - - {IS_BILLING_ENABLED() && hasManageableBillingOrgs && ( - - - - )} - - - - -
- ); -}; diff --git a/apps/remix/app/components/general/settings-nav-mobile.tsx b/apps/remix/app/components/general/settings-nav-mobile.tsx deleted file mode 100644 index 6c14df404..000000000 --- a/apps/remix/app/components/general/settings-nav-mobile.tsx +++ /dev/null @@ -1,144 +0,0 @@ -import { useSession } from '@documenso/lib/client-only/providers/session'; -import { IS_BILLING_ENABLED } from '@documenso/lib/constants/app'; -import { canExecuteOrganisationAction, isPersonalLayout } from '@documenso/lib/utils/organisations'; -import { cn } from '@documenso/ui/lib/utils'; -import { Button } from '@documenso/ui/primitives/button'; -import { Trans } from '@lingui/react/macro'; -import { - BracesIcon, - CreditCardIcon, - Globe2Icon, - Lock, - MailIcon, - PaletteIcon, - Settings2Icon, - User, - Users, - WebhookIcon, -} from 'lucide-react'; -import type { HTMLAttributes } from 'react'; -import { Link, useLocation } from 'react-router'; - -export type SettingsMobileNavProps = HTMLAttributes; - -export const SettingsMobileNav = ({ className, ...props }: SettingsMobileNavProps) => { - const { pathname } = useLocation(); - - const { organisations } = useSession(); - - const isPersonalLayoutMode = isPersonalLayout(organisations); - - const hasManageableBillingOrgs = organisations.some((org) => - canExecuteOrganisationAction('MANAGE_BILLING', org.currentOrganisationRole), - ); - - return ( -
- - - - - {isPersonalLayoutMode && ( - <> - - - - - - - - - - - - - - - - - - - - - - - - - )} - - - - - - {IS_BILLING_ENABLED() && hasManageableBillingOrgs && ( - - - - )} - - - - -
- ); -}; diff --git a/apps/remix/app/components/general/settings-nav.tsx b/apps/remix/app/components/general/settings-nav.tsx new file mode 100644 index 000000000..e7472ba71 --- /dev/null +++ b/apps/remix/app/components/general/settings-nav.tsx @@ -0,0 +1,62 @@ +import { cn } from '@documenso/ui/lib/utils'; +import { Button } from '@documenso/ui/primitives/button'; +import type { LucideIcon } from 'lucide-react'; +import { NavLink } from 'react-router'; + +export type SettingsNavRoute = { + path: string; + label: string; + icon?: LucideIcon; + /** + * Renders the route as a non-interactive group label, only visible on desktop. + */ + isSectionLabel?: boolean; + /** + * Indents the route under the preceding section label on desktop. + */ + isSubNav?: boolean; + /** + * Only mark the route as active on an exact path match. + */ + end?: boolean; +}; + +export type SettingsNavProps = { + routes: SettingsNavRoute[]; + className?: string; +}; + +export const SettingsNav = ({ routes, className }: SettingsNavProps) => { + return ( + + ); +}; diff --git a/apps/remix/app/components/tables/organisation-email-domains-table.tsx b/apps/remix/app/components/tables/organisation-email-domains-table.tsx index a1fdf3e05..b356ec6cf 100644 --- a/apps/remix/app/components/tables/organisation-email-domains-table.tsx +++ b/apps/remix/app/components/tables/organisation-email-domains-table.tsx @@ -102,7 +102,9 @@ export const OrganisationEmailDomainsDataTable = () => { cell: ({ row }) => (
- {/* Navigation */} -
- {organisationSettingRoutes.map((route) => ( - - - - ))} -
+ -
+
diff --git a/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.billing.tsx b/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.billing.tsx index 650bcd3e8..93afb3516 100644 --- a/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.billing.tsx +++ b/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.billing.tsx @@ -89,9 +89,9 @@ export default function TeamsSettingBillingPage() { return (
-
+
-

+

Billing

diff --git a/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.branding.tsx b/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.branding.tsx index c719f087f..a188b1fbd 100644 --- a/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.branding.tsx +++ b/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.branding.tsx @@ -123,13 +123,13 @@ export default function OrganisationSettingsBrandingPage() { const settingsHeaderText = t`Branding Preferences`; const settingsHeaderSubtitle = isPersonalLayoutMode - ? t`Here you can set your general branding preferences.` + ? t`Set the default branding for documents you send.` : team - ? t`Here you can set branding preferences for your team.` - : t`Here you can set branding preferences for your organisation. Teams will inherit these settings by default.`; + ? t`Set the default branding for documents sent by your team.` + : t`Set the default branding for your organisation. Teams inherit these settings by default.`; return ( -
+
{organisationWithSettings.organisationClaim.flags.allowCustomBranding || !IS_BILLING_ENABLED() ? ( diff --git a/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.document.tsx b/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.document.tsx index 9d73e00bc..99e2167f7 100644 --- a/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.document.tsx +++ b/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.document.tsx @@ -120,11 +120,11 @@ export default function OrganisationSettingsDocumentPage() { const settingsHeaderText = t`Document Preferences`; const settingsHeaderSubtitle = isPersonalLayoutMode - ? t`Here you can set your general document preferences.` - : t`Here you can set document preferences for your organisation. Teams will inherit these settings by default.`; + ? t`Set your default document settings.` + : t`Set the default document settings for your organisation. Teams inherit these settings by default.`; return ( -
+
diff --git a/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email-domains.$id.tsx b/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email-domains.$id.tsx index 647096c2b..1665c62a5 100644 --- a/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email-domains.$id.tsx +++ b/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email-domains.$id.tsx @@ -132,7 +132,7 @@ export default function OrganisationEmailDomainSettingsPage({ params }: Route.Co return (
- + diff --git a/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email-domains._index.tsx b/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email-domains._index.tsx index e54b8421e..170a31481 100644 --- a/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email-domains._index.tsx +++ b/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email-domains._index.tsx @@ -33,7 +33,7 @@ export default function OrganisationSettingsEmailDomains() { return (
- + {isEmailDomainsEnabled && } diff --git a/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email.tsx b/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email.tsx index 0db136f7b..69044fff1 100644 --- a/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email.tsx +++ b/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email.tsx @@ -1,4 +1,6 @@ import { useCurrentOrganisation } from '@documenso/lib/client-only/providers/organisation'; +import { useSession } from '@documenso/lib/client-only/providers/session'; +import { isPersonalLayout } from '@documenso/lib/utils/organisations'; import { trpc } from '@documenso/trpc/react'; import { SpinnerBox } from '@documenso/ui/primitives/spinner'; import { useToast } from '@documenso/ui/primitives/use-toast'; @@ -13,12 +15,16 @@ export function meta() { return appMetaTags(msg`Email Preferences`); } -export default function OrganisationSettingsGeneral() { +export default function OrganisationSettingsEmailPage() { const { t } = useLingui(); const { toast } = useToast(); const organisation = useCurrentOrganisation(); + const { organisations } = useSession(); + + const isPersonalLayoutMode = isPersonalLayout(organisations); + const { data: organisationWithSettings, isLoading: isLoadingOrganisation } = trpc.organisation.get.useQuery({ organisationReference: organisation.url, }); @@ -59,8 +65,15 @@ export default function OrganisationSettingsGeneral() { } return ( -
- +
+
- +
+
diff --git a/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.groups.$id.tsx b/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.groups.$id.tsx index b3abcb81a..7c7a54c4f 100644 --- a/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.groups.$id.tsx +++ b/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.groups.$id.tsx @@ -94,7 +94,7 @@ export default function OrganisationGroupSettingsPage({ params }: Route.Componen return (
- + diff --git a/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.members.tsx b/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.members.tsx index 422e16f75..9d6d791b9 100644 --- a/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.members.tsx +++ b/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.members.tsx @@ -46,7 +46,10 @@ export default function TeamsSettingsMembersPage() { return (
- + diff --git a/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.sso.tsx b/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.sso.tsx index d977ac07f..cc3934d22 100644 --- a/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.sso.tsx +++ b/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.sso.tsx @@ -73,7 +73,7 @@ export default function OrganisationSettingSSOLoginPage() { } return ( -
+
+ canExecuteOrganisationAction('MANAGE_BILLING', org.currentOrganisationRole), + ); + + const settingRoutes: SettingsNavRoute[] = [ + { + path: '/settings/profile', + label: t`Profile`, + icon: UserIcon, + }, + ...(isPersonalLayoutMode + ? [ + { + path: '/settings/document', + label: t`Preferences`, + icon: Settings2Icon, + isSectionLabel: true, + }, + { + path: '/settings/document', + label: t`Document`, + isSubNav: true, + }, + { + path: '/settings/branding', + label: t`Branding`, + isSubNav: true, + }, + { + path: '/settings/email', + label: t`Email`, + isSubNav: true, + }, + { + path: '/settings/public-profile', + label: t`Public Profile`, + icon: Globe2Icon, + }, + { + path: '/settings/tokens', + label: t`API Tokens`, + icon: BracesIcon, + }, + { + path: '/settings/webhooks', + label: t`Webhooks`, + icon: WebhookIcon, + }, + ] + : []), + { + path: '/settings/organisations', + label: t`Organisations`, + icon: UsersIcon, + }, + ...(IS_BILLING_ENABLED() && hasManageableBillingOrgs + ? [ + { + path: isPersonalLayoutMode ? '/settings/billing-personal' : '/settings/billing', + label: t`Billing`, + icon: CreditCardIcon, + }, + ] + : []), + { + path: '/settings/security', + label: t`Security`, + icon: LockIcon, + }, + ]; + return (

@@ -18,10 +107,9 @@ export default function SettingsLayout() {

- - + -
+
diff --git a/apps/remix/app/routes/_authenticated+/settings+/organisations.tsx b/apps/remix/app/routes/_authenticated+/settings+/organisations.tsx index 4d6765cb9..f1588a08b 100644 --- a/apps/remix/app/routes/_authenticated+/settings+/organisations.tsx +++ b/apps/remix/app/routes/_authenticated+/settings+/organisations.tsx @@ -11,10 +11,7 @@ export default function TeamsSettingsPage() { return (
- + diff --git a/apps/remix/app/routes/_authenticated+/settings+/profile.tsx b/apps/remix/app/routes/_authenticated+/settings+/profile.tsx index eec4b358e..00036b73c 100644 --- a/apps/remix/app/routes/_authenticated+/settings+/profile.tsx +++ b/apps/remix/app/routes/_authenticated+/settings+/profile.tsx @@ -27,14 +27,14 @@ export default function SettingsProfile() { return (
- + - - + + -
+
-
+
{(!isPersonalLayoutMode || user.email !== teamEmail?.email) && teamEmail && ( diff --git a/apps/remix/app/routes/_authenticated+/settings+/security._index.tsx b/apps/remix/app/routes/_authenticated+/settings+/security._index.tsx index c8ec70640..36206cd0b 100644 --- a/apps/remix/app/routes/_authenticated+/settings+/security._index.tsx +++ b/apps/remix/app/routes/_authenticated+/settings+/security._index.tsx @@ -62,10 +62,7 @@ export default function SettingsSecurity({ loaderData }: Route.ComponentProps) { return (
- + {hasEmailPasswordAccount && ( <> diff --git a/apps/remix/app/routes/_authenticated+/settings+/security.activity.tsx b/apps/remix/app/routes/_authenticated+/settings+/security.activity.tsx index 0ea7a7b1d..5c512ee41 100644 --- a/apps/remix/app/routes/_authenticated+/settings+/security.activity.tsx +++ b/apps/remix/app/routes/_authenticated+/settings+/security.activity.tsx @@ -15,7 +15,7 @@ export default function SettingsSecurityActivity() { return (
diff --git a/apps/remix/app/routes/_authenticated+/settings+/security.sessions.tsx b/apps/remix/app/routes/_authenticated+/settings+/security.sessions.tsx index 1c8963ed4..6cc1ae128 100644 --- a/apps/remix/app/routes/_authenticated+/settings+/security.sessions.tsx +++ b/apps/remix/app/routes/_authenticated+/settings+/security.sessions.tsx @@ -94,7 +94,7 @@ export default function SettingsSecuritySessions() { return (
- + diff --git a/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings._index.tsx b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings._index.tsx index eab4bbe9e..2125fd71c 100644 --- a/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings._index.tsx +++ b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings._index.tsx @@ -5,7 +5,7 @@ import { extractInitials } from '@documenso/lib/utils/recipient-formatter'; import { canExecuteTeamAction } from '@documenso/lib/utils/teams'; import { Alert, AlertDescription, AlertTitle } from '@documenso/ui/primitives/alert'; import { AvatarWithText } from '@documenso/ui/primitives/avatar'; -import { Trans } from '@lingui/react/macro'; +import { Trans, useLingui } from '@lingui/react/macro'; import { CheckCircle2, Clock } from 'lucide-react'; import { match, P } from 'ts-pattern'; @@ -33,13 +33,15 @@ export async function loader({ request, params }: Route.LoaderArgs) { } export default function TeamsSettingsPage({ loaderData }: Route.ComponentProps) { + const { t } = useLingui(); + const { team } = loaderData; const currentTeam = useCurrentTeam(); return ( -
- +
+ diff --git a/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings._layout.tsx b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings._layout.tsx index 751afd609..ba4d0f362 100644 --- a/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings._layout.tsx +++ b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings._layout.tsx @@ -1,14 +1,14 @@ import { getSession } from '@documenso/auth/server/lib/utils/get-session'; import { getTeamByUrl } from '@documenso/lib/server-only/team/get-team'; import { canExecuteTeamAction } from '@documenso/lib/utils/teams'; -import { cn } from '@documenso/ui/lib/utils'; import { Button } from '@documenso/ui/primitives/button'; import { msg } from '@lingui/core/macro'; import { Trans, useLingui } from '@lingui/react/macro'; import { BracesIcon, Globe2Icon, GroupIcon, Settings2Icon, SettingsIcon, Users2Icon, WebhookIcon } from 'lucide-react'; -import { Link, NavLink, Outlet, redirect } from 'react-router'; +import { Link, Outlet, redirect } from 'react-router'; import { GenericErrorLayout } from '~/components/general/generic-error-layout'; +import { SettingsNav, type SettingsNavRoute } from '~/components/general/settings-nav'; import { useCurrentTeam } from '~/providers/team'; import { appMetaTags } from '~/utils/meta'; @@ -40,17 +40,18 @@ export default function TeamsSettingsLayout() { const team = useCurrentTeam(); - const teamSettingRoutes = [ + const teamSettingRoutes: SettingsNavRoute[] = [ { path: `/t/${team.url}/settings`, label: t`General`, icon: SettingsIcon, + end: true, }, { path: `/t/${team.url}/settings/document`, label: t`Preferences`, icon: Settings2Icon, - isSubNavParent: true, + isSectionLabel: true, }, { path: `/t/${team.url}/settings/document`, @@ -124,31 +125,9 @@ export default function TeamsSettingsLayout() {
-
- {teamSettingRoutes.map((route) => ( - - - - ))} -
+ -
+
diff --git a/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.branding.tsx b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.branding.tsx index 6035941d3..ad8a96055 100644 --- a/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.branding.tsx +++ b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.branding.tsx @@ -115,10 +115,10 @@ export default function TeamsSettingsPage() { } return ( -
+
{canConfigureBranding ? ( diff --git a/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.document.tsx b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.document.tsx index fd734847f..c9d739830 100644 --- a/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.document.tsx +++ b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.document.tsx @@ -110,11 +110,8 @@ export default function TeamsSettingsPage() { } return ( -
- +
+
- +
+
- +
+
diff --git a/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx index 40ac2aac5..778e15ebc 100644 --- a/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx +++ b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx @@ -30,7 +30,7 @@ export default function ApiTokensPage() { title={API Tokens} subtitle={ - On this page, you can create and manage API tokens. See our{' '} + Create and manage API tokens. See our{' '} ) : ( <> - +
@@ -74,7 +74,7 @@ export default function ApiTokensPage() { )} {tokens && tokens.length > 0 && ( -
+
{tokens.map((token) => (
diff --git a/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.webhooks._index.tsx b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.webhooks._index.tsx index e7aa5c967..b9c5033a9 100644 --- a/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.webhooks._index.tsx +++ b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.webhooks._index.tsx @@ -88,10 +88,7 @@ export default function WebhookPage() { return (
- + {isLoading && ( diff --git a/packages/app-tests/e2e/organisations/manage-organisation.spec.ts b/packages/app-tests/e2e/organisations/manage-organisation.spec.ts index 23fcdedc6..e052923e4 100644 --- a/packages/app-tests/e2e/organisations/manage-organisation.spec.ts +++ b/packages/app-tests/e2e/organisations/manage-organisation.spec.ts @@ -355,8 +355,8 @@ test('[ORGANISATIONS]: manage groups and members', async ({ page }) => { await page.getByRole('button', { name: 'Next' }).click(); await page.getByRole('combobox').click(); await page.getByRole('option', { name: 'Manager' }).click(); - await page.getByRole('button', { name: 'Create Groups' }).click(); - await expect(page.getByText('Team members have been added').first()).toBeVisible(); + await page.getByRole('button', { name: 'Add Groups' }).click(); + await expect(page.getByText('Team groups have been added').first()).toBeVisible(); // Assign CUSTOM_GROUP_B to TeamA await page.goto(`/t/${teamA}/settings/groups`); @@ -368,8 +368,8 @@ test('[ORGANISATIONS]: manage groups and members', async ({ page }) => { await page.getByRole('button', { name: 'Next' }).click(); await page.getByRole('combobox').click(); await page.getByRole('option', { name: 'Manager' }).click(); - await page.getByRole('button', { name: 'Create Groups' }).click(); - await expect(page.getByText('Team members have been added').first()).toBeVisible(); + await page.getByRole('button', { name: 'Add Groups' }).click(); + await expect(page.getByText('Team groups have been added').first()).toBeVisible(); // Update CUSTOM_GROUP_B const updateBtn = page.getByRole('row', { name: 'CUSTOM_GROUP_B' }).getByRole('button');