From 9448aa3ab54a59b179fdd6b78287c008b8229052 Mon Sep 17 00:00:00 2001 From: Mike Cao Date: Sun, 28 Jan 2024 18:33:40 -0800 Subject: [PATCH] Added teams pages. Refactored hooks. --- src/app/(main)/NavBar.tsx | 2 +- src/app/(main)/UpdateNotice.tsx | 2 +- src/app/(main)/console/TestConsole.tsx | 3 +- src/app/(main)/dashboard/Dashboard.tsx | 8 ++--- src/app/(main)/dashboard/DashboardEdit.tsx | 4 +-- .../dashboard/DashboardSettingsButton.tsx | 2 +- src/app/(main)/reports/ReportsTable.tsx | 2 +- src/app/(main)/reports/funnel/FunnelChart.tsx | 4 +-- src/app/(main)/settings/SettingsContext.tsx | 1 + src/app/(main)/settings/layout.tsx | 4 +-- .../settings/profile/DateRangeSetting.tsx | 4 +-- .../settings/profile/LanguageSetting.tsx | 4 +-- .../settings/profile/PasswordChangeButton.tsx | 2 +- .../settings/profile/PasswordEditForm.tsx | 4 +-- .../settings/profile/ProfileSettings.tsx | 4 +-- .../(main)/settings/profile/ThemeSetting.tsx | 2 +- .../settings/profile/TimezoneSetting.tsx | 4 +-- src/app/(main)/settings/teams/TeamAddForm.tsx | 4 +-- .../(main)/settings/teams/TeamDeleteForm.tsx | 4 +-- .../(main)/settings/teams/TeamJoinForm.tsx | 4 +-- .../(main)/settings/teams/TeamLeaveButton.tsx | 6 ++-- .../(main)/settings/teams/TeamLeaveForm.tsx | 4 +-- .../(main)/settings/teams/TeamsAddButton.tsx | 2 +- .../(main)/settings/teams/TeamsDataTable.tsx | 4 +-- src/app/(main)/settings/teams/TeamsHeader.tsx | 4 +-- .../(main)/settings/teams/TeamsJoinButton.tsx | 2 +- src/app/(main)/settings/teams/TeamsTable.tsx | 30 ++++++++++++------- .../(main)/settings/teams/[id]/TeamData.tsx | 2 +- .../settings/teams/[id]/TeamEditForm.tsx | 4 +-- .../teams/[id]/TeamMemberRemoveButton.tsx | 4 +-- .../settings/teams/[id]/TeamMembers.tsx | 4 +-- .../settings/teams/[id]/TeamMembersTable.tsx | 4 +-- .../settings/teams/[id]/TeamSettings.tsx | 6 ++-- .../teams/[id]/TeamWebsiteRemoveButton.tsx | 4 +-- .../settings/teams/[id]/TeamWebsites.tsx | 24 ++------------- .../settings/teams/[id]/TeamWebsitesTable.tsx | 2 +- .../(main)/settings/users/UserAddButton.tsx | 2 +- src/app/(main)/settings/users/UserAddForm.tsx | 4 +-- .../settings/users/UserDeleteButton.tsx | 4 +-- .../(main)/settings/users/UserDeleteForm.tsx | 4 +-- .../(main)/settings/users/UserEditForm.tsx | 4 +-- .../(main)/settings/users/UserWebsites.tsx | 4 +-- .../(main)/settings/users/UsersDataTable.tsx | 4 +-- src/app/(main)/settings/users/UsersHeader.tsx | 2 +- src/app/(main)/settings/users/UsersTable.tsx | 4 +-- .../settings/users/[id]/UserSettings.tsx | 4 +-- .../settings/websites/WebsiteAddButton.tsx | 8 +++-- .../settings/websites/WebsiteAddForm.tsx | 16 +++++++--- .../settings/websites/WebsiteSettings.tsx | 4 +-- .../settings/websites/WebsitesDataTable.tsx | 25 ++++------------ .../settings/websites/WebsitesHeader.tsx | 11 +++++-- .../settings/websites/WebsitesTable.tsx | 22 +++++++------- .../settings/websites/[id]/ShareUrl.tsx | 4 +-- .../settings/websites/[id]/TrackingCode.tsx | 4 +-- .../settings/websites/[id]/WebsiteData.tsx | 2 +- .../websites/[id]/WebsiteDeleteForm.tsx | 4 +-- .../websites/[id]/WebsiteEditForm.tsx | 4 +-- .../websites/[id]/WebsiteResetForm.tsx | 4 +-- src/app/(main)/teams/TeamsContext.tsx | 5 ++++ src/app/(main)/teams/[id]/Team.tsx | 20 +++++++++++++ src/app/(main)/teams/[id]/layout.tsx | 5 ++++ .../teams/[id]/websites/TeamWebsites.tsx | 14 +++++++++ src/app/(main)/teams/[id]/websites/page.tsx | 11 +++++++ .../(main)/websites/[id]/WebsiteDetails.tsx | 2 +- .../websites/[id]/WebsiteExpandedView.tsx | 4 +-- .../[id]/event-data/EventDataMetricsBar.tsx | 2 +- src/app/(main)/websites/[id]/page.tsx | 2 +- .../websites/[id]/realtime/Realtime.tsx | 2 +- .../[id]/realtime/RealtimeCountries.tsx | 6 ++-- .../websites/[id]/realtime/RealtimeHeader.tsx | 2 +- .../websites/[id]/realtime/RealtimeHome.tsx | 6 ++-- .../websites/[id]/realtime/RealtimeLog.tsx | 6 ++-- .../websites/[id]/realtime/RealtimeUrls.tsx | 2 +- src/app/Providers.tsx | 2 +- src/app/login/LoginForm.tsx | 7 ++--- src/app/logout/Logout.tsx | 2 +- src/app/not-found.tsx | 2 +- src/app/share/[...id]/Share.tsx | 2 +- src/components/common/ConfirmDeleteForm.tsx | 2 +- src/components/common/DataTable.tsx | 2 +- src/components/common/Empty.tsx | 2 +- src/components/common/ErrorBoundary.tsx | 2 +- src/components/common/ErrorMessage.tsx | 2 +- src/components/common/FilterLink.tsx | 4 +-- src/components/common/Pager.tsx | 2 +- src/components/hooks/index.js | 19 +++++++----- src/components/hooks/{ => queries}/useApi.ts | 2 +- .../hooks/{ => queries}/useConfig.ts | 2 +- .../hooks/{ => queries}/useFilterQuery.ts | 2 +- .../hooks/{ => queries}/useLogin.ts | 4 +-- .../hooks/{ => queries}/useReport.ts | 6 ++-- .../hooks/{ => queries}/useReports.ts | 2 +- .../hooks/{ => queries}/useShareToken.ts | 0 src/components/hooks/queries/useTeam.ts | 12 ++++++++ .../hooks/queries/useTeamWebsites.ts | 15 ++++++++++ src/components/hooks/{ => queries}/useUser.ts | 2 +- .../hooks/{ => queries}/useWebsite.ts | 0 src/components/hooks/queries/useWebsites.ts | 20 +++++++++++++ src/components/hooks/useCountryNames.ts | 2 +- src/components/hooks/useDateRange.ts | 2 +- src/components/hooks/useLanguageNames.ts | 2 +- src/components/hooks/useLocale.ts | 4 +-- src/components/hooks/useTimezone.ts | 2 +- src/components/input/DateFilter.tsx | 4 +-- src/components/input/LanguageButton.tsx | 2 +- src/components/input/LogoutButton.tsx | 2 +- src/components/input/ProfileButton.tsx | 6 ++-- src/components/input/RefreshButton.tsx | 4 +-- src/components/input/SettingsButton.tsx | 2 +- src/components/input/ThemeButton.tsx | 2 +- src/components/input/WebsiteDateFilter.tsx | 2 +- src/components/input/WebsiteSelect.tsx | 4 +-- src/components/layout/Page.tsx | 2 +- src/components/messages.ts | 1 + src/components/metrics/ActiveUsers.tsx | 4 +-- src/components/metrics/BarChart.tsx | 4 +-- src/components/metrics/BrowsersTable.tsx | 4 +-- src/components/metrics/CitiesTable.tsx | 6 ++-- src/components/metrics/CountriesTable.tsx | 2 +- src/components/metrics/DatePickerForm.tsx | 4 +-- src/components/metrics/DevicesTable.tsx | 2 +- src/components/metrics/EventsTable.tsx | 2 +- src/components/metrics/FilterTags.tsx | 6 ++-- src/components/metrics/LanguagesTable.tsx | 6 ++-- src/components/metrics/Legend.tsx | 4 +-- src/components/metrics/ListTable.tsx | 2 +- src/components/metrics/MetricsTable.tsx | 10 +++---- src/components/metrics/OSTable.tsx | 2 +- src/components/metrics/PagesTable.tsx | 4 +-- .../metrics/QueryParametersTable.tsx | 2 +- src/components/metrics/ReferrersTable.tsx | 2 +- src/components/metrics/RegionsTable.tsx | 6 ++-- src/components/metrics/ScreenTable.tsx | 2 +- src/components/metrics/WorldMap.tsx | 8 ++--- src/index.ts | 15 +++++----- src/pages/api/teams/[id]/index.ts | 10 +++++-- 136 files changed, 387 insertions(+), 287 deletions(-) create mode 100644 src/app/(main)/teams/TeamsContext.tsx create mode 100644 src/app/(main)/teams/[id]/Team.tsx create mode 100644 src/app/(main)/teams/[id]/layout.tsx create mode 100644 src/app/(main)/teams/[id]/websites/TeamWebsites.tsx create mode 100644 src/app/(main)/teams/[id]/websites/page.tsx rename src/components/hooks/{ => queries}/useApi.ts (87%) rename src/components/hooks/{ => queries}/useConfig.ts (92%) rename src/components/hooks/{ => queries}/useFilterQuery.ts (94%) rename src/components/hooks/{ => queries}/useLogin.ts (78%) rename src/components/hooks/{ => queries}/useReport.ts (94%) rename src/components/hooks/{ => queries}/useReports.ts (92%) rename src/components/hooks/{ => queries}/useShareToken.ts (100%) create mode 100644 src/components/hooks/queries/useTeam.ts create mode 100644 src/components/hooks/queries/useTeamWebsites.ts rename src/components/hooks/{ => queries}/useUser.ts (75%) rename src/components/hooks/{ => queries}/useWebsite.ts (100%) create mode 100644 src/components/hooks/queries/useWebsites.ts diff --git a/src/app/(main)/NavBar.tsx b/src/app/(main)/NavBar.tsx index 14a360f8..6eb46cb2 100644 --- a/src/app/(main)/NavBar.tsx +++ b/src/app/(main)/NavBar.tsx @@ -6,7 +6,7 @@ import Icons from 'components/icons'; import ThemeButton from 'components/input/ThemeButton'; import LanguageButton from 'components/input/LanguageButton'; import ProfileButton from 'components/input/ProfileButton'; -import useMessages from 'components/hooks/useMessages'; +import { useMessages } from 'components/hooks'; import HamburgerButton from 'components/common/HamburgerButton'; import { usePathname } from 'next/navigation'; import styles from './NavBar.module.css'; diff --git a/src/app/(main)/UpdateNotice.tsx b/src/app/(main)/UpdateNotice.tsx index 509df95c..c56d3ce4 100644 --- a/src/app/(main)/UpdateNotice.tsx +++ b/src/app/(main)/UpdateNotice.tsx @@ -6,7 +6,7 @@ import { setItem } from 'next-basics'; import useStore, { checkVersion } from 'store/version'; import { REPO_URL, VERSION_CHECK } from 'lib/constants'; import styles from './UpdateNotice.module.css'; -import useMessages from 'components/hooks/useMessages'; +import { useMessages } from 'components/hooks'; import { usePathname } from 'next/navigation'; export function UpdateNotice({ user, config }) { diff --git a/src/app/(main)/console/TestConsole.tsx b/src/app/(main)/console/TestConsole.tsx index 246b7088..640a81f6 100644 --- a/src/app/(main)/console/TestConsole.tsx +++ b/src/app/(main)/console/TestConsole.tsx @@ -8,8 +8,7 @@ import Page from 'components/layout/Page'; import PageHeader from 'components/layout/PageHeader'; import EventsChart from 'components/metrics/EventsChart'; import WebsiteChart from 'app/(main)/websites/[id]/WebsiteChart'; -import useApi from 'components/hooks/useApi'; -import useNavigation from 'components/hooks/useNavigation'; +import { useApi, useNavigation } from 'components/hooks'; import styles from './TestConsole.module.css'; export function TestConsole({ websiteId }: { websiteId: string }) { diff --git a/src/app/(main)/dashboard/Dashboard.tsx b/src/app/(main)/dashboard/Dashboard.tsx index d340ebc6..b6ab0617 100644 --- a/src/app/(main)/dashboard/Dashboard.tsx +++ b/src/app/(main)/dashboard/Dashboard.tsx @@ -7,11 +7,11 @@ import WebsiteChartList from '../../(main)/websites/[id]/WebsiteChartList'; import DashboardSettingsButton from 'app/(main)/dashboard/DashboardSettingsButton'; import DashboardEdit from 'app/(main)/dashboard/DashboardEdit'; import EmptyPlaceholder from 'components/common/EmptyPlaceholder'; -import useApi from 'components/hooks/useApi'; +import { useApi } from 'components/hooks'; import useDashboard from 'store/dashboard'; -import useMessages from 'components/hooks/useMessages'; -import useLocale from 'components/hooks/useLocale'; -import useFilterQuery from 'components/hooks/useFilterQuery'; +import { useMessages } from 'components/hooks'; +import { useLocale } from 'components/hooks'; +import { useFilterQuery } from 'components/hooks'; import { useUser } from 'components/hooks'; export function Dashboard() { diff --git a/src/app/(main)/dashboard/DashboardEdit.tsx b/src/app/(main)/dashboard/DashboardEdit.tsx index 4b05a960..fd94c767 100644 --- a/src/app/(main)/dashboard/DashboardEdit.tsx +++ b/src/app/(main)/dashboard/DashboardEdit.tsx @@ -5,8 +5,8 @@ import classNames from 'classnames'; import { Button } from 'react-basics'; import { firstBy } from 'thenby'; import useDashboard, { saveDashboard } from 'store/dashboard'; -import useMessages from 'components/hooks/useMessages'; -import useApi from 'components/hooks/useApi'; +import { useMessages } from 'components/hooks'; +import { useApi } from 'components/hooks'; import styles from './DashboardEdit.module.css'; const dragId = 'dashboard-website-ordering'; diff --git a/src/app/(main)/dashboard/DashboardSettingsButton.tsx b/src/app/(main)/dashboard/DashboardSettingsButton.tsx index eeb1f947..9e1d3dbc 100644 --- a/src/app/(main)/dashboard/DashboardSettingsButton.tsx +++ b/src/app/(main)/dashboard/DashboardSettingsButton.tsx @@ -1,7 +1,7 @@ import { TooltipPopup, Icon, Text, Flexbox, Button } from 'react-basics'; import Icons from 'components/icons'; import { saveDashboard } from 'store/dashboard'; -import useMessages from 'components/hooks/useMessages'; +import { useMessages } from 'components/hooks'; export function DashboardSettingsButton() { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/reports/ReportsTable.tsx b/src/app/(main)/reports/ReportsTable.tsx index 882110ee..3a5f7497 100644 --- a/src/app/(main)/reports/ReportsTable.tsx +++ b/src/app/(main)/reports/ReportsTable.tsx @@ -1,7 +1,7 @@ import { GridColumn, GridTable, Icon, Icons, Text, useBreakpoint } from 'react-basics'; import LinkButton from 'components/common/LinkButton'; import { useMessages } from 'components/hooks'; -import useUser from 'components/hooks/useUser'; +import { useUser } from 'components/hooks'; import { REPORT_TYPES } from 'lib/constants'; import ReportDeleteButton from './ReportDeleteButton'; diff --git a/src/app/(main)/reports/funnel/FunnelChart.tsx b/src/app/(main)/reports/funnel/FunnelChart.tsx index 923e8d56..ae4bc2ea 100644 --- a/src/app/(main)/reports/funnel/FunnelChart.tsx +++ b/src/app/(main)/reports/funnel/FunnelChart.tsx @@ -1,7 +1,7 @@ import { JSX, useCallback, useContext, useMemo } from 'react'; import { Loading, StatusLight } from 'react-basics'; -import useMessages from 'components/hooks/useMessages'; -import useTheme from 'components/hooks/useTheme'; +import { useMessages } from 'components/hooks'; +import { useTheme } from 'components/hooks'; import BarChart from 'components/metrics/BarChart'; import { formatLongNumber } from 'lib/format'; import { ReportContext } from '../[id]/Report'; diff --git a/src/app/(main)/settings/SettingsContext.tsx b/src/app/(main)/settings/SettingsContext.tsx index 898a40cc..694bfed0 100644 --- a/src/app/(main)/settings/SettingsContext.tsx +++ b/src/app/(main)/settings/SettingsContext.tsx @@ -1,3 +1,4 @@ +'use client'; import { createContext } from 'react'; export const SettingsContext = createContext(null); diff --git a/src/app/(main)/settings/layout.tsx b/src/app/(main)/settings/layout.tsx index e36b5b53..2c0547a5 100644 --- a/src/app/(main)/settings/layout.tsx +++ b/src/app/(main)/settings/layout.tsx @@ -1,7 +1,7 @@ 'use client'; import { usePathname } from 'next/navigation'; -import useUser from 'components/hooks/useUser'; -import useMessages from 'components/hooks/useMessages'; +import { useUser } from 'components/hooks'; +import { useMessages } from 'components/hooks'; import SideNav from 'components/layout/SideNav'; import styles from './layout.module.css'; diff --git a/src/app/(main)/settings/profile/DateRangeSetting.tsx b/src/app/(main)/settings/profile/DateRangeSetting.tsx index e44d45db..f71bc71d 100644 --- a/src/app/(main)/settings/profile/DateRangeSetting.tsx +++ b/src/app/(main)/settings/profile/DateRangeSetting.tsx @@ -1,8 +1,8 @@ import DateFilter from 'components/input/DateFilter'; import { Button, Flexbox } from 'react-basics'; -import useDateRange from 'components/hooks/useDateRange'; +import { useDateRange } from 'components/hooks'; import { DEFAULT_DATE_RANGE } from 'lib/constants'; -import useMessages from 'components/hooks/useMessages'; +import { useMessages } from 'components/hooks'; import { DateRange } from 'lib/types'; export function DateRangeSetting() { diff --git a/src/app/(main)/settings/profile/LanguageSetting.tsx b/src/app/(main)/settings/profile/LanguageSetting.tsx index 267a20f4..a1a5b11b 100644 --- a/src/app/(main)/settings/profile/LanguageSetting.tsx +++ b/src/app/(main)/settings/profile/LanguageSetting.tsx @@ -1,9 +1,9 @@ import { useState } from 'react'; import { Button, Dropdown, Item, Flexbox } from 'react-basics'; -import useLocale from 'components/hooks/useLocale'; +import { useLocale } from 'components/hooks'; import { DEFAULT_LOCALE } from 'lib/constants'; import { languages } from 'lib/lang'; -import useMessages from 'components/hooks/useMessages'; +import { useMessages } from 'components/hooks'; import styles from './LanguageSetting.module.css'; export function LanguageSetting() { diff --git a/src/app/(main)/settings/profile/PasswordChangeButton.tsx b/src/app/(main)/settings/profile/PasswordChangeButton.tsx index 29ec844a..1ddc6954 100644 --- a/src/app/(main)/settings/profile/PasswordChangeButton.tsx +++ b/src/app/(main)/settings/profile/PasswordChangeButton.tsx @@ -1,7 +1,7 @@ import { Button, Icon, Text, useToasts, ModalTrigger, Modal } from 'react-basics'; import PasswordEditForm from 'app/(main)/settings/profile/PasswordEditForm'; import Icons from 'components/icons'; -import useMessages from 'components/hooks/useMessages'; +import { useMessages } from 'components/hooks'; export function PasswordChangeButton() { const { formatMessage, labels, messages } = useMessages(); diff --git a/src/app/(main)/settings/profile/PasswordEditForm.tsx b/src/app/(main)/settings/profile/PasswordEditForm.tsx index 1384a919..597379fc 100644 --- a/src/app/(main)/settings/profile/PasswordEditForm.tsx +++ b/src/app/(main)/settings/profile/PasswordEditForm.tsx @@ -1,7 +1,7 @@ import { useRef } from 'react'; import { Form, FormRow, FormInput, FormButtons, PasswordField, Button } from 'react-basics'; -import useApi from 'components/hooks/useApi'; -import useMessages from 'components/hooks/useMessages'; +import { useApi } from 'components/hooks'; +import { useMessages } from 'components/hooks'; export function PasswordEditForm({ onSave, onClose }) { const { formatMessage, labels, messages } = useMessages(); diff --git a/src/app/(main)/settings/profile/ProfileSettings.tsx b/src/app/(main)/settings/profile/ProfileSettings.tsx index 89c6354c..e93536e8 100644 --- a/src/app/(main)/settings/profile/ProfileSettings.tsx +++ b/src/app/(main)/settings/profile/ProfileSettings.tsx @@ -5,8 +5,8 @@ import DateRangeSetting from 'app/(main)/settings/profile/DateRangeSetting'; import LanguageSetting from 'app/(main)/settings/profile/LanguageSetting'; import ThemeSetting from 'app/(main)/settings/profile/ThemeSetting'; import PasswordChangeButton from './PasswordChangeButton'; -import useUser from 'components/hooks/useUser'; -import useMessages from 'components/hooks/useMessages'; +import { useUser } from 'components/hooks'; +import { useMessages } from 'components/hooks'; import { ROLES } from 'lib/constants'; export function ProfileSettings() { diff --git a/src/app/(main)/settings/profile/ThemeSetting.tsx b/src/app/(main)/settings/profile/ThemeSetting.tsx index aa3a67a2..577728b7 100644 --- a/src/app/(main)/settings/profile/ThemeSetting.tsx +++ b/src/app/(main)/settings/profile/ThemeSetting.tsx @@ -1,6 +1,6 @@ import classNames from 'classnames'; import { Button, Icon } from 'react-basics'; -import useTheme from 'components/hooks/useTheme'; +import { useTheme } from 'components/hooks'; import Sun from 'assets/sun.svg'; import Moon from 'assets/moon.svg'; import styles from './ThemeSetting.module.css'; diff --git a/src/app/(main)/settings/profile/TimezoneSetting.tsx b/src/app/(main)/settings/profile/TimezoneSetting.tsx index c0f722d0..ca14f356 100644 --- a/src/app/(main)/settings/profile/TimezoneSetting.tsx +++ b/src/app/(main)/settings/profile/TimezoneSetting.tsx @@ -1,8 +1,8 @@ import { useState } from 'react'; import { Dropdown, Item, Button, Flexbox } from 'react-basics'; import { listTimeZones } from 'timezone-support'; -import useTimezone from 'components/hooks/useTimezone'; -import useMessages from 'components/hooks/useMessages'; +import { useTimezone } from 'components/hooks'; +import { useMessages } from 'components/hooks'; import { getTimezone } from 'lib/date'; import styles from './TimezoneSetting.module.css'; diff --git a/src/app/(main)/settings/teams/TeamAddForm.tsx b/src/app/(main)/settings/teams/TeamAddForm.tsx index 5a242cb9..a9b229ba 100644 --- a/src/app/(main)/settings/teams/TeamAddForm.tsx +++ b/src/app/(main)/settings/teams/TeamAddForm.tsx @@ -8,8 +8,8 @@ import { SubmitButton, } from 'react-basics'; import { setValue } from 'store/cache'; -import useApi from 'components/hooks/useApi'; -import useMessages from 'components/hooks/useMessages'; +import { useApi } from 'components/hooks'; +import { useMessages } from 'components/hooks'; export function TeamAddForm({ onSave, onClose }: { onSave: () => void; onClose: () => void }) { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/settings/teams/TeamDeleteForm.tsx b/src/app/(main)/settings/teams/TeamDeleteForm.tsx index 00eedb17..e2ee6b65 100644 --- a/src/app/(main)/settings/teams/TeamDeleteForm.tsx +++ b/src/app/(main)/settings/teams/TeamDeleteForm.tsx @@ -1,6 +1,6 @@ import { Button, Form, FormButtons, SubmitButton } from 'react-basics'; -import useApi from 'components/hooks/useApi'; -import useMessages from 'components/hooks/useMessages'; +import { useApi } from 'components/hooks'; +import { useMessages } from 'components/hooks'; import { setValue } from 'store/cache'; export function TeamDeleteForm({ diff --git a/src/app/(main)/settings/teams/TeamJoinForm.tsx b/src/app/(main)/settings/teams/TeamJoinForm.tsx index 569c3848..094eaec5 100644 --- a/src/app/(main)/settings/teams/TeamJoinForm.tsx +++ b/src/app/(main)/settings/teams/TeamJoinForm.tsx @@ -8,8 +8,8 @@ import { Button, SubmitButton, } from 'react-basics'; -import useApi from 'components/hooks/useApi'; -import useMessages from 'components/hooks/useMessages'; +import { useApi } from 'components/hooks'; +import { useMessages } from 'components/hooks'; import { setValue } from 'store/cache'; export function TeamJoinForm({ onSave, onClose }: { onSave: () => void; onClose: () => void }) { diff --git a/src/app/(main)/settings/teams/TeamLeaveButton.tsx b/src/app/(main)/settings/teams/TeamLeaveButton.tsx index 97676e17..bc5c3229 100644 --- a/src/app/(main)/settings/teams/TeamLeaveButton.tsx +++ b/src/app/(main)/settings/teams/TeamLeaveButton.tsx @@ -1,7 +1,7 @@ import { Button, Icon, Icons, Modal, ModalTrigger, Text } from 'react-basics'; -import useMessages from 'components/hooks/useMessages'; -import useLocale from 'components/hooks/useLocale'; -import useUser from 'components/hooks/useUser'; +import { useMessages } from 'components/hooks'; +import { useLocale } from 'components/hooks'; +import { useUser } from 'components/hooks'; import TeamDeleteForm from './TeamLeaveForm'; export function TeamLeaveButton({ diff --git a/src/app/(main)/settings/teams/TeamLeaveForm.tsx b/src/app/(main)/settings/teams/TeamLeaveForm.tsx index 3b4d4703..e8fd3e5a 100644 --- a/src/app/(main)/settings/teams/TeamLeaveForm.tsx +++ b/src/app/(main)/settings/teams/TeamLeaveForm.tsx @@ -1,6 +1,6 @@ import { Button, Form, FormButtons, SubmitButton } from 'react-basics'; -import useApi from 'components/hooks/useApi'; -import useMessages from 'components/hooks/useMessages'; +import { useApi } from 'components/hooks'; +import { useMessages } from 'components/hooks'; import { setValue } from 'store/cache'; export function TeamLeaveForm({ diff --git a/src/app/(main)/settings/teams/TeamsAddButton.tsx b/src/app/(main)/settings/teams/TeamsAddButton.tsx index 09f9ecbb..871cdb76 100644 --- a/src/app/(main)/settings/teams/TeamsAddButton.tsx +++ b/src/app/(main)/settings/teams/TeamsAddButton.tsx @@ -1,6 +1,6 @@ import { Button, Icon, Modal, ModalTrigger, Text } from 'react-basics'; import Icons from 'components/icons'; -import useMessages from 'components/hooks/useMessages'; +import { useMessages } from 'components/hooks'; import TeamAddForm from './TeamAddForm'; export function TeamsAddButton({ onAdd }: { onAdd?: () => void }) { diff --git a/src/app/(main)/settings/teams/TeamsDataTable.tsx b/src/app/(main)/settings/teams/TeamsDataTable.tsx index 2424e464..b2ac7e16 100644 --- a/src/app/(main)/settings/teams/TeamsDataTable.tsx +++ b/src/app/(main)/settings/teams/TeamsDataTable.tsx @@ -1,8 +1,8 @@ 'use client'; import DataTable from 'components/common/DataTable'; import TeamsTable from 'app/(main)/settings/teams/TeamsTable'; -import useApi from 'components/hooks/useApi'; -import useFilterQuery from 'components/hooks/useFilterQuery'; +import { useApi } from 'components/hooks'; +import { useFilterQuery } from 'components/hooks'; import useCache from 'store/cache'; export function TeamsDataTable() { diff --git a/src/app/(main)/settings/teams/TeamsHeader.tsx b/src/app/(main)/settings/teams/TeamsHeader.tsx index 3a98318d..f7d49bd5 100644 --- a/src/app/(main)/settings/teams/TeamsHeader.tsx +++ b/src/app/(main)/settings/teams/TeamsHeader.tsx @@ -2,8 +2,8 @@ import { Flexbox } from 'react-basics'; import PageHeader from 'components/layout/PageHeader'; import { ROLES } from 'lib/constants'; -import useUser from 'components/hooks/useUser'; -import useMessages from 'components/hooks/useMessages'; +import { useUser } from 'components/hooks'; +import { useMessages } from 'components/hooks'; import TeamsJoinButton from './TeamsJoinButton'; import TeamsAddButton from './TeamsAddButton'; diff --git a/src/app/(main)/settings/teams/TeamsJoinButton.tsx b/src/app/(main)/settings/teams/TeamsJoinButton.tsx index f8d2fa23..45a2142e 100644 --- a/src/app/(main)/settings/teams/TeamsJoinButton.tsx +++ b/src/app/(main)/settings/teams/TeamsJoinButton.tsx @@ -1,6 +1,6 @@ import { Button, Icon, Modal, ModalTrigger, Text, useToasts } from 'react-basics'; import Icons from 'components/icons'; -import useMessages from 'components/hooks/useMessages'; +import { useMessages } from 'components/hooks'; import TeamJoinForm from './TeamJoinForm'; export function TeamsJoinButton() { diff --git a/src/app/(main)/settings/teams/TeamsTable.tsx b/src/app/(main)/settings/teams/TeamsTable.tsx index 852b4ff4..7cc73ed3 100644 --- a/src/app/(main)/settings/teams/TeamsTable.tsx +++ b/src/app/(main)/settings/teams/TeamsTable.tsx @@ -1,10 +1,9 @@ 'use client'; -import useMessages from 'components/hooks/useMessages'; -import useUser from 'components/hooks/useUser'; -import { ROLES } from 'lib/constants'; -import Link from 'next/link'; import { Button, GridColumn, GridTable, Icon, Icons, Text, useBreakpoint } from 'react-basics'; -import TeamLeaveButton from './TeamLeaveButton'; +import Link from 'next/link'; +import { useMessages } from 'components/hooks'; +import { useUser } from 'components/hooks'; +import { ROLES } from 'lib/constants'; export function TeamsTable({ data = [] }: { data: any[] }) { const { formatMessage, labels } = useMessages(); @@ -25,17 +24,28 @@ export function TeamsTable({ data = [] }: { data: any[] }) { {row => { - const { id, name, teamUser } = row; + const { id, teamUser } = row; const owner = teamUser.find(({ role }) => role === ROLES.teamOwner); const isOwner = user.id === owner?.userId; return ( <> - {!isOwner && } - + {isOwner && ( + + + + )} + diff --git a/src/app/(main)/settings/teams/[id]/TeamData.tsx b/src/app/(main)/settings/teams/[id]/TeamData.tsx index f2983ea5..14b20dc3 100644 --- a/src/app/(main)/settings/teams/[id]/TeamData.tsx +++ b/src/app/(main)/settings/teams/[id]/TeamData.tsx @@ -1,5 +1,5 @@ import { ActionForm, Button, Modal, ModalTrigger } from 'react-basics'; -import useMessages from 'components/hooks/useMessages'; +import { useMessages } from 'components/hooks'; import TeamDeleteForm from '../TeamDeleteForm'; export function TeamData({ teamId }: { teamId: string; onSave?: (value: string) => void }) { diff --git a/src/app/(main)/settings/teams/[id]/TeamEditForm.tsx b/src/app/(main)/settings/teams/[id]/TeamEditForm.tsx index 420afe9b..4f728af4 100644 --- a/src/app/(main)/settings/teams/[id]/TeamEditForm.tsx +++ b/src/app/(main)/settings/teams/[id]/TeamEditForm.tsx @@ -10,8 +10,8 @@ import { } from 'react-basics'; import { getRandomChars } from 'next-basics'; import { useRef, useState } from 'react'; -import useApi from 'components/hooks/useApi'; -import useMessages from 'components/hooks/useMessages'; +import { useApi } from 'components/hooks'; +import { useMessages } from 'components/hooks'; const generateId = () => getRandomChars(16); diff --git a/src/app/(main)/settings/teams/[id]/TeamMemberRemoveButton.tsx b/src/app/(main)/settings/teams/[id]/TeamMemberRemoveButton.tsx index cef2977e..9b33ed6b 100644 --- a/src/app/(main)/settings/teams/[id]/TeamMemberRemoveButton.tsx +++ b/src/app/(main)/settings/teams/[id]/TeamMemberRemoveButton.tsx @@ -1,5 +1,5 @@ -import useApi from 'components/hooks/useApi'; -import useMessages from 'components/hooks/useMessages'; +import { useApi } from 'components/hooks'; +import { useMessages } from 'components/hooks'; import { Icon, Icons, LoadingButton, Text } from 'react-basics'; import { setValue } from 'store/cache'; diff --git a/src/app/(main)/settings/teams/[id]/TeamMembers.tsx b/src/app/(main)/settings/teams/[id]/TeamMembers.tsx index a84fad10..42286bc0 100644 --- a/src/app/(main)/settings/teams/[id]/TeamMembers.tsx +++ b/src/app/(main)/settings/teams/[id]/TeamMembers.tsx @@ -1,5 +1,5 @@ -import useApi from 'components/hooks/useApi'; -import useFilterQuery from 'components/hooks/useFilterQuery'; +import { useApi } from 'components/hooks'; +import { useFilterQuery } from 'components/hooks'; import DataTable from 'components/common/DataTable'; import useCache from 'store/cache'; import TeamMembersTable from './TeamMembersTable'; diff --git a/src/app/(main)/settings/teams/[id]/TeamMembersTable.tsx b/src/app/(main)/settings/teams/[id]/TeamMembersTable.tsx index a08c746b..c4c333ce 100644 --- a/src/app/(main)/settings/teams/[id]/TeamMembersTable.tsx +++ b/src/app/(main)/settings/teams/[id]/TeamMembersTable.tsx @@ -1,6 +1,6 @@ import { GridColumn, GridTable, useBreakpoint } from 'react-basics'; -import useMessages from 'components/hooks/useMessages'; -import useUser from 'components/hooks/useUser'; +import { useMessages } from 'components/hooks'; +import { useUser } from 'components/hooks'; import { ROLES } from 'lib/constants'; import TeamMemberRemoveButton from './TeamMemberRemoveButton'; diff --git a/src/app/(main)/settings/teams/[id]/TeamSettings.tsx b/src/app/(main)/settings/teams/[id]/TeamSettings.tsx index c6285774..44f6d221 100644 --- a/src/app/(main)/settings/teams/[id]/TeamSettings.tsx +++ b/src/app/(main)/settings/teams/[id]/TeamSettings.tsx @@ -3,9 +3,9 @@ import { useEffect, useState } from 'react'; import { Item, Loading, Tabs, useToasts, Flexbox } from 'react-basics'; import PageHeader from 'components/layout/PageHeader'; import { ROLES } from 'lib/constants'; -import useUser from 'components/hooks/useUser'; -import useApi from 'components/hooks/useApi'; -import useMessages from 'components/hooks/useMessages'; +import { useUser } from 'components/hooks'; +import { useApi } from 'components/hooks'; +import { useMessages } from 'components/hooks'; import TeamEditForm from './TeamEditForm'; import TeamMembers from './TeamMembers'; import TeamWebsites from './TeamWebsites'; diff --git a/src/app/(main)/settings/teams/[id]/TeamWebsiteRemoveButton.tsx b/src/app/(main)/settings/teams/[id]/TeamWebsiteRemoveButton.tsx index 0c039d4e..76ffdae4 100644 --- a/src/app/(main)/settings/teams/[id]/TeamWebsiteRemoveButton.tsx +++ b/src/app/(main)/settings/teams/[id]/TeamWebsiteRemoveButton.tsx @@ -1,5 +1,5 @@ -import useApi from 'components/hooks/useApi'; -import useMessages from 'components/hooks/useMessages'; +import { useApi } from 'components/hooks'; +import { useMessages } from 'components/hooks'; import { Icon, Icons, LoadingButton, Text } from 'react-basics'; export function TeamWebsiteRemoveButton({ teamId, websiteId, onSave }) { diff --git a/src/app/(main)/settings/teams/[id]/TeamWebsites.tsx b/src/app/(main)/settings/teams/[id]/TeamWebsites.tsx index d71ebd99..24d38bc3 100644 --- a/src/app/(main)/settings/teams/[id]/TeamWebsites.tsx +++ b/src/app/(main)/settings/teams/[id]/TeamWebsites.tsx @@ -1,27 +1,7 @@ -import WebsitesTable from 'app/(main)/settings/websites/WebsitesTable'; -import DataTable from 'components/common/DataTable'; -import useFilterQuery from 'components/hooks/useFilterQuery'; -import useApi from 'components/hooks/useApi'; -import useUser from 'components/hooks/useUser'; -import useCache from 'store/cache'; +import WebsitesDataTable from 'app/(main)/settings/websites/WebsitesDataTable'; export function TeamWebsites({ teamId }: { teamId: string; readOnly: boolean }) { - const { get } = useApi(); - const { user } = useUser(); - const modified = useCache(state => state?.['team:websites']); - const queryResult = useFilterQuery({ - queryKey: ['team:websites', { teamId, modified }], - queryFn: params => { - return get(`/teams/${teamId}/websites`, { - ...params, - }); - }, - enabled: !!user, - }); - - return ( - {({ data }) => } - ); + return ; } export default TeamWebsites; diff --git a/src/app/(main)/settings/teams/[id]/TeamWebsitesTable.tsx b/src/app/(main)/settings/teams/[id]/TeamWebsitesTable.tsx index 8811b8bc..2fb691a2 100644 --- a/src/app/(main)/settings/teams/[id]/TeamWebsitesTable.tsx +++ b/src/app/(main)/settings/teams/[id]/TeamWebsitesTable.tsx @@ -1,6 +1,6 @@ import Link from 'next/link'; import { Button, GridColumn, GridTable, Icon, Icons, Text } from 'react-basics'; -import useMessages from 'components/hooks/useMessages'; +import { useMessages } from 'components/hooks'; export function TeamWebsitesTable({ data = [], diff --git a/src/app/(main)/settings/users/UserAddButton.tsx b/src/app/(main)/settings/users/UserAddButton.tsx index 1158ecec..571abf5a 100644 --- a/src/app/(main)/settings/users/UserAddButton.tsx +++ b/src/app/(main)/settings/users/UserAddButton.tsx @@ -1,6 +1,6 @@ import { Button, Icon, Text, Modal, Icons, ModalTrigger, useToasts } from 'react-basics'; import UserAddForm from './UserAddForm'; -import useMessages from 'components/hooks/useMessages'; +import { useMessages } from 'components/hooks'; import { setValue } from 'store/cache'; export function UserAddButton({ onSave }: { onSave?: () => void }) { diff --git a/src/app/(main)/settings/users/UserAddForm.tsx b/src/app/(main)/settings/users/UserAddForm.tsx index 8c153775..0b15e422 100644 --- a/src/app/(main)/settings/users/UserAddForm.tsx +++ b/src/app/(main)/settings/users/UserAddForm.tsx @@ -10,9 +10,9 @@ import { SubmitButton, Button, } from 'react-basics'; -import useApi from 'components/hooks/useApi'; +import { useApi } from 'components/hooks'; import { ROLES } from 'lib/constants'; -import useMessages from 'components/hooks/useMessages'; +import { useMessages } from 'components/hooks'; export function UserAddForm({ onSave, onClose }) { const { post, useMutation } = useApi(); diff --git a/src/app/(main)/settings/users/UserDeleteButton.tsx b/src/app/(main)/settings/users/UserDeleteButton.tsx index 775004a8..197ddbe5 100644 --- a/src/app/(main)/settings/users/UserDeleteButton.tsx +++ b/src/app/(main)/settings/users/UserDeleteButton.tsx @@ -1,6 +1,6 @@ import { Button, Icon, Icons, Modal, ModalTrigger, Text } from 'react-basics'; -import useMessages from 'components/hooks/useMessages'; -import useUser from 'components/hooks/useUser'; +import { useMessages } from 'components/hooks'; +import { useUser } from 'components/hooks'; import UserDeleteForm from './UserDeleteForm'; export function UserDeleteButton({ diff --git a/src/app/(main)/settings/users/UserDeleteForm.tsx b/src/app/(main)/settings/users/UserDeleteForm.tsx index eaa8e481..08ba6724 100644 --- a/src/app/(main)/settings/users/UserDeleteForm.tsx +++ b/src/app/(main)/settings/users/UserDeleteForm.tsx @@ -1,6 +1,6 @@ import { Button, Form, FormButtons, SubmitButton } from 'react-basics'; -import useApi from 'components/hooks/useApi'; -import useMessages from 'components/hooks/useMessages'; +import { useApi } from 'components/hooks'; +import { useMessages } from 'components/hooks'; export function UserDeleteForm({ userId, username, onSave, onClose }) { const { formatMessage, FormattedMessage, labels, messages } = useMessages(); diff --git a/src/app/(main)/settings/users/UserEditForm.tsx b/src/app/(main)/settings/users/UserEditForm.tsx index 0b823a94..cc8014d7 100644 --- a/src/app/(main)/settings/users/UserEditForm.tsx +++ b/src/app/(main)/settings/users/UserEditForm.tsx @@ -9,9 +9,9 @@ import { SubmitButton, PasswordField, } from 'react-basics'; -import useApi from 'components/hooks/useApi'; +import { useApi } from 'components/hooks'; import { ROLES } from 'lib/constants'; -import useMessages from 'components/hooks/useMessages'; +import { useMessages } from 'components/hooks'; export function UserEditForm({ userId, diff --git a/src/app/(main)/settings/users/UserWebsites.tsx b/src/app/(main)/settings/users/UserWebsites.tsx index 3897b5b0..da7ba7a2 100644 --- a/src/app/(main)/settings/users/UserWebsites.tsx +++ b/src/app/(main)/settings/users/UserWebsites.tsx @@ -1,7 +1,7 @@ import Page from 'components/layout/Page'; -import useApi from 'components/hooks/useApi'; +import { useApi } from 'components/hooks'; import WebsitesTable from 'app/(main)/settings/websites/WebsitesTable'; -import useFilterQuery from 'components/hooks/useFilterQuery'; +import { useFilterQuery } from 'components/hooks'; import DataTable from 'components/common/DataTable'; export function UserWebsites({ userId }) { diff --git a/src/app/(main)/settings/users/UsersDataTable.tsx b/src/app/(main)/settings/users/UsersDataTable.tsx index 77243f60..ed37787d 100644 --- a/src/app/(main)/settings/users/UsersDataTable.tsx +++ b/src/app/(main)/settings/users/UsersDataTable.tsx @@ -1,6 +1,6 @@ 'use client'; -import useApi from 'components/hooks/useApi'; -import useFilterQuery from 'components/hooks/useFilterQuery'; +import { useApi } from 'components/hooks'; +import { useFilterQuery } from 'components/hooks'; import DataTable from 'components/common/DataTable'; import UsersTable from './UsersTable'; import useCache from 'store/cache'; diff --git a/src/app/(main)/settings/users/UsersHeader.tsx b/src/app/(main)/settings/users/UsersHeader.tsx index 0901a6fb..20c5f898 100644 --- a/src/app/(main)/settings/users/UsersHeader.tsx +++ b/src/app/(main)/settings/users/UsersHeader.tsx @@ -1,6 +1,6 @@ 'use client'; import PageHeader from 'components/layout/PageHeader'; -import useMessages from 'components/hooks/useMessages'; +import { useMessages } from 'components/hooks'; import UserAddButton from './UserAddButton'; export function UsersHeader({ onAdd }: { onAdd?: () => void }) { diff --git a/src/app/(main)/settings/users/UsersTable.tsx b/src/app/(main)/settings/users/UsersTable.tsx index 13f3b6f8..036c3de6 100644 --- a/src/app/(main)/settings/users/UsersTable.tsx +++ b/src/app/(main)/settings/users/UsersTable.tsx @@ -2,8 +2,8 @@ import { Button, Text, Icon, Icons, GridTable, GridColumn, useBreakpoint } from import { formatDistance } from 'date-fns'; import Link from 'next/link'; import { ROLES } from 'lib/constants'; -import useMessages from 'components/hooks/useMessages'; -import useLocale from 'components/hooks/useLocale'; +import { useMessages } from 'components/hooks'; +import { useLocale } from 'components/hooks'; import UserDeleteButton from './UserDeleteButton'; export function UsersTable({ diff --git a/src/app/(main)/settings/users/[id]/UserSettings.tsx b/src/app/(main)/settings/users/[id]/UserSettings.tsx index d9b149c3..070b8aa2 100644 --- a/src/app/(main)/settings/users/[id]/UserSettings.tsx +++ b/src/app/(main)/settings/users/[id]/UserSettings.tsx @@ -3,8 +3,8 @@ import { Key, useEffect, useState } from 'react'; import { Item, Loading, Tabs, useToasts } from 'react-basics'; import UserEditForm from '../UserEditForm'; import PageHeader from 'components/layout/PageHeader'; -import useApi from 'components/hooks/useApi'; -import useMessages from 'components/hooks/useMessages'; +import { useApi } from 'components/hooks'; +import { useMessages } from 'components/hooks'; import UserWebsites from '../UserWebsites'; export function UserSettings({ userId }) { diff --git a/src/app/(main)/settings/websites/WebsiteAddButton.tsx b/src/app/(main)/settings/websites/WebsiteAddButton.tsx index 7b4c92de..edda0c1b 100644 --- a/src/app/(main)/settings/websites/WebsiteAddButton.tsx +++ b/src/app/(main)/settings/websites/WebsiteAddButton.tsx @@ -1,9 +1,9 @@ import { Button, Icon, Icons, Modal, ModalTrigger, Text, useToasts } from 'react-basics'; import WebsiteAddForm from './WebsiteAddForm'; -import useMessages from 'components/hooks/useMessages'; +import { useMessages } from 'components/hooks'; import { setValue } from 'store/cache'; -export function WebsiteAddButton({ onSave }: { onSave?: () => void }) { +export function WebsiteAddButton({ teamId, onSave }: { teamId: string; onSave?: () => void }) { const { formatMessage, labels, messages } = useMessages(); const { showToast } = useToasts(); @@ -22,7 +22,9 @@ export function WebsiteAddButton({ onSave }: { onSave?: () => void }) { {formatMessage(labels.addWebsite)} - {(close: () => void) => } + {(close: () => void) => ( + + )} ); diff --git a/src/app/(main)/settings/websites/WebsiteAddForm.tsx b/src/app/(main)/settings/websites/WebsiteAddForm.tsx index 6d8fb8c3..64c457d1 100644 --- a/src/app/(main)/settings/websites/WebsiteAddForm.tsx +++ b/src/app/(main)/settings/websites/WebsiteAddForm.tsx @@ -7,18 +7,26 @@ import { Button, SubmitButton, } from 'react-basics'; -import useApi from 'components/hooks/useApi'; +import { useApi } from 'components/hooks'; import { DOMAIN_REGEX } from 'lib/constants'; -import useMessages from 'components/hooks/useMessages'; +import { useMessages } from 'components/hooks'; import { useContext } from 'react'; import SettingsContext from '../SettingsContext'; -export function WebsiteAddForm({ onSave, onClose }: { onSave?: () => void; onClose?: () => void }) { +export function WebsiteAddForm({ + teamId, + onSave, + onClose, +}: { + teamId: string; + onSave?: () => void; + onClose?: () => void; +}) { const { formatMessage, labels, messages } = useMessages(); const { websitesUrl } = useContext(SettingsContext); const { post, useMutation } = useApi(); const { mutate, error, isPending } = useMutation({ - mutationFn: (data: any) => post(websitesUrl, data), + mutationFn: (data: any) => post(websitesUrl, { ...data, teamId }), }); const handleSubmit = async (data: any) => { diff --git a/src/app/(main)/settings/websites/WebsiteSettings.tsx b/src/app/(main)/settings/websites/WebsiteSettings.tsx index 0c5ce614..031307b0 100644 --- a/src/app/(main)/settings/websites/WebsiteSettings.tsx +++ b/src/app/(main)/settings/websites/WebsiteSettings.tsx @@ -8,8 +8,8 @@ import WebsiteEditForm from './[id]/WebsiteEditForm'; import WebsiteData from './[id]/WebsiteData'; import TrackingCode from './[id]/TrackingCode'; import ShareUrl from './[id]/ShareUrl'; -import useApi from 'components/hooks/useApi'; -import useMessages from 'components/hooks/useMessages'; +import { useApi } from 'components/hooks'; +import { useMessages } from 'components/hooks'; import SettingsContext from '../SettingsContext'; export function WebsiteSettings({ websiteId, openExternal = false }) { diff --git a/src/app/(main)/settings/websites/WebsitesDataTable.tsx b/src/app/(main)/settings/websites/WebsitesDataTable.tsx index 7ed2a3b3..8f54439c 100644 --- a/src/app/(main)/settings/websites/WebsitesDataTable.tsx +++ b/src/app/(main)/settings/websites/WebsitesDataTable.tsx @@ -1,14 +1,12 @@ 'use client'; -import { ReactNode, useContext } from 'react'; +import { ReactNode } from 'react'; import WebsitesTable from 'app/(main)/settings/websites/WebsitesTable'; -import useApi from 'components/hooks/useApi'; import DataTable from 'components/common/DataTable'; -import useFilterQuery from 'components/hooks/useFilterQuery'; -import useCache from 'store/cache'; -import SettingsContext from '../SettingsContext'; +import useWebsites from 'components/hooks/queries/useWebsites'; export interface WebsitesDataTableProps { - userId: string; + userId?: string; + teamId?: string; allowEdit?: boolean; allowView?: boolean; showActions?: boolean; @@ -17,24 +15,13 @@ export interface WebsitesDataTableProps { export function WebsitesDataTable({ userId, + teamId, allowEdit = true, allowView = true, showActions = true, children, }: WebsitesDataTableProps) { - const { get } = useApi(); - const modified = useCache((state: any) => state?.websites); - const { websitesUrl } = useContext(SettingsContext); - - const queryResult = useFilterQuery({ - queryKey: ['websites', { modified }], - queryFn: (params: any) => { - return get(websitesUrl, { - ...params, - }); - }, - enabled: !!userId, - }); + const queryResult = useWebsites({ userId, teamId }); return ( diff --git a/src/app/(main)/settings/websites/WebsitesHeader.tsx b/src/app/(main)/settings/websites/WebsitesHeader.tsx index 61bfb886..7809b0c4 100644 --- a/src/app/(main)/settings/websites/WebsitesHeader.tsx +++ b/src/app/(main)/settings/websites/WebsitesHeader.tsx @@ -1,14 +1,19 @@ 'use client'; -import useMessages from 'components/hooks/useMessages'; +import { useMessages } from 'components/hooks'; import PageHeader from 'components/layout/PageHeader'; import WebsiteAddButton from './WebsiteAddButton'; -export function WebsitesHeader({ showActions = true }) { +export interface WebsitesHeaderProps { + teamId?: string; + showActions?: boolean; +} + +export function WebsitesHeader({ teamId, showActions = true }: WebsitesHeaderProps) { const { formatMessage, labels } = useMessages(); return ( - {!process.env.cloudMode && showActions && } + {!process.env.cloudMode && showActions && } ); } diff --git a/src/app/(main)/settings/websites/WebsitesTable.tsx b/src/app/(main)/settings/websites/WebsitesTable.tsx index 06c4b586..5c36bde6 100644 --- a/src/app/(main)/settings/websites/WebsitesTable.tsx +++ b/src/app/(main)/settings/websites/WebsitesTable.tsx @@ -1,15 +1,15 @@ -import { ReactNode, useContext } from 'react'; +import { ReactNode } from 'react'; import Link from 'next/link'; import { Button, Text, Icon, Icons, GridTable, GridColumn, useBreakpoint } from 'react-basics'; -import useMessages from 'components/hooks/useMessages'; -import useUser from 'components/hooks/useUser'; -import SettingsContext from '../SettingsContext'; +import { useMessages } from 'components/hooks'; +import { useUser } from 'components/hooks'; export interface WebsitesTableProps { data: any[]; showActions?: boolean; allowEdit?: boolean; allowView?: boolean; + teamId?: string; children?: ReactNode; } @@ -18,12 +18,12 @@ export function WebsitesTable({ showActions, allowEdit, allowView, + teamId, children, }: WebsitesTableProps) { const { formatMessage, labels } = useMessages(); const { user } = useUser(); const breakpoint = useBreakpoint(); - const { settingsPath, websitesPath } = useContext(SettingsContext); return ( @@ -32,15 +32,13 @@ export function WebsitesTable({ {showActions && ( {row => { - const { - id, - user: { id: ownerId }, - } = row; + const { id } = row; + const isOwner = row.userId === user.id || row.teamId === teamId; return ( <> - {allowEdit && ownerId === user.id && ( - + {allowEdit && isOwner && ( +