UNPKG

@ryo-98/react-api-bridge

Version:
45 lines (44 loc) 1.43 kB
import { getIsMulti } from "./getIsMulti.js"; import { tryInvoke } from "../utils/tryInvoke.js"; import { appendToMappedSet } from "../utils/mappedSet.js"; function mountHookInitEffect(name, onInit, apiNList, hookId, bridgeOptions, initializedOnInitMap, touchedRefs) { if (!onInit) return; const isMulti = getIsMulti(name, bridgeOptions) ?? false; const involvedApiList = []; let deferFn; if (apiNList && !isMulti) { const _assertedApi = apiNList; if (!_assertedApi.current) return; const _assertedOnInit = onInit; deferFn = () => { return _assertedOnInit(_assertedApi); }; involvedApiList.push(_assertedApi); } else if (apiNList && isMulti) { const _assertedApiList = apiNList; if (!_assertedApiList.length) return; const _assertedOnInit = onInit; deferFn = () => { return _assertedOnInit(void 0, _assertedApiList); }; involvedApiList.push(..._assertedApiList); } else { throw new Error("This might the internal Error of react-api-bridge"); } let clearFns = []; if (involvedApiList.some((apiRef) => !initializedOnInitMap.get(apiRef)?.has(hookId))) { clearFns.push( deferFn?.(), ...involvedApiList.map((apiRef) => { touchedRefs.add(apiRef); return appendToMappedSet(initializedOnInitMap, apiRef, hookId); }) ); } return () => { clearFns.forEach(tryInvoke); }; } export { mountHookInitEffect };