bananas-commerce-admin
Version:
What's this, an admin for apes?
49 lines • 2.17 kB
JavaScript
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