@wordpress/hooks
Version:
WordPress hooks library.
48 lines (47 loc) • 1.44 kB
JavaScript
// packages/hooks/src/createRemoveHook.ts
import validateNamespace from "./validateNamespace";
import validateHookName from "./validateHookName";
function createRemoveHook(hooks, storeKey, removeAll = false) {
return function removeHook(hookName, namespace) {
const hooksStore = hooks[storeKey];
if (!validateHookName(hookName)) {
return;
}
if (!removeAll && !validateNamespace(namespace)) {
return;
}
if (!hooksStore[hookName]) {
return 0;
}
let handlersRemoved = 0;
if (removeAll) {
handlersRemoved = hooksStore[hookName].handlers.length;
hooksStore[hookName] = {
runs: hooksStore[hookName].runs,
handlers: []
};
} else {
const handlers = hooksStore[hookName].handlers;
for (let i = handlers.length - 1; i >= 0; i--) {
if (handlers[i].namespace === namespace) {
handlers.splice(i, 1);
handlersRemoved++;
hooksStore.__current.forEach((hookInfo) => {
if (hookInfo.name === hookName && hookInfo.currentIndex >= i) {
hookInfo.currentIndex--;
}
});
}
}
}
if (hookName !== "hookRemoved") {
hooks.doAction("hookRemoved", hookName, namespace);
}
return handlersRemoved;
};
}
var createRemoveHook_default = createRemoveHook;
export {
createRemoveHook_default as default
};
//# sourceMappingURL=createRemoveHook.js.map