UNPKG

@ryo-98/react-api-bridge

Version:
39 lines (38 loc) 1.59 kB
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 };