diff --git a/packages/webapp/src/components/DialogsContainer.tsx b/packages/webapp/src/components/DialogsContainer.tsx index 8871f8adb..5fcd3f07c 100644 --- a/packages/webapp/src/components/DialogsContainer.tsx +++ b/packages/webapp/src/components/DialogsContainer.tsx @@ -11,7 +11,6 @@ import QuickPaymentMadeFormDialog from '@/containers/Dialogs/QuickPaymentMadeFor import AllocateLandedCostDialog from '@/containers/Dialogs/AllocateLandedCostDialog'; import InvoicePdfPreviewDialog from '@/containers/Dialogs/InvoicePdfPreviewDialog'; import EstimatePdfPreviewDialog from '@/containers/Dialogs/EstimatePdfPreviewDialog'; -import ReceiptPdfPreviewDialog from '@/containers/Dialogs/ReceiptPdfPreviewDialog'; import MoneyInDialog from '@/containers/CashFlow/MoneyInDialog'; import MoneyOutDialog from '@/containers/CashFlow/MoneyOutDialog'; import BadDebtDialog from '@/containers/Dialogs/BadDebtDialog'; @@ -45,7 +44,6 @@ import ProjectBillableEntriesFormDialog from '@/containers/Projects/containers/P import TaxRateFormDialog from '@/containers/TaxRates/dialogs/TaxRateFormDialog/TaxRateFormDialog'; import { DialogsName } from '@/constants/dialogs'; import InvoiceExchangeRateChangeDialog from '@/containers/Sales/Invoices/InvoiceForm/Dialogs/InvoiceExchangeRateChangeDialog'; -import ReceiptMailDialog from '@/containers/Sales/Receipts/ReceiptMailDialog/ReceiptMailDialog'; import PaymentMailDialog from '@/containers/Sales/PaymentsReceived/PaymentMailDialog/PaymentMailDialog'; import { ExportDialog } from '@/containers/Dialogs/ExportDialog'; import { RuleFormDialog } from '@/containers/Banking/Rules/RuleFormDialog/RuleFormDialog'; @@ -80,7 +78,6 @@ export default function DialogsContainer() { /> - @@ -142,7 +139,6 @@ export default function DialogsContainer() { - diff --git a/packages/webapp/src/components/DrawersContainer.tsx b/packages/webapp/src/components/DrawersContainer.tsx index 9d21008d1..b9cb48428 100644 --- a/packages/webapp/src/components/DrawersContainer.tsx +++ b/packages/webapp/src/components/DrawersContainer.tsx @@ -33,6 +33,7 @@ import { BrandingTemplatesDrawer } from '@/containers/BrandingTemplates/Branding import { DRAWERS } from '@/constants/drawers'; import { InvoiceSendMailDrawer } from '@/containers/Sales/Invoices/InvoiceSendMailDrawer/InvoiceSendMailDrawer'; import { EstimateSendMailDrawer } from '@/containers/Sales/Estimates/EstimateSendMailDrawer'; +import { ReceiptSendMailDrawer } from '@/containers/Sales/Receipts/ReceiptSendMailDrawer'; /** * Drawers container of the dashboard. @@ -83,6 +84,7 @@ export default function DrawersContainer() { + ); } diff --git a/packages/webapp/src/constants/drawers.ts b/packages/webapp/src/constants/drawers.ts index a461c7e83..9afb191b2 100644 --- a/packages/webapp/src/constants/drawers.ts +++ b/packages/webapp/src/constants/drawers.ts @@ -36,4 +36,5 @@ export enum DRAWERS { STRIPE_PAYMENT_INTEGRATION_EDIT = 'STRIPE_PAYMENT_INTEGRATION_EDIT', INVOICE_SEND_MAIL = 'INVOICE_SEND_MAIL', ESTIMATE_SEND_MAIL = 'ESTIMATE_SEND_MAIL', + RECEIPT_SEND_MAIL = 'RECEIPT_SEND_MAIL', } diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimateSendMailDrawer/EstimateSendMailPreview.tsx b/packages/webapp/src/containers/Sales/Estimates/EstimateSendMailDrawer/EstimateSendMailPreview.tsx index 16fd43626..642cba320 100644 --- a/packages/webapp/src/containers/Sales/Estimates/EstimateSendMailDrawer/EstimateSendMailPreview.tsx +++ b/packages/webapp/src/containers/Sales/Estimates/EstimateSendMailDrawer/EstimateSendMailPreview.tsx @@ -1,7 +1,27 @@ - +import { Suspense } from 'react'; +import { SendMailViewPreviewTabs } from '../SendMailViewDrawer/SendMailViewPreviewTabs'; +import { Tab } from '@blueprintjs/core'; +import { EstimateSendPdfPreviewConnected } from './EstimateSendPdfPreviewConnected'; export function EstimateSendMailPreviewTabs() { return ( -

asdfsdf

- ) -} \ No newline at end of file + + {/* */} + } + /> + + + + } + /> + + ); +} diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimateSendMailDrawer/EstimateSendMailPreviewHeader.tsx b/packages/webapp/src/containers/Sales/Estimates/EstimateSendMailDrawer/EstimateSendMailPreviewHeader.tsx new file mode 100644 index 000000000..182094bcd --- /dev/null +++ b/packages/webapp/src/containers/Sales/Estimates/EstimateSendMailDrawer/EstimateSendMailPreviewHeader.tsx @@ -0,0 +1,13 @@ +import { SendViewPreviewHeader } from '../SendMailViewDrawer/SendMailViewPreviewHeader'; + +export function EstimateSendMailPreviewHeader() { + return ( + + ); +} diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimateSendMailDrawer/EstimateSendPdfPreviewConnected.tsx b/packages/webapp/src/containers/Sales/Estimates/EstimateSendMailDrawer/EstimateSendPdfPreviewConnected.tsx new file mode 100644 index 000000000..d62b1abc3 --- /dev/null +++ b/packages/webapp/src/containers/Sales/Estimates/EstimateSendMailDrawer/EstimateSendPdfPreviewConnected.tsx @@ -0,0 +1,31 @@ +import { Spinner } from '@blueprintjs/core'; +import { Stack } from '@/components'; +import { useGetSaleEstimateHtml } from '@/hooks/query'; +import { EstimateSendMailPreviewHeader } from './EstimateSendMailPreviewHeader'; +import { SendMailViewPreviewPdfIframe } from '../SendMailViewDrawer/SendMailViewPreviewPdfIframe'; +import { useDrawerContext } from '@/components/Drawer/DrawerProvider'; + +export function EstimateSendPdfPreviewConnected() { + return ( + + + + + + + + ); +} + +function EstimateSendPdfPreviewIframe() { + const { payload } = useDrawerContext(); + const { data, isLoading } = useGetSaleEstimateHtml(payload?.estimateId); + + if (isLoading && data) { + return ; + } + + const iframeSrcDoc = data?.htmlContent; + + return ; +} diff --git a/packages/webapp/src/containers/Sales/Receipts/ReceiptSendMailDrawer/ReceiptSendMailBoot.tsx b/packages/webapp/src/containers/Sales/Receipts/ReceiptSendMailDrawer/ReceiptSendMailBoot.tsx index 25fef6d71..72873d57e 100644 --- a/packages/webapp/src/containers/Sales/Receipts/ReceiptSendMailDrawer/ReceiptSendMailBoot.tsx +++ b/packages/webapp/src/containers/Sales/Receipts/ReceiptSendMailDrawer/ReceiptSendMailBoot.tsx @@ -1,3 +1,4 @@ +// @ts-nocheck import React, { createContext, useContext } from 'react'; import { Spinner } from '@blueprintjs/core'; import { useDrawerContext } from '@/components/Drawer/DrawerProvider'; diff --git a/packages/webapp/src/containers/Sales/Receipts/ReceiptSendMailDrawer/ReceiptSendMailContent.tsx b/packages/webapp/src/containers/Sales/Receipts/ReceiptSendMailDrawer/ReceiptSendMailContent.tsx index 8e8dd7f79..11b3285d9 100644 --- a/packages/webapp/src/containers/Sales/Receipts/ReceiptSendMailDrawer/ReceiptSendMailContent.tsx +++ b/packages/webapp/src/containers/Sales/Receipts/ReceiptSendMailDrawer/ReceiptSendMailContent.tsx @@ -7,13 +7,13 @@ import { ReceiptSendMailForm } from './ReceiptSendMailForm'; import { ReceiptSendMailFormFields } from './ReceiptSendMailFormFields'; import { ReceiptSendMailPreviewTabs } from './ReceiptSendMailPreviewTabs'; -export function InvoiceSendMailContent() { +export function ReceiptSendMailContent() { return ( } + header={} fields={} preview={} /> diff --git a/packages/webapp/src/containers/Sales/Receipts/ReceiptSendMailDrawer/ReceiptSendMailForm.tsx b/packages/webapp/src/containers/Sales/Receipts/ReceiptSendMailDrawer/ReceiptSendMailForm.tsx index 999a9c69b..f2935f542 100644 --- a/packages/webapp/src/containers/Sales/Receipts/ReceiptSendMailDrawer/ReceiptSendMailForm.tsx +++ b/packages/webapp/src/containers/Sales/Receipts/ReceiptSendMailDrawer/ReceiptSendMailForm.tsx @@ -1,3 +1,4 @@ +// @ts-nocheck import { Form, Formik, FormikHelpers } from 'formik'; import { css } from '@emotion/css'; import { Intent } from '@blueprintjs/core'; diff --git a/packages/webapp/src/containers/Sales/Receipts/ReceiptSendMailDrawer/ReceiptSendMailPreviewTabs.tsx b/packages/webapp/src/containers/Sales/Receipts/ReceiptSendMailDrawer/ReceiptSendMailPreviewTabs.tsx index e4f0f8c2e..bd43988cc 100644 --- a/packages/webapp/src/containers/Sales/Receipts/ReceiptSendMailDrawer/ReceiptSendMailPreviewTabs.tsx +++ b/packages/webapp/src/containers/Sales/Receipts/ReceiptSendMailDrawer/ReceiptSendMailPreviewTabs.tsx @@ -1,6 +1,3 @@ - - export function ReceiptSendMailPreviewTabs() { - return null; -} \ No newline at end of file +} diff --git a/packages/webapp/src/hooks/query/estimates.tsx b/packages/webapp/src/hooks/query/estimates.tsx index 7aea63c03..abbabc8fa 100644 --- a/packages/webapp/src/hooks/query/estimates.tsx +++ b/packages/webapp/src/hooks/query/estimates.tsx @@ -258,10 +258,10 @@ export function useSendSaleEstimateMail(props = {}) { } /** - * - * @param {number} estimateId - * @param props - * @returns + * + * @param {number} estimateId + * @param props + * @returns */ export function useSaleEstimateMailState(estimateId: number, props?= {}) { const apiRequest = useApiRequest(); @@ -290,3 +290,31 @@ export function useGetSaleEstimatesState( { ...options }, ); } + +interface GetEstimateHtmlResponse { + htmlContent: string; +} +/** + * Retrieves the sale estimate html content. + * @param {number} invoiceId + * @param {UseQueryOptions} options + * @returns {UseQueryResult} + */ +export const useGetSaleEstimateHtml = ( + estimateId: number, + options?: UseQueryOptions, +): UseQueryResult => { + const apiRequest = useApiRequest(); + + return useQuery( + ['SALE_ESTIMATE_HTML', estimateId], + () => + apiRequest + .get(`sales/estimates/${estimateId}`, { + headers: { + Accept: 'application/json+html', + }, + }) + .then((res) => transformToCamelCase(res.data)), + ); +};