react-plaid-link
Version:
A React component for Plaid Link
2 lines (1 loc) • 6.52 kB
JavaScript
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("react")):"function"==typeof define&&define.amd?define(["exports","react"],n):n((e=e||self).PlaidLink={},e.React)}(this,(function(e,n){"use strict";var t="default"in n?n.default:n;function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function o(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?r(Object(t),!0).forEach((function(n){i(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):r(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function l(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function a(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==t)return;var r,o,i=[],l=!0,a=!1;try{for(t=t.call(e);!(l=(r=t.next()).done)&&(i.push(r.value),!n||i.length!==n);l=!0);}catch(e){a=!0,o=e}finally{try{l||null==t.return||t.return()}finally{if(a)throw o}}return i}(e,n)||function(e,n){if(!e)return;if("string"==typeof e)return c(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);"Object"===t&&e.constructor&&(t=e.constructor.name);if("Map"===t||"Set"===t)return Array.from(e);if("Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return c(e,n)}(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=new Array(n);t<n;t++)r[t]=e[t];return r}var u=["src","checkForExisting"],d={},s=function(e){var n=document.querySelector('script[src="'.concat(e,'"]'));if(n)return d[e]={loading:!1,error:null,scriptEl:n}},f="undefined"!=typeof window&&void 0!==window.document;function p(e){var t=e.src,r=e.checkForExisting,o=void 0!==r&&r,i=l(e,u),c=t?d[t]:void 0;!c&&o&&t&&f&&(c=s(t));var p=a(n.useState(c?c.loading:Boolean(t)),2),E=p[0],b=p[1],y=a(n.useState(c?c.error:null),2),v=y[0],O=y[1],m=a(n.useState(!1),2),I=m[0],S=m[1];return n.useEffect((function(){if(f&&t&&!I&&!v){var e;!(c=d[t])&&o&&(c=s(t)),c?e=c.scriptEl:((e=document.createElement("script")).src=t,Object.keys(i).forEach((function(n){void 0===e[n]?e.setAttribute(n,i[n]):e[n]=i[n]})),c=d[t]={loading:!0,error:null,scriptEl:e});var n=function(){c&&(c.loading=!1),b(!1),S(!0)},r=function(e){c&&(c.error=e),O(e)};return e.addEventListener("load",n),e.addEventListener("error",r),document.body.appendChild(e),function(){e.removeEventListener("load",n),e.removeEventListener("error",r),c&&c.loading&&(e.remove(),delete d[t])}}}),[t]),[E,v]}var E=function(e,n){var t,r,l,a;return function(e,n){var t={plaid:null,open:!1,onExitCallback:null};if("undefined"==typeof window||!window.Plaid)throw new Error("Plaid not loaded");t.plaid=n(o(o({},e),{},{onExit:function(n,r){t.open=!1,e.onExit&&e.onExit(n,r),t.onExitCallback&&t.onExitCallback()}}));return{open:function(){t.plaid&&(t.open=!0,t.onExitCallback=null,t.plaid.open())},submit:function(e){t.plaid&&t.plaid.submit(e)},exit:function(e,n){t.open&&t.plaid?(t.onExitCallback=n,t.plaid.exit(e),e&&e.force&&(t.open=!1)):n&&n()},destroy:function(){t.plaid&&(t.plaid.destroy(),t.plaid=null)}}}((t=e,r="publicKey",l="key",a={},delete Object.assign(a,t,i({},l,t[r]))[r],a),n)},b=function(){},y=function(e){var t=a(p({src:"https://cdn.plaid.com/link/v2/stable/link-initialize.js",checkForExisting:!0}),2),r=t[0],i=t[1],l=a(n.useState(null),2),c=l[0],u=l[1],d=a(n.useState(!1),2),s=d[0],f=d[1],y=(e.product||[]).slice().sort().join(",");n.useEffect((function(){if(!r&&(e.token||e.publicKey||e.receivedRedirectUri)){if(!i&&window.Plaid){null!=c&&c.exit({force:!0},(function(){return c.destroy()}));var n=E(o(o({},e),{},{onLoad:function(){f(!0),e.onLoad&&e.onLoad()}}),window.Plaid.create);return u(n),function(){return n.exit({force:!0},(function(){return n.destroy()}))}}console.error("Error loading Plaid",i)}}),[r,i,e.publicKey,e.token,y]);return{error:i,ready:null!=c&&(!r||s),submit:c?c.submit:b,exit:c?c.exit:b,open:c?c.open:function(){e.token||console.warn("react-plaid-link: You cannot call open() without a valid token supplied to usePlaidLink. This is a no-op.")}}},v=["children","style","className"],O=function(e){var n=e.children,r=e.style,i=e.className,a=l(e,v),c=y(o({},a)),u=c.error,d=c.open;return t.createElement("button",{disabled:Boolean(u),type:"button",className:i,style:o({padding:"6px 4px",outline:"none",background:"#FFFFFF",border:"2px solid #F1F1F1",borderRadius:"4px"},r),onClick:function(){return d()}},n)};O.displayName="PlaidLink";var m;(m=e.PlaidLinkStableEvent||(e.PlaidLinkStableEvent={})).OPEN="OPEN",m.EXIT="EXIT",m.HANDOFF="HANDOFF",m.SELECT_INSTITUTION="SELECT_INSTITUTION",m.ERROR="ERROR",m.BANK_INCOME_INSIGHTS_COMPLETED="BANK_INCOME_INSIGHTS_COMPLETED",m.IDENTITY_VERIFICATION_PASS_SESSION="IDENTITY_VERIFICATION_PASS_SESSION",m.IDENTITY_VERIFICATION_FAIL_SESSION="IDENTITY_VERIFICATION_FAIL_SESSION",e.PlaidEmbeddedLink=function(e){var r=e.style,i=e.className,l=e.onSuccess,c=e.onExit,u=e.onLoad,d=e.onEvent,s=e.token,f=e.receivedRedirectUri,E=n.useMemo((function(){return{onSuccess:l,onExit:c,onLoad:u,onEvent:d,token:s,receivedRedirectUri:f}}),[l,c,u,d,s,f]),b=a(p({src:"https://cdn.plaid.com/link/v2/stable/link-initialize.js",checkForExisting:!0}),2),y=b[0],v=b[1],O=n.useRef(null);return n.useEffect((function(){if(!y)if(!v&&window.Plaid){if(null!=E.token&&""!=E.token){var e=window.Plaid.createEmbedded(o({},E),O.current).destroy;return function(){e()}}console.error("A token is required to initialize embedded Plaid Link")}else console.error("Error loading Plaid",v)}),[y,v,E,O]),t.createElement("div",{style:r,className:i,ref:O})},e.PlaidLink=O,e.usePlaidLink=y,Object.defineProperty(e,"__esModule",{value:!0})}));