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({
}
+ icon={}
text={}
onClick={handleQuickPaymentInvoice}
/>
@@ -157,11 +160,15 @@ function InvoiceDetailActionsBar({
onClick={handleDeleteInvoice}
/>
-
+
+
+ }
+ onClick={handleShareButtonClick}
+ />
+
+
= ({ children }) => {
+ const handleSubmit = (values: SelectPaymentMethodsFormValues) => {};
+
+ return (
+
+
+
+ );
+};
diff --git a/packages/webapp/src/containers/PaymentLink/dialogs/SelectPaymentMethodsDialog/SelectPaymentMethodsBoot.tsx b/packages/webapp/src/containers/PaymentLink/dialogs/SelectPaymentMethodsDialog/SelectPaymentMethodsBoot.tsx
new file mode 100644
index 000000000..5d92657e6
--- /dev/null
+++ b/packages/webapp/src/containers/PaymentLink/dialogs/SelectPaymentMethodsDialog/SelectPaymentMethodsBoot.tsx
@@ -0,0 +1,35 @@
+import React, { createContext, useContext, useState, ReactNode } from 'react';
+
+interface SelectPaymentMethodsContextType {}
+
+const SelectPaymentMethodsContext =
+ createContext(
+ {} as SelectPaymentMethodsContextType,
+ );
+
+export const useSelectPaymentMethods = () => {
+ const context = useContext(SelectPaymentMethodsContext);
+
+ if (!context) {
+ throw new Error(
+ 'useSelectPaymentMethods must be used within a SelectPaymentMethodsProvider',
+ );
+ }
+ return context;
+};
+
+interface SelectPaymentMethodsProviderProps {
+ children: ReactNode;
+}
+
+export const SelectPaymentMethodsBoot: React.FC<
+ SelectPaymentMethodsProviderProps
+> = ({ children }) => {
+ return (
+
+ {children}
+
+ );
+};
diff --git a/packages/webapp/src/containers/PaymentLink/dialogs/SelectPaymentMethodsDialog/SelectPaymentMethodsContent.tsx b/packages/webapp/src/containers/PaymentLink/dialogs/SelectPaymentMethodsDialog/SelectPaymentMethodsContent.tsx
new file mode 100644
index 000000000..76e47da2d
--- /dev/null
+++ b/packages/webapp/src/containers/PaymentLink/dialogs/SelectPaymentMethodsDialog/SelectPaymentMethodsContent.tsx
@@ -0,0 +1,114 @@
+import { SelectPaymentMethodsBoot } from './SelectPaymentMethodsBoot';
+import { SelectPaymentMethodsForm } from './SelectPaymemtMethodsForm';
+import styled from 'styled-components';
+import { Group, Stack } from '@/components';
+import {
+ DialogFooter,
+ Button,
+ Checkbox,
+ DialogBody,
+ Intent,
+ Text,
+} from '@blueprintjs/core';
+import { useDialogActions } from '@/hooks/state';
+import { DialogsName } from '@/constants/dialogs';
+import { useUncontrolled } from '@/hooks/useUncontrolled';
+
+export function SelectPaymentMethodsContent() {
+ const { closeDialog } = useDialogActions();
+
+ const handleCancelBtnClick = () => {
+ closeDialog(DialogsName.SelectPaymentMethod);
+ };
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+ }
+ >
+
+
+ );
+}
+
+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 (
+
+ );
+};