UNPKG

@wordpress/hooks

Version:
48 lines (47 loc) 1.44 kB
// 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