@ryo-98/react-api-bridge
Version:
A registry for component imperative api
45 lines (44 loc) • 1.43 kB
JavaScript
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
};