diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0a4577c16..e19b4029b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -328,6 +328,8 @@ importers: specifier: ^5.9.3 version: 5.9.3 + dist: {} + packages: '@ampproject/remapping@2.3.0': diff --git a/src/app/page.tsx b/src/app/page.tsx index 38eda1dea..6f0033dff 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -2,7 +2,7 @@ import { redirect } from 'next/navigation'; import { useEffect } from 'react'; import { LAST_TEAM_CONFIG } from '@/lib/constants'; -import { getItem, removeItem } from '@/lib/storage'; +import { getItem } from '@/lib/storage'; export default function RootPage() { useEffect(() => { @@ -11,8 +11,6 @@ export default function RootPage() { if (lastTeam) { redirect(`/teams/${lastTeam}/websites`); } else { - removeItem(LAST_TEAM_CONFIG); - redirect(`/websites`); } }, []); diff --git a/src/components/input/NavButton.tsx b/src/components/input/NavButton.tsx index 7ea966cc9..ab77ef062 100644 --- a/src/components/input/NavButton.tsx +++ b/src/components/input/NavButton.tsx @@ -14,6 +14,7 @@ import { Text, } from '@umami/react-zen'; import { ArrowRight } from 'lucide-react'; +import type { Key } from 'react'; import { useConfig, useLoginQuery, @@ -33,7 +34,8 @@ import { Users, } from '@/components/icons'; import { Switch } from '@/components/svg'; -import { DOCS_URL } from '@/lib/constants'; +import { DOCS_URL, LAST_TEAM_CONFIG } from '@/lib/constants'; +import { removeItem } from '@/lib/storage'; export interface TeamsButtonProps { showText?: boolean; @@ -44,7 +46,7 @@ export function NavButton({ showText = true }: TeamsButtonProps) { const { user } = useLoginQuery(); const { cloudMode } = useConfig(); const { formatMessage, labels } = useMessages(); - const { teamId } = useNavigation(); + const { teamId, router } = useNavigation(); const { isMobile } = useMobile(); const team = user?.teams?.find(({ id }) => id === teamId); const selectedKeys = new Set([teamId || 'user']); @@ -54,7 +56,16 @@ export function NavButton({ showText = true }: TeamsButtonProps) { return cloudMode ? `${process.env.cloudUrl}${url}` : url; }; - const handleAction = async () => {}; + const handleAction = async (key: Key) => { + if (key === 'user') { + removeItem(LAST_TEAM_CONFIG); + if (cloudMode) { + window.location.href = '/'; + } else { + router.push('/'); + } + } + }; return ( @@ -84,16 +95,16 @@ export function NavButton({ showText = true }: TeamsButtonProps) { - + } label={formatMessage(labels.switchAccount)} /> - + - + } label={user.username} /> diff --git a/src/lib/crypto.ts b/src/lib/crypto.ts index 9911ef7f0..a6d912b82 100644 --- a/src/lib/crypto.ts +++ b/src/lib/crypto.ts @@ -1,5 +1,5 @@ import crypto from 'node:crypto'; -import { v4, v5 } from 'uuid'; +import { v4, v5, v7 } from 'uuid'; const ALGORITHM = 'aes-256-gcm'; const IV_LENGTH = 16; @@ -57,7 +57,9 @@ export function secret() { } export function uuid(...args: any) { - if (!args.length) return v4(); + if (args.length) { + return v5(hash(...args, secret()), v5.DNS); + } - return v5(hash(...args, secret()), v5.DNS); + return process.env.USE_UUIDV7 ? v7() : v4(); }