UNPKG

@uiw/react-heat-map

Version:

React component create calendar heatmap to visualize time series data, a la github contribution graph.

69 lines 2.85 kB
import _extends from "@babel/runtime/helpers/extends"; import { useMemo, createElement as _createElement } from "react"; import { Rect } from "./Rect.js"; import { addDays, formatData, getDateToString, existColor, numberSort } from "./utils.js"; import { jsx as _jsx } from "react/jsx-runtime"; export var Day = props => { var transform = props.transform, _props$gridNum = props.gridNum, gridNum = _props$gridNum === void 0 ? 0 : _props$gridNum, _props$startY = props.startY, startY = _props$startY === void 0 ? 0 : _props$startY, _props$panelColors = props.panelColors, panelColors = _props$panelColors === void 0 ? {} : _props$panelColors, initStartDate = props.initStartDate, _props$space = props.space, space = _props$space === void 0 ? 2 : _props$space, _props$value = props.value, value = _props$value === void 0 ? [] : _props$value, _props$rectSize = props.rectSize, rectSize = _props$rectSize === void 0 ? 11 : _props$rectSize, endDate = props.endDate, rectProps = props.rectProps, rectRender = props.rectRender; var data = useMemo(() => formatData(value), [value]); var nums = useMemo(() => numberSort(Object.keys(panelColors).map(item => parseInt(item, 10))), [panelColors]); return /*#__PURE__*/_jsx("g", { transform: transform, children: gridNum > 0 && [...Array(gridNum)].map((_, idx) => { return /*#__PURE__*/_jsx("g", { "data-column": idx, children: [...Array(7)].map((_, cidx) => { var currentDate = addDays(initStartDate, idx * 7 + cidx); var date = getDateToString(currentDate); var dataProps = _extends({}, data[date], { date: date, row: cidx, column: idx, index: idx * 7 + cidx }); var dayProps = _extends({}, rectProps, { fill: 'var(--rhm-rect, #EBEDF0)', width: rectSize, height: rectSize, x: idx * (rectSize + space), y: (rectSize + space) * cidx, render: rectRender, value: dataProps }); if (endDate instanceof Date && currentDate.getTime() > endDate.getTime()) { return null; } if (date && data[date] && panelColors && Object.keys(panelColors).length > 0) { dayProps.fill = existColor(data[date].count || 0, nums, panelColors); } else if (panelColors && panelColors[0]) { dayProps.fill = panelColors[0]; } return /*#__PURE__*/_createElement(Rect, _extends({}, dayProps, { key: cidx, value: dataProps, "data-date": date, "data-index": dataProps.index, "data-row": dataProps.row, "data-column": dataProps.column })); }) }, idx); }) }); };