From fde7705850c04febbd4724e88be38ab15707141b Mon Sep 17 00:00:00 2001 From: Myzel394 <50424412+Myzel394@users.noreply.github.com> Date: Thu, 2 Feb 2023 21:12:14 +0100 Subject: [PATCH] added ReservedAliasesForm.tsx --- public/locales/en-US/translation.json | 6 +++- src/App.tsx | 3 +- src/apis/get-admin-users.ts | 19 ++++++++++++ src/apis/get-reserved-aliases.ts | 23 ++++++++++++++ src/apis/index.ts | 4 +++ .../AdminPage/ReservedAliasesForm.tsx | 17 ++++++++++ src/routes/AdminRoute.tsx | 31 +++++++++++++------ src/server-types.ts | 10 ++++++ 8 files changed, 101 insertions(+), 12 deletions(-) create mode 100644 src/apis/get-admin-users.ts create mode 100644 src/apis/get-reserved-aliases.ts create mode 100644 src/route-widgets/AdminPage/ReservedAliasesForm.tsx diff --git a/public/locales/en-US/translation.json b/public/locales/en-US/translation.json index 8cffdb8..8f0ede7 100644 --- a/public/locales/en-US/translation.json +++ b/public/locales/en-US/translation.json @@ -279,6 +279,9 @@ "LogoutRoute": { "title": "Log out", "description": "We are logging you out..." + }, + "AdminRoute": { + "title": "Site configuration" } }, @@ -287,7 +290,8 @@ "overview": "Overview", "aliases": "Aliases", "reports": "Reports", - "settings": "Settings" + "settings": "Settings", + "admin": "Admin" }, "AuthenticateRoute": { "signup": "Sign up", diff --git a/src/App.tsx b/src/App.tsx index 8f2111d..8771a11 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -24,6 +24,7 @@ import SettingsRoute from "~/routes/SettingsRoute" import SignupRoute from "~/routes/SignupRoute" import VerifyEmailRoute from "~/routes/VerifyEmailRoute" +import AdminRoute from "~/routes/AdminRoute" import I18nHandler from "./I18nHandler" import "./init-i18n" @@ -101,7 +102,7 @@ const router = createBrowserRouter([ }, { path: "/admin", - element: , + element: , }, ], }, diff --git a/src/apis/get-admin-users.ts b/src/apis/get-admin-users.ts new file mode 100644 index 0000000..8d34dc6 --- /dev/null +++ b/src/apis/get-admin-users.ts @@ -0,0 +1,19 @@ +import {client} from "~/constants/axios-client" + +export interface GetAdminUsersResponse { + users: Array<{ + id: string + email: { + id: string + address: string + } + }> +} + +export default async function getAdminUsers(): Promise { + const {data} = await client.get(`${import.meta.env.VITE_SERVER_BASE_URL}/v1/admin/users`, { + withCredentials: true, + }) + + return data +} diff --git a/src/apis/get-reserved-aliases.ts b/src/apis/get-reserved-aliases.ts new file mode 100644 index 0000000..8cfb5ce --- /dev/null +++ b/src/apis/get-reserved-aliases.ts @@ -0,0 +1,23 @@ +import {GetPageData, PaginationResult, ReservedAlias} from "~/server-types" +import {client} from "~/constants/axios-client" + +export interface GetReservedAliasesData extends GetPageData { + query?: string +} + +export default async function getReservedAliases({ + query, + size, + page, +}: GetReservedAliasesData = {}): Promise> { + const {data} = await client.get(`${import.meta.env.VITE_SERVER_BASE_URL}/v1/reserved-alias/`, { + withCredentials: true, + params: { + query, + size, + page, + }, + }) + + return data +} diff --git a/src/apis/index.ts b/src/apis/index.ts index 81a7522..ddf3005 100644 --- a/src/apis/index.ts +++ b/src/apis/index.ts @@ -38,3 +38,7 @@ export * from "./delete-report" export {default as deleteReport} from "./delete-report" export * from "./get-me" export {default as getMe} from "./get-me" +export * from "./get-admin-users" +export {default as getAdminUsers} from "./get-admin-users" +export * from "./get-reserved-aliases" +export {default as getReservedAliases} from "./get-reserved-aliases" diff --git a/src/route-widgets/AdminPage/ReservedAliasesForm.tsx b/src/route-widgets/AdminPage/ReservedAliasesForm.tsx new file mode 100644 index 0000000..86fac79 --- /dev/null +++ b/src/route-widgets/AdminPage/ReservedAliasesForm.tsx @@ -0,0 +1,17 @@ +import {ReactElement} from "react" +import {AxiosError} from "axios" + +import {useQuery} from "@tanstack/react-query" + +import {GetAdminUsersResponse, getAdminUsers} from "~/apis" + +export interface ReservedAliasesFormProps {} + +export default function ReservedAliasesForm({}: ReservedAliasesFormProps): ReactElement { + const {data: {users} = {}} = useQuery( + ["getAdminUsers"], + getAdminUsers, + ) + + console.log(users) +} diff --git a/src/routes/AdminRoute.tsx b/src/routes/AdminRoute.tsx index e2b9f66..c34fda8 100644 --- a/src/routes/AdminRoute.tsx +++ b/src/routes/AdminRoute.tsx @@ -1,15 +1,26 @@ -import {ReactElement, useLayoutEffect} from "react"; -import {useNavigateToNext, useUser} from "~/hooks"; +import {ReactElement, useLayoutEffect} from "react" +import {useTranslation} from "react-i18next" + +import {SimplePageBuilder} from "~/components" +import {useNavigateToNext, useUser} from "~/hooks" +import ReservedAliasesForm from "~/route-widgets/AdminPage/ReservedAliasesForm" +import ReservedAliasesList from "~/route-widgets/AdminPage/ReservedAliasesList" export default function AdminRoute(): ReactElement { - const navigateToNext = useNavigateToNext(); - const user = useUser(); - - useLayoutEffect(() => { - if (!user.isAdmin) { - navigateToNext(); - } - }, [user.isAdmin, navigateToNext]) + const {t} = useTranslation() + const navigateToNext = useNavigateToNext() + const user = useUser() + useLayoutEffect(() => { + if (!user.isAdmin) { + navigateToNext() + } + }, [user.isAdmin, navigateToNext]) + return ( + + + + + ) } diff --git a/src/server-types.ts b/src/server-types.ts index eeef306..8b6cb7c 100644 --- a/src/server-types.ts +++ b/src/server-types.ts @@ -101,6 +101,16 @@ export interface Alias { prefExpandUrlShorteners: boolean | null } +export interface ReservedAlias { + id: string + domain: string + local: string + users: Array<{ + id: string + email: string + }> +} + export interface AliasNote { version: "1.0" data: {