UNPKG

google-maps-js-api-react

Version:

Fast, tree-shakable, and light-weight React components and hooks for integrating Google Maps API functionality

95 lines (91 loc) 2.93 kB
import { CHANGED } from './chunk-IGDL35GK.js'; import { useLayoutEffect, useEffect } from 'react'; import useConst from 'react-helpful-utils/useConst'; var useHandlersAndProps = (props, connectedPairs, isKeyOmitted) => useConst(() => { const isTriggeredBySetStateSet = /* @__PURE__ */ new Set(); const handlersList = []; const propsList = []; let isUpdated; let instance; for (const key in props) { if (!isKeyOmitted(key)) { (key.startsWith("on") ? handlersList : propsList).push(key); } } return (props2) => { for (let i = propsList.length; i--; ) { const key = propsList[i]; const value = props2[key]; useLayoutEffect(() => { if (isUpdated) { isTriggeredBySetStateSet.add(key); instance.setOptions({ [key]: value }); } }, [value]); } if (propsList.length) { useLayoutEffect(() => { isUpdated = true; return () => { isUpdated = false; }; }, []); } for (let i = handlersList.length; i--; ) { const key = handlersList[i]; const value = props2[key]; useEffect(() => { if (value) { const eventName = (key.endsWith("Changed") ? key.slice(2, -7) + CHANGED : key.slice(2)).toLowerCase(); let fn = value; if (connectedPairs.has(eventName)) { const dependBy = connectedPairs.get(eventName); const boundFn = fn.bind(instance); if (dependBy in props2) { isTriggeredBySetStateSet.delete(dependBy); fn = () => { if (!isTriggeredBySetStateSet.delete(dependBy)) { boundFn(instance.get(dependBy)); } }; } else if (fn.length) { fn = () => { boundFn(instance.get(dependBy)); }; } } const listener = instance.addListener(eventName, fn); return () => listener.remove(); } }, [value]); } return (_instance) => { instance = _instance; }; }; })(props); var useHandlersAndProps_default = useHandlersAndProps; // src/utils/getConnectedEventsAndProps.ts var getConnectedEventsAndProps = (arr) => { const connectedEventsAndProps = /* @__PURE__ */ new Map(); if (arr) { for (let i = 0; i < arr.length; i++) { const item = arr[i]; connectedEventsAndProps.set( item.toLowerCase() + CHANGED, item ); } } return connectedEventsAndProps; }; var getConnectedEventsAndProps_default = getConnectedEventsAndProps; // src/utils/handleHas.ts var handleHas = (keys) => { const set = new Set(keys); return set.has.bind(set); }; var handleHas_default = handleHas; export { getConnectedEventsAndProps_default, handleHas_default, useHandlersAndProps_default }; //# sourceMappingURL=chunk-HVIYR2JS.js.map //# sourceMappingURL=chunk-HVIYR2JS.js.map