UNPKG

@hypernetlabs/web-ui

Version:
135 lines 7.34 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("@material-ui/core"); const contexts_1 = require("../../contexts"); const react_1 = __importStar(require("react")); const react_alert_1 = require("react-alert"); const components_1 = require("../../components"); const DepositFunds_1 = __importDefault(require("../../flows/OnboardingFlow/screens/DepositFunds")); const EmptyBalance_1 = __importDefault(require("../../flows/OnboardingFlow/screens/EmptyBalance")); const MerchantAuthorization_1 = __importDefault(require("../../flows/OnboardingFlow/screens/MerchantAuthorization")); const OnboardingSuccess_1 = __importDefault(require("../../flows/OnboardingFlow/screens/OnboardingSuccess")); const OnboardingFlow_style_1 = require("../../flows/OnboardingFlow/OnboardingFlow.style"); const hooks_1 = require("../../hooks"); var EOnboardingScreens; (function (EOnboardingScreens) { EOnboardingScreens[EOnboardingScreens["IDLE"] = 0] = "IDLE"; EOnboardingScreens[EOnboardingScreens["MERCHANT_AUTHORIZATION"] = 1] = "MERCHANT_AUTHORIZATION"; EOnboardingScreens[EOnboardingScreens["EMPTY_BALANCE"] = 2] = "EMPTY_BALANCE"; EOnboardingScreens[EOnboardingScreens["FUND_WIDGET"] = 3] = "FUND_WIDGET"; EOnboardingScreens[EOnboardingScreens["BALANCES"] = 4] = "BALANCES"; EOnboardingScreens[EOnboardingScreens["ONBOARDING_SUCCESS"] = 5] = "ONBOARDING_SUCCESS"; })(EOnboardingScreens || (EOnboardingScreens = {})); const OnboardingFlow = (props) => { const { gatewayUrl, successButtonProps, gatewayName = "Hypernet.Pay", renderGatewayApprovalContent, excludeCardWrapper, launchpadUrl, } = props; const alert = (0, react_alert_1.useAlert)(); const { balances } = (0, hooks_1.useBalances)(); const { coreProxy } = (0, contexts_1.useStoreContext)(); const { setLoading, handleCoreError } = (0, contexts_1.useLayoutContext)(); const classes = (0, OnboardingFlow_style_1.useStyles)(); const [currentSreen, setCurrentSreen] = (0, react_1.useState)(EOnboardingScreens.IDLE); (0, react_1.useEffect)(() => { setLoading(true); // First initialze the gateway coreProxy.payments.getAuthorizedGateways().match((gatewaysMap) => { if (gatewaysMap.get(gatewayUrl)) { //check for balances coreProxy.payments.getBalances().match((_balances) => { var _a; decideScreenWhenGatewayIsAlreadyAuthorized(!!((_a = _balances.assets) === null || _a === void 0 ? void 0 : _a.length)); }, handleCoreError); } else { setCurrentSreen(EOnboardingScreens.MERCHANT_AUTHORIZATION); } setLoading(false); }, handleCoreError); coreProxy.onGatewayAuthorized.subscribe((_gatewayUrl) => { if (gatewayUrl === _gatewayUrl) { alert.success(`Gateway ${gatewayUrl} authorization succeeded!`); setLoading(false); coreProxy.payments.getBalances().match((_balances) => { var _a; decideScreenWhenGatewayIsAlreadyAuthorized(!!((_a = _balances.assets) === null || _a === void 0 ? void 0 : _a.length)); }, handleCoreError); } }); coreProxy.onAuthorizedGatewayActivationFailed.subscribe((_gatewayUrl) => { if (gatewayUrl === _gatewayUrl) { alert.error(`Gateway ${gatewayUrl} authorization failed!`); setLoading(false); } }); }, []); // Watch funding success (0, react_1.useEffect)(() => { if ((balances === null || balances === void 0 ? void 0 : balances.length) && currentSreen === EOnboardingScreens.FUND_WIDGET) { setCurrentSreen(EOnboardingScreens.ONBOARDING_SUCCESS); } }, [balances]); const decideScreenWhenGatewayIsAlreadyAuthorized = (hasBalances) => { if (hasBalances || (balances === null || balances === void 0 ? void 0 : balances.length)) { setCurrentSreen(EOnboardingScreens.ONBOARDING_SUCCESS); } else { setCurrentSreen(EOnboardingScreens.EMPTY_BALANCE); } }; const handleGatewayAuthorization = () => { setLoading(true); coreProxy.payments .authorizeGateway(gatewayUrl) .map(() => { setLoading(false); setCurrentSreen(EOnboardingScreens.EMPTY_BALANCE); }) .mapErr(handleCoreError); }; const goToFundWalletScreen = () => { setCurrentSreen(EOnboardingScreens.FUND_WIDGET); }; const renderScreen = () => { switch (currentSreen) { case EOnboardingScreens.IDLE: return react_1.default.createElement(react_1.default.Fragment, null, "Loading..."); case EOnboardingScreens.MERCHANT_AUTHORIZATION: return (react_1.default.createElement(MerchantAuthorization_1.default, { gatewayName: gatewayName, renderGatewayApprovalContent: renderGatewayApprovalContent, handleGatewayAuthorization: handleGatewayAuthorization })); case EOnboardingScreens.EMPTY_BALANCE: return (react_1.default.createElement(EmptyBalance_1.default, { gatewayName: gatewayName, handleFundButtonClick: goToFundWalletScreen })); case EOnboardingScreens.FUND_WIDGET: return react_1.default.createElement(DepositFunds_1.default, { excludeCardWrapper: !!excludeCardWrapper }); case EOnboardingScreens.ONBOARDING_SUCCESS: return (react_1.default.createElement(OnboardingSuccess_1.default, { gatewayName: gatewayName, successButtonProps: successButtonProps, handleFundButtonClick: goToFundWalletScreen })); default: return react_1.default.createElement(core_1.Box, null, "Something went wrong!"); } }; return (react_1.default.createElement(core_1.Box, { className: classes.container }, react_1.default.createElement(core_1.Box, { display: "flex", flexDirection: "column", width: 480, margin: "auto" }, renderScreen(), react_1.default.createElement(components_1.ModalFooter, { url: launchpadUrl })))); }; exports.default = OnboardingFlow; //# sourceMappingURL=OnboardingFlow.js.map