UNPKG

@uiw/react-heat-map

Version:

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

91 lines (90 loc) 2.48 kB
import _extends from "@babel/runtime/helpers/extends"; export var oneDayTime = 24 * 60 * 60 * 1000; export function isValidDate(date) { return date instanceof Date && !isNaN(date.getTime()); } var DATE_ONLY_PATTERN = /^(\d{4})[/-](\d{1,2})[/-](\d{1,2})$/; export 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; } export function addDays(date, days) { var nextDate = new Date(date.getTime()); nextDate.setDate(nextDate.getDate() + days); return nextDate; } export function getStartOfWeek(date) { var startDate = new Date(date.getTime()); startDate.setHours(0, 0, 0, 0); startDate.setDate(startDate.getDate() - startDate.getDay()); return startDate; } export function getDateToString(date) { return date.getFullYear() + "/" + (date.getMonth() + 1) + "/" + date.getDate(); } export function formatData(data) { if (data === void 0) { data = []; } var result = {}; data.forEach(item => { if (item.date) { var date = parseDate(item.date); if (!date) return; var dateString = getDateToString(date); result[dateString] = _extends({}, item, { date: dateString }); } }); return result; } /** 排序 比较函数 */ export function numberSort(keys) { if (keys === void 0) { keys = []; } return keys.sort((x, y) => { if (x < y) return -1;else if (x > y) return 1; return 0; }); } export function existColor(num, nums, panelColors) { if (num === void 0) { num = 0; } if (panelColors === void 0) { panelColors = {}; } 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; } export var convertPanelColors = (colors, maxCount) => { var step = Math.ceil(maxCount / (colors.length - 1)); var panelColors = {}; colors.forEach((color, index) => { panelColors[index * step] = color; }); return panelColors; };