From b4f1a5abce095f818d1319caf3f468d569e767ed Mon Sep 17 00:00:00 2001 From: Ephraim Atta-Duncan Date: Thu, 16 Nov 2023 07:10:13 +0000 Subject: [PATCH 1/4] feat: handle download file error with toast --- .../documents/data-table-action-button.tsx | 67 +++++++++++-------- 1 file changed, 39 insertions(+), 28 deletions(-) diff --git a/apps/web/src/app/(dashboard)/documents/data-table-action-button.tsx b/apps/web/src/app/(dashboard)/documents/data-table-action-button.tsx index 17b577c13..0d767d388 100644 --- a/apps/web/src/app/(dashboard)/documents/data-table-action-button.tsx +++ b/apps/web/src/app/(dashboard)/documents/data-table-action-button.tsx @@ -12,6 +12,7 @@ import { DocumentStatus, SigningStatus } from '@documenso/prisma/client'; import type { DocumentWithData } from '@documenso/prisma/types/document-with-data'; import { trpc as trpcClient } from '@documenso/trpc/client'; import { Button } from '@documenso/ui/primitives/button'; +import { toast } from '@documenso/ui/primitives/use-toast'; export type DataTableActionButtonProps = { row: Document & { @@ -37,38 +38,48 @@ export const DataTableActionButton = ({ row }: DataTableActionButtonProps) => { const isSigned = recipient?.signingStatus === SigningStatus.SIGNED; const onDownloadClick = async () => { - let document: DocumentWithData | null = null; + try { + let document: DocumentWithData | null = null; - if (!recipient) { - document = await trpcClient.document.getDocumentById.query({ - id: row.id, + if (!recipient) { + document = await trpcClient.document.getDocumentById.query({ + id: row.id, + }); + } else { + document = await trpcClient.document.getDocumentByToken.query({ + token: recipient.token, + }); + } + + const documentData = document?.documentData; + + console.log(documentData); + + if (!documentData) { + return; + } + + const documentBytes = await getFile({ data: documentData.data, type: documentData.type }); + + const blob = new Blob([documentBytes], { + type: 'application/pdf', }); - } else { - document = await trpcClient.document.getDocumentByToken.query({ - token: recipient.token, + + const link = window.document.createElement('a'); + + link.href = window.URL.createObjectURL(blob); + link.download = row.title || 'document.pdf'; + + link.click(); + + window.URL.revokeObjectURL(link.href); + } catch (error) { + toast({ + title: 'Something went wrong', + description: 'An error occurred while trying to download file.', + variant: 'destructive', }); } - - const documentData = document?.documentData; - - if (!documentData) { - return; - } - - const documentBytes = await getFile(documentData); - - const blob = new Blob([documentBytes], { - type: 'application/pdf', - }); - - const link = window.document.createElement('a'); - - link.href = window.URL.createObjectURL(blob); - link.download = row.title || 'document.pdf'; - - link.click(); - - window.URL.revokeObjectURL(link.href); }; return match({ From d347359d2fc10d20cbd14190a804b21442b67d2e Mon Sep 17 00:00:00 2001 From: Ephraim Atta-Duncan Date: Sat, 25 Nov 2023 22:09:52 +0000 Subject: [PATCH 2/4] chore: changes from code review --- .../app/(dashboard)/documents/data-table-action-button.tsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/apps/web/src/app/(dashboard)/documents/data-table-action-button.tsx b/apps/web/src/app/(dashboard)/documents/data-table-action-button.tsx index 0d767d388..e0a56f83d 100644 --- a/apps/web/src/app/(dashboard)/documents/data-table-action-button.tsx +++ b/apps/web/src/app/(dashboard)/documents/data-table-action-button.tsx @@ -12,7 +12,7 @@ import { DocumentStatus, SigningStatus } from '@documenso/prisma/client'; import type { DocumentWithData } from '@documenso/prisma/types/document-with-data'; import { trpc as trpcClient } from '@documenso/trpc/client'; import { Button } from '@documenso/ui/primitives/button'; -import { toast } from '@documenso/ui/primitives/use-toast'; +import { useToast } from '@documenso/ui/primitives/use-toast'; export type DataTableActionButtonProps = { row: Document & { @@ -23,6 +23,7 @@ export type DataTableActionButtonProps = { export const DataTableActionButton = ({ row }: DataTableActionButtonProps) => { const { data: session } = useSession(); + const toast = useToast(); if (!session) { return null; @@ -53,8 +54,6 @@ export const DataTableActionButton = ({ row }: DataTableActionButtonProps) => { const documentData = document?.documentData; - console.log(documentData); - if (!documentData) { return; } From 9a7e5d333dbabeeeb50a32b361b0f667328ce97a Mon Sep 17 00:00:00 2001 From: Lucas Smith Date: Thu, 7 Dec 2023 15:45:44 +1100 Subject: [PATCH 3/4] fix: don't expand documentData --- .../src/app/(dashboard)/documents/data-table-action-button.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/src/app/(dashboard)/documents/data-table-action-button.tsx b/apps/web/src/app/(dashboard)/documents/data-table-action-button.tsx index e0a56f83d..3fc9e2d42 100644 --- a/apps/web/src/app/(dashboard)/documents/data-table-action-button.tsx +++ b/apps/web/src/app/(dashboard)/documents/data-table-action-button.tsx @@ -58,7 +58,7 @@ export const DataTableActionButton = ({ row }: DataTableActionButtonProps) => { return; } - const documentBytes = await getFile({ data: documentData.data, type: documentData.type }); + const documentBytes = await getFile(documentData); const blob = new Blob([documentBytes], { type: 'application/pdf', From d58433c8a01569581e09121e2517dfd1b62e9581 Mon Sep 17 00:00:00 2001 From: Lucas Smith Date: Thu, 7 Dec 2023 15:50:34 +1100 Subject: [PATCH 4/4] fix: destructure toast --- .../src/app/(dashboard)/documents/data-table-action-button.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/src/app/(dashboard)/documents/data-table-action-button.tsx b/apps/web/src/app/(dashboard)/documents/data-table-action-button.tsx index fb10888de..54a8f6184 100644 --- a/apps/web/src/app/(dashboard)/documents/data-table-action-button.tsx +++ b/apps/web/src/app/(dashboard)/documents/data-table-action-button.tsx @@ -23,7 +23,7 @@ export type DataTableActionButtonProps = { export const DataTableActionButton = ({ row }: DataTableActionButtonProps) => { const { data: session } = useSession(); - const toast = useToast(); + const { toast } = useToast(); if (!session) { return null;