UNPKG

bananas-commerce-admin

Version:

What's this, an admin for apes?

49 lines 2.17 kB
import React, { useEffect, useState } from "react"; import { ApiClient } from "../api"; import ErrorScreen from "../containers/ErrorScreen"; import { getCookie } from "../util/get_cookie"; const ApiContext = React.createContext(undefined); export const useApi = () => React.useContext(ApiContext); export const ApiContextProvider = ({ children, api: init, contrib, }) => { const [api, setApi] = useState(); const [error, setError] = useState(null); useEffect(() => { if (api == null) { (init instanceof ApiClient ? Promise.resolve(init) : typeof init === "string" || init instanceof URL ? ApiClient.load(init) : ApiClient.load(init.schema, init.server)) .then(async (api) => { if (contrib) { const contribArray = Array.isArray(contrib) ? contrib : Object.entries(contrib).map(([tag, contrib]) => ({ tag, contrib })); for (const [i, { tag, contrib: hit }] of contribArray.entries()) { const operations = api.contrib[tag]; if (operations) { for (const operation of Object.values(operations)) { operation.component = { ...hit, component: hit.component?.() ?? (() => null), }; operation.order = i; } } } } setApi(api); if (getCookie("csrftoken") == null) { await api.operations["bananas.csrf:list"].call(); } }) .catch((error) => setError(error)); } }, [api]); if (error != null) { return React.createElement(ErrorScreen, { error: error }); } return React.createElement(ApiContext.Provider, { value: api }, children); }; export default ApiContext; //# sourceMappingURL=ApiContext.js.map