From 6f8726de35cfe72817b4499bf33d35c1ca54324c Mon Sep 17 00:00:00 2001 From: danidfra Date: Tue, 3 Sep 2024 23:02:22 -0300 Subject: [PATCH] Add zap split parts --- .../zap/components/zap-pay-request-form.tsx | 36 +++++++++++++------ src/features/zap/components/zap-split.tsx | 6 ++-- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/src/features/zap/components/zap-pay-request-form.tsx b/src/features/zap/components/zap-pay-request-form.tsx index e71ea3a4a..850bfbfb9 100644 --- a/src/features/zap/components/zap-pay-request-form.tsx +++ b/src/features/zap/components/zap-pay-request-form.tsx @@ -11,9 +11,8 @@ import pileCoin from 'soapbox/assets/icons/pile-coin.png'; import questionIcon from 'soapbox/assets/icons/questionIcon.svg'; import Account from 'soapbox/components/account'; import { Stack, HStack, Button, Input } from 'soapbox/components/ui'; -import { useAppDispatch } from 'soapbox/hooks'; -// import { useApi, useAppDispatch } from 'soapbox/hooks'; -// import { zapSplitSchema } from 'soapbox/schemas/zap-split'; +import { useApi, useAppDispatch } from 'soapbox/hooks'; +import { type ZapSplitData } from 'soapbox/schemas/zap-split'; import type { Account as AccountEntity, Status as StatusEntity } from 'soapbox/types/entities'; @@ -29,29 +28,44 @@ const messages = defineMessages({ }); const ZapPayRequestForm = ({ account, status }: IZapPayRequestForm) => { - // const api = useApi(); + const api = useApi(); const intl = useIntl(); const dispatch = useAppDispatch(); const [zapComment, setZapComment] = useState(''); // amount in millisatoshi const [zapAmount, setZapAmount] = useState(50); - // const fetchZapSplit = async (id: string) => { - // return await api.get(`/api/v1/ditto/${id}/zap_splits`); - // }; + const fetchZapSplit = async (id: string) => { + return await api.get(`/api/v1/ditto/${id}/zap_splits`); + }; const handleSubmit = async (e?: React.FormEvent) => { e?.preventDefault(); - // const hasZapSplit = await fetchZapSplit(status!.id); - // const teste = zapSplitSchema.parse(hasZapSplit.data); - const invoice = await dispatch(zap(account, status, zapAmount * 1000, zapComment)); + const zapArrays: ZapSplitData[] = (await fetchZapSplit(status!.id)).data; + let newZapAmount = zapAmount; + const zapSplitAccounts: ZapSplitData[] = []; + + if (zapArrays) { + const totalWeight = zapArrays.reduce((e,b) => e + b.weight, (0)); + zapArrays.forEach((zapSplit) => { + if (zapSplit.account.id === account.id){ + newZapAmount = zapSplit.weight * (zapAmount / totalWeight); + } else { + zapSplitAccounts.push(zapSplit); + } + }); + } + + const invoice = await dispatch(zap(account, status, newZapAmount * 1000, zapComment)); // If invoice is undefined it means the user has paid through his extension // In this case, we simply close the modal if (!invoice) { dispatch(closeModal('ZAP_PAY_REQUEST')); // Dispatch the adm account - // hasZapSplit && dispatch(openModal('ZAP_SPLIT', { account })); + if (zapArrays) { + dispatch(openModal('ZAP_SPLIT', { zapSplitAccounts, status, zapAmount })); + } return; } // open QR code modal diff --git a/src/features/zap/components/zap-split.tsx b/src/features/zap/components/zap-split.tsx index dde35150f..dafad4983 100644 --- a/src/features/zap/components/zap-split.tsx +++ b/src/features/zap/components/zap-split.tsx @@ -9,12 +9,10 @@ import type { Account as AccountEntity, Status as StatusEntity } from 'soapbo interface IZapSplit { status?: StatusEntity; account: AccountEntity; - amountAdm?: number; - zapAmount?: number; - step?: number; } -const ZapSplit = ({ account, status, amountAdm = 3, zapAmount = 50, step = 2 }: IZapSplit) => { +const ZapSplit = ({ account, status }: IZapSplit) => { + const zapAmount = 50; return (