diff --git a/template/app/main.wasp b/template/app/main.wasp index d1b3ea365..8643b6c3d 100644 --- a/template/app/main.wasp +++ b/template/app/main.wasp @@ -301,6 +301,6 @@ page NotFoundPage { route AdminMessagesRoute { path: "/admin/messages", to: AdminMessagesPage } page AdminMessagesPage { authRequired: true, - component: import AdminMessages from "@src/messages/MessagesPage" + component: import AdminMessages from "@src/admin/dashboards/messages/MessagesPage" } //#endregion diff --git a/template/app/src/admin/dashboards/analytics/AnalyticsDashboardPage.tsx b/template/app/src/admin/dashboards/analytics/AnalyticsDashboardPage.tsx index dbb93d423..81675efce 100644 --- a/template/app/src/admin/dashboards/analytics/AnalyticsDashboardPage.tsx +++ b/template/app/src/admin/dashboards/analytics/AnalyticsDashboardPage.tsx @@ -2,7 +2,6 @@ import { type AuthUser } from 'wasp/auth'; import { getDailyStats, useQuery } from 'wasp/client/operations'; import { cn } from '../../../lib/utils'; import DefaultLayout from '../../layout/DefaultLayout'; -import { useRedirectHomeUnlessUserIsAdmin } from '../../useRedirectHomeUnlessUserIsAdmin'; import RevenueAndProfitChart from './RevenueAndProfitChart'; import SourcesTable from './SourcesTable'; import TotalPageViewsCard from './TotalPageViewsCard'; @@ -11,10 +10,23 @@ import TotalRevenueCard from './TotalRevenueCard'; import TotalSignupsCard from './TotalSignupsCard'; const Dashboard = ({ user }: { user: AuthUser }) => { - useRedirectHomeUnlessUserIsAdmin({ user }); - const { data: stats, isLoading, error } = useQuery(getDailyStats); + if (error) { + return ( + +
+
+

Error

+

+ {error.message || 'Something went wrong while fetching stats.'} +

+
+
+
+ ); + } + return (
diff --git a/template/app/src/messages/MessageButton.tsx b/template/app/src/admin/dashboards/messages/MessageButton.tsx similarity index 100% rename from template/app/src/messages/MessageButton.tsx rename to template/app/src/admin/dashboards/messages/MessageButton.tsx diff --git a/template/app/src/admin/dashboards/messages/MessagesPage.tsx b/template/app/src/admin/dashboards/messages/MessagesPage.tsx new file mode 100644 index 000000000..1d63d5784 --- /dev/null +++ b/template/app/src/admin/dashboards/messages/MessagesPage.tsx @@ -0,0 +1,13 @@ +// TODO: Add messages page +import type { AuthUser } from "wasp/auth" +import DefaultLayout from "../../layout/DefaultLayout" + +function AdminMessages({user} : {user: AuthUser}) { + return ( + +
This page is under construction 🚧
+
+ ) +} + +export default AdminMessages diff --git a/template/app/src/admin/dashboards/users/UsersDashboardPage.tsx b/template/app/src/admin/dashboards/users/UsersDashboardPage.tsx index 9ebeb6276..c99e6ddce 100644 --- a/template/app/src/admin/dashboards/users/UsersDashboardPage.tsx +++ b/template/app/src/admin/dashboards/users/UsersDashboardPage.tsx @@ -2,11 +2,8 @@ import { type AuthUser } from 'wasp/auth'; import UsersTable from './UsersTable'; import Breadcrumb from '../../layout/Breadcrumb'; import DefaultLayout from '../../layout/DefaultLayout'; -import { useRedirectHomeUnlessUserIsAdmin } from '../../useRedirectHomeUnlessUserIsAdmin'; const Users = ({ user }: { user: AuthUser }) => { - useRedirectHomeUnlessUserIsAdmin({user}) - return ( diff --git a/template/app/src/admin/elements/calendar/CalendarPage.tsx b/template/app/src/admin/elements/calendar/CalendarPage.tsx index 3cd0a4ba4..3e3aaad1f 100644 --- a/template/app/src/admin/elements/calendar/CalendarPage.tsx +++ b/template/app/src/admin/elements/calendar/CalendarPage.tsx @@ -1,11 +1,8 @@ import { type AuthUser } from 'wasp/auth'; import Breadcrumb from '../../layout/Breadcrumb'; import DefaultLayout from '../../layout/DefaultLayout'; -import { useRedirectHomeUnlessUserIsAdmin } from '../../useRedirectHomeUnlessUserIsAdmin'; const Calendar = ({ user }: { user: AuthUser }) => { - useRedirectHomeUnlessUserIsAdmin({ user }); - return ( diff --git a/template/app/src/admin/elements/settings/SettingsPage.tsx b/template/app/src/admin/elements/settings/SettingsPage.tsx index 087d8ce38..bdbe378d5 100644 --- a/template/app/src/admin/elements/settings/SettingsPage.tsx +++ b/template/app/src/admin/elements/settings/SettingsPage.tsx @@ -9,11 +9,8 @@ import { Label } from '../../../components/ui/label'; import { Textarea } from '../../../components/ui/textarea'; import Breadcrumb from '../../layout/Breadcrumb'; import DefaultLayout from '../../layout/DefaultLayout'; -import { useRedirectHomeUnlessUserIsAdmin } from '../../useRedirectHomeUnlessUserIsAdmin'; const SettingsPage = ({ user }: { user: AuthUser }) => { - useRedirectHomeUnlessUserIsAdmin({ user }); - const handleSubmit = (event: FormEvent) => { // TODO add toast provider / wrapper event.preventDefault(); diff --git a/template/app/src/admin/elements/ui-elements/ButtonsPage.tsx b/template/app/src/admin/elements/ui-elements/ButtonsPage.tsx index 602859727..bb2ab25f5 100644 --- a/template/app/src/admin/elements/ui-elements/ButtonsPage.tsx +++ b/template/app/src/admin/elements/ui-elements/ButtonsPage.tsx @@ -3,11 +3,8 @@ import { type AuthUser } from 'wasp/auth'; import { Button } from '../../../components/ui/button'; import Breadcrumb from '../../layout/Breadcrumb'; import DefaultLayout from '../../layout/DefaultLayout'; -import { useRedirectHomeUnlessUserIsAdmin } from '../../useRedirectHomeUnlessUserIsAdmin'; const Buttons = ({ user }: { user: AuthUser }) => { - useRedirectHomeUnlessUserIsAdmin({ user }); - return ( diff --git a/template/app/src/admin/layout/DefaultLayout.tsx b/template/app/src/admin/layout/DefaultLayout.tsx index 9da0fca6a..176300a50 100644 --- a/template/app/src/admin/layout/DefaultLayout.tsx +++ b/template/app/src/admin/layout/DefaultLayout.tsx @@ -1,5 +1,6 @@ -import { FC, ReactNode, useState } from 'react'; import { type AuthUser } from 'wasp/auth'; +import { FC, ReactNode, useState } from 'react'; +import { Navigate } from 'react-router-dom'; import Header from './Header'; import Sidebar from './Sidebar'; @@ -11,6 +12,10 @@ interface Props { const DefaultLayout: FC = ({ children, user }) => { const [sidebarOpen, setSidebarOpen] = useState(false); + if (!user.isAdmin) { + return ; + } + return (
diff --git a/template/app/src/admin/layout/Header.tsx b/template/app/src/admin/layout/Header.tsx index ffe2f5a9a..9ac55e9da 100644 --- a/template/app/src/admin/layout/Header.tsx +++ b/template/app/src/admin/layout/Header.tsx @@ -1,7 +1,7 @@ import { type AuthUser } from 'wasp/auth'; import DarkModeSwitcher from '../../client/components/DarkModeSwitcher'; import { cn } from '../../lib/utils'; -import MessageButton from '../../messages/MessageButton'; +import MessageButton from '../dashboards/messages/MessageButton'; import { UserDropdown } from '../../user/UserDropdown'; const Header = (props: { diff --git a/template/app/src/admin/useRedirectHomeUnlessUserIsAdmin.ts b/template/app/src/admin/useRedirectHomeUnlessUserIsAdmin.ts deleted file mode 100644 index a17a3f6ef..000000000 --- a/template/app/src/admin/useRedirectHomeUnlessUserIsAdmin.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { type AuthUser } from 'wasp/auth'; -import { useEffect } from 'react'; -import { useNavigate } from 'react-router-dom'; - -export function useRedirectHomeUnlessUserIsAdmin({ user }: { user: AuthUser }) { - const navigate = useNavigate(); - - useEffect(() => { - if (!user.isAdmin) { - navigate('/'); - } - }, [user, history]); -} diff --git a/template/app/src/messages/MessagesPage.tsx b/template/app/src/messages/MessagesPage.tsx deleted file mode 100644 index c9c668f25..000000000 --- a/template/app/src/messages/MessagesPage.tsx +++ /dev/null @@ -1,13 +0,0 @@ -// TODO: Add messages page -import { AuthUser } from "wasp/auth" -import { useRedirectHomeUnlessUserIsAdmin } from "../admin/useRedirectHomeUnlessUserIsAdmin" - -function AdminMessages({user} : {user: AuthUser}) { - useRedirectHomeUnlessUserIsAdmin({user}) - - return ( -
Hello world!
- ) -} - -export default AdminMessages