diff --git a/src/modals/copy-regristration-token/copy-registration-token.modal.tsx b/src/modals/copy-regristration-token/copy-registration-token.modal.tsx new file mode 100644 index 000000000..f4b2615e2 --- /dev/null +++ b/src/modals/copy-regristration-token/copy-registration-token.modal.tsx @@ -0,0 +1,43 @@ +import { Button, Mark, Stack, Text } from '@mantine/core'; +import { ContextModalProps, modals } from '@mantine/modals'; +import Link from 'next/link'; + +export const CopyRegistrationToken = ({ + context, + id, + innerProps, +}: ContextModalProps<{ id: string; token: string; expire: Date }>) => { + return ( + + + Your invitation has been generated. After this modal closes,{' '} + you'll not be able to copy this link anymore. If you do no longer wish to invite said + person, you can delete this invitation any time. + + + Invitation link + + + ID: + + {innerProps.id} + + + Token: + + {innerProps.token} + + + + + + ); +}; diff --git a/src/modals/create-registration-token/create-registration-token.modal.tsx b/src/modals/create-registration-token/create-registration-token.modal.tsx index ffc65a6cf..de3ec9a4e 100644 --- a/src/modals/create-registration-token/create-registration-token.modal.tsx +++ b/src/modals/create-registration-token/create-registration-token.modal.tsx @@ -14,9 +14,15 @@ export const CreateRegistrationTokenModal = ({ }: ContextModalProps<{}>) => { const apiContext = api.useContext(); const { isLoading, mutateAsync } = api.registrationTokens.createRegistrationToken.useMutation({ - onSuccess: async () => { + onSuccess: async (data) => { await apiContext.registrationTokens.getAllInvites.invalidate(); modals.close(id); + + modals.openContextModal({ + modal: 'copyRegistrationTokenModal', + title: Copy invitation, + innerProps: data, + }) }, }); diff --git a/src/modals/modals.ts b/src/modals/modals.ts index f80948a8d..3d2bbfaff 100644 --- a/src/modals/modals.ts +++ b/src/modals/modals.ts @@ -10,6 +10,7 @@ import { DeleteUserModal } from './delete-user/delete-user.modal'; import { CreateRegistrationTokenModal } from './create-registration-token/create-registration-token.modal'; import { DeleteRegistrationTokenModal } from './delete-registration-token/delete-registration-token.modal'; import { CreateDashboardModal } from './create-dashboard/create-dashboard.modal'; +import { CopyRegistrationToken } from './copy-regristration-token/copy-registration-token.modal'; export const modals = { editApp: EditAppModal, @@ -22,7 +23,8 @@ export const modals = { deleteUserModal: DeleteUserModal, createRegistrationTokenModal: CreateRegistrationTokenModal, deleteRegistrationTokenModal: DeleteRegistrationTokenModal, - createDashboardModal: CreateDashboardModal + createDashboardModal: CreateDashboardModal, + copyRegistrationTokenModal: CopyRegistrationToken, }; declare module '@mantine/modals' { diff --git a/src/server/api/routers/registrationTokens.ts b/src/server/api/routers/registrationTokens.ts index da2667ef7..97b6bcc5e 100644 --- a/src/server/api/routers/registrationTokens.ts +++ b/src/server/api/routers/registrationTokens.ts @@ -44,12 +44,18 @@ export const inviteRouter = createTRPCRouter({ }) ) .mutation(async ({ ctx, input }) => { - await ctx.prisma.registrationToken.create({ + const token = await ctx.prisma.registrationToken.create({ data: { expires: input.expiration, token: randomBytes(20).toString('hex'), }, }); + + return { + id: token.id, + token: token.token, + expires: token.expires, + }; }), deleteRegistrationToken: publicProcedure .input(z.object({ tokenId: z.string() }))