@upbudget/belvo-js
Version:
React component for Belvo
50 lines • 1.66 kB
JavaScript
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