UNPKG

@trap_stevo/legendarybuilderproreact-ui

Version:

The legendary UI & utility API that makes your application a legendary application. ~ Created by Steven Compton

92 lines 3.16 kB
import _slicedToArray from "@babel/runtime/helpers/slicedToArray"; import React, { createContext, useContext, useState, useEffect, useRef, useCallback } from "react"; import { GetHUDInteractionHandlers } from "../HUDManagers/HUDInteractionManager.js"; var HUDInteractionContext = /*#__PURE__*/createContext(null); export function HUDInteractionProvider(_ref) { var children = _ref.children; var _useState = useState(new Map()), _useState2 = _slicedToArray(_useState, 2), interactions = _useState2[0], setInteractions = _useState2[1]; var registerInteraction = useCallback(function (node, config) { if (!node) { return; } var handlers = GetHUDInteractionHandlers(config); Object.entries(handlers).forEach(function (_ref2) { var _ref3 = _slicedToArray(_ref2, 2), key = _ref3[0], handler = _ref3[1]; var eventType = key.replace(/^on/, "").toLowerCase(); node.addEventListener(eventType, handler); }); setInteractions(function (prev) { var next = new Map(prev); next.set(node, { config: config, handlers: handlers }); return next; }); }, []); var unregisterInteraction = useCallback(function (node) { setInteractions(function (prev) { var next = new Map(prev); var data = next.get(node); if (data !== null && data !== void 0 && data.handlers) { Object.entries(data.handlers).forEach(function (_ref4) { var _ref5 = _slicedToArray(_ref4, 2), key = _ref5[0], handler = _ref5[1]; var eventType = key.replace(/^on/, "").toLowerCase(); node.removeEventListener(eventType, handler); }); } next["delete"](node); return next; }); }, []); return /*#__PURE__*/React.createElement(HUDInteractionContext.Provider, { value: { unregisterInteraction: unregisterInteraction, registerInteraction: registerInteraction, interactions: interactions } }, children); } ; export function useHUDInteraction(nodeRef) { var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var context = useContext(HUDInteractionContext); if (!context) { throw new Error("Must be used within a HUDInteractionProvider."); } var registerInteraction = context.registerInteraction, unregisterInteraction = context.unregisterInteraction; var lastConfigRef = useRef(); useEffect(function () { var node = nodeRef === null || nodeRef === void 0 ? void 0 : nodeRef.current; if (!node) { return; } var serializedConfig = JSON.stringify(config); if (lastConfigRef.current === serializedConfig) { return; } lastConfigRef.current = serializedConfig; registerInteraction(node, config); return function () { unregisterInteraction(node); lastConfigRef.current = null; }; }, [nodeRef, registerInteraction, unregisterInteraction]); } ; export function useHUDInteractions() { var context = useContext(HUDInteractionContext); if (!context) { throw new Error("Must use within a HUDInteractionProvider."); } return context; } ;