@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
JavaScript
;
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;
};