UNPKG

@obliczeniowo/elementary

Version:
1 lines 27.9 kB
{"version":3,"file":"obliczeniowo-elementary-daily-statistics.mjs","sources":["../../../../projects/components/daily-statistics/components/daily-statistic/daily-statistic.component.ts","../../../../projects/components/daily-statistics/components/daily-statistic/daily-statistic.component.html","../../../../projects/components/daily-statistics/components/daily-legend/daily-legend.component.ts","../../../../projects/components/daily-statistics/components/daily-legend/daily-legend.component.html","../../../../projects/components/daily-statistics/components/daily-statistics/daily-statistics.component.ts","../../../../projects/components/daily-statistics/components/daily-statistics/daily-statistics.component.html","../../../../projects/components/daily-statistics/daily-statistics.module.ts","../../../../projects/components/daily-statistics/obliczeniowo-elementary-daily-statistics.ts"],"sourcesContent":["import { Component, HostBinding, Input, EventEmitter, Output, HostListener, effect, input, computed } from '@angular/core';\nimport { Observable, lastValueFrom } from 'rxjs';\n\nimport { HtmlColor } from '@obliczeniowo/elementary/classes';\nimport { keys } from '@obliczeniowo/elementary/objects';\n\nexport interface DayStatistic<T extends {} = { [key: string]: any }> {\n date: Date;\n count: number;\n data?: T;\n // optional as it should calculate on level of daily-statistics-component and not came up from API or what's so ever\n x?: number;\n y?: number;\n}\n\nexport interface DaySettings {\n size: number;\n margin: number;\n colors: HtmlColor[];\n colorsStats?: { [key: number]: HtmlColor };\n getExtData?: (statistic: DayStatistic) => Observable<any>;\n}\n\n@Component({\n selector: 'obl-daily-statistic',\n templateUrl: './daily-statistic.component.html',\n styleUrls: ['./daily-statistic.component.scss'],\n standalone: false\n})\nexport class DailyStatisticComponent {\n protected loading: boolean = false;\n\n @HostBinding('class.selected')\n @Input() selected: boolean = false;\n\n /** day statistic day */\n statistics = input.required<DayStatistic>();\n\n /** */\n settings = input.required<DaySettings>();\n\n @HostBinding('style.left.px') get x() {\n return this.statistics()?.x ?? 0;\n }\n\n @HostBinding('style.top.px') get y() {\n return this.statistics()?.y ?? 0;\n }\n\n @Output() clicked = new EventEmitter<DayStatistic>();\n\n @HostListener('click') async onClick() {\n if (this.loading) {\n return;\n }\n\n const { date, count, data } = this.statistics();\n const settings = this.settings();\n\n if (!data && settings.getExtData) {\n this.loading = true;\n const data = await lastValueFrom(\n settings.getExtData(this.statistics())\n );\n this.loading = false;\n if (data) {\n this.statistics().data = data;\n }\n }\n this.clicked.emit({ date, count, data: data || this.statistics().data });\n }\n\n @Output() hovered = new EventEmitter<DayStatistic | undefined>();\n\n @HostListener('mouseover') hover() {\n this.hovered.emit(this.statistics());\n }\n\n @HostListener('mouseleave') leave() {\n this.hovered.emit(undefined);\n }\n\n constructor() {\n effect(() => {\n this.setCurrentColor();\n })\n }\n\n protected setCurrentColor() {\n if (this.settings() && this.statistics()) {\n const { count } = this.statistics();\n const { colors, colorsStats } = this.settings();\n\n const key = (keys(colorsStats || {})).map(num => +num).sort((p, c) => p - c).find((item: number) => item >= count);\n\n this.currentColor = count === 0 || !key ? colors[0] : colorsStats?.[key] as any;\n }\n }\n\n @HostBinding('style.background-color')\n protected currentColor: HtmlColor = 'rgba(200, 200, 200, 0.5)';\n\n @HostBinding('style.width.px') get width() {\n return this.settings().size || 10;\n }\n\n @HostBinding('style.height.px') get height() {\n return this.settings().size || 10;\n }\n\n size = computed(() => this.settings().size || 10);\n}\n","@if (loading) {\n <obl-spinner\n [style.width.px]=\"size() * 0.8\"\n [style.height.px]=\"size() * 0.8\"\n [style.margin.px]=\"size() * 0.2\"\n ></obl-spinner>\n}\n","import { Component, input } from '@angular/core';\nimport { DaySettings } from '../daily-statistic/daily-statistic.component';\n\nexport interface LegendSettings extends DaySettings {\n text?: {\n less: string,\n more: string\n };\n}\n@Component({\n selector: 'obl-daily-legend',\n templateUrl: './daily-legend.component.html',\n styleUrls: ['./daily-legend.component.scss'],\n standalone: false\n})\nexport class DailyLegendComponent {\n settings = input.required<LegendSettings>();\n\n sort = (p: any, c: any) => (+p.key) - (+c.key);\n}\n","<span>{{ settings().text?.less || 'less' }}</span>\n\n@for (item of (settings().colorsStats || {}) | keyvalue: sort; track item.key) {\n <div\n [style.background]=\"item.value\"\n [style.width.px]=\"settings().size\"\n [style.height.px]=\"settings().size\"\n [style.margin.px]=\"settings().margin\"\n ></div>\n}\n\n<span>{{ settings().text?.more || 'more' }}</span>\n","import { ElementaryMath } from '@obliczeniowo/elementary/math';\nimport { Component, Input, LOCALE_ID, Inject, Output, EventEmitter, TemplateRef, ContentChild } from '@angular/core';\nimport { map, Observable } from 'rxjs';\nimport { DaySettings, DayStatistic } from '../daily-statistic/daily-statistic.component';\nimport { Dates, HtmlColor } from '@obliczeniowo/elementary/classes';\n\nexport interface DailyStatisticsSettings<ext extends {} = { [key: string]: any }> extends DaySettings {\n start: Date;\n end: Date;\n colors: HtmlColor[];\n yearSwitcher?: boolean;\n minYear?: number;\n maxYear?: number;\n get: (start: Date, end: Date) => Observable<DayStatistic<ext>[]>;\n /** for legend translation text */\n text?: {\n less: string,\n more: string\n };\n}\n\n@Component({\n selector: 'obl-daily-statistics',\n templateUrl: './daily-statistics.component.html',\n styleUrls: ['./daily-statistics.component.scss'],\n standalone: false\n})\nexport class DailyStatisticsComponent {\n protected statistics: DayStatistic<any>[] = [];\n protected _settings!: DailyStatisticsSettings;\n protected max: number = 0;\n protected daysHeaders: Date[] = [];\n protected monthHeaders: { date: Date; x: number }[] = [];\n protected selected?: DayStatistic;\n protected hovered?: DayStatistic;\n protected total?: number;\n protected selectedIndex?: number;\n protected default = {\n min: new Date().getFullYear() - 20,\n max: new Date().getFullYear()\n }\n\n @ContentChild('totalRef') protected totalRef!: TemplateRef<any>;\n @ContentChild('selectedRef') protected selectedRef!: TemplateRef<any>;\n\n /** settings for all view components */\n @Input()\n set settings(value: DailyStatisticsSettings) {\n const dateChanged = !this._settings || !Dates.equalToDayLevel(this._settings.end, value.end) || !Dates.equalToDayLevel(this._settings.start, value.start)\n\n this._settings = value;\n const first: Date = Dates.getWeekDate(value.start, 'first', this.weakDayOffset);\n const date = new Date(first);\n\n this.daysHeaders = [];\n\n for (let i = 0; i < 7; i += 2) {\n date.setDate(date.getDate() + (i ? 2 : 0));\n this.daysHeaders.push(new Date(date));\n }\n\n if (dateChanged || !this.statistics) {\n this.selected = undefined;\n this.selectedIndex = undefined;\n this.selectionChanged.emit(this.selected);\n value.get(value.start, value.end).pipe(\n map((statistics: DayStatistic[]) => {\n const { start, end } = value;\n\n this.total = statistics.map(v => v.count).reduce((p, c) => (p += c, p), 0);\n\n const iterator = new Date(start);\n\n this.setColors(statistics);\n\n while (!Dates.equalToDayLevel(iterator, end)) {\n if (statistics.findIndex(v => Dates.equalToDayLevel(v.date, iterator)) === -1) {\n statistics.push({\n date: new Date(iterator.getTime()),\n count: 0,\n })\n }\n iterator.setDate(iterator.getDate() + 1);\n }\n\n return statistics;\n }),\n map((statistics: DayStatistic[]) => {\n this.max = 0;\n this.monthHeaders = [];\n return statistics.map(v => {\n const days = Dates.countDays(first, v.date);\n const x = Math.floor(days / 7) * (value.size + this.margin);\n\n if (this.max < x) {\n this.max = x;\n }\n\n if (v.date.getDate() === 1 && !this.monthHeaders.find(d => Dates.equalToDayLevel(d.date, v.date))) {\n this.monthHeaders.push(\n {\n date: new Date(v.date),\n x\n }\n )\n }\n\n return {\n ...v,\n x,\n y: (Math.floor(days) % 7) * (value.size + this.margin)\n }\n })\n })\n ).subscribe(v => this.statistics = v);\n }\n }\n\n private _weakDayOffset: number = 0;\n\n /**\n * Set weak day offset to for example start weak not from Sunday but from Monday you should set it to 6\n *\n * Do not use values less then 0\n */\n @Input() set weakDayOffset(value: number) {\n this._weakDayOffset = value;\n\n if (this.statistics && this.settings) {\n const { size, start } = this.settings;\n\n const first: Date = Dates.getWeekDate(start, 'first', value);\n const date = new Date(first);\n\n this.daysHeaders = [];\n\n for (let i = 0; i < 7; i += 2) {\n date.setDate(date.getDate() + (i ? 2 : 0));\n this.daysHeaders.push(new Date(date));\n }\n\n this.max = 0;\n this.monthHeaders = [];\n this.statistics = this.statistics.map(v => {\n const days = Dates.countDays(first, v.date);\n const x = Math.floor(days / 7) * (size + this.margin);\n\n if (this.max < x) {\n this.max = x;\n }\n\n if (v.date.getDate() === 1) {\n this.monthHeaders.push(\n {\n date: new Date(v.date),\n x\n }\n )\n }\n\n return {\n ...v,\n x,\n y: (Math.floor(days) % 7) * (size + this.margin)\n }\n })\n }\n }\n\n get weakDayOffset(): number {\n return this._weakDayOffset;\n }\n\n // eslint-disable-next-line @typescript-eslint/adjacent-overload-signatures\n get settings(): DailyStatisticsSettings {\n return this._settings;\n }\n\n get margin(): number {\n return this._settings?.margin ?? 5;\n }\n\n get height() {\n return (this.size + this.margin) * 7;\n }\n\n get width() {\n return this.max + this.fontSize + this.margin;\n }\n\n get size() {\n return this._settings?.size ?? 10;\n }\n\n get fontSize() {\n return this.size * 0.5;\n }\n\n @Output() clicked = new EventEmitter<DayStatistic>();\n\n @Output() selectionChanged = new EventEmitter<DayStatistic | undefined>();\n\n constructor(@Inject(LOCALE_ID) public readonly locale: string) { }\n\n protected changed(year: number) {\n this.settings = {\n ...this._settings,\n start: new Date(year, 0, 1),\n end: new Date(year + 1, 0, 1)\n };\n }\n\n protected onClicked(statistic: DayStatistic, index: number) {\n this.selected = statistic;\n this.selectedIndex = index;\n this.clicked.emit(statistic);\n this.selectionChanged.emit(statistic);\n }\n\n protected onHovered(statistics: DayStatistic | undefined) {\n this.hovered = statistics;\n }\n\n protected setColors(statistics: DayStatistic[]) {\n const elements = statistics.map(item => item.count).filter(v => v);\n\n const { min, max } = elements.length && ElementaryMath.getMinMax(elements) || { min: 0, max: 0 };\n\n const mid = (max - min) / ((this._settings.colors.length - 1) || 1);\n\n const colorsStats = this._settings.colors.map((color, index: number) => {\n return { [index === 0 ? 0 : mid * index + min]: color }\n }).reduce((p, c) => ({ ...p, ...c }), {});\n\n this._settings = {\n ...this._settings,\n colorsStats\n }\n }\n}\n","<div class=\"months-header\">\n @for (month of monthHeaders; track month) {\n <div\n class=\"month-header\"\n [style.left.px]=\"month.x\"\n >\n {{ month.date | date : 'LLL' : undefined : locale }}\n </div>\n }\n</div>\n\n<div class=\"days-section\">\n <div class=\"days-header\" [style.lineHeight.px]=\"size\">\n @for (date of daysHeaders; track date) {\n <div\n class=\"day\"\n [style.top.px]=\"$index * 2 * (settings.size + settings.margin)\"\n >\n {{ date | date : 'EEEE' : undefined : locale }}\n </div>\n }\n </div>\n <div class=\"days\" [style.width.px]=\"width\" [style.height.px]=\"height\">\n @for (statistic of statistics; track statistic) {\n <obl-daily-statistic\n [settings]=\"settings\"\n [statistics]=\"statistic\"\n (clicked)=\"onClicked($event, $index)\"\n (hovered)=\"onHovered($event)\"\n [selected]=\"selectedIndex === $index\"\n ></obl-daily-statistic>\n }\n </div>\n</div>\n\n<div class=\"legend\" [style.width.px]=\"width\">\n <div>\n @if (selected || hovered) {\n <ng-container\n *ngTemplateOutlet=\"\n selectedRef || defaultSelected;\n context: { $implicit: hovered || selected }\n \"\n >\n </ng-container>\n }\n @if (total) {\n <ng-container\n *ngTemplateOutlet=\"\n totalRef || defaultTotal;\n context: { $implicit: total }\n \"\n >\n </ng-container>\n }\n </div>\n <obl-daily-legend [settings]=\"settings\"></obl-daily-legend>\n</div>\n\n@if (settings.yearSwitcher) {\n <div class=\"year-picker\" [style.width.px]=\"width\">\n <obl-year-picker\n [display]=\"{ nextPrevious: false }\"\n [current]=\"settings.start.getFullYear()\"\n [start]=\"settings.minYear || default.min\"\n [end]=\"settings.maxYear || default.max\"\n [picker]=\"{\n className: 'obl-daily-picker'\n }\"\n (changed)=\"changed($event)\"\n ></obl-year-picker>\n </div>\n}\n\n<ng-template let-selected #defaultSelected>\n {{ selected.date | date : 'dd-MM-yyyy' : locale }} &rarr;\n {{ selected.count }}\n</ng-template>\n\n<ng-template let-total #defaultTotal> Total: {{ total }} </ng-template>\n","import { LoadingModule } from '@obliczeniowo/elementary/loading';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { YearPickerModule } from '@obliczeniowo/elementary/year-picker';\n\nimport { DailyStatisticsComponent } from './components/daily-statistics/daily-statistics.component';\nimport { DailyStatisticComponent } from './components/daily-statistic/daily-statistic.component';\nimport { DailyLegendComponent } from './components/daily-legend/daily-legend.component';\n\n@NgModule({\n declarations: [\n DailyStatisticsComponent,\n DailyStatisticComponent,\n DailyLegendComponent\n ],\n imports: [\n CommonModule,\n LoadingModule,\n YearPickerModule\n ],\n exports: [\n DailyStatisticsComponent,\n DailyStatisticComponent,\n DailyLegendComponent\n ]\n})\nexport class DailyStatisticsModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3.DailyStatisticComponent","i4.DailyLegendComponent"],"mappings":"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"}