import { useEffect, useState } from "react"; import * as React from "react"; import {getBowserType} from "auth/utils"; // material-ui import { Button, FormLabel, Stack, Typography, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, Grid, Box } from '@mui/material'; import { useFormik, FormikProvider } from 'formik'; import * as yup from 'yup'; import Loadable from 'components/Loadable'; const LoadingComponent = Loadable(React.lazy(() => import('pages/extra-pages/LoadingComponent'))); import * as FormatUtils from "utils/FormatUtils"; import VisaIcon from "assets/images/icons/visacard.svg"; import MasterIcon from "assets/images/icons/mastercard.svg"; import JcbIcon from "assets/images/icons/jcb.svg"; import UnionPayIcon from "assets/images/icons/unionpay.svg"; import PpsIcon from "assets/images/icons/ppshk.svg"; import FpsIcon from "assets/images/icons/fps.svg"; import {FormattedMessage, useIntl} from "react-intl"; const MultiPaymentWindow = (props) => { const intl = useIntl(); const windowTitle = intl.formatMessage({id: 'selectPaymentMethod'}); // const [content, setContent] = useState(); const [loadtTransactionData, setLoadtTransactionData] = useState({}); const [loadAvailableMethodData, setLoadAvailableMethodData] = useState([]); const [paymentMethod, setPaymentMethod] = useState(""); const [isLimit, setIsLimit] = useState(false); const [isPPSLimit, setIsPPSLimit] = useState(false); const [transactionData, setTransactionData] = useState({}); const [availableMethodData, setAvailableMethodData] = useState([]); const [fpsClass, setFpsClass] = useState(""); const [visaClass, setVisaClass] = useState(""); const [mastercardClass, setMastercardClass] = useState(""); const [jCBClass, setJCBClass] = useState(""); const [unionPayClass, setUnionPayClass] = useState(""); const [pPSClass, setPPSlass] = useState(""); const [filteredPaymentMethod, setFilteredPaymentMethod] = useState([]); const [onReady, setOnReady] = useState(false); useEffect(() => { // console.log(props.transactionData) if(Object.keys(props.transactionData).length > 0){ setLoadtTransactionData(props.transactionData) } }, [props.transactionData]); useEffect(() => { // console.log(props.availableMethods) if(props.availableMethods.length > 0){ setLoadAvailableMethodData(props.availableMethods) } }, [props.availableMethods]); useEffect(() => { if(Object.keys(loadtTransactionData).length > 0){ setTransactionData(loadtTransactionData) } }, [loadtTransactionData]); useEffect(() => { if(Object.keys(transactionData).length > 0&&props.availableMethods.length > 0){ setLoadAvailableMethodData(props.availableMethods) } }, [transactionData]); useEffect(() => { if(loadAvailableMethodData.length > 0){ setAvailableMethodData(loadAvailableMethodData) } }, [loadAvailableMethodData]); useEffect(() => { if(filteredPaymentMethod!= undefined && filteredPaymentMethod.length>0){ setOnReady(true) } else if(filteredPaymentMethod!= undefined && Object.keys(filteredPaymentMethod).length > 0){ setOnReady(true) } }, [filteredPaymentMethod]); useEffect(() => { const availableMethod = availableMethodData; if(props.availableMethods.length > 0){ const filteringPaymentMethod = availableMethod.filter(obj => { if (obj.supportedcard && obj.supportedcard.includes(paymentMethod)) { return obj.subtype === "CreditCard"; } return obj.subtype === paymentMethod; }); if (isLimit && filteringPaymentMethod!= undefined && filteringPaymentMethod.length>0){ if (paymentMethod == "FPS" || paymentMethod == "PPS"){ filteringPaymentMethod[0].pointstonote = paymentMethod + intl.formatMessage({id: 'paymentLimitPrice1'}) setFilteredPaymentMethod(filteringPaymentMethod[0]); } else if (isLimit) { filteringPaymentMethod[0].pointstonote = paymentMethod + intl.formatMessage({id: 'paymentLimitPrice2'}) setFilteredPaymentMethod(filteringPaymentMethod[0]); } } if (!isLimit && filteringPaymentMethod!= undefined && filteringPaymentMethod.length>0){ setFilteredPaymentMethod(filteringPaymentMethod); } if(isPPSLimit && filteringPaymentMethod!= undefined && filteringPaymentMethod.length>0 && paymentMethod =="PPS"){ filteringPaymentMethod[0].pointstonote = paymentMethod + intl.formatMessage({id: 'paymentLimitPPS'}) setFilteredPaymentMethod(filteringPaymentMethod[0]); } setFpsClass(paymentMethod == "FPS" || paymentMethod == "" ? "" : "grayscale") setVisaClass(paymentMethod == "Visa" || paymentMethod == "" ? "" : "grayscale") setMastercardClass(paymentMethod == "MasterCard" || paymentMethod == "" ? "" : "grayscale") setJCBClass(paymentMethod == "JCB" || paymentMethod == "" ? "" : "grayscale") setUnionPayClass(paymentMethod == "UnionPay" || paymentMethod == "" ? "" : "grayscale") setPPSlass(paymentMethod == "PPS" || paymentMethod == "" ? "" : "grayscale") } }, [paymentMethod]); const selectedPaymentMethodHandle = (method) => () =>{ if (method != paymentMethod){ resetForm() let totalAmount = props.totalAmount; // totalAmount = 99999999.99 // totalAmount = 0.01 const paymentLimitList = props.paymentLimit let limitRecordList; switch (method) { case "Visa": case "JCB": case "MasterCard": limitRecordList = paymentLimitList.creditCardLimitRecord; break; case "FPS": limitRecordList = paymentLimitList.fpsLimitRecord; break; case "PPS": limitRecordList = paymentLimitList.ppsbLimitRecord; break; case "UnionPay": limitRecordList = paymentLimitList.unionPlayLimitRecord; break; default: break; } if (totalAmount >= limitRecordList.minLimit && totalAmount <= limitRecordList.maxLimit) { setIsLimit(false) } else { setIsLimit(true) } if (getBowserType() === "PC_Browser"){ setPaymentMethod(method) props.setSelectedPaymentMethod(method); setIsPPSLimit(false) } else if (getBowserType() !== "PC_Browser" && method !== "PPS"){ setPaymentMethod(method) props.setSelectedPaymentMethod(method); } else { setPaymentMethod(method) setIsPPSLimit(true) } } }; const confirmPaymentHandle = () => () =>{ props.setConfirmPayment(true); }; const closeHandle = () => () =>{ resetForm() props.setOpen(false) }; const resetForm = () =>{ setOnReady(false) setPaymentMethod("") setFilteredPaymentMethod([]) setIsLimit(false) setIsPPSLimit(false) }; useEffect(() => { if(props.selectedPaymentMethod === ""){ setPaymentMethod("") } }, [availableMethodData]); const formik = useFormik({ initialValues: ({ username: '', }), validationSchema: yup.object().shape({ }), }); return ( props.setOpen(false)} fullWidth={true} maxWidth={'xl'} fullScreen={props.isFullScreen} > {windowTitle}
: {transactionData.transactionid} {/* 支付金額: HK$ {FormatUtils.currencyFormat(props.totalAmount)} */} {!props.onReady ? :availableMethodData.length>0? : {paymentMethod !=""? {paymentMethod} : null} : } (HK$):  {" HK$ " + FormatUtils.currencyFormat(props.totalAmount)} {paymentMethod === "" ? paymentMethod !="" && !onReady ? : null : !isLimit? !onReady? : !isLimit? filteredPaymentMethod.map((availableMethod) => { return ( { availableMethod.pointstonote.map((pointstonote) => { return ( {pointstonote.content} ); }) } ); }) : null : !onReady? : {filteredPaymentMethod.pointstonote} }
); }; export default MultiPaymentWindow;