@ryo-98/react-api-bridge
Version:
A registry for component imperative api
39 lines (38 loc) • 1.59 kB
JavaScript
import { useFinalContextValue, getApiDesc, getUpperApiDesc, getUpperContextValue, getResolverOrCreateWhenMissing } from "../../core/index.js";
import { useCallback } from "react";
function useTools(apiBridge, hookOptions) {
const contextValue = useFinalContextValue(hookOptions, apiBridge.BridgeContext);
const getAPI = useCallback((_name, options) => {
return getApiDesc(_name, options?.contextValue?.bridge || contextValue.bridge, apiBridge.bridgeOptions).apiNList;
}, [contextValue.bridge]);
const getBoundaryPayload = useCallback((options) => {
return (options?.contextValue || contextValue).payload;
}, [contextValue.payload]);
const getUpperAPI = useCallback((_name, options) => {
return getUpperApiDesc(options?.contextValue || contextValue, _name, options, apiBridge.bridgeOptions)?.apiNList;
}, []);
const getUpperBoundaryPayload = useCallback((options) => {
const parent = getUpperContextValue(options?.contextValue || contextValue, options?.shouldForwardYield);
if (!parent) return;
return parent.payload;
}, []);
const getAPIAsync = (_name, options) => {
const { initial } = {
initial: true,
...options
};
const { apiNList } = getApiDesc(_name, (options?.contextValue || contextValue).bridge, apiBridge.bridgeOptions);
const { resolver } = getResolverOrCreateWhenMissing(apiNList, contextValue, initial, apiBridge.pendingResolverMap);
return resolver.promise;
};
return {
getAPI,
getBoundaryPayload,
getUpperAPI,
getUpperBoundaryPayload,
getAPIAsync
};
}
export {
useTools
};