source: node_modules/recharts/lib/chart/RechartsWrapper.js@ a762898

Last change on this file since a762898 was a762898, checked in by istevanoska <ilinastevanoska@…>, 5 months ago

Added visualizations

  • Property mode set to 100644
File size: 14.6 KB
Line 
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.RechartsWrapper = void 0;
7var _react = _interopRequireWildcard(require("react"));
8var React = _react;
9var _clsx = require("clsx");
10var _tooltipSlice = require("../state/tooltipSlice");
11var _hooks = require("../state/hooks");
12var _mouseEventsMiddleware = require("../state/mouseEventsMiddleware");
13var _useChartSynchronisation = require("../synchronisation/useChartSynchronisation");
14var _keyboardEventsMiddleware = require("../state/keyboardEventsMiddleware");
15var _useReportScale = require("../util/useReportScale");
16var _externalEventsMiddleware = require("../state/externalEventsMiddleware");
17var _touchEventsMiddleware = require("../state/touchEventsMiddleware");
18var _tooltipPortalContext = require("../context/tooltipPortalContext");
19var _legendPortalContext = require("../context/legendPortalContext");
20var _chartLayoutContext = require("../context/chartLayoutContext");
21var _ResponsiveContainer = require("../component/ResponsiveContainer");
22function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
23function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
24function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
25function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
26function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
27function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
28function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
29var EventSynchronizer = () => {
30 (0, _useChartSynchronisation.useSynchronisedEventsFromOtherCharts)();
31 return null;
32};
33function getNumberOrZero(value) {
34 if (typeof value === 'number') {
35 return value;
36 }
37 if (typeof value === 'string') {
38 var parsed = parseFloat(value);
39 if (!Number.isNaN(parsed)) {
40 return parsed;
41 }
42 }
43 return 0;
44}
45var ResponsiveDiv = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
46 var _props$style, _props$style2;
47 var observerRef = (0, _react.useRef)(null);
48 var [sizes, setSizes] = (0, _react.useState)({
49 containerWidth: getNumberOrZero((_props$style = props.style) === null || _props$style === void 0 ? void 0 : _props$style.width),
50 containerHeight: getNumberOrZero((_props$style2 = props.style) === null || _props$style2 === void 0 ? void 0 : _props$style2.height)
51 });
52 var setContainerSize = (0, _react.useCallback)((newWidth, newHeight) => {
53 setSizes(prevState => {
54 var roundedWidth = Math.round(newWidth);
55 var roundedHeight = Math.round(newHeight);
56 if (prevState.containerWidth === roundedWidth && prevState.containerHeight === roundedHeight) {
57 return prevState;
58 }
59 return {
60 containerWidth: roundedWidth,
61 containerHeight: roundedHeight
62 };
63 });
64 }, []);
65 var innerRef = (0, _react.useCallback)(node => {
66 if (typeof ref === 'function') {
67 ref(node);
68 }
69 if (node != null && typeof ResizeObserver !== 'undefined') {
70 var {
71 width: containerWidth,
72 height: containerHeight
73 } = node.getBoundingClientRect();
74 setContainerSize(containerWidth, containerHeight);
75 var callback = entries => {
76 var entry = entries[0];
77 if (entry == null) {
78 return;
79 }
80 var {
81 width,
82 height
83 } = entry.contentRect;
84 setContainerSize(width, height);
85 };
86 var observer = new ResizeObserver(callback);
87 observer.observe(node);
88 observerRef.current = observer;
89 }
90 }, [ref, setContainerSize]);
91 (0, _react.useEffect)(() => {
92 return () => {
93 var observer = observerRef.current;
94 if (observer != null) {
95 observer.disconnect();
96 }
97 };
98 }, [setContainerSize]);
99 return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_chartLayoutContext.ReportChartSize, {
100 width: sizes.containerWidth,
101 height: sizes.containerHeight
102 }), /*#__PURE__*/React.createElement("div", _extends({
103 ref: innerRef
104 }, props)));
105});
106var ReadSizeOnceDiv = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
107 var {
108 width,
109 height
110 } = props;
111 var [sizes, setSizes] = (0, _react.useState)({
112 containerWidth: getNumberOrZero(width),
113 containerHeight: getNumberOrZero(height)
114 });
115 var setContainerSize = (0, _react.useCallback)((newWidth, newHeight) => {
116 setSizes(prevState => {
117 var roundedWidth = Math.round(newWidth);
118 var roundedHeight = Math.round(newHeight);
119 if (prevState.containerWidth === roundedWidth && prevState.containerHeight === roundedHeight) {
120 return prevState;
121 }
122 return {
123 containerWidth: roundedWidth,
124 containerHeight: roundedHeight
125 };
126 });
127 }, []);
128 var innerRef = (0, _react.useCallback)(node => {
129 if (typeof ref === 'function') {
130 ref(node);
131 }
132 if (node != null) {
133 var {
134 width: containerWidth,
135 height: containerHeight
136 } = node.getBoundingClientRect();
137 setContainerSize(containerWidth, containerHeight);
138 }
139 }, [ref, setContainerSize]);
140 return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_chartLayoutContext.ReportChartSize, {
141 width: sizes.containerWidth,
142 height: sizes.containerHeight
143 }), /*#__PURE__*/React.createElement("div", _extends({
144 ref: innerRef
145 }, props)));
146});
147var StaticDiv = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
148 var {
149 width,
150 height
151 } = props;
152 return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_chartLayoutContext.ReportChartSize, {
153 width: width,
154 height: height
155 }), /*#__PURE__*/React.createElement("div", _extends({
156 ref: ref
157 }, props)));
158});
159var NonResponsiveDiv = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
160 var {
161 width,
162 height
163 } = props;
164 // When width or height are percentages or CSS short names, read size from DOM once
165 if (typeof width === 'string' || typeof height === 'string') {
166 return /*#__PURE__*/React.createElement(ReadSizeOnceDiv, _extends({}, props, {
167 ref: ref
168 }));
169 }
170 // When both are numbers, use them directly
171 if (typeof width === 'number' && typeof height === 'number') {
172 return /*#__PURE__*/React.createElement(StaticDiv, _extends({}, props, {
173 width: width,
174 height: height,
175 ref: ref
176 }));
177 }
178 // When width/height are undefined, render wrapper div without reporting size
179 // This results in no SVG being rendered (intentional for backwards compatibility)
180 return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_chartLayoutContext.ReportChartSize, {
181 width: width,
182 height: height
183 }), /*#__PURE__*/React.createElement("div", _extends({
184 ref: ref
185 }, props)));
186});
187function getWrapperDivComponent(responsive) {
188 return responsive ? ResponsiveDiv : NonResponsiveDiv;
189}
190var RechartsWrapper = exports.RechartsWrapper = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
191 var {
192 children,
193 className,
194 height: heightFromProps,
195 onClick,
196 onContextMenu,
197 onDoubleClick,
198 onMouseDown,
199 onMouseEnter,
200 onMouseLeave,
201 onMouseMove,
202 onMouseUp,
203 onTouchEnd,
204 onTouchMove,
205 onTouchStart,
206 style,
207 width: widthFromProps,
208 responsive,
209 dispatchTouchEvents = true
210 } = props;
211 var containerRef = (0, _react.useRef)(null);
212 var dispatch = (0, _hooks.useAppDispatch)();
213 var [tooltipPortal, setTooltipPortal] = (0, _react.useState)(null);
214 var [legendPortal, setLegendPortal] = (0, _react.useState)(null);
215 var setScaleRef = (0, _useReportScale.useReportScale)();
216 var responsiveContainerCalculations = (0, _ResponsiveContainer.useResponsiveContainerContext)();
217 var width = (responsiveContainerCalculations === null || responsiveContainerCalculations === void 0 ? void 0 : responsiveContainerCalculations.width) > 0 ? responsiveContainerCalculations.width : widthFromProps;
218 var height = (responsiveContainerCalculations === null || responsiveContainerCalculations === void 0 ? void 0 : responsiveContainerCalculations.height) > 0 ? responsiveContainerCalculations.height : heightFromProps;
219 var innerRef = (0, _react.useCallback)(node => {
220 setScaleRef(node);
221 if (typeof ref === 'function') {
222 ref(node);
223 }
224 setTooltipPortal(node);
225 setLegendPortal(node);
226 if (node != null) {
227 containerRef.current = node;
228 }
229 }, [setScaleRef, ref, setTooltipPortal, setLegendPortal]);
230 var myOnClick = (0, _react.useCallback)(e => {
231 dispatch((0, _mouseEventsMiddleware.mouseClickAction)(e));
232 dispatch((0, _externalEventsMiddleware.externalEventAction)({
233 handler: onClick,
234 reactEvent: e
235 }));
236 }, [dispatch, onClick]);
237 var myOnMouseEnter = (0, _react.useCallback)(e => {
238 dispatch((0, _mouseEventsMiddleware.mouseMoveAction)(e));
239 dispatch((0, _externalEventsMiddleware.externalEventAction)({
240 handler: onMouseEnter,
241 reactEvent: e
242 }));
243 }, [dispatch, onMouseEnter]);
244 var myOnMouseLeave = (0, _react.useCallback)(e => {
245 dispatch((0, _tooltipSlice.mouseLeaveChart)());
246 dispatch((0, _externalEventsMiddleware.externalEventAction)({
247 handler: onMouseLeave,
248 reactEvent: e
249 }));
250 }, [dispatch, onMouseLeave]);
251 var myOnMouseMove = (0, _react.useCallback)(e => {
252 dispatch((0, _mouseEventsMiddleware.mouseMoveAction)(e));
253 dispatch((0, _externalEventsMiddleware.externalEventAction)({
254 handler: onMouseMove,
255 reactEvent: e
256 }));
257 }, [dispatch, onMouseMove]);
258 var onFocus = (0, _react.useCallback)(() => {
259 dispatch((0, _keyboardEventsMiddleware.focusAction)());
260 }, [dispatch]);
261 var onKeyDown = (0, _react.useCallback)(e => {
262 dispatch((0, _keyboardEventsMiddleware.keyDownAction)(e.key));
263 }, [dispatch]);
264 var myOnContextMenu = (0, _react.useCallback)(e => {
265 dispatch((0, _externalEventsMiddleware.externalEventAction)({
266 handler: onContextMenu,
267 reactEvent: e
268 }));
269 }, [dispatch, onContextMenu]);
270 var myOnDoubleClick = (0, _react.useCallback)(e => {
271 dispatch((0, _externalEventsMiddleware.externalEventAction)({
272 handler: onDoubleClick,
273 reactEvent: e
274 }));
275 }, [dispatch, onDoubleClick]);
276 var myOnMouseDown = (0, _react.useCallback)(e => {
277 dispatch((0, _externalEventsMiddleware.externalEventAction)({
278 handler: onMouseDown,
279 reactEvent: e
280 }));
281 }, [dispatch, onMouseDown]);
282 var myOnMouseUp = (0, _react.useCallback)(e => {
283 dispatch((0, _externalEventsMiddleware.externalEventAction)({
284 handler: onMouseUp,
285 reactEvent: e
286 }));
287 }, [dispatch, onMouseUp]);
288 var myOnTouchStart = (0, _react.useCallback)(e => {
289 dispatch((0, _externalEventsMiddleware.externalEventAction)({
290 handler: onTouchStart,
291 reactEvent: e
292 }));
293 }, [dispatch, onTouchStart]);
294
295 /*
296 * onTouchMove is special because it behaves different from mouse events.
297 * Mouse events have 'enter' + 'leave' combo that notify us when the mouse is over
298 * a certain element. Touch events don't have that; touch only gives us
299 * start (finger down), end (finger up) and move (finger moving).
300 * So we need to figure out which element the user is touching
301 * ourselves. Fortunately, there's a convenient method for that:
302 * https://developer.mozilla.org/en-US/docs/Web/API/Document/elementFromPoint
303 */
304 var myOnTouchMove = (0, _react.useCallback)(e => {
305 if (dispatchTouchEvents) {
306 dispatch((0, _touchEventsMiddleware.touchEventAction)(e));
307 }
308 dispatch((0, _externalEventsMiddleware.externalEventAction)({
309 handler: onTouchMove,
310 reactEvent: e
311 }));
312 }, [dispatch, dispatchTouchEvents, onTouchMove]);
313 var myOnTouchEnd = (0, _react.useCallback)(e => {
314 dispatch((0, _externalEventsMiddleware.externalEventAction)({
315 handler: onTouchEnd,
316 reactEvent: e
317 }));
318 }, [dispatch, onTouchEnd]);
319 var WrapperDiv = getWrapperDivComponent(responsive);
320 return /*#__PURE__*/React.createElement(_tooltipPortalContext.TooltipPortalContext.Provider, {
321 value: tooltipPortal
322 }, /*#__PURE__*/React.createElement(_legendPortalContext.LegendPortalContext.Provider, {
323 value: legendPortal
324 }, /*#__PURE__*/React.createElement(WrapperDiv, {
325 width: width !== null && width !== void 0 ? width : style === null || style === void 0 ? void 0 : style.width,
326 height: height !== null && height !== void 0 ? height : style === null || style === void 0 ? void 0 : style.height,
327 className: (0, _clsx.clsx)('recharts-wrapper', className),
328 style: _objectSpread({
329 position: 'relative',
330 cursor: 'default',
331 width,
332 height
333 }, style),
334 onClick: myOnClick,
335 onContextMenu: myOnContextMenu,
336 onDoubleClick: myOnDoubleClick,
337 onFocus: onFocus,
338 onKeyDown: onKeyDown,
339 onMouseDown: myOnMouseDown,
340 onMouseEnter: myOnMouseEnter,
341 onMouseLeave: myOnMouseLeave,
342 onMouseMove: myOnMouseMove,
343 onMouseUp: myOnMouseUp,
344 onTouchEnd: myOnTouchEnd,
345 onTouchMove: myOnTouchMove,
346 onTouchStart: myOnTouchStart,
347 ref: innerRef
348 }, /*#__PURE__*/React.createElement(EventSynchronizer, null), children)));
349});
Note: See TracBrowser for help on using the repository browser.