react-d3-heatmap
Version:
A customizable calendar heatmap
79 lines (65 loc) • 1.83 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.setData = setData;
exports.convertDateArrToObjectArr = convertDateArrToObjectArr;
/**
* Generate data test
* @param {Date} dateStart
* @param {Date} dateEnd
* @param {Date} nb : Numbers of data generated
* @returns An Array of data(Object{date: Date, count: Number}). The length of array is equal to nb params
*/
function setData(dateStart, dateEnd, nb) {
var data = [];
var dates = [];
for (var i = 0; i < nb; i++) {
var _date = randomDate(dateStart, dateEnd);
while (dates.includes(_date)) {
_date = randomDate(dateStart, dateEnd);
}
dates.push(_date);
var _count = Math.floor(Math.random() * 14);
data.push({
date: new Date(_date),
count: _count
});
}
return data;
}
/**
* Generate a random date between two dates
* @param {Date} start
* @param {Date} end
* @returns a random date
*/
function randomDate(start, end) {
return new Date(start.getTime() + Math.random() * (end.getTime() - start.getTime()));
}
/**
* Convert an array of date to a n array of Object{ date: Date, count: Number}
* @param {Array[Date]} dates
* @returns an array of Object{ date: Date, count: Number}
*/
function convertDateArrToObjectArr(dates) {
var result = [];
dates.map(function (date) {
var dateTmp = new Date(date).setHours(0, 0, 0, 0);
if (!isNaN(dateTmp) && typeof dateTmp === "number") {
var index = result.findIndex(function (d) {
var dateToMatch = new Date(d.date).setHours(0, 0, 0, 0);
return dateToMatch === dateTmp;
});
if (index !== -1) {
result[index].count += 1;
} else {
result.push({
date: new Date(dateTmp),
count: 1
});
}
}
});
return result;
}