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() }))