diff --git a/package.json b/package.json
index e84f8e24..23d38fa4 100644
--- a/package.json
+++ b/package.json
@@ -94,7 +94,7 @@
"maxmind": "^4.3.6",
"md5": "^2.3.0",
"moment-timezone": "^0.5.35",
- "next": "14.0.4",
+ "next": "14.1.0",
"next-basics": "^0.39.0",
"node-fetch": "^3.2.8",
"npm-run-all": "^4.1.5",
diff --git a/src/app/(main)/NavBar.tsx b/src/app/(main)/NavBar.tsx
index 15b23355..08007b1c 100644
--- a/src/app/(main)/NavBar.tsx
+++ b/src/app/(main)/NavBar.tsx
@@ -8,14 +8,13 @@ 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 { teamId, renderTeamUrl } = useTeamUrl();
+ const { pathname, router } = useNavigation();
+ const { 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..dcb01508 100644
--- a/src/components/input/TeamsButton.tsx
+++ b/src/components/input/TeamsButton.tsx
@@ -2,30 +2,39 @@ 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, useTeamUrl } from 'components/hooks';
import styles from './TeamsButton.module.css';
-export function TeamsButton({ teamId }: { teamId: string }) {
+export function TeamsButton({
+ className,
+ onChange,
+}: {
+ className?: 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 { teamId } = useTeamUrl();
+ 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 !== user.id ? id : '') as string);
close();
};
+ if (!result) {
+ return null;
+ }
+
return (
-