packages/calendar/src/lib/heatmap/heatmap.component.ts
Displays a heatmap
selector | ec-heatmap |
templateUrl | ./heatmap.component.html |
Properties |
|
Methods |
Inputs |
Outputs |
keepTimespan | |
Default value : false
|
|
If true, the timespan of the first given timestamps will be kept, no matter what follows |
timestamps | |
Type : string[]
|
|
Default value : []
|
|
Array of timestamps that should be turned into a heatmap |
colors | |
Type : Object
|
|
Inherited from
MonthComponent
|
|
Defined in
MonthComponent:41
|
|
Color mapping for day cells. E.g. to view a month heatmap |
date | |
Type : moment.Moment
|
|
Inherited from
MonthComponent
|
|
Defined in
MonthComponent:51
|
|
The current date (for showing month) |
disabled | |
Inherited from
MonthComponent
|
|
Defined in
MonthComponent:63
|
|
If true, nothing can be changed |
disableDrag | |
Default value : false
|
|
Inherited from
MonthComponent
|
|
Defined in
MonthComponent:61
|
|
If true, no dragging can be done at all (other drag flags will be ignored) |
disableDragAnywhere | |
Default value : false
|
|
Inherited from
MonthComponent
|
|
Defined in
MonthComponent:59
|
|
If true, cannot drag anywhere to select a span (can still drag start and end, if not disabled too) |
disableDragEnd | |
Default value : false
|
|
Inherited from
MonthComponent
|
|
Defined in
MonthComponent:57
|
|
If true, the timespan end cannot be dragged |
disableDragStart | |
Default value : false
|
|
Inherited from
MonthComponent
|
|
Defined in
MonthComponent:55
|
|
If true, the timespan start cannot be dragged |
disablePast | |
Type : boolean
|
|
Inherited from
MonthComponent
|
|
Defined in
MonthComponent:49
|
|
If true, past dates cannot be selected |
heatmap | |
Type : Object
|
|
Inherited from
MonthComponent
|
|
Defined in
MonthComponent:43
|
|
Class mapping for day cells. E.g. to apply different background classes |
selected | |
Type : moment.Moment
|
|
Inherited from
MonthComponent
|
|
Defined in
MonthComponent:39
|
|
The current selected date |
selectSpan | |
Type : moment.Moment[]
|
|
Inherited from
MonthComponent
|
|
Defined in
MonthComponent:47
|
|
Timespan in which the dates can be selected. |
spancolor | |
Default value : '#ccc'
|
|
Inherited from
MonthComponent
|
|
Defined in
MonthComponent:53
|
|
The color of days that are inside the timespan |
timespan | |
Type : moment.Moment[]
|
|
Inherited from
MonthComponent
|
|
Defined in
MonthComponent:45
|
|
Timespan that is reflected. Marks days inside the span |
dayClicked | |
Type : EventEmitter<any>
|
|
Inherited from
MonthComponent
|
|
Defined in
MonthComponent:71
|
|
Emits when the selected day changes. |
spanChanged | |
Type : EventEmitter<any>
|
|
Inherited from
MonthComponent
|
|
Defined in
MonthComponent:73
|
|
Changed Timespan selection |
getHeatMap | ||||
getHeatMap(timestamps)
|
||||
Parameters :
Returns :
any
|
ngOnChanges | ||||
ngOnChanges(change)
|
||||
When changing the date or selected input, the calendar will update its view to display the month containing it.
Parameters :
Returns :
void
|
ngOnInit |
ngOnInit()
|
Returns :
void
|
statsInfo | ||||||||
statsInfo(digits: number)
|
||||||||
Returns json with additional infos about the timestamps
Parameters :
Returns :
{ timespan: any; count: any; dayspan: any; density: number; }
|
toShade |
toShade(count, max: number, digits: number)
|
Returns :
number
|
updateHeatmap |
updateHeatmap()
|
Returns :
void
|
alter | |||||||||
alter(value, span: string)
|
|||||||||
Inherited from
MonthComponent
|
|||||||||
Defined in
MonthComponent:326
|
|||||||||
Updates the viewed date to reflect the given relative changes.
Parameters :
Returns :
void
|
canAlter | |||||||||
canAlter(value, span: string)
|
|||||||||
Inherited from
MonthComponent
|
|||||||||
Defined in
MonthComponent:320
|
|||||||||
Parameters :
Returns :
any
|
clearSelection |
clearSelection()
|
Inherited from
MonthComponent
|
Defined in
MonthComponent:301
|
Clears the current selected date
Returns :
void
|
dragOverDay | |||||||||
dragOverDay(day: Day, e?)
|
|||||||||
Inherited from
MonthComponent
|
|||||||||
Defined in
MonthComponent:98
|
|||||||||
Parameters :
Returns :
void
|
dragStart | ||||||
dragStart(day, e)
|
||||||
Inherited from
MonthComponent
|
||||||
Defined in
MonthComponent:154
|
||||||
Parameters :
Returns :
void
|
getDayColor | ||||||
getDayColor(_moment: moment.Moment)
|
||||||
Inherited from
MonthComponent
|
||||||
Defined in
MonthComponent:188
|
||||||
Parameters :
Returns :
any
|
getDayHeat | ||||||
getDayHeat(_moment: moment.Moment)
|
||||||
Inherited from
MonthComponent
|
||||||
Defined in
MonthComponent:194
|
||||||
Parameters :
Returns :
any
|
getMonth | ||||||||||||
getMonth(day, type?: string)
|
||||||||||||
Inherited from
MonthComponent
|
||||||||||||
Defined in
MonthComponent:221
|
||||||||||||
Returns days of current month
Parameters :
Returns :
Array<Day>
|
isDraggable | ||||
isDraggable(day)
|
||||
Inherited from
MonthComponent
|
||||
Defined in
MonthComponent:89
|
||||
Parameters :
Returns :
any
|
isInTimeSpan | ||||
isInTimeSpan(date)
|
||||
Inherited from
MonthComponent
|
||||
Defined in
MonthComponent:150
|
||||
Parameters :
Returns :
any
|
isSelectable | ||||||||||||
isSelectable(date, span: string)
|
||||||||||||
Inherited from
MonthComponent
|
||||||||||||
Defined in
MonthComponent:313
|
||||||||||||
Parameters :
Returns :
any
|
isSelected | ||||||
isSelected(_moment: moment.Moment)
|
||||||
Inherited from
MonthComponent
|
||||||
Defined in
MonthComponent:306
|
||||||
Returns true if the given moment is currently selected (on a day basis)
Parameters :
Returns :
boolean
|
mouseOver | ||||||
mouseOver(day, e)
|
||||||
Inherited from
MonthComponent
|
||||||
Defined in
MonthComponent:180
|
||||||
Parameters :
Returns :
void
|
mouseUp | ||||||
mouseUp(day, e)
|
||||||
Inherited from
MonthComponent
|
||||||
Defined in
MonthComponent:171
|
||||||
Parameters :
Returns :
void
|
ngOnChanges | ||||
ngOnChanges(change)
|
||||
Inherited from
MonthComponent
|
||||
Defined in
MonthComponent:206
|
||||
When changing the date or selected input, the calendar will update its view to display the month containing it.
Parameters :
Returns :
void
|
ngOnInit |
ngOnInit()
|
Inherited from
MonthComponent
|
Defined in
MonthComponent:201
|
Initializes the calendar.
Returns :
void
|
selectDay | ||||||||||||
selectDay(_moment: moment.Moment, emit)
|
||||||||||||
Inherited from
MonthComponent
|
||||||||||||
Defined in
MonthComponent:277
|
||||||||||||
Selects the day of the given moment.
Parameters :
Returns :
void
|
setDate | ||||||||
setDate(date: moment.Moment)
|
||||||||
Inherited from
MonthComponent
|
||||||||
Defined in
MonthComponent:263
|
||||||||
Sets the calendars viewed date to the given moment's month. Renders always 42 cells to keep the layout consistent.
Parameters :
Returns :
void
|
setToday |
setToday()
|
Inherited from
MonthComponent
|
Defined in
MonthComponent:339
|
Sets the current selected date to today.
Returns :
void
|
today |
today()
|
Inherited from
MonthComponent
|
Defined in
MonthComponent:334
|
Sets the current viewed date to today.
Returns :
void
|
stats |
Type : literal type
|
stats of current timestamps |
Public cells |
Type : Array<Day>
|
Inherited from
MonthComponent
|
Defined in
MonthComponent:67
|
The cells containing the days |
Protected changeSpan |
Type : Subject<moment.Moment[]>
|
Default value : new Subject()
|
Inherited from
MonthComponent
|
Defined in
MonthComponent:75
|
dragged |
Type : any
|
Inherited from
MonthComponent
|
Defined in
MonthComponent:35
|
Public formatted |
Type : string
|
Inherited from
MonthComponent
|
Defined in
MonthComponent:65
|
The current month as string |
Public monthFormat |
Type : string
|
Default value : 'MMMM YYYY'
|
Inherited from
MonthComponent
|
Defined in
MonthComponent:69
|
Format for month in header |
move |
Type : boolean
|
Inherited from
MonthComponent
|
Defined in
MonthComponent:36
|
todayMoment |
Default value : moment()
|
Inherited from
MonthComponent
|
Defined in
MonthComponent:37
|
import { Component, Input, OnChanges, OnInit } from '@angular/core';
import moment from 'moment-es6';
import { MonthComponent } from '../calendar/month.component';
/**
* Displays a heatmap
* <example-url>https://components.entrecode.de/ui/datetime?e=1</example-url>
*/
@Component({
selector: 'ec-heatmap',
templateUrl: './heatmap.component.html',
})
export class HeatmapComponent extends MonthComponent implements OnInit, OnChanges {
/** stats of current timestamps */
stats: { count: number; dayspan: number; density: number; timespan: moment.Moment[] };
/** Array of timestamps that should be turned into a heatmap */
@Input() timestamps: string[] = [];
/** If true, the timespan of the first given timestamps will be kept, no matter what follows */
@Input() keepTimespan = false;
ngOnInit() {
this.updateHeatmap();
}
/** When changing the date or selected input, the calendar will update its view to display the month containing it. */
ngOnChanges(change) {
if (change.timestamps && this.timestamps) {
const sorted = this.timestamps.sort((a, b) => {
return moment(a).isAfter(moment(b)) ? -1 : 1;
});
this.timespan =
this.keepTimespan && this.timespan ? this.timespan : [moment(sorted[sorted.length - 1]), moment(sorted[0])];
this.stats = this.statsInfo();
this.updateHeatmap();
}
}
toShade(count, max = 100, digits = 2) {
if (max === 0) {
return 0;
}
const grain = Math.pow(10, digits);
return (Math.floor((count / max) * grain) / grain) * 100;
}
getHeatMap(timestamps) {
const dates = timestamps
.map((timestamp) =>
moment(timestamp)
.startOf('day')
.toISOString(),
)
.reduce(
(counts, date) =>
Object.assign(counts, {
[date]: ++counts[date] || 0,
}),
{},
);
const max = dates[Object.keys(dates).sort((a, b) => (dates[a] > dates[b] ? -1 : 1))[0]];
return Object.keys(dates).reduce((classes, date) => {
return Object.assign(classes, {
[date]: Math.floor((dates[date] / max) * 100),
});
}, {});
}
/** Returns json with additional infos about the timestamps */
statsInfo(digits = 3) {
const dayspan = this.timespan[1].diff(this.timespan[0], 'days');
return {
timespan: this.timespan,
count: this.timestamps.length,
dayspan,
density: Math.floor((this.timestamps.length / dayspan) * Math.pow(10, digits)) / Math.pow(10, digits),
};
}
updateHeatmap() {
if (!this.timestamps) {
this.heatmap = [];
return;
}
this.heatmap = this.getHeatMap(this.timestamps);
}
}
<div class="ec-heatmap">
<ec-calendar
(spanChanged)="spanChanged.emit($event)"
[heatmap]="heatmap"
[timespan]="timespan"
[date]="date"
[disabled]="disabled"
[disableDrag]="disableDrag"
[disableDragAnywhere]="disableDragAnywhere"
[disableDragStart]="disableDragStart"
[disableDragEnd]="disableDragEnd"
[selectSpan]="selectSpan"
></ec-calendar>
</div>