From 44393472cfeb225b9455be11060667dc07fe3fe0 Mon Sep 17 00:00:00 2001 From: Mike Cao Date: Fri, 16 Feb 2024 18:58:15 -0800 Subject: [PATCH] Updated teams button. --- src/app/(main)/NavBar.tsx | 13 ++++++--- .../(main)/settings/teams/TeamsDataTable.tsx | 5 ++-- .../websites/[websiteId]/WebsiteData.tsx | 7 ++--- src/components/hooks/queries/useTeams.ts | 9 +++---- src/components/hooks/queries/useWebsites.ts | 3 +-- src/components/input/TeamsButton.tsx | 27 +++++++++++-------- src/pages/api/auth/verify.ts | 5 ---- src/pages/api/me/teams.ts | 4 +-- src/pages/api/me/websites.ts | 4 +-- src/pages/api/teams/index.ts | 16 ++--------- src/pages/api/users/[userId]/teams.ts | 4 +-- src/pages/api/websites/index.ts | 4 +-- 12 files changed, 46 insertions(+), 55 deletions(-) diff --git a/src/app/(main)/NavBar.tsx b/src/app/(main)/NavBar.tsx index 15b23355..e69ef1cd 100644 --- a/src/app/(main)/NavBar.tsx +++ b/src/app/(main)/NavBar.tsx @@ -8,13 +8,12 @@ import LanguageButton from 'components/input/LanguageButton'; import ProfileButton from 'components/input/ProfileButton'; import TeamsButton from 'components/input/TeamsButton'; import Icons from 'components/icons'; -import { useLogin, useMessages, useNavigation, useTeamUrl } from 'components/hooks'; +import { useMessages, useNavigation, useTeamUrl } from 'components/hooks'; import styles from './NavBar.module.css'; export function NavBar() { - const { user } = useLogin(); const { formatMessage, labels } = useMessages(); - const { pathname } = useNavigation(); + const { pathname, router } = useNavigation(); const { teamId, renderTeamUrl } = useTeamUrl(); const cloudMode = !!process.env.cloudMode; @@ -60,6 +59,12 @@ export function NavBar() { !cloudMode && { label: formatMessage(labels.logout), url: '/logout' }, ].filter(n => n); + const handleTeamChange = (teamId: string) => { + const url = teamId ? `/teams/${teamId}` : '/'; + + router.push(cloudMode ? `${process.env.cloudUrl}${url}` : url); + }; + return (
@@ -83,7 +88,7 @@ export function NavBar() { })}
- {user?.teams?.length && } + diff --git a/src/app/(main)/settings/teams/TeamsDataTable.tsx b/src/app/(main)/settings/teams/TeamsDataTable.tsx index 1890af8a..fe92b6a0 100644 --- a/src/app/(main)/settings/teams/TeamsDataTable.tsx +++ b/src/app/(main)/settings/teams/TeamsDataTable.tsx @@ -1,6 +1,6 @@ import DataTable from 'components/common/DataTable'; import TeamsTable from 'app/(main)/settings/teams/TeamsTable'; -import { useTeams } from 'components/hooks'; +import { useLogin, useTeams } from 'components/hooks'; export function TeamsDataTable({ allowEdit, @@ -9,7 +9,8 @@ export function TeamsDataTable({ allowEdit?: boolean; showActions?: boolean; }) { - const queryResult = useTeams(); + const { user } = useLogin(); + const queryResult = useTeams(user.id); return ( diff --git a/src/app/(main)/settings/websites/[websiteId]/WebsiteData.tsx b/src/app/(main)/settings/websites/[websiteId]/WebsiteData.tsx index c43b29bf..080b9b5c 100644 --- a/src/app/(main)/settings/websites/[websiteId]/WebsiteData.tsx +++ b/src/app/(main)/settings/websites/[websiteId]/WebsiteData.tsx @@ -1,6 +1,6 @@ import { Button, Modal, ModalTrigger, ActionForm } from 'react-basics'; import { useRouter } from 'next/navigation'; -import { useLogin, useMessages, useModified, useTeamUrl } from 'components/hooks'; +import { useLogin, useMessages, useModified, useTeams, useTeamUrl } from 'components/hooks'; import WebsiteDeleteForm from './WebsiteDeleteForm'; import WebsiteResetForm from './WebsiteResetForm'; import WebsiteTransferForm from './WebsiteTransferForm'; @@ -12,11 +12,12 @@ export function WebsiteData({ websiteId, onSave }: { websiteId: string; onSave?: const { touch } = useModified(); const { teamId, renderTeamUrl } = useTeamUrl(); const router = useRouter(); - const hasTeams = user?.teams?.length > 0; + const { result } = useTeams(user.id); + const hasTeams = result?.data?.length > 0; const isTeamOwner = (!teamId && hasTeams) || (hasTeams && - user?.teams + result?.data ?.find(({ id }) => id === teamId) ?.teamUser.find(({ role, userId }) => role === ROLES.teamOwner && userId === user.id)); diff --git a/src/components/hooks/queries/useTeams.ts b/src/components/hooks/queries/useTeams.ts index f8084025..be710807 100644 --- a/src/components/hooks/queries/useTeams.ts +++ b/src/components/hooks/queries/useTeams.ts @@ -1,18 +1,15 @@ import useApi from './useApi'; import useFilterQuery from './useFilterQuery'; -import useLogin from './useLogin'; import useModified from '../useModified'; -export function useTeams(userId?: string) { +export function useTeams(userId: string) { const { get } = useApi(); - const { user } = useLogin(); - const id = userId || user?.id; const { modified } = useModified(`teams`); return useFilterQuery({ - queryKey: ['teams', { userId: id, modified }], + queryKey: ['teams', { userId, modified }], queryFn: (params: any) => { - return get(`/teams`, params); + return get(`/users/${userId}/teams`, params); }, }); } diff --git a/src/components/hooks/queries/useWebsites.ts b/src/components/hooks/queries/useWebsites.ts index 94198975..8bfad333 100644 --- a/src/components/hooks/queries/useWebsites.ts +++ b/src/components/hooks/queries/useWebsites.ts @@ -13,9 +13,8 @@ export function useWebsites( return useFilterQuery({ queryKey: ['websites', { userId, teamId, modified, ...params }], - queryFn: (data: any) => { + queryFn: () => { return get(teamId ? `/teams/${teamId}/websites` : `/users/${userId || user.id}/websites`, { - ...data, ...params, }); }, diff --git a/src/components/input/TeamsButton.tsx b/src/components/input/TeamsButton.tsx index ae995aca..8dc01ba7 100644 --- a/src/components/input/TeamsButton.tsx +++ b/src/components/input/TeamsButton.tsx @@ -2,25 +2,30 @@ import { Key } from 'react'; import { Text, Icon, Button, Popup, Menu, Item, PopupTrigger, Flexbox } from 'react-basics'; import classNames from 'classnames'; import Icons from 'components/icons'; -import { useLogin, useMessages, useNavigation } from 'components/hooks'; +import { useLogin, useMessages, useTeams } from 'components/hooks'; import styles from './TeamsButton.module.css'; -export function TeamsButton({ teamId }: { teamId: string }) { +export function TeamsButton({ + teamId, + onChange, +}: { + teamId: string; + onChange?: (value: string) => void; +}) { const { user } = useLogin(); const { formatMessage, labels } = useMessages(); - const { router } = useNavigation(); - const team = user?.teams?.find(({ id }) => id === teamId); - const cloudMode = !!process.env.cloudMode; + const { result } = useTeams(user?.id); + const team = result?.data?.find(({ id }) => id === teamId); const handleSelect = (close: () => void, id: Key) => { - if (id !== user.id) { - router.push(cloudMode ? `${process.env.cloudUrl}/teams/${id}` : `/teams/${id}`); - } else { - router.push('/'); - } + onChange?.(id as string); close(); }; + if (!result) { + return null; + } + return (