From 7babd824709ddbf471b2bd075f85bfc0b54eb985 Mon Sep 17 00:00:00 2001 From: Mythie Date: Thu, 21 Dec 2023 20:42:45 +1100 Subject: [PATCH] fix: updates from review --- .../documents/duplicate-document-dialog.tsx | 1 + .../(dashboard)/templates/data-table-templates.tsx | 2 ++ .../(dashboard)/templates/delete-template-dialog.tsx | 10 +++++----- .../templates/duplicate-template-dialog.tsx | 2 -- .../(dashboard)/templates/new-template-dialog.tsx | 2 +- .../lib/server-only/admin/get-recipients-stats.ts | 9 +++++---- .../lib/server-only/field/set-fields-for-document.ts | 3 ++- .../lib/server-only/field/set-fields-for-template.ts | 10 ++++++---- .../migration.sql | 12 ++++++++++++ packages/prisma/schema.prisma | 6 +++--- 10 files changed, 37 insertions(+), 20 deletions(-) create mode 100644 packages/prisma/migrations/20231221070056_make_recipient_status_columns_non_null_again/migration.sql diff --git a/apps/web/src/app/(dashboard)/documents/duplicate-document-dialog.tsx b/apps/web/src/app/(dashboard)/documents/duplicate-document-dialog.tsx index 7a8ff2d64..56c112d75 100644 --- a/apps/web/src/app/(dashboard)/documents/duplicate-document-dialog.tsx +++ b/apps/web/src/app/(dashboard)/documents/duplicate-document-dialog.tsx @@ -41,6 +41,7 @@ export const DuplicateDocumentDialog = ({ trpcReact.document.duplicateDocument.useMutation({ onSuccess: (newId) => { router.push(`/documents/${newId}`); + toast({ title: 'Document Duplicated', description: 'Your document has been successfully duplicated.', diff --git a/apps/web/src/app/(dashboard)/templates/data-table-templates.tsx b/apps/web/src/app/(dashboard)/templates/data-table-templates.tsx index 629204c2a..63d6888b1 100644 --- a/apps/web/src/app/(dashboard)/templates/data-table-templates.tsx +++ b/apps/web/src/app/(dashboard)/templates/data-table-templates.tsx @@ -58,11 +58,13 @@ export const TemplatesDataTable = ({ const { id } = await createDocumentFromTemplate({ templateId, }); + toast({ title: 'Document created', description: 'Your document has been created from the template successfully.', duration: 5000, }); + router.push(`/documents/${id}`); } catch (err) { toast({ diff --git a/apps/web/src/app/(dashboard)/templates/delete-template-dialog.tsx b/apps/web/src/app/(dashboard)/templates/delete-template-dialog.tsx index ed7db1e72..9075f4677 100644 --- a/apps/web/src/app/(dashboard)/templates/delete-template-dialog.tsx +++ b/apps/web/src/app/(dashboard)/templates/delete-template-dialog.tsx @@ -23,13 +23,13 @@ export const DeleteTemplateDialog = ({ id, open, onOpenChange }: DeleteTemplateD const { toast } = useToast(); - const { mutateAsync: deleteDocument, isLoading } = trpcReact.template.deleteTemplate.useMutation({ + const { mutateAsync: deleteTemplate, isLoading } = trpcReact.template.deleteTemplate.useMutation({ onSuccess: () => { router.refresh(); toast({ title: 'Template deleted', - description: 'Your document has been successfully deleted.', + description: 'Your template has been successfully deleted.', duration: 5000, }); @@ -37,9 +37,9 @@ export const DeleteTemplateDialog = ({ id, open, onOpenChange }: DeleteTemplateD }, }); - const onDraftDelete = async () => { + const onDeleteTemplate = async () => { try { - await deleteDocument({ id }); + await deleteTemplate({ id }); } catch { toast({ title: 'Something went wrong', @@ -73,7 +73,7 @@ export const DeleteTemplateDialog = ({ id, open, onOpenChange }: DeleteTemplateD Cancel - diff --git a/apps/web/src/app/(dashboard)/templates/duplicate-template-dialog.tsx b/apps/web/src/app/(dashboard)/templates/duplicate-template-dialog.tsx index 5c3118035..be743ff48 100644 --- a/apps/web/src/app/(dashboard)/templates/duplicate-template-dialog.tsx +++ b/apps/web/src/app/(dashboard)/templates/duplicate-template-dialog.tsx @@ -47,8 +47,6 @@ export const DuplicateTemplateDialog = ({ await duplicateTemplate({ templateId: id, }); - - router.refresh(); } catch (err) { toast({ title: 'Error', diff --git a/apps/web/src/app/(dashboard)/templates/new-template-dialog.tsx b/apps/web/src/app/(dashboard)/templates/new-template-dialog.tsx index 19a465001..a4aa9bce2 100644 --- a/apps/web/src/app/(dashboard)/templates/new-template-dialog.tsx +++ b/apps/web/src/app/(dashboard)/templates/new-template-dialog.tsx @@ -49,10 +49,10 @@ export const NewTemplateDialog = () => { const { toast } = useToast(); const form = useForm({ - resolver: zodResolver(ZCreateTemplateFormSchema), defaultValues: { name: '', }, + resolver: zodResolver(ZCreateTemplateFormSchema), }); const { mutateAsync: createTemplate, isLoading: isCreatingTemplate } = diff --git a/packages/lib/server-only/admin/get-recipients-stats.ts b/packages/lib/server-only/admin/get-recipients-stats.ts index b6663e988..07368b5a1 100644 --- a/packages/lib/server-only/admin/get-recipients-stats.ts +++ b/packages/lib/server-only/admin/get-recipients-stats.ts @@ -19,10 +19,11 @@ export const getRecipientsStats = async () => { results.forEach((result) => { const { readStatus, signingStatus, sendStatus, _count } = result; - stats[readStatus as keyof typeof stats] += _count; - stats.TOTAL_RECIPIENTS += _count; - stats[signingStatus as keyof typeof stats] += _count; - stats[sendStatus as keyof typeof stats] += _count; + + stats[readStatus] += _count; + stats[signingStatus] += _count; + stats[sendStatus] += _count; + stats.TOTAL_RECIPIENTS += _count; }); diff --git a/packages/lib/server-only/field/set-fields-for-document.ts b/packages/lib/server-only/field/set-fields-for-document.ts index 664be3b91..bd14d49b2 100644 --- a/packages/lib/server-only/field/set-fields-for-document.ts +++ b/packages/lib/server-only/field/set-fields-for-document.ts @@ -1,5 +1,6 @@ import { prisma } from '@documenso/prisma'; -import { FieldType, SendStatus, SigningStatus } from '@documenso/prisma/client'; +import type { FieldType } from '@documenso/prisma/client'; +import { SendStatus, SigningStatus } from '@documenso/prisma/client'; export interface SetFieldsForDocumentOptions { userId: number; diff --git a/packages/lib/server-only/field/set-fields-for-template.ts b/packages/lib/server-only/field/set-fields-for-template.ts index 6e2e39afc..9431666bf 100644 --- a/packages/lib/server-only/field/set-fields-for-template.ts +++ b/packages/lib/server-only/field/set-fields-for-template.ts @@ -1,5 +1,5 @@ import { prisma } from '@documenso/prisma'; -import { FieldType } from '@documenso/prisma/client'; +import type { FieldType } from '@documenso/prisma/client'; export type Field = { id?: number | null; @@ -32,7 +32,7 @@ export const setFieldsForTemplate = async ({ }); if (!template) { - throw new Error('Document not found'); + throw new Error('Template not found'); } const existingFields = await prisma.field.findMany({ @@ -93,8 +93,10 @@ export const setFieldsForTemplate = async ({ }, Recipient: { connect: { - id: field.signerId, - email: field.signerEmail, + templateId_email: { + templateId, + email: field.signerEmail.toLowerCase(), + }, }, }, }, diff --git a/packages/prisma/migrations/20231221070056_make_recipient_status_columns_non_null_again/migration.sql b/packages/prisma/migrations/20231221070056_make_recipient_status_columns_non_null_again/migration.sql new file mode 100644 index 000000000..d2ebc6405 --- /dev/null +++ b/packages/prisma/migrations/20231221070056_make_recipient_status_columns_non_null_again/migration.sql @@ -0,0 +1,12 @@ +/* + Warnings: + + - Made the column `readStatus` on table `Recipient` required. This step will fail if there are existing NULL values in that column. + - Made the column `signingStatus` on table `Recipient` required. This step will fail if there are existing NULL values in that column. + - Made the column `sendStatus` on table `Recipient` required. This step will fail if there are existing NULL values in that column. + +*/ +-- AlterTable +ALTER TABLE "Recipient" ALTER COLUMN "readStatus" SET NOT NULL, +ALTER COLUMN "signingStatus" SET NOT NULL, +ALTER COLUMN "sendStatus" SET NOT NULL; diff --git a/packages/prisma/schema.prisma b/packages/prisma/schema.prisma index eb34ae903..67fb182a7 100644 --- a/packages/prisma/schema.prisma +++ b/packages/prisma/schema.prisma @@ -189,9 +189,9 @@ model Recipient { token String expired DateTime? signedAt DateTime? - readStatus ReadStatus? @default(NOT_OPENED) - signingStatus SigningStatus? @default(NOT_SIGNED) - sendStatus SendStatus? @default(NOT_SENT) + readStatus ReadStatus @default(NOT_OPENED) + signingStatus SigningStatus @default(NOT_SIGNED) + sendStatus SendStatus @default(NOT_SENT) Document Document? @relation(fields: [documentId], references: [id], onDelete: Cascade) Template Template? @relation(fields: [templateId], references: [id], onDelete: Cascade) Field Field[]