UNPKG

@visx/xychart

Version:

Composable cartesian coordinate chart built with visx primitives

85 lines 3.69 kB
import _pt from "prop-types"; function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } import React, { useContext, useMemo } from 'react'; import DataContext from '../../../context/DataContext'; import withRegisteredData from '../../../enhancers/withRegisteredData'; import getScaledValueFactory from '../../../utils/getScaledValueFactory'; import isValidNumber from '../../../typeguards/isValidNumber'; import { GLYPHSERIES_EVENT_SOURCE, XYCHART_EVENT_SOURCE } from '../../../constants'; import useSeriesEvents from '../../../hooks/useSeriesEvents'; export function BaseGlyphSeries(_ref) { var _ref2, _colorScale, _theme$colors; var colorAccessor = _ref.colorAccessor, data = _ref.data, dataKey = _ref.dataKey, onBlur = _ref.onBlur, onFocus = _ref.onFocus, onPointerMove = _ref.onPointerMove, onPointerOut = _ref.onPointerOut, onPointerUp = _ref.onPointerUp, onPointerDown = _ref.onPointerDown, _ref$enableEvents = _ref.enableEvents, enableEvents = _ref$enableEvents === void 0 ? true : _ref$enableEvents, renderGlyphs = _ref.renderGlyphs, _ref$size = _ref.size, size = _ref$size === void 0 ? 8 : _ref$size, xAccessor = _ref.xAccessor, xScale = _ref.xScale, yAccessor = _ref.yAccessor, yScale = _ref.yScale; var _useContext = useContext(DataContext), colorScale = _useContext.colorScale, theme = _useContext.theme, horizontal = _useContext.horizontal; var getScaledX = useMemo(function () { return getScaledValueFactory(xScale, xAccessor); }, [xScale, xAccessor]); var getScaledY = useMemo(function () { return getScaledValueFactory(yScale, yAccessor); }, [yScale, yAccessor]); var color = (_ref2 = (_colorScale = colorScale == null ? void 0 : colorScale(dataKey)) != null ? _colorScale : theme == null ? void 0 : (_theme$colors = theme.colors) == null ? void 0 : _theme$colors[0]) != null ? _ref2 : '#222'; var ownEventSourceKey = GLYPHSERIES_EVENT_SOURCE + "-" + dataKey; var eventEmitters = useSeriesEvents({ dataKey: dataKey, enableEvents: enableEvents, onBlur: onBlur, onFocus: onFocus, onPointerMove: onPointerMove, onPointerOut: onPointerOut, onPointerUp: onPointerUp, onPointerDown: onPointerDown, source: ownEventSourceKey, allowedSources: [XYCHART_EVENT_SOURCE, ownEventSourceKey] }); var glyphs = useMemo(function () { return data.map(function (datum, i) { var _colorAccessor; var x = getScaledX(datum); if (!isValidNumber(x)) return null; var y = getScaledY(datum); if (!isValidNumber(y)) return null; return { key: "" + i, x: x, y: y, color: (_colorAccessor = colorAccessor == null ? void 0 : colorAccessor(datum, i)) != null ? _colorAccessor : color, size: typeof size === 'function' ? size(datum) : size, datum: datum }; }).filter(function (point) { return point; }); }, [color, colorAccessor, data, getScaledX, getScaledY, size]); return /*#__PURE__*/React.createElement(React.Fragment, null, renderGlyphs(_extends({ glyphs: glyphs, xScale: xScale, yScale: yScale, horizontal: horizontal }, eventEmitters))); } BaseGlyphSeries.propTypes = { colorAccessor: _pt.func, size: _pt.oneOfType([_pt.number, _pt.func]), renderGlyphs: _pt.func.isRequired }; export default withRegisteredData(BaseGlyphSeries);