UNPKG

@upbudget/belvo-js

Version:

React component for Belvo

50 lines 1.66 kB
import React, { createContext, useContext, useMemo, useCallback } from "react"; import { useBelvoScript } from "../hooks/use-belvo-script"; import { useBelvoAccessToken } from "../hooks/use-belvo-access-token"; const BelvoWidgetContext = createContext(null); function BelvoWidgetProvider({ getAccessToken, children }) { const { ready: scriptReady, error: scriptError } = useBelvoScript(); const { fetchToken } = useBelvoAccessToken(getAccessToken); const open = useCallback(async (extra = {}) => { if (!scriptReady) throw new Error("Belvo script not loaded"); const { belvoSDK } = window; const access = await fetchToken(); const defaultConfig = { locale: "pt", mode: "webapp", integration_type: "openfinance" }; return new Promise((resolve) => { belvoSDK.createWidget(access, { ...defaultConfig, ...extra, callback(link, institution) { extra.onSuccess?.(link, institution); resolve(); }, onExit(data) { extra.onExit?.(data); resolve(); }, onEvent(data) { extra.onEvent?.(data); } }).build(); }); }, [scriptReady, fetchToken]); const value = useMemo(() => ({ open, scriptReady, scriptError }), [open, scriptReady, scriptError]); return /* @__PURE__ */ React.createElement(BelvoWidgetContext.Provider, { value }, children); } function useBelvo() { const ctx = useContext(BelvoWidgetContext); if (!ctx) throw new Error("useBelvoWidget must be inside <BelvoProvider>"); return ctx; } export { BelvoWidgetProvider, useBelvo }; //# sourceMappingURL=belvo-provider.js.map