UNPKG

@uiw/react-heat-map

Version:

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

100 lines (98 loc) 3.33 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"]; Object.defineProperty(exports, "__esModule", { value: true }); exports.addDays = addDays; exports.convertPanelColors = void 0; exports.existColor = existColor; exports.formatData = formatData; exports.getDateToString = getDateToString; exports.getStartOfWeek = getStartOfWeek; exports.isValidDate = isValidDate; exports.numberSort = numberSort; exports.oneDayTime = void 0; exports.parseDate = parseDate; var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2")); var oneDayTime = exports.oneDayTime = 24 * 60 * 60 * 1000; function isValidDate(date) { return date instanceof Date && !isNaN(date.getTime()); } var DATE_ONLY_PATTERN = /^(\d{4})[/-](\d{1,2})[/-](\d{1,2})$/; function parseDate(value) { if (value instanceof Date) { return isValidDate(value) ? new Date(value.getTime()) : null; } var matched = value.match(DATE_ONLY_PATTERN); if (matched) { var year = Number(matched[1]); var month = Number(matched[2]) - 1; var day = Number(matched[3]); var _date = new Date(year, month, day); if (_date.getFullYear() === year && _date.getMonth() === month && _date.getDate() === day) { return _date; } return null; } var date = new Date(value); return isValidDate(date) ? date : null; } function addDays(date, days) { var nextDate = new Date(date.getTime()); nextDate.setDate(nextDate.getDate() + days); return nextDate; } function getStartOfWeek(date) { var startDate = new Date(date.getTime()); startDate.setHours(0, 0, 0, 0); startDate.setDate(startDate.getDate() - startDate.getDay()); return startDate; } function getDateToString(date) { return "".concat(date.getFullYear(), "/").concat(date.getMonth() + 1, "/").concat(date.getDate()); } function formatData() { var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var result = {}; data.forEach(function (item) { if (item.date) { var date = parseDate(item.date); if (!date) return; var dateString = getDateToString(date); result[dateString] = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, item), {}, { date: dateString }); } }); return result; } /** 排序 比较函数 */ function numberSort() { var keys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; return keys.sort(function (x, y) { if (x < y) return -1;else if (x > y) return 1; return 0; }); } function existColor() { var num = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; var nums = arguments.length > 1 ? arguments[1] : undefined; var panelColors = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var color = ''; for (var a = 0; a < nums.length; a += 1) { if (nums[a] > num) { color = panelColors[nums[a]]; break; } color = panelColors[nums[a]]; } return color; } var convertPanelColors = exports.convertPanelColors = function convertPanelColors(colors, maxCount) { var step = Math.ceil(maxCount / (colors.length - 1)); var panelColors = {}; colors.forEach(function (color, index) { panelColors[index * step] = color; }); return panelColors; };