react-naver-maps
Version:
React Navermaps API integration for modern development.
99 lines (94 loc) • 3.45 kB
JavaScript
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/helpers/event.tsx
var event_exports = {};
__export(event_exports, {
HandleEvents: () => HandleEvents
});
module.exports = __toCommonJS(event_exports);
var import_camelcase = __toESM(require("camelcase"));
var import_lodash = __toESM(require("lodash.pick"));
var import_react3 = require("react");
// src/listener.tsx
var import_react2 = require("react");
// src/contexts/event-target.ts
var import_react = require("react");
var EventTargetContext = (0, import_react.createContext)(void 0);
var useEventTarget = () => (0, import_react.useContext)(EventTargetContext);
// src/listener.tsx
function useListener(target, type, listener) {
(0, import_react2.useEffect)(() => {
const _listener = (...args) => listener(...args, target);
const mapEventListener = naver.maps.Event.addListener(target, type, _listener);
return () => {
naver.maps.Event.removeListener(mapEventListener);
};
}, [target, type, listener]);
}
var Listener = (props) => {
const {
target: propTarget,
type,
listener
} = props;
const contextTarget = useEventTarget();
const target = propTarget || contextTarget;
if (!target) {
throw new Error("react-naver-maps: No Target to add listener");
}
useListener(target, type, listener);
return null;
};
// src/helpers/event.tsx
var import_jsx_runtime = require("react/jsx-runtime");
function HandleEvents(props) {
const { events, listeners: _listeners } = props;
const eventMap = (0, import_react3.useMemo)(() => createEventMap(events), events);
const listeners = (0, import_lodash.default)(_listeners, Object.keys(eventMap));
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, {
children: Object.keys(listeners).map((key) => {
const eventName = eventMap[key];
const listener = listeners[key];
return listener ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Listener, {
type: eventName,
listener
}, key) : null;
})
});
}
function createEventMap(events) {
return events.reduce((acc, eventName) => {
const key = (0, import_camelcase.default)(`on_${eventName}`);
return {
[key]: eventName,
...acc
};
}, {});
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
HandleEvents
});
//# sourceMappingURL=event.js.map
;