diff --git a/iframetest.html b/iframetest.html
index ba672863..3a2c8223 100644
--- a/iframetest.html
+++ b/iframetest.html
@@ -5,4 +5,4 @@
}
diff --git a/src/Donations/Components/PaymentsForm.tsx b/src/Donations/Components/PaymentsForm.tsx
index 4d3e7397..fbb0401e 100644
--- a/src/Donations/Components/PaymentsForm.tsx
+++ b/src/Donations/Components/PaymentsForm.tsx
@@ -60,6 +60,7 @@ function PaymentsForm({}: Props): ReactElement {
setshowErrorCard,
hideTaxDeduction,
queryToken,
+ frequency,
} = React.useContext(QueryParamContext);
React.useEffect(() => {
@@ -116,6 +117,7 @@ function PaymentsForm({}: Props): ReactElement {
setdonationID,
token,
setshowErrorCard,
+ frequency,
});
if (donation) {
@@ -233,34 +235,65 @@ function PaymentsForm({}: Props): ReactElement {
diff --git a/src/Donations/Micros/FrequencyOptions.tsx b/src/Donations/Micros/FrequencyOptions.tsx
new file mode 100644
index 00000000..ddb3b918
--- /dev/null
+++ b/src/Donations/Micros/FrequencyOptions.tsx
@@ -0,0 +1,36 @@
+import React, { ReactElement } from "react";
+import { QueryParamContext } from "../../Layout/QueryParamContext";
+
+interface Props {}
+
+function FrequencyOptions({}: Props): ReactElement {
+ const { paymentSetup, setfrequency,frequency } = React.useContext(QueryParamContext);
+ console.log("paymentSetup", paymentSetup);
+
+ return (
+
+ {paymentSetup.frequencies && paymentSetup.frequencies.length > 0 ? (
+ paymentSetup.frequencies.map((frequencyOption:any, index:any) => {
+ return (
+
setfrequency(frequencyOption)
+ }
+ >
+ {frequencyOption}
+
+ );
+ })
+ ) : (
+ <>>
+ )}
+
+ );
+}
+
+export default FrequencyOptions;
diff --git a/src/Donations/PaymentMethods/PaymentFunctions.ts b/src/Donations/PaymentMethods/PaymentFunctions.ts
index e8a93599..1833157b 100644
--- a/src/Donations/PaymentMethods/PaymentFunctions.ts
+++ b/src/Donations/PaymentMethods/PaymentFunctions.ts
@@ -91,6 +91,7 @@ export async function createDonationFunction({
setdonationID,
token,
setshowErrorCard,
+ frequency
}: CreateDonationFunctionProps) {
const taxDeductionCountry = isTaxDeductible ? country : null;
const donationData = createDonationData({
@@ -102,6 +103,7 @@ export async function createDonationFunction({
taxDeductionCountry,
isGift,
giftDetails,
+ frequency
});
try {
let donation;
@@ -153,6 +155,7 @@ export function createDonationData({
taxDeductionCountry,
isGift,
giftDetails,
+ frequency
}: any) {
let donationData = {
purpose: projectDetails.purpose,
@@ -161,6 +164,7 @@ export function createDonationData({
amount: Math.round((unitCost * quantity + Number.EPSILON) * 100) / 100,
currency,
donor: { ...contactDetails },
+ frequency:frequency === 'once' ? null : frequency
};
if (taxDeductionCountry) {
donationData = {
diff --git a/src/Donations/PaymentMethods/PaymentMethodTabs.tsx b/src/Donations/PaymentMethods/PaymentMethodTabs.tsx
index b06068f5..90016746 100644
--- a/src/Donations/PaymentMethods/PaymentMethodTabs.tsx
+++ b/src/Donations/PaymentMethods/PaymentMethodTabs.tsx
@@ -61,7 +61,7 @@ export default function PaymentMethodTabs({
);
}
- const { country, currency, projectDetails, paymentSetup, quantity } =
+ const { country, currency, projectDetails, paymentSetup, quantity,frequency } =
React.useContext(QueryParamContext);
return (
@@ -149,6 +149,7 @@ export default function PaymentMethodTabs({
country: t(`country:${projectDetails.country.toLowerCase()}`),
})
}
+ frequency={frequency}
/>
)}
diff --git a/src/Donations/PaymentMethods/PaymentRequestCustomButton.tsx b/src/Donations/PaymentMethods/PaymentRequestCustomButton.tsx
index 822e501a..38ee2afe 100644
--- a/src/Donations/PaymentMethods/PaymentRequestCustomButton.tsx
+++ b/src/Donations/PaymentMethods/PaymentRequestCustomButton.tsx
@@ -16,7 +16,8 @@ interface PaymentButtonProps {
onPaymentFunction: Function;
continueNext: Function;
isPaymentPage: boolean;
- paymentLabel:string;
+ paymentLabel: string;
+ frequency: string | null;
}
export const PaymentRequestCustomButton = ({
country,
@@ -25,7 +26,8 @@ export const PaymentRequestCustomButton = ({
onPaymentFunction,
continueNext,
isPaymentPage,
- paymentLabel
+ paymentLabel,
+ frequency,
}: PaymentButtonProps) => {
const { t, ready } = useTranslation(["common"]);
@@ -111,7 +113,10 @@ export const PaymentRequestCustomButton = ({
{stripeAllowedCountries.includes(country) &&
canMakePayment &&
paymentRequest &&
- paymentRequest._canMakePaymentAvailability ? (
+ paymentRequest._canMakePaymentAvailability &&
+ (frequency !== "once"
+ ? paymentSetup?.gateways.stripe.recurrency.enabled.includes("stripe_cc")
+ : true) ? (
paymentRequest._canMakePaymentAvailability.APPLE_PAY ? (
{!isPaymentPage && (
{t("or")}
@@ -141,7 +152,11 @@ export const PaymentRequestCustomButton = ({
>
{isPaymentPage ? "" : t("donateWith")}{" "}
{!isPaymentPage && (
@@ -184,6 +199,7 @@ interface NativePayProps {
continueNext: Function;
isPaymentPage: boolean;
paymentLabel: string;
+ frequency: string | null;
}
export const NativePay = ({
country,
@@ -193,7 +209,8 @@ export const NativePay = ({
paymentSetup,
continueNext,
isPaymentPage,
- paymentLabel
+ paymentLabel,
+ frequency,
}: NativePayProps) => {
const [stripePromise, setStripePromise] = useState(() =>
getStripe(paymentSetup)
@@ -228,6 +245,7 @@ export const NativePay = ({
continueNext={continueNext}
isPaymentPage={isPaymentPage}
paymentLabel={paymentLabel}
+ frequency={frequency}
/>
);
diff --git a/src/Layout/QueryParamContext.tsx b/src/Layout/QueryParamContext.tsx
index dd9ba497..4065603b 100644
--- a/src/Layout/QueryParamContext.tsx
+++ b/src/Layout/QueryParamContext.tsx
@@ -54,7 +54,9 @@ export const QueryParamContext = React.createContext({
queryToken:"",
setqueryToken: (value: string) => "",
sethideTaxDeduction: (value: boolean) => {},
- setisDirectDonation:(value: boolean) => {}
+ setisDirectDonation:(value: boolean) => {},
+ frequency: "",
+ setfrequency: (value: string) => {},
});
export default function QueryParamProvider({ children }: any) {
@@ -94,6 +96,7 @@ export default function QueryParamProvider({ children }: any) {
const [quantity, setquantity] = useState(50);
+ const [frequency, setfrequency] = useState
("once");
const [isGift, setisGift] = useState(false);
const [giftDetails, setgiftDetails] = useState