From 5270e99de892d7890395f9ef4e5143d72d698843 Mon Sep 17 00:00:00 2001 From: Ahmed Bouhuolia Date: Wed, 18 Sep 2024 10:43:21 +0200 Subject: [PATCH] feat: select payment methods dialog --- .../src/components/DialogsContainer.tsx | 4 + packages/webapp/src/constants/dialogs.ts | 3 +- .../InvoiceDetailActionsBar.tsx | 19 ++- .../SelectPaymemtMethodsForm.tsx | 18 +++ .../SelectPaymentMethodsBoot.tsx | 35 ++++++ .../SelectPaymentMethodsContent.tsx | 114 ++++++++++++++++++ .../SelectPaymentMethodsDialog.tsx | 38 ++++++ .../InvoiceForm/InvoiceFormFooterLeft.tsx | 12 ++ packages/webapp/src/icons/ArrowBottomLeft.tsx | 28 +++++ 9 files changed, 264 insertions(+), 7 deletions(-) create mode 100644 packages/webapp/src/containers/PaymentLink/dialogs/SelectPaymentMethodsDialog/SelectPaymemtMethodsForm.tsx create mode 100644 packages/webapp/src/containers/PaymentLink/dialogs/SelectPaymentMethodsDialog/SelectPaymentMethodsBoot.tsx create mode 100644 packages/webapp/src/containers/PaymentLink/dialogs/SelectPaymentMethodsDialog/SelectPaymentMethodsContent.tsx create mode 100644 packages/webapp/src/containers/PaymentLink/dialogs/SelectPaymentMethodsDialog/SelectPaymentMethodsDialog.tsx create mode 100644 packages/webapp/src/icons/ArrowBottomLeft.tsx diff --git a/packages/webapp/src/components/DialogsContainer.tsx b/packages/webapp/src/components/DialogsContainer.tsx index c1884d55f..cd4a1b9ef 100644 --- a/packages/webapp/src/components/DialogsContainer.tsx +++ b/packages/webapp/src/components/DialogsContainer.tsx @@ -53,6 +53,7 @@ import { ExportDialog } from '@/containers/Dialogs/ExportDialog'; import { RuleFormDialog } from '@/containers/Banking/Rules/RuleFormDialog/RuleFormDialog'; import { DisconnectBankAccountDialog } from '@/containers/CashFlow/AccountTransactions/dialogs/DisconnectBankAccountDialog/DisconnectBankAccountDialog'; import { SharePaymentLinkDialog } from '@/containers/PaymentLink/dialogs/SharePaymentLinkDialog/SharePaymentLinkDialog'; +import { SelectPaymentMethodsDialog } from '@/containers/PaymentLink/dialogs/SelectPaymentMethodsDialog/SelectPaymentMethodsDialog'; /** * Dialogs container. @@ -153,6 +154,9 @@ export default function DialogsContainer() { dialogName={DialogsName.DisconnectBankAccountConfirmation} /> + ); } diff --git a/packages/webapp/src/constants/dialogs.ts b/packages/webapp/src/constants/dialogs.ts index e4d1be7b7..6e53fa1b5 100644 --- a/packages/webapp/src/constants/dialogs.ts +++ b/packages/webapp/src/constants/dialogs.ts @@ -77,5 +77,6 @@ export enum DialogsName { Export = 'Export', BankRuleForm = 'BankRuleForm', DisconnectBankAccountConfirmation = 'DisconnectBankAccountConfirmation', - SharePaymentLink = 'SharePaymentLink' + SharePaymentLink = 'SharePaymentLink', + SelectPaymentMethod = 'SelectPaymentMethodsDialog', } diff --git a/packages/webapp/src/containers/Drawers/InvoiceDetailDrawer/InvoiceDetailActionsBar.tsx b/packages/webapp/src/containers/Drawers/InvoiceDetailDrawer/InvoiceDetailActionsBar.tsx index bad1c097c..c458c262e 100644 --- a/packages/webapp/src/containers/Drawers/InvoiceDetailDrawer/InvoiceDetailActionsBar.tsx +++ b/packages/webapp/src/containers/Drawers/InvoiceDetailDrawer/InvoiceDetailActionsBar.tsx @@ -7,6 +7,8 @@ import { Classes, NavbarDivider, Intent, + Tooltip, + Position, } from '@blueprintjs/core'; import { useInvoiceDetailDrawerContext } from './InvoiceDetailDrawerProvider'; @@ -32,6 +34,7 @@ import { compose } from '@/utils'; import { BadDebtMenuItem } from './utils'; import { DRAWERS } from '@/constants/drawers'; import { DialogsName } from '@/constants/dialogs'; +import { ArrowBottomLeft } from '@/icons/ArrowBottomLeft'; /** * Invoice details action bar. @@ -126,7 +129,7 @@ function InvoiceDetailActionsBar({ + + + } + > + + + ); +} + +interface PaymentMethodSelectProps { + label: string; + value?: boolean; + initialValue?: boolean; + onChange?: (value: boolean) => void; +} +function PaymentMethodSelect({ + value, + initialValue, + onChange, + label, +}: PaymentMethodSelectProps) { + const [_value, handleChange] = useUncontrolled({ + value, + initialValue, + finalValue: false, + onChange, + }); + const handleClick = () => { + handleChange(!_value); + }; + + return ( + + + {label} + + ); +} + +const PaymentMethodSelectRoot = styled(Group)` + border: 1px solid #d3d8de; + border-radius: 5px; + padding: 10px; + gap: 0; + cursor: pointer; +`; + +const PaymentMethodCheckbox = styled(Checkbox)` + margin: 0; + + &.bp4-control .bp4-control-indicator { + box-shadow: 0 0 0 1px #c5cbd3; + } +`; + +const PaymentMethodText = styled(Text)` + color: #404854; +`; diff --git a/packages/webapp/src/containers/PaymentLink/dialogs/SelectPaymentMethodsDialog/SelectPaymentMethodsDialog.tsx b/packages/webapp/src/containers/PaymentLink/dialogs/SelectPaymentMethodsDialog/SelectPaymentMethodsDialog.tsx new file mode 100644 index 000000000..e5b7284e4 --- /dev/null +++ b/packages/webapp/src/containers/PaymentLink/dialogs/SelectPaymentMethodsDialog/SelectPaymentMethodsDialog.tsx @@ -0,0 +1,38 @@ +// @ts-nocheck +import React from 'react'; +import { Dialog, DialogSuspense } from '@/components'; +import withDialogRedux from '@/components/DialogReduxConnect'; +import { compose } from '@/utils'; + +const SelectPaymentMethodsDialogContent = React.lazy(() => + import('./SelectPaymentMethodsContent').then((module) => ({ + default: module.SelectPaymentMethodsContent, + })), +); + +/** + * Select payment methods dialogs. + */ +function SelectPaymentMethodsDialogRoot({ dialogName, payload, isOpen }) { + return ( + + + + + + ); +} + +export const SelectPaymentMethodsDialog = compose(withDialogRedux())( + SelectPaymentMethodsDialogRoot, +); + +SelectPaymentMethodsDialog.displayName = 'SelectPaymentMethodsDialog'; diff --git a/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/InvoiceFormFooterLeft.tsx b/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/InvoiceFormFooterLeft.tsx index df6ec6236..61e7c2291 100644 --- a/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/InvoiceFormFooterLeft.tsx +++ b/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/InvoiceFormFooterLeft.tsx @@ -3,10 +3,22 @@ import React from 'react'; import intl from 'react-intl-universal'; import styled from 'styled-components'; import { FFormGroup, FEditableText, FormattedMessage as T } from '@/components'; +import { useDialogActions } from '@/hooks/state'; +import { DialogsName } from '@/constants/dialogs'; export function InvoiceFormFooterLeft() { + const { openDialog } = useDialogActions(); + + const handleSelectPaymentMethodsClick = () => { + openDialog(DialogsName.SelectPaymentMethod, {}); + } + return ( + + Payment Options + + {/* --------- Invoice message --------- */} { + size?: number; +} + +export const ArrowBottomLeft: React.FC = ({ + size = 16, + ...props +}) => { + return ( + + + + ); +};