diff --git a/apps/web/app/(dashboard)/home/(user)/billing/page.tsx b/apps/web/app/(dashboard)/home/(user)/billing/page.tsx
index da33f0d76..dba87c227 100644
--- a/apps/web/app/(dashboard)/home/(user)/billing/page.tsx
+++ b/apps/web/app/(dashboard)/home/(user)/billing/page.tsx
@@ -12,12 +12,22 @@ import { Trans } from '@kit/ui/trans';
import { createPersonalAccountBillingPortalSession } from '~/(dashboard)/home/(user)/billing/server-actions';
import billingConfig from '~/config/billing.config';
+import { createI18nServerInstance } from '~/lib/i18n/i18n.server';
import { withI18n } from '~/lib/i18n/with-i18n';
import { PersonalAccountCheckoutForm } from './_components/personal-account-checkout-form';
type Subscription = Database['public']['Tables']['subscriptions']['Row'];
+export const generateMetadata = async () => {
+ const i18n = await createI18nServerInstance();
+ const title = i18n.t('account:billingTab');
+
+ return {
+ title,
+ };
+};
+
async function PersonalAccountBillingPage() {
const client = getSupabaseServerComponentClient();
const [subscription, customerId] = await loadData(client);
diff --git a/apps/web/app/(dashboard)/home/(user)/page.tsx b/apps/web/app/(dashboard)/home/(user)/page.tsx
index b6b2beb02..2817bc55a 100644
--- a/apps/web/app/(dashboard)/home/(user)/page.tsx
+++ b/apps/web/app/(dashboard)/home/(user)/page.tsx
@@ -1,8 +1,18 @@
import { PageBody, PageHeader } from '@kit/ui/page';
import { Trans } from '@kit/ui/trans';
+import { createI18nServerInstance } from '~/lib/i18n/i18n.server';
import { withI18n } from '~/lib/i18n/with-i18n';
+export const generateMetadata = async () => {
+ const i18n = await createI18nServerInstance();
+ const title = i18n.t('account:homePage');
+
+ return {
+ title,
+ };
+};
+
function UserHomePage() {
return (
<>
diff --git a/apps/web/app/(dashboard)/home/(user)/settings/page.tsx b/apps/web/app/(dashboard)/home/(user)/settings/page.tsx
index 0bf3be672..75bde0a1a 100644
--- a/apps/web/app/(dashboard)/home/(user)/settings/page.tsx
+++ b/apps/web/app/(dashboard)/home/(user)/settings/page.tsx
@@ -3,6 +3,7 @@ import { PageBody } from '@kit/ui/page';
import featureFlagsConfig from '~/config/feature-flags.config';
import pathsConfig from '~/config/paths.config';
+import { createI18nServerInstance } from '~/lib/i18n/i18n.server';
import { withI18n } from '~/lib/i18n/with-i18n';
const features = {
@@ -13,6 +14,15 @@ const paths = {
callback: pathsConfig.auth.callback + `?next=${pathsConfig.app.accountHome}`,
};
+export const generateMetadata = async () => {
+ const i18n = await createI18nServerInstance();
+ const title = i18n.t('account:settingsTab');
+
+ return {
+ title,
+ };
+};
+
function PersonalAccountSettingsPage() {
return (
diff --git a/apps/web/app/(dashboard)/home/[account]/billing/page.tsx b/apps/web/app/(dashboard)/home/[account]/billing/page.tsx
index bff7a8661..f5cfa91ea 100644
--- a/apps/web/app/(dashboard)/home/[account]/billing/page.tsx
+++ b/apps/web/app/(dashboard)/home/[account]/billing/page.tsx
@@ -11,6 +11,7 @@ import { Trans } from '@kit/ui/trans';
import { loadTeamWorkspace } from '~/(dashboard)/home/[account]/_lib/load-team-account-workspace';
import { createBillingPortalSession } from '~/(dashboard)/home/[account]/billing/server-actions';
import billingConfig from '~/config/billing.config';
+import { createI18nServerInstance } from '~/lib/i18n/i18n.server';
import { withI18n } from '~/lib/i18n/with-i18n';
import { TeamAccountCheckoutForm } from './_components/team-account-checkout-form';
@@ -21,6 +22,15 @@ interface Params {
};
}
+export const generateMetadata = async () => {
+ const i18n = await createI18nServerInstance();
+ const title = i18n.t('teams:billing.pageTitle');
+
+ return {
+ title,
+ };
+};
+
async function TeamAccountBillingPage({ params }: Params) {
const workspace = await loadTeamWorkspace(params.account);
const accountId = workspace.account.id;
diff --git a/apps/web/app/(dashboard)/home/[account]/members/page.tsx b/apps/web/app/(dashboard)/home/[account]/members/page.tsx
index d62fe2029..7bd82debe 100644
--- a/apps/web/app/(dashboard)/home/[account]/members/page.tsx
+++ b/apps/web/app/(dashboard)/home/[account]/members/page.tsx
@@ -21,6 +21,7 @@ import { PageBody, PageHeader } from '@kit/ui/page';
import { Trans } from '@kit/ui/trans';
import { loadTeamWorkspace } from '~/(dashboard)/home/[account]/_lib/load-team-account-workspace';
+import { createI18nServerInstance } from '~/lib/i18n/i18n.server';
import { withI18n } from '~/lib/i18n/with-i18n';
interface Params {
@@ -80,6 +81,15 @@ async function loadData(client: SupabaseClient, slug: string) {
]);
}
+export const generateMetadata = async () => {
+ const i18n = await createI18nServerInstance();
+ const title = i18n.t('teams:members.pageTitle');
+
+ return {
+ title,
+ };
+};
+
async function TeamAccountMembersPage({ params }: Params) {
const client = getSupabaseServerComponentClient();
diff --git a/apps/web/app/(dashboard)/home/[account]/page.tsx b/apps/web/app/(dashboard)/home/[account]/page.tsx
index 5e4329d46..4c8ee7f6b 100644
--- a/apps/web/app/(dashboard)/home/[account]/page.tsx
+++ b/apps/web/app/(dashboard)/home/[account]/page.tsx
@@ -8,6 +8,7 @@ import Spinner from '@kit/ui/spinner';
import { Trans } from '@kit/ui/trans';
import { AppHeader } from '~/(dashboard)/home/[account]/_components/app-header';
+import { createI18nServerInstance } from '~/lib/i18n/i18n.server';
import { withI18n } from '~/lib/i18n/with-i18n';
const DashboardDemo = loadDynamic(
@@ -31,8 +32,13 @@ const DashboardDemo = loadDynamic(
},
);
-export const metadata = {
- title: 'Organization Account Home',
+export const generateMetadata = async () => {
+ const i18n = await createI18nServerInstance();
+ const title = i18n.t('teams:home.pageTitle');
+
+ return {
+ title,
+ };
};
function TeamAccountHomePage({
diff --git a/apps/web/app/(dashboard)/home/[account]/settings/page.tsx b/apps/web/app/(dashboard)/home/[account]/settings/page.tsx
index 154bfc61c..91b9bb616 100644
--- a/apps/web/app/(dashboard)/home/[account]/settings/page.tsx
+++ b/apps/web/app/(dashboard)/home/[account]/settings/page.tsx
@@ -2,13 +2,14 @@ import { TeamAccountSettingsContainer } from '@kit/team-accounts/components';
import { PageBody, PageHeader } from '@kit/ui/page';
import { Trans } from '@kit/ui/trans';
-import { loadTeamWorkspace } from '~/(dashboard)/home/[account]/_lib/load-team-account-workspace';
import pathsConfig from '~/config/paths.config';
import { createI18nServerInstance } from '~/lib/i18n/i18n.server';
+import { loadTeamWorkspace } from '../_lib/load-team-account-workspace';
+
export const generateMetadata = async () => {
const i18n = await createI18nServerInstance();
- const title = i18n.t('accounts:settings:pageTitle');
+ const title = i18n.t('teams:settings:pageTitle');
return {
title,
@@ -27,6 +28,7 @@ const paths = {
async function TeamAccountSettingsPage(props: Props) {
const data = await loadTeamWorkspace(props.params.account);
+
const account = {
id: data.account.id,
name: data.account.name,
@@ -48,11 +50,7 @@ async function TeamAccountSettingsPage(props: Props) {
'container mx-auto flex max-w-2xl flex-1 flex-col items-center'
}
>
-
+
>
diff --git a/apps/web/public/locales/en/account.json b/apps/web/public/locales/en/account.json
index 8cf3d3ca4..7380ca916 100644
--- a/apps/web/public/locales/en/account.json
+++ b/apps/web/public/locales/en/account.json
@@ -8,6 +8,9 @@
"manageConnectedAccounts": "Connected Accounts",
"manageConnectedAccountsSubheading": "Manage your connected accounts",
"connectedAccounts": "Connected Accounts",
+ "homePage": "Home",
+ "billingTab": "Billing",
+ "settingsTab": "Settings",
"authenticationTab": "Authentication",
"multiFactorAuth": "Multi-Factor Authentication",
"multiFactorAuthDescription": "Set up Multi-Factor Authentication method to further secure your account",
diff --git a/apps/web/public/locales/en/teams.json b/apps/web/public/locales/en/teams.json
index 68d2db00d..c29c50620 100644
--- a/apps/web/public/locales/en/teams.json
+++ b/apps/web/public/locales/en/teams.json
@@ -1,4 +1,7 @@
{
+ "home": {
+ "pageTitle": "Home"
+ },
"settings": {
"pageTitle": "Settings",
"pageDescription": "Manage your Team details",
@@ -9,6 +12,12 @@
"dangerZone": "Danger Zone",
"dangerZoneDescription": "This section contains actions that are irreversible"
},
+ "members": {
+ "pageTitle": "Members"
+ },
+ "billing": {
+ "pageTitle": "Billing"
+ },
"yourTeams": "Your Teams",
"createTeam": "Create a Team",
"personalAccount": "Personal Account",
diff --git a/packages/features/team-accounts/src/components/settings/team-account-danger-zone.tsx b/packages/features/team-accounts/src/components/settings/team-account-danger-zone.tsx
index c136e0836..f1c33cf10 100644
--- a/packages/features/team-accounts/src/components/settings/team-account-danger-zone.tsx
+++ b/packages/features/team-accounts/src/components/settings/team-account-danger-zone.tsx
@@ -6,6 +6,7 @@ import { zodResolver } from '@hookform/resolvers/zod';
import { useForm } from 'react-hook-form';
import { z } from 'zod';
+import { useUser } from '@kit/supabase/hooks/use-user';
import { Alert, AlertDescription, AlertTitle } from '@kit/ui/alert';
import {
AlertDialog,
@@ -29,6 +30,7 @@ import {
FormMessage,
} from '@kit/ui/form';
import { Input } from '@kit/ui/input';
+import { LoadingOverlay } from '@kit/ui/loading-overlay';
import { Trans } from '@kit/ui/trans';
import { deleteTeamAccountAction } from '../../server/actions/delete-team-account-server-actions';
@@ -36,15 +38,23 @@ import { leaveTeamAccountAction } from '../../server/actions/leave-team-account-
export function TeamAccountDangerZone({
account,
- userIsPrimaryOwner,
+ primaryOwnerUserId,
}: React.PropsWithChildren<{
account: {
name: string;
id: string;
};
- userIsPrimaryOwner: boolean;
+ primaryOwnerUserId: string;
}>) {
+ const { data: user, isLoading } = useUser();
+
+ if (isLoading) {
+ return ;
+ }
+
+ const userIsPrimaryOwner = user?.id === primaryOwnerUserId;
+
if (userIsPrimaryOwner) {
return ;
}
diff --git a/packages/features/team-accounts/src/components/settings/team-account-settings-container.tsx b/packages/features/team-accounts/src/components/settings/team-account-settings-container.tsx
index 8c946a871..08e4bebd2 100644
--- a/packages/features/team-accounts/src/components/settings/team-account-settings-container.tsx
+++ b/packages/features/team-accounts/src/components/settings/team-account-settings-container.tsx
@@ -22,8 +22,6 @@ export function TeamAccountSettingsContainer(props: {
primaryOwnerUserId: string;
};
- userId: string;
-
paths: {
teamAccountSettings: string;
};
@@ -78,9 +76,7 @@ export function TeamAccountSettingsContainer(props: {