UNPKG

react-heatgrid

Version:

React HeatGrid: Easily integrate customizable, interactive heatmaps into your React applications for data visualization.

110 lines (109 loc) 6 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const react_1 = __importStar(require("react")); const FormatData_1 = require("../utils/FormatData"); const ToolTip_1 = __importDefault(require("./ToolTip")); function Calendar({ months = 3, gridSize = "15px", gap = "2px", data, dateFormat = "yyyy-mm-dd", colors = ["#161b22", "#0e4429", "#006d32", "#26a641", "#39d353"], fontSize = "12px", fontColor = "black", DisabledToolTip = false, DisabledLegend = false, placement = "top", tooltipBg = "#303030", tooltipTextColor = "white", tooltipLabel = "activity", tooltipStyle, }) { const activityChartRef = (0, react_1.useRef)(null); const days = ["", "Mon", "", "Wed", "", "Fri"]; const { newData, monthObject } = (0, FormatData_1.FormatData)(data, months, dateFormat); const cells = newData; const maxValue = cells.reduce((max, obj) => (obj.value > max ? obj.value : max), cells[0].value) || 0; const getColor = (value) => { if (maxValue === 0) { return colors[0]; } return colors[Math.ceil((value / maxValue) * (colors.length - 1))]; }; return (react_1.default.createElement("div", { ref: activityChartRef, style: { position: "relative", padding: "20px", fontSize, color: fontColor, width: "max-content", } }, react_1.default.createElement("div", null, react_1.default.createElement("div", { style: { display: "grid", gridTemplateColumns: `repeat(${Math.ceil(cells.length / 7)},${gridSize})`, gap, justifyContent: "end", marginBottom: "10px", } }, new Array(Math.ceil(cells.length / 7)).fill("").map((item, i) => { var _a; return react_1.default.createElement("div", { key: i }, ((_a = monthObject[i]) === null || _a === void 0 ? void 0 : _a.month) || ""); })), react_1.default.createElement("div", { style: { display: "flex", gap: "10px" } }, react_1.default.createElement("div", { style: { display: "grid", gridTemplateRows: `repeat(7,${gridSize})`, gap, } }, days.map((item, i) => { return react_1.default.createElement("div", { key: i }, item); })), react_1.default.createElement("div", { style: { display: "grid", gridTemplateColumns: `repeat(${Math.ceil(cells.length / 7)},${gridSize})`, gridTemplateRows: `repeat(7,${gridSize})`, gridAutoFlow: "column", gap, } }, cells.map((obj, i) => { return (react_1.default.createElement(react_1.default.Fragment, { key: i }, react_1.default.createElement(ToolTip_1.default, { parentRef: activityChartRef, label: `${obj.value} ${tooltipLabel} on ${obj.day}`, DisabledToolTip: DisabledToolTip, placement: placement, tooltipTextColor: tooltipTextColor, tooltipBg: tooltipBg, tooltipStyle: tooltipStyle }, react_1.default.createElement("div", { style: { backgroundColor: getColor(obj.value), width: gridSize, height: gridSize, borderRadius: "2px", border: "1px solid #e2e8f0", } })))); }))), !DisabledLegend && (react_1.default.createElement("div", { style: { display: "flex", justifyContent: "flex-end", marginTop: "10px", } }, react_1.default.createElement("div", { style: { display: "flex", gap: "5px", alignItems: "center", } }, react_1.default.createElement("div", null, "Less"), react_1.default.createElement("div", { style: { display: "flex", gap } }, colors.map((item, i) => { return (react_1.default.createElement("div", { key: i, style: { backgroundColor: item, width: gridSize, height: gridSize, border: "1px solid #e2e8f0", borderRadius: "2px", } })); })), react_1.default.createElement("div", null, "More"))))))); } exports.default = Calendar;