UNPKG

wix-style-react

Version:
165 lines (163 loc) • 6.52 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _reactChartjs = require("react-chartjs-2"); var _throttle = _interopRequireDefault(require("lodash/throttle")); var _numberFormatters = require("../utils/numberFormatters"); var _chartOptions = require("./chartOptions"); var _AreaChartSt = require("./AreaChart.st.css"); var _jsxFileName = "/home/builduser/work/a9c1ac8876d5057c/packages/wix-style-react/dist/cjs/AreaChart/AreaChart.js"; function 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; } function _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) { (0, _defineProperty2.default)(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; } _reactChartjs.defaults.global.defaultFontFamily = 'Madefor, Helvetica Neue'; /** An area chart is a way of plotting data points on a line. Often, it is used to show trend data */ class AreaChart extends _react.default.PureComponent { constructor() { super(...arguments); this.cursorLine = null; this.handleHover = (_, activeItems) => { var tooltipItem = activeItems[0]; if (tooltipItem) { var providedTooltipItem = this.props.data[tooltipItem._index]; var { onTooltipShow } = this.props; onTooltipShow && onTooltipShow(providedTooltipItem); } }; this.handleHoverThrottled = (0, _throttle.default)(this.handleHover, 100); this.onMouseMove = tooltip => { if (tooltip.y < 0) { tooltip.y = tooltip.y + tooltip.height + tooltip.caretSize + tooltip.xPadding; tooltip.yAlign = 'top'; } if (tooltip.opacity) { this.cursorLine.style.opacity = '1'; this.cursorLine.style.left = "".concat(tooltip.caretX, "px"); return; } this.cursorLine.style.opacity = '0'; }; } render() { var { data = [], tooltipContent, maxYTicksLimit, dataHook, className } = this.props; var labels = data.map(i => i.label); var dataset = data.map(i => i.value); return /*#__PURE__*/_react.default.createElement("section", { className: (0, _AreaChartSt.st)(_AreaChartSt.classes.lineChart, className), "data-hook": dataHook, __self: this, __source: { fileName: _jsxFileName, lineNumber: 68, columnNumber: 7 } }, /*#__PURE__*/_react.default.createElement(_reactChartjs.Line, { redraw: true, data: { labels, datasets: [_objectSpread(_objectSpread({}, _chartOptions.DATASET_PROPS), {}, { data: dataset })] }, options: _objectSpread(_objectSpread({}, _chartOptions.OPTIONS_PROPS), {}, { scales: { xAxes: [{ gridLines: _objectSpread(_objectSpread({}, _chartOptions.GRIDLINE_PROPS), {}, { tickMarkLength: 0 }), ticks: { padding: 5, fontColor: _AreaChartSt.stVars.gridLineZeroLineColor, maxRotation: 0 } }], yAxes: [{ ticks: _objectSpread(_objectSpread({}, _chartOptions.Y_AXES_TICKS_PROPS), {}, { maxTicksLimit: maxYTicksLimit, fontColor: _AreaChartSt.stVars.gridLineZeroLineColor, callback: (() => { var precision; return (value, index, values) => { if (index === values.length - 1) { return; } if (!precision) { precision = (0, _numberFormatters.calcPrecision)(values); } return (0, _numberFormatters.formatToCompactNumber)(value, precision).toLocaleLowerCase(); }; })() }), gridLines: _objectSpread({ tickMarkLength: -1 }, _chartOptions.GRIDLINE_PROPS) }] }, tooltips: _objectSpread(_objectSpread({}, _chartOptions.TOOLTIP_PROPS), {}, { enabled: !!tooltipContent, custom: this.onMouseMove, callbacks: { title: () => '', label: tooltipItem => { return tooltipContent && tooltipContent([...data][tooltipItem.index], tooltipItem.index); } } }), onHover: this.handleHoverThrottled }), __self: this, __source: { fileName: _jsxFileName, lineNumber: 72, columnNumber: 9 } }), /*#__PURE__*/_react.default.createElement("div", { ref: line => this.cursorLine = line, className: _AreaChartSt.classes.lineChartCursor, __self: this, __source: { fileName: _jsxFileName, lineNumber: 145, columnNumber: 9 } })); } } AreaChart.displayName = 'AreaChart'; AreaChart.propTypes = { /** Applied as data-hook HTML attribute that can be used in the tests */ dataHook: _propTypes.default.string, /** A css class to be applied to the component's root element */ className: _propTypes.default.string, /** * Array of Areat Chart items * * `value` - Item's value. * * `label` - A Short label under the value. */ data: _propTypes.default.arrayOf(_propTypes.default.shape({ value: _propTypes.default.number.isRequired, label: _propTypes.default.string.isRequired })).isRequired, /** Tooltip content template function*/ tooltipContent: _propTypes.default.func, /** Callback on tooltip content show event */ onTooltipShow: _propTypes.default.func, /** Maximum ticks allowed in Y axis */ maxYTicksLimit: _propTypes.default.number }; AreaChart.defaultProps = { maxYTicksLimit: 5 }; var _default = exports.default = AreaChart; //# sourceMappingURL=AreaChart.js.map