From b4b0514bff4fd9452fa81e2d6ad7ee9a8bc32eb2 Mon Sep 17 00:00:00 2001 From: Myzel394 <50424412+Myzel394@users.noreply.github.com> Date: Sat, 11 Mar 2023 14:02:44 +0100 Subject: [PATCH] feat(api-key): Add auto create --- .../CreateNewAPIKeyDialog.tsx | 9 +++++-- src/routes/SettingsAPIKeysRoute.tsx | 27 +++++++++++++++++-- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/src/route-widgets/SettingsAPIKeysRoute/CreateNewAPIKeyDialog.tsx b/src/route-widgets/SettingsAPIKeysRoute/CreateNewAPIKeyDialog.tsx index cdabcb5..4643728 100644 --- a/src/route-widgets/SettingsAPIKeysRoute/CreateNewAPIKeyDialog.tsx +++ b/src/route-widgets/SettingsAPIKeysRoute/CreateNewAPIKeyDialog.tsx @@ -48,6 +48,9 @@ export interface CreateNewAPIKeyDialogProps { open: boolean onClose: () => void onCreated: (key: APIKey & {key: string}) => void + + prefilledLabel: string + prefilledScopes: APIKeyScope[] } const PRESET_DAYS: number[] = [1, 7, 30, 180, 360] @@ -76,6 +79,8 @@ const normalizeTime = (date: Date) => export default function CreateNewAPIKeyDialog({ open, + prefilledLabel, + prefilledScopes, onClose, onCreated, }: CreateNewAPIKeyDialogProps): ReactElement { @@ -108,9 +113,9 @@ export default function CreateNewAPIKeyDialog({ const formik = useFormik({ validationSchema: scheme, initialValues: { - label: "", + label: prefilledLabel, expiresAt: addDays(new Date(), 30), - scopes: [], + scopes: [...prefilledScopes], detail: "", }, onSubmit: async (values, {setErrors}) => { diff --git a/src/routes/SettingsAPIKeysRoute.tsx b/src/routes/SettingsAPIKeysRoute.tsx index 922f4b2..fd6973c 100644 --- a/src/routes/SettingsAPIKeysRoute.tsx +++ b/src/routes/SettingsAPIKeysRoute.tsx @@ -1,4 +1,4 @@ -import {ReactElement, useState} from "react" +import {ReactElement, useLayoutEffect, useState} from "react" import {useTranslation} from "react-i18next" import {useQuery} from "@tanstack/react-query" import {APIKey, PaginationResult} from "~/server-types" @@ -7,17 +7,38 @@ import {getAPIKeys} from "~/apis" import {QueryResult, SimplePage} from "~/components" import {Button, List} from "@mui/material" import {MdAdd} from "react-icons/md" +import {useQueryParams} from "~/hooks" +import {isArray} from "lodash" +import {API_KEY_SCOPES} from "~/constants/values" +import {useNavigate} from "react-router-dom" import APIKeyListItem from "~/route-widgets/SettingsAPIKeysRoute/APIKeyListItem" import CreateNewAPIKeyDialog from "../route-widgets/SettingsAPIKeysRoute/CreateNewAPIKeyDialog" import EmptyStateScreen from "~/route-widgets/SettingsAPIKeysRoute/EmptyStateScreen" export default function SettingsAPIKeysRoute(): ReactElement { const {t} = useTranslation("settings-api-keys") + const navigate = useNavigate() + + const rawParams = useQueryParams<{action?: any; scopes?: any; label?: any}>() + const params = { + action: rawParams.action === "create-new" ? "create-new" : undefined, + scopes: isArray(rawParams.scopes?.split(",")) + ? rawParams.scopes.split(",").filter((scope: string) => API_KEY_SCOPES.includes(scope)) + : [], + label: rawParams.label, + } + const queryKey = ["get_api_keys"] const query = useQuery, AxiosError>(queryKey, () => getAPIKeys()) const [createdAPIKey, setCreatedAPIKey] = useState<(APIKey & {key: string}) | null>(null) - const [createNew, setCreateNew] = useState(false) + const [createNew, setCreateNew] = useState(params.action === "create-new") + + useLayoutEffect(() => { + if (params.action === "create-new") { + navigate(location.pathname, {replace: true}) + } + }, [params.action, navigate]) return ( <> @@ -60,6 +81,8 @@ export default function SettingsAPIKeysRoute(): ReactElement { setCreateNew(false)} onCreated={key => { query.refetch()