From d43d40fd6b1c3239b72f1b3a10d8283a8dd44b8c Mon Sep 17 00:00:00 2001 From: Catalin Pit Date: Wed, 29 Nov 2023 14:43:26 +0200 Subject: [PATCH] feat: improvements to the newly created token message --- .../settings/token/delete-token-dialog.tsx | 16 +++++++--- apps/web/src/components/forms/token.tsx | 29 ++++++++++++++----- 2 files changed, 34 insertions(+), 11 deletions(-) diff --git a/apps/web/src/components/(dashboard)/settings/token/delete-token-dialog.tsx b/apps/web/src/components/(dashboard)/settings/token/delete-token-dialog.tsx index 9a60bd60b..f847cd793 100644 --- a/apps/web/src/components/(dashboard)/settings/token/delete-token-dialog.tsx +++ b/apps/web/src/components/(dashboard)/settings/token/delete-token-dialog.tsx @@ -1,5 +1,3 @@ -'use client'; - import { useEffect, useState } from 'react'; import { useRouter } from 'next/navigation'; @@ -34,9 +32,15 @@ export type DeleteTokenDialogProps = { trigger?: React.ReactNode; tokenId: number; tokenName: string; + onDelete: () => void; }; -export default function DeleteTokenDialog({ trigger, tokenId, tokenName }: DeleteTokenDialogProps) { +export default function DeleteTokenDialog({ + trigger, + tokenId, + tokenName, + onDelete, +}: DeleteTokenDialogProps) { const router = useRouter(); const { toast } = useToast(); const [isOpen, setIsOpen] = useState(false); @@ -51,7 +55,11 @@ export default function DeleteTokenDialog({ trigger, tokenId, tokenName }: Delet type TDeleteTokenByIdMutationSchema = z.infer; - const { mutateAsync: deleteTokenMutation } = trpc.apiToken.deleteTokenById.useMutation(); + const { mutateAsync: deleteTokenMutation } = trpc.apiToken.deleteTokenById.useMutation({ + onSuccess() { + onDelete(); + }, + }); const form = useForm({ resolver: zodResolver(ZDeleteTokenDialogSchema), diff --git a/apps/web/src/components/forms/token.tsx b/apps/web/src/components/forms/token.tsx index a92321e6b..85d6cc038 100644 --- a/apps/web/src/components/forms/token.tsx +++ b/apps/web/src/components/forms/token.tsx @@ -38,12 +38,13 @@ export const ApiTokenForm = ({ className }: ApiTokenFormProps) => { const router = useRouter(); const [, copy] = useCopyToClipboard(); const { toast } = useToast(); - const [newlyCreatedToken, setNewlyCreatedToken] = useState(''); + const [newlyCreatedToken, setNewlyCreatedToken] = useState({ id: 0, token: '' }); + const [showNewToken, setShowNewToken] = useState(false); const { data: tokens, isLoading: isTokensLoading } = trpc.apiToken.getTokens.useQuery(); const { mutateAsync: createTokenMutation } = trpc.apiToken.createToken.useMutation({ onSuccess(data) { - setNewlyCreatedToken(data.token); + setNewlyCreatedToken({ id: data.id, token: data.token }); }, }); @@ -54,6 +55,12 @@ export const ApiTokenForm = ({ className }: ApiTokenFormProps) => { }, }); + const onDelete = (tokenId: number) => { + if (tokenId === newlyCreatedToken.id) { + setShowNewToken((prev) => !prev); + } + }; + const copyToken = (token: string) => { void copy(token).then(() => { toast({ @@ -75,6 +82,7 @@ export const ApiTokenForm = ({ className }: ApiTokenFormProps) => { duration: 5000, }); + setShowNewToken(true); form.reset(); router.refresh(); } catch (error) { @@ -114,7 +122,6 @@ export const ApiTokenForm = ({ className }: ApiTokenFormProps) => {

{token.name} ({token.algorithm})

- {/*

{token.token}

*/}

Created:{' '} {token.createdAt @@ -137,20 +144,28 @@ export const ApiTokenForm = ({ className }: ApiTokenFormProps) => { }) : 'N/A'}

- + onDelete(token.id)} + /> ))} )} - {newlyCreatedToken && ( + {newlyCreatedToken.token && showNewToken && (

Your token was created successfully! Make sure to copy it because you won't be able to see it again!

-

{newlyCreatedToken}

-