@datarailsshared/datarailsshared 1.4.21-tigers → 1.4.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/datarailsshared-datarailsshared.umd.js +1280 -1403
- package/bundles/datarailsshared-datarailsshared.umd.js.map +1 -1
- package/datarailsshared-datarailsshared-1.4.23.tgz +0 -0
- package/datarailsshared-datarailsshared.d.ts +3 -5
- package/datarailsshared-datarailsshared.metadata.json +1 -1
- package/esm2015/datarailsshared-datarailsshared.js +4 -6
- package/esm2015/lib/dr-avatar/dr-avatar.component.js +1 -1
- package/esm2015/lib/dr-inputs/dr-date-picker/dr-date-picker-format.directive.js +47 -0
- package/esm2015/lib/dr-inputs/dr-date-picker/dr-date-picker.component.js +183 -0
- package/esm2015/lib/dr-inputs/dr-date-picker/dr-date-picker.service.js +41 -0
- package/esm2015/lib/dr-inputs/dr-date-picker/dr-date-picker_custom-header/dr-date-picker_custom-header.component.js +129 -0
- package/esm2015/lib/dr-inputs/dr-inputs.module.js +9 -13
- package/esm2015/lib/dr-tooltip/dr-tooltip.component.js +3 -13
- package/esm2015/lib/dr-tooltip/dr-tooltip.directive.js +10 -43
- package/esm2015/lib/models/datePicker.js +1 -8
- package/esm2015/public-api.js +3 -3
- package/fesm2015/datarailsshared-datarailsshared.js +1256 -1357
- package/fesm2015/datarailsshared-datarailsshared.js.map +1 -1
- package/lib/dr-inputs/{date-pickers/directives → dr-date-picker}/dr-date-picker-format.directive.d.ts +1 -1
- package/lib/dr-inputs/dr-date-picker/dr-date-picker.component.d.ts +54 -0
- package/lib/dr-inputs/dr-date-picker/dr-date-picker.service.d.ts +12 -0
- package/lib/dr-inputs/{date-pickers → dr-date-picker}/dr-date-picker_custom-header/dr-date-picker_custom-header.component.d.ts +4 -4
- package/lib/dr-tooltip/dr-tooltip.component.d.ts +0 -4
- package/lib/dr-tooltip/dr-tooltip.directive.d.ts +0 -4
- package/lib/models/datePicker.d.ts +0 -12
- package/package.json +1 -1
- package/public-api.d.ts +2 -1
- package/datarailsshared-datarailsshared-1.4.21-tigers.tgz +0 -0
- package/esm2015/lib/dr-inputs/date-pickers/directives/dr-date-picker-format.directive.js +0 -47
- package/esm2015/lib/dr-inputs/date-pickers/dr-date-picker/dr-date-picker.component.js +0 -152
- package/esm2015/lib/dr-inputs/date-pickers/dr-date-picker-with-timeframe/dr-date-picker-with-timeframe.component.js +0 -72
- package/esm2015/lib/dr-inputs/date-pickers/dr-date-picker_custom-header/dr-date-picker_custom-header.component.js +0 -128
- package/esm2015/lib/dr-inputs/date-pickers/services/dr-date-picker.service.js +0 -55
- package/lib/dr-inputs/date-pickers/dr-date-picker/dr-date-picker.component.d.ts +0 -55
- package/lib/dr-inputs/date-pickers/dr-date-picker-with-timeframe/dr-date-picker-with-timeframe.component.d.ts +0 -26
- package/lib/dr-inputs/date-pickers/services/dr-date-picker.service.d.ts +0 -18
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject } from "@angular/core";
|
|
2
|
-
import { Subject } from "rxjs";
|
|
3
|
-
import { take, takeUntil } from 'rxjs/operators';
|
|
4
|
-
import { MatCalendar } from '@angular/material/datepicker';
|
|
5
|
-
import { DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core';
|
|
6
|
-
import { CustomDateFormat } from "../../../models/datePicker";
|
|
7
|
-
import { DrDatePickerService } from "../services/dr-date-picker.service";
|
|
8
|
-
const moment = require('moment');
|
|
9
|
-
export class DrDatePickerCustomHeaderComponent {
|
|
10
|
-
constructor(_calendar, _dateAdapter, _dateFormats, cdr, datePickerService) {
|
|
11
|
-
this._calendar = _calendar;
|
|
12
|
-
this._dateAdapter = _dateAdapter;
|
|
13
|
-
this._dateFormats = _dateFormats;
|
|
14
|
-
this.cdr = cdr;
|
|
15
|
-
this.datePickerService = datePickerService;
|
|
16
|
-
this._destroyed = new Subject();
|
|
17
|
-
this.quarters = [1, 2, 3, 4];
|
|
18
|
-
this.selectedQuarter = 1;
|
|
19
|
-
this.timeframeOptions = [{
|
|
20
|
-
title: 'Day',
|
|
21
|
-
value: 'month',
|
|
22
|
-
format: this.datePickerService.formatConfig.day,
|
|
23
|
-
periodLabel: () => this._dateAdapter
|
|
24
|
-
.format(this._calendar.activeDate, this._dateFormats.display.monthYearLabel)
|
|
25
|
-
.toLocaleUpperCase()
|
|
26
|
-
}, {
|
|
27
|
-
title: 'Month',
|
|
28
|
-
value: 'year',
|
|
29
|
-
format: this.datePickerService.formatConfig.month,
|
|
30
|
-
periodLabel: () => String(moment(this._calendar.activeDate).year())
|
|
31
|
-
}, {
|
|
32
|
-
title: 'Quarter',
|
|
33
|
-
value: 'none',
|
|
34
|
-
format: this.datePickerService.formatConfig.quarter,
|
|
35
|
-
periodLabel: () => String(moment(this._calendar.activeDate).year())
|
|
36
|
-
}, {
|
|
37
|
-
title: 'Year',
|
|
38
|
-
value: 'multi-year',
|
|
39
|
-
format: this.datePickerService.formatConfig.year,
|
|
40
|
-
periodLabel: () => {
|
|
41
|
-
const currentYear = moment(this._calendar.activeDate).year();
|
|
42
|
-
const startPeriod = Math.floor(currentYear / 24) * 24;
|
|
43
|
-
return startPeriod + '-' + (startPeriod + 23);
|
|
44
|
-
}
|
|
45
|
-
}];
|
|
46
|
-
this.pagingSetup = {
|
|
47
|
-
'year': (forward) => this.pagingDateChange('addCalendarYears', 1, forward),
|
|
48
|
-
'none': (forward) => this.pagingDateChange('addCalendarYears', 1, forward),
|
|
49
|
-
'month': (forward) => this.pagingDateChange('addCalendarMonths', 1, forward),
|
|
50
|
-
'multi-year': (forward) => this.pagingDateChange('addCalendarYears', 24, forward)
|
|
51
|
-
};
|
|
52
|
-
this.selectedTimeframe = 'month';
|
|
53
|
-
this.timeframeSelection = false;
|
|
54
|
-
this.periodMonthLabel = '';
|
|
55
|
-
this.periodYearLabel = '';
|
|
56
|
-
_calendar.stateChanges.pipe(takeUntil(this._destroyed)).subscribe(() => this.setPeriodLabels());
|
|
57
|
-
this.datePickerService.format$
|
|
58
|
-
.pipe(take(1))
|
|
59
|
-
.subscribe(value => {
|
|
60
|
-
this.selectedTimeframe = this.timeframeOptions.filter(option => option.format == value)[0].value;
|
|
61
|
-
this.setPeriodLabels();
|
|
62
|
-
});
|
|
63
|
-
_calendar.viewChanged.pipe(takeUntil(this._destroyed)).subscribe(() => this.setPeriodLabels());
|
|
64
|
-
}
|
|
65
|
-
ngOnDestroy() {
|
|
66
|
-
this._destroyed.next();
|
|
67
|
-
this._destroyed.complete();
|
|
68
|
-
}
|
|
69
|
-
setPeriodLabels() {
|
|
70
|
-
const currentTimeframeOption = this.timeframeOptions.filter(option => option.value === this._calendar.currentView)[0];
|
|
71
|
-
const fullPeriodLabel = currentTimeframeOption.periodLabel();
|
|
72
|
-
if (this._calendar.currentView === 'month') {
|
|
73
|
-
this.periodMonthLabel = fullPeriodLabel.slice(0, 3);
|
|
74
|
-
this.periodYearLabel = fullPeriodLabel.slice(4);
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
this.periodMonthLabel = '';
|
|
78
|
-
this.periodYearLabel = fullPeriodLabel;
|
|
79
|
-
}
|
|
80
|
-
this.cdr.markForCheck();
|
|
81
|
-
}
|
|
82
|
-
setTimeframe() {
|
|
83
|
-
this.timeframeSelection = false;
|
|
84
|
-
this._calendar.currentView = this.selectedTimeframe;
|
|
85
|
-
const chosenTimeframeOption = this.timeframeOptions.filter(option => option.value === this.selectedTimeframe)[0];
|
|
86
|
-
this.datePickerService.updateTimeframeAndFormat(chosenTimeframeOption.format);
|
|
87
|
-
if (this.selectedTimeframe == 'none') {
|
|
88
|
-
this.selectedQuarter = moment(this._calendar.activeDate).quarter();
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
get currentViewIsQuarter() {
|
|
92
|
-
return !['month', 'year', 'multi-year'].includes(this._calendar.currentView);
|
|
93
|
-
}
|
|
94
|
-
switchViewOnClickOnPeriodLabel(view) {
|
|
95
|
-
this._calendar.currentView = view;
|
|
96
|
-
}
|
|
97
|
-
onSelectQuarter(quarterNumber) {
|
|
98
|
-
const monthsInQuarter = 3;
|
|
99
|
-
this.selectedQuarter = moment(this._calendar.activeDate).quarter();
|
|
100
|
-
const unadaptedDate = this._dateAdapter.addCalendarMonths(this._calendar.activeDate, monthsInQuarter * (quarterNumber - this.selectedQuarter));
|
|
101
|
-
this._calendar.activeDate = unadaptedDate;
|
|
102
|
-
this.datePickerService.updatedQuarter$.next(moment(unadaptedDate));
|
|
103
|
-
this.datePickerService.calendarInstance.close();
|
|
104
|
-
}
|
|
105
|
-
pagingClicked(forward) {
|
|
106
|
-
this.pagingSetup[this._calendar.currentView] && this.pagingSetup[this._calendar.currentView](forward);
|
|
107
|
-
}
|
|
108
|
-
pagingDateChange(actionCall, amount, forward) {
|
|
109
|
-
this._calendar.activeDate = this._dateAdapter[actionCall](this._calendar.activeDate, forward ? amount : -amount);
|
|
110
|
-
this.setPeriodLabels();
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
DrDatePickerCustomHeaderComponent.decorators = [
|
|
114
|
-
{ type: Component, args: [{
|
|
115
|
-
selector: 'dr-date-picker_custom-header.component',
|
|
116
|
-
template: "<div *ngIf=\"datePickerService.isTimeframeSelectionEnabled\" class=\"dr-datepicker__timeframe-select__wrapper\">\n <dr-select\n class=\"dr-datepicker__timeframe-select\"\n [(ngModel)]=\"selectedTimeframe\"\n [items]=\"timeframeOptions\"\n bindLabel=\"title\"\n bindValue=\"value\"\n (ngModelChange)=\"setTimeframe()\">\n </dr-select>\n</div>\n\n<div class=\"dr-date-paging\">\n <div class=\"dr-date-paging flip-page-button\"\n (click)=\"pagingClicked(false)\">\n <i class=\"dr-icon-arrow-left presentation_buttons-navigate_input\"></i>\n </div>\n <span class=\"example-header-label\">\n <span (click)=\"switchViewOnClickOnPeriodLabel('year')\">{{periodMonthLabel + ' '}}</span>\n <span (click)=\"switchViewOnClickOnPeriodLabel('multi-year')\">{{periodYearLabel}}</span>\n </span>\n <div class=\"dr-date-paging flip-page-button\"\n (click)=\"pagingClicked(true)\">\n <i class=\"dr-icon-arrow-right presentation_buttons-navigate_input\"></i>\n </div>\n</div>\n<div #quarterlyDatePicker class=\"dr-quarterly-datepicker\" *ngIf=\"currentViewIsQuarter\">\n <div *ngFor=\"let quarter of quarters\"\n class=\"quarter-selector\" (click)=\"onSelectQuarter(quarter)\"\n [class]=\"quarter == selectedQuarter ? 'selected' : ''\"\n >Q{{quarter}}</div>\n</div>\n\n",
|
|
117
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
118
|
-
styles: [":host{height:54px;align-items:center;font-family:\"Poppins\";font-style:normal;font-weight:600;font-size:14px;line-height:22px}.dr-datepicker__timeframe-select__wrapper{background-color:#f9faff;padding:16px 32px;border-radius:18px 18px 0 0}.dr-date-paging{display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding:16px 8px;grid-gap:4px;gap:4px}.dr-date-paging.flip-page-button{width:20px;height:20px;padding:0;color:#4e566c}.dr-date-paging.flip-page-button:hover{border-radius:50%;background:#F2F2FB;color:#4646ce}.example-header-label{cursor:pointer}.dr-quarterly-datepicker{display:flex;justify-content:space-between;padding:10px}.dr-quarterly-datepicker .quarter-selector{display:block;width:74px;height:40px;text-align:center;border-radius:40px;font-weight:400;padding-top:9px}.dr-quarterly-datepicker .quarter-selector:hover{background:#F2F2FB;color:#4646ce;font-weight:600;cursor:pointer}.dr-quarterly-datepicker .quarter-selector.selected{background-color:#4646ce;color:#f3f7ff;font-weight:600}\n"]
|
|
119
|
-
},] }
|
|
120
|
-
];
|
|
121
|
-
DrDatePickerCustomHeaderComponent.ctorParameters = () => [
|
|
122
|
-
{ type: MatCalendar },
|
|
123
|
-
{ type: DateAdapter },
|
|
124
|
-
{ type: CustomDateFormat, decorators: [{ type: Inject, args: [MAT_DATE_FORMATS,] }] },
|
|
125
|
-
{ type: ChangeDetectorRef },
|
|
126
|
-
{ type: DrDatePickerService }
|
|
127
|
-
];
|
|
128
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHItZGF0ZS1waWNrZXJfY3VzdG9tLWhlYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9kci1pbnB1dHMvZGF0ZS1waWNrZXJzL2RyLWRhdGUtcGlja2VyX2N1c3RvbS1oZWFkZXIvZHItZGF0ZS1waWNrZXJfY3VzdG9tLWhlYWRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFhLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxXQUFXLEVBQW1CLE1BQU0sOEJBQThCLENBQUM7QUFDNUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBRSxtQkFBbUIsRUFBbUIsTUFBTSxvQ0FBb0MsQ0FBQztBQUUxRixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7QUFnQmpDLE1BQU0sT0FBTyxpQ0FBaUM7SUEyQzFDLFlBQ1ksU0FBOEIsRUFDOUIsWUFBaUMsRUFDUCxZQUE4QixFQUN4RCxHQUFzQixFQUN2QixpQkFBc0M7UUFKckMsY0FBUyxHQUFULFNBQVMsQ0FBcUI7UUFDOUIsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ1AsaUJBQVksR0FBWixZQUFZLENBQWtCO1FBQ3hELFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3ZCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBcUI7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QkFDbEQsMDNDQUEwRDtnQkFFMUQsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07O2FBQ2hEOzs7WUFuQk0sV0FBVztZQUNYLFdBQVc7WUFDWCxnQkFBZ0IsdUJBaUVoQixNQUFNLFNBQUMsZ0JBQWdCO1lBdEVhLGlCQUFpQjtZQU1yRCxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgT25EZXN0cm95LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBNYXRDYWxlbmRhciwgTWF0Q2FsZW5kYXJWaWV3IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBEYXRlQWRhcHRlciwgTUFUX0RBVEVfRk9STUFUU30gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBDdXN0b21EYXRlRm9ybWF0IH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9kYXRlUGlja2VyXCI7XG5pbXBvcnQgeyBEckRhdGVQaWNrZXJTZXJ2aWNlLCBUaW1lZnJhbWVPcHRpb24gfSBmcm9tIFwiLi4vc2VydmljZXMvZHItZGF0ZS1waWNrZXIuc2VydmljZVwiO1xuXG5jb25zdCBtb21lbnQgPSByZXF1aXJlKCdtb21lbnQnKTtcblxuZXhwb3J0IGludGVyZmFjZSBJVGltZWZyYW1lT3B0aW9uIHtcbiAgICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgICB2YWx1ZTogTWF0Q2FsZW5kYXJWaWV3LFxuICAgICAgZm9ybWF0OiBzdHJpbmcsXG4gICAgICBwZXJpb2RMYWJlbDogKCkgPT4gc3RyaW5nXG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZHItZGF0ZS1waWNrZXJfY3VzdG9tLWhlYWRlci5jb21wb25lbnQnLFxuICAgIHRlbXBsYXRlVXJsOiAnZHItZGF0ZS1waWNrZXJfY3VzdG9tLWhlYWRlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZHItZGF0ZS1waWNrZXJfY3VzdG9tLWhlYWRlci5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG4gIH0pXG5cbmV4cG9ydCBjbGFzcyBEckRhdGVQaWNrZXJDdXN0b21IZWFkZXJDb21wb25lbnQ8TW9tZW50PiBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSBfZGVzdHJveWVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBxdWFydGVycyA9IFsxLCAyLCAzLCA0XTtcbiAgICBzZWxlY3RlZFF1YXJ0ZXIgPSAxO1xuICAgIHRpbWVmcmFtZU9wdGlvbnM6IElUaW1lZnJhbWVPcHRpb25bXSA9IFt7XG4gICAgICB0aXRsZTogJ0RheScsXG4gICAgICB2YWx1ZTogJ21vbnRoJyxcbiAgICAgIGZvcm1hdDogdGhpcy5kYXRlUGlja2VyU2VydmljZS5mb3JtYXRDb25maWcuZGF5LFxuICAgICAgcGVyaW9kTGFiZWw6ICgpID0+IHRoaXMuX2RhdGVBZGFwdGVyXG4gICAgICAgIC5mb3JtYXQodGhpcy5fY2FsZW5kYXIuYWN0aXZlRGF0ZSwgdGhpcy5fZGF0ZUZvcm1hdHMuZGlzcGxheS5tb250aFllYXJMYWJlbClcbiAgICAgICAgLnRvTG9jYWxlVXBwZXJDYXNlKClcbiAgICB9LHtcbiAgICAgIHRpdGxlOiAnTW9udGgnLFxuICAgICAgdmFsdWU6ICd5ZWFyJyxcbiAgICAgIGZvcm1hdDogdGhpcy5kYXRlUGlja2VyU2VydmljZS5mb3JtYXRDb25maWcubW9udGgsXG4gICAgICBwZXJpb2RMYWJlbDogKCkgPT4gU3RyaW5nKG1vbWVudCh0aGlzLl9jYWxlbmRhci5hY3RpdmVEYXRlKS55ZWFyKCkpXG4gICAgfSx7XG4gICAgICB0aXRsZTogJ1F1YXJ0ZXInLFxuICAgICAgdmFsdWU6IDxNYXRDYWxlbmRhclZpZXc+ICdub25lJyxcbiAgICAgIGZvcm1hdDogdGhpcy5kYXRlUGlja2VyU2VydmljZS5mb3JtYXRDb25maWcucXVhcnRlcixcbiAgICAgIHBlcmlvZExhYmVsOiAoKSA9PiBTdHJpbmcobW9tZW50KHRoaXMuX2NhbGVuZGFyLmFjdGl2ZURhdGUpLnllYXIoKSlcbiAgICB9LHtcbiAgICAgIHRpdGxlOiAnWWVhcicsXG4gICAgICB2YWx1ZTogJ211bHRpLXllYXInLFxuICAgICAgZm9ybWF0OiB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmZvcm1hdENvbmZpZy55ZWFyLFxuICAgICAgcGVyaW9kTGFiZWw6ICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRZZWFyID0gbW9tZW50KHRoaXMuX2NhbGVuZGFyLmFjdGl2ZURhdGUpLnllYXIoKTtcbiAgICAgICAgY29uc3Qgc3RhcnRQZXJpb2QgPSBNYXRoLmZsb29yKGN1cnJlbnRZZWFyLzI0KSoyNDtcbiAgICAgICAgcmV0dXJuIHN0YXJ0UGVyaW9kICsgJy0nICsgKHN0YXJ0UGVyaW9kICsgMjMpO1xuICAgICAgfVxuICAgIH1dXG5cbiAgICBwYWdpbmdTZXR1cCA9IHtcbiAgICAgICd5ZWFyJzogKGZvcndhcmQpID0+ICB0aGlzLnBhZ2luZ0RhdGVDaGFuZ2UoJ2FkZENhbGVuZGFyWWVhcnMnLCAxLCBmb3J3YXJkKSxcbiAgICAgICdub25lJzogKGZvcndhcmQpID0+ICB0aGlzLnBhZ2luZ0RhdGVDaGFuZ2UoJ2FkZENhbGVuZGFyWWVhcnMnLCAxLCBmb3J3YXJkKSxcbiAgICAgICdtb250aCc6IChmb3J3YXJkKSA9PiAgdGhpcy5wYWdpbmdEYXRlQ2hhbmdlKCdhZGRDYWxlbmRhck1vbnRocycsIDEsIGZvcndhcmQpLFxuICAgICAgJ211bHRpLXllYXInOiAoZm9yd2FyZCkgPT4gIHRoaXMucGFnaW5nRGF0ZUNoYW5nZSgnYWRkQ2FsZW5kYXJZZWFycycsIDI0LCBmb3J3YXJkKVxuICAgIH1cblxuICAgIHNlbGVjdGVkVGltZWZyYW1lOiBNYXRDYWxlbmRhclZpZXcgPSAnbW9udGgnO1xuICAgIHRpbWVmcmFtZVNlbGVjdGlvbiA9IGZhbHNlO1xuICAgIHBlcmlvZE1vbnRoTGFiZWwgPSAnJztcbiAgICBwZXJpb2RZZWFyTGFiZWwgPSAnJztcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfY2FsZW5kYXI6IE1hdENhbGVuZGFyPE1vbWVudD4sXG4gICAgICAgIHByaXZhdGUgX2RhdGVBZGFwdGVyOiBEYXRlQWRhcHRlcjxNb21lbnQ+LFxuICAgICAgICBASW5qZWN0KE1BVF9EQVRFX0ZPUk1BVFMpIHByaXZhdGUgX2RhdGVGb3JtYXRzOiBDdXN0b21EYXRlRm9ybWF0LFxuICAgICAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHB1YmxpYyBkYXRlUGlja2VyU2VydmljZTogRHJEYXRlUGlja2VyU2VydmljZSkge1xuICAgICAgICAgIF9jYWxlbmRhci5zdGF0ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuc2V0UGVyaW9kTGFiZWxzKCkpO1xuICAgICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuZm9ybWF0JFxuICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoIHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpbWVmcmFtZSA9IHRoaXMudGltZWZyYW1lT3B0aW9ucy5maWx0ZXIob3B0aW9uID0+IG9wdGlvbi5mb3JtYXQgPT0gdmFsdWUpWzBdLnZhbHVlO1xuICAgICAgICAgICAgICB0aGlzLnNldFBlcmlvZExhYmVscygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgX2NhbGVuZGFyLnZpZXdDaGFuZ2VkLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnNldFBlcmlvZExhYmVscygpKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgIHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCk7XG4gICAgICB0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBzZXRQZXJpb2RMYWJlbHMoKSB7XG4gICAgICBjb25zdCBjdXJyZW50VGltZWZyYW1lT3B0aW9uID0gdGhpcy50aW1lZnJhbWVPcHRpb25zLmZpbHRlcihvcHRpb24gPT4gb3B0aW9uLnZhbHVlID09PSB0aGlzLl9jYWxlbmRhci5jdXJyZW50VmlldylbMF07XG4gICAgICBjb25zdCBmdWxsUGVyaW9kTGFiZWwgPSBjdXJyZW50VGltZWZyYW1lT3B0aW9uLnBlcmlvZExhYmVsKCk7XG4gICAgICBpZiAodGhpcy5fY2FsZW5kYXIuY3VycmVudFZpZXcgPT09ICdtb250aCcpIHtcbiAgICAgICAgdGhpcy5wZXJpb2RNb250aExhYmVsID0gZnVsbFBlcmlvZExhYmVsLnNsaWNlKDAsMyk7XG4gICAgICAgIHRoaXMucGVyaW9kWWVhckxhYmVsID0gZnVsbFBlcmlvZExhYmVsLnNsaWNlKDQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wZXJpb2RNb250aExhYmVsID0gJyc7XG4gICAgICAgIHRoaXMucGVyaW9kWWVhckxhYmVsID0gZnVsbFBlcmlvZExhYmVsO1xuICAgICAgfVxuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgc2V0VGltZWZyYW1lKCkge1xuICAgICAgdGhpcy50aW1lZnJhbWVTZWxlY3Rpb24gPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NhbGVuZGFyLmN1cnJlbnRWaWV3ID0gdGhpcy5zZWxlY3RlZFRpbWVmcmFtZTtcbiAgICAgIGNvbnN0IGNob3NlblRpbWVmcmFtZU9wdGlvbiA9IHRoaXMudGltZWZyYW1lT3B0aW9ucy5maWx0ZXIob3B0aW9uID0+IG9wdGlvbi52YWx1ZSA9PT0gdGhpcy5zZWxlY3RlZFRpbWVmcmFtZSlbMF07XG4gICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnVwZGF0ZVRpbWVmcmFtZUFuZEZvcm1hdChjaG9zZW5UaW1lZnJhbWVPcHRpb24uZm9ybWF0KTtcblxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRUaW1lZnJhbWUgPT0gPE1hdENhbGVuZGFyVmlldz4nbm9uZScpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFF1YXJ0ZXIgPSBtb21lbnQodGhpcy5fY2FsZW5kYXIuYWN0aXZlRGF0ZSkucXVhcnRlcigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGdldCBjdXJyZW50Vmlld0lzUXVhcnRlcigpIHtcbiAgICAgIHJldHVybiAhWydtb250aCcsICd5ZWFyJywgJ211bHRpLXllYXInXS5pbmNsdWRlcyh0aGlzLl9jYWxlbmRhci5jdXJyZW50Vmlldyk7XG4gICAgfVxuXG4gICAgc3dpdGNoVmlld09uQ2xpY2tPblBlcmlvZExhYmVsKHZpZXc6ICd5ZWFyJyB8ICdtdWx0aS15ZWFyJykge1xuICAgICAgdGhpcy5fY2FsZW5kYXIuY3VycmVudFZpZXcgPSB2aWV3O1xuICAgIH1cblxuICAgIG9uU2VsZWN0UXVhcnRlcihxdWFydGVyTnVtYmVyOiBudW1iZXIpIHtcbiAgICAgIGNvbnN0IG1vbnRoc0luUXVhcnRlciA9IDM7XG4gICAgICB0aGlzLnNlbGVjdGVkUXVhcnRlciA9IG1vbWVudCh0aGlzLl9jYWxlbmRhci5hY3RpdmVEYXRlKS5xdWFydGVyKCk7XG5cbiAgICAgIGNvbnN0IHVuYWRhcHRlZERhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5hZGRDYWxlbmRhck1vbnRocyh0aGlzLl9jYWxlbmRhci5hY3RpdmVEYXRlLFxuICAgICAgbW9udGhzSW5RdWFydGVyICogKHF1YXJ0ZXJOdW1iZXIgLSB0aGlzLnNlbGVjdGVkUXVhcnRlcikpO1xuICAgICAgdGhpcy5fY2FsZW5kYXIuYWN0aXZlRGF0ZSA9IHVuYWRhcHRlZERhdGU7XG4gICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnVwZGF0ZWRRdWFydGVyJC5uZXh0KG1vbWVudCh1bmFkYXB0ZWREYXRlKSk7XG4gICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmNhbGVuZGFySW5zdGFuY2UuY2xvc2UoKTtcbiAgICB9XG5cbiAgICBwYWdpbmdDbGlja2VkKGZvcndhcmQpIHtcbiAgICAgIHRoaXMucGFnaW5nU2V0dXBbdGhpcy5fY2FsZW5kYXIuY3VycmVudFZpZXddICYmIHRoaXMucGFnaW5nU2V0dXBbdGhpcy5fY2FsZW5kYXIuY3VycmVudFZpZXddKGZvcndhcmQpO1xuICAgIH1cblxuICAgIHBhZ2luZ0RhdGVDaGFuZ2UoYWN0aW9uQ2FsbDogc3RyaW5nLCBhbW91bnQ6IG51bWJlciwgZm9yd2FyZDogYm9vbGVhbikge1xuICAgICAgdGhpcy5fY2FsZW5kYXIuYWN0aXZlRGF0ZSA9IHRoaXMuX2RhdGVBZGFwdGVyW2FjdGlvbkNhbGxdKHRoaXMuX2NhbGVuZGFyLmFjdGl2ZURhdGUsIGZvcndhcmQ/IGFtb3VudDogLSBhbW91bnQpO1xuICAgICAgdGhpcy5zZXRQZXJpb2RMYWJlbHMoKTtcbiAgICB9XG4gIH1cbiJdfQ==
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { Injectable } from "@angular/core";
|
|
2
|
-
import { Subject, BehaviorSubject } from "rxjs";
|
|
3
|
-
import { MAT_DEFAULT_DATE_FORMAT, MONTH_YEAR_FORMAT, YEAR_FORMAT, QUARTER_FORMAT } from "../../../models/datePicker";
|
|
4
|
-
const moment = require('moment');
|
|
5
|
-
export class DrDatePickerService {
|
|
6
|
-
constructor() {
|
|
7
|
-
this.isTimeframeSelectionEnabled = false;
|
|
8
|
-
this.timeframe = 'day';
|
|
9
|
-
this.format$ = new BehaviorSubject(MAT_DEFAULT_DATE_FORMAT);
|
|
10
|
-
this.updatedQuarter$ = new Subject();
|
|
11
|
-
this.formatConfig = {
|
|
12
|
-
day: MAT_DEFAULT_DATE_FORMAT,
|
|
13
|
-
month: MONTH_YEAR_FORMAT,
|
|
14
|
-
year: YEAR_FORMAT,
|
|
15
|
-
quarter: QUARTER_FORMAT,
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
getQuarterDisplay(value) {
|
|
19
|
-
return 'Q' + moment(value).quarter() + this.format$.getValue().charAt(1) + moment(value).year();
|
|
20
|
-
}
|
|
21
|
-
getTimeframe(format) {
|
|
22
|
-
const defaultFrame = 'day';
|
|
23
|
-
if (!format) {
|
|
24
|
-
return defaultFrame;
|
|
25
|
-
}
|
|
26
|
-
const lowerCaseFormat = format.toLowerCase();
|
|
27
|
-
switch (true) {
|
|
28
|
-
case lowerCaseFormat.includes('q'):
|
|
29
|
-
return 'quarter';
|
|
30
|
-
case lowerCaseFormat.includes('d'):
|
|
31
|
-
return 'day';
|
|
32
|
-
case lowerCaseFormat.includes('m'):
|
|
33
|
-
return 'month';
|
|
34
|
-
case lowerCaseFormat.includes('y'):
|
|
35
|
-
return 'year';
|
|
36
|
-
default:
|
|
37
|
-
return defaultFrame;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
getConfiguredFormat(timeframe) {
|
|
41
|
-
return this.formatConfig[timeframe];
|
|
42
|
-
}
|
|
43
|
-
updateTimeframeAndFormat(format) {
|
|
44
|
-
const normalizedFormat = this.normalizeValue(format || this.format$.getValue());
|
|
45
|
-
this.timeframe = this.getTimeframe(normalizedFormat);
|
|
46
|
-
this.format$.next(this.getConfiguredFormat(this.timeframe));
|
|
47
|
-
}
|
|
48
|
-
normalizeValue(value) {
|
|
49
|
-
return value.replace(/d/g, 'D');
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
DrDatePickerService.decorators = [
|
|
53
|
-
{ type: Injectable }
|
|
54
|
-
];
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHItZGF0ZS1waWNrZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGFyYWlsc3NoYXJlZC9zcmMvbGliL2RyLWlucHV0cy9kYXRlLXBpY2tlcnMvc2VydmljZXMvZHItZGF0ZS1waWNrZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBMkIsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTlJLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUtqQyxNQUFNLE9BQU8sbUJBQW1CO0lBRGhDO1FBRUksZ0NBQTJCLEdBQUcsS0FBSyxDQUFDO1FBQ3BDLGNBQVMsR0FBb0IsS0FBSyxDQUFDO1FBQ25DLFlBQU8sR0FBRyxJQUFJLGVBQWUsQ0FBUyx1QkFBdUIsQ0FBQyxDQUFDO1FBQy9ELG9CQUFlLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztRQUdqQyxpQkFBWSxHQUE0QjtZQUM3QyxHQUFHLEVBQUUsdUJBQXVCO1lBQzVCLEtBQUssRUFBRSxpQkFBaUI7WUFDeEIsSUFBSSxFQUFFLFdBQVc7WUFDakIsT0FBTyxFQUFFLGNBQWM7U0FDeEIsQ0FBQztJQTBDTixDQUFDO0lBeENHLGlCQUFpQixDQUFDLEtBQUs7UUFDckIsT0FBTyxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNsRyxDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQWM7UUFFekIsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBRTNCLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDWCxPQUFPLFlBQVksQ0FBQztTQUNyQjtRQUVELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM3QyxRQUFRLElBQUksRUFBRTtZQUNaLEtBQUssZUFBZSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7Z0JBQ2hDLE9BQU8sU0FBUyxDQUFDO1lBQ25CLEtBQUssZUFBZSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7Z0JBQ2hDLE9BQU8sS0FBSyxDQUFDO1lBQ2YsS0FBSyxlQUFlLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztnQkFDaEMsT0FBTyxPQUFPLENBQUM7WUFDakIsS0FBSyxlQUFlLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztnQkFDaEMsT0FBTyxNQUFNLENBQUM7WUFDaEI7Z0JBQ0UsT0FBTyxZQUFZLENBQUM7U0FDdkI7SUFDSCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsU0FBMEI7UUFDNUMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxNQUFjO1FBQ3JDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO1FBQy9FLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQUs7UUFDbEIsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNsQyxDQUFDOzs7WUF0REosVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgTWF0RGF0ZXBpY2tlciB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyXCI7XG5pbXBvcnQgeyBNb21lbnQgfSBmcm9tIFwibW9tZW50XCI7XG5pbXBvcnQgeyBTdWJqZWN0LCBCZWhhdmlvclN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgSURhdGVQaWNrZXJGb3JtYXRDb25maWcsIE1BVF9ERUZBVUxUX0RBVEVfRk9STUFULCBNT05USF9ZRUFSX0ZPUk1BVCwgWUVBUl9GT1JNQVQsIFFVQVJURVJfRk9STUFUIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9kYXRlUGlja2VyXCI7XG5cbmNvbnN0IG1vbWVudCA9IHJlcXVpcmUoJ21vbWVudCcpO1xuXG5leHBvcnQgdHlwZSBUaW1lZnJhbWVPcHRpb24gPSAnZGF5JyB8ICdxdWFydGVyJyB8ICdtb250aCcgfCAneWVhcic7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEckRhdGVQaWNrZXJTZXJ2aWNlIHtcbiAgICBpc1RpbWVmcmFtZVNlbGVjdGlvbkVuYWJsZWQgPSBmYWxzZTtcbiAgICB0aW1lZnJhbWU6IFRpbWVmcmFtZU9wdGlvbiA9ICdkYXknO1xuICAgIGZvcm1hdCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oTUFUX0RFRkFVTFRfREFURV9GT1JNQVQpO1xuICAgIHVwZGF0ZWRRdWFydGVyJCA9IG5ldyBTdWJqZWN0PE1vbWVudD4oKTtcbiAgICBjYWxlbmRhckluc3RhbmNlOiBNYXREYXRlcGlja2VyPGFueT47XG5cbiAgICBwdWJsaWMgZm9ybWF0Q29uZmlnOiBJRGF0ZVBpY2tlckZvcm1hdENvbmZpZyA9IHtcbiAgICAgIGRheTogTUFUX0RFRkFVTFRfREFURV9GT1JNQVQsXG4gICAgICBtb250aDogTU9OVEhfWUVBUl9GT1JNQVQsXG4gICAgICB5ZWFyOiBZRUFSX0ZPUk1BVCxcbiAgICAgIHF1YXJ0ZXI6IFFVQVJURVJfRk9STUFULFxuICAgIH07XG5cbiAgICBnZXRRdWFydGVyRGlzcGxheSh2YWx1ZSkge1xuICAgICAgcmV0dXJuICdRJyArIG1vbWVudCh2YWx1ZSkucXVhcnRlcigpICsgdGhpcy5mb3JtYXQkLmdldFZhbHVlKCkuY2hhckF0KDEpICsgbW9tZW50KHZhbHVlKS55ZWFyKCk7XG4gICAgfVxuXG4gICAgZ2V0VGltZWZyYW1lKGZvcm1hdDogc3RyaW5nKSB7XG5cbiAgICAgIGNvbnN0IGRlZmF1bHRGcmFtZSA9ICdkYXknO1xuXG4gICAgICBpZiAoIWZvcm1hdCkge1xuICAgICAgICByZXR1cm4gZGVmYXVsdEZyYW1lO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsb3dlckNhc2VGb3JtYXQgPSBmb3JtYXQudG9Mb3dlckNhc2UoKTtcbiAgICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgICBjYXNlIGxvd2VyQ2FzZUZvcm1hdC5pbmNsdWRlcygncScpOlxuICAgICAgICAgIHJldHVybiAncXVhcnRlcic7XG4gICAgICAgIGNhc2UgbG93ZXJDYXNlRm9ybWF0LmluY2x1ZGVzKCdkJyk6XG4gICAgICAgICAgcmV0dXJuICdkYXknO1xuICAgICAgICBjYXNlIGxvd2VyQ2FzZUZvcm1hdC5pbmNsdWRlcygnbScpOlxuICAgICAgICAgIHJldHVybiAnbW9udGgnO1xuICAgICAgICBjYXNlIGxvd2VyQ2FzZUZvcm1hdC5pbmNsdWRlcygneScpOlxuICAgICAgICAgIHJldHVybiAneWVhcic7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGRlZmF1bHRGcmFtZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRDb25maWd1cmVkRm9ybWF0KHRpbWVmcmFtZTogVGltZWZyYW1lT3B0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtYXRDb25maWdbdGltZWZyYW1lXTtcbiAgICB9XG5cbiAgICB1cGRhdGVUaW1lZnJhbWVBbmRGb3JtYXQoZm9ybWF0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRGb3JtYXQgPSB0aGlzLm5vcm1hbGl6ZVZhbHVlKGZvcm1hdCB8fCB0aGlzLmZvcm1hdCQuZ2V0VmFsdWUoKSlcbiAgICAgIHRoaXMudGltZWZyYW1lID0gdGhpcy5nZXRUaW1lZnJhbWUobm9ybWFsaXplZEZvcm1hdCk7XG4gICAgICB0aGlzLmZvcm1hdCQubmV4dCh0aGlzLmdldENvbmZpZ3VyZWRGb3JtYXQodGhpcy50aW1lZnJhbWUpKTtcbiAgICB9XG5cbiAgICBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL2QvZywgJ0QnKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectorRef, AfterViewInit, OnDestroy } from '@angular/core';
|
|
2
|
-
import { ControlValueAccessor } from '@angular/forms';
|
|
3
|
-
import { DatePickerPeriodPosition } from '../../../models/datePicker';
|
|
4
|
-
import { Moment } from 'moment';
|
|
5
|
-
import { DateAdapter } from '@angular/material/core';
|
|
6
|
-
import { DrDatePickerService } from '../services/dr-date-picker.service';
|
|
7
|
-
import { Subject } from 'rxjs';
|
|
8
|
-
import { DrDatePickerCustomHeaderComponent } from '../dr-date-picker_custom-header/dr-date-picker_custom-header.component';
|
|
9
|
-
export declare class DrDatePickerComponent implements ControlValueAccessor, AfterViewInit, OnDestroy {
|
|
10
|
-
protected cdr: ChangeDetectorRef;
|
|
11
|
-
protected dateAdapter: DateAdapter<any>;
|
|
12
|
-
datePickerService: DrDatePickerService;
|
|
13
|
-
set format(value: any);
|
|
14
|
-
set min(minDate: number);
|
|
15
|
-
set max(maxDate: number);
|
|
16
|
-
periodPosition: DatePickerPeriodPosition;
|
|
17
|
-
placeholder: string;
|
|
18
|
-
dp: any;
|
|
19
|
-
calendarViewsTimeframeMapping: any;
|
|
20
|
-
customHeader: typeof DrDatePickerCustomHeaderComponent;
|
|
21
|
-
readonly: boolean;
|
|
22
|
-
_min: Moment;
|
|
23
|
-
_max: Moment;
|
|
24
|
-
get value(): Moment;
|
|
25
|
-
set value(v: Moment);
|
|
26
|
-
protected innerValue: Moment;
|
|
27
|
-
protected destroyed$: Subject<void>;
|
|
28
|
-
constructor(cdr: ChangeDetectorRef, dateAdapter: DateAdapter<any>, datePickerService: DrDatePickerService);
|
|
29
|
-
ngAfterViewInit(): void;
|
|
30
|
-
ngOnDestroy(): void;
|
|
31
|
-
/**
|
|
32
|
-
* Updating component inner value according to datepicker timeframe (day, month etc.)
|
|
33
|
-
* and date position in period (start, end, middle)
|
|
34
|
-
*/
|
|
35
|
-
tryToNormalaizeTimeframe(): void;
|
|
36
|
-
chosenPeriodHandler(chosenDate: Moment, timeframe: string): void;
|
|
37
|
-
/**
|
|
38
|
-
* Setting value from outside of component via ngModel or formControl updates
|
|
39
|
-
*/
|
|
40
|
-
writeValue(value: number): void;
|
|
41
|
-
onTouchedCallback: () => void;
|
|
42
|
-
onChangeCallback: (_: any) => void;
|
|
43
|
-
registerOnChange(fn: any): void;
|
|
44
|
-
registerOnTouched(fn: any): void;
|
|
45
|
-
/**
|
|
46
|
-
* Set inner value from Moment and propagate
|
|
47
|
-
* @param momentDate
|
|
48
|
-
*/
|
|
49
|
-
protected setValueFromMoment(momentDate: Moment): void;
|
|
50
|
-
/**
|
|
51
|
-
* Set inner value from timestamp and propagate
|
|
52
|
-
* @param timestamp
|
|
53
|
-
*/
|
|
54
|
-
protected setValue(timestamp: number): void;
|
|
55
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { AfterViewInit, ChangeDetectorRef, OnInit, OnDestroy, EventEmitter } from '@angular/core';
|
|
2
|
-
import { DrDatePickerComponent } from '../dr-date-picker/dr-date-picker.component';
|
|
3
|
-
import { DateAdapter } from '@angular/material/core';
|
|
4
|
-
import { DrDatePickerService } from '../services/dr-date-picker.service';
|
|
5
|
-
import { ControlValueAccessor } from '@angular/forms';
|
|
6
|
-
import { IDatePickerFormatConfig } from '../../../models/datePicker';
|
|
7
|
-
export declare class DrDatePickerWithTimeframeComponent extends DrDatePickerComponent implements ControlValueAccessor, AfterViewInit, OnDestroy, OnInit {
|
|
8
|
-
protected cdr: ChangeDetectorRef;
|
|
9
|
-
protected dateAdapter: DateAdapter<any>;
|
|
10
|
-
datePickerService: DrDatePickerService;
|
|
11
|
-
get isDashboardClassDisplayed(): boolean;
|
|
12
|
-
isDashboardDatepicker: boolean;
|
|
13
|
-
dateFormatConfig: IDatePickerFormatConfig;
|
|
14
|
-
onChangeFormat: EventEmitter<string>;
|
|
15
|
-
pagingSetup: {
|
|
16
|
-
year: (forward: any) => void;
|
|
17
|
-
quarter: (forward: any) => void;
|
|
18
|
-
month: (forward: any) => void;
|
|
19
|
-
day: (forward: any) => void;
|
|
20
|
-
};
|
|
21
|
-
get quarterDisplay(): string;
|
|
22
|
-
constructor(cdr: ChangeDetectorRef, dateAdapter: DateAdapter<any>, datePickerService: DrDatePickerService);
|
|
23
|
-
ngOnInit(): void;
|
|
24
|
-
pagingClicked(forward: any): void;
|
|
25
|
-
pagingDateChange(actionCall: string, amount: number, forward: boolean): void;
|
|
26
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { MatDatepicker } from "@angular/material/datepicker";
|
|
2
|
-
import { Moment } from "moment";
|
|
3
|
-
import { Subject, BehaviorSubject } from "rxjs";
|
|
4
|
-
import { IDatePickerFormatConfig } from "../../../models/datePicker";
|
|
5
|
-
export declare type TimeframeOption = 'day' | 'quarter' | 'month' | 'year';
|
|
6
|
-
export declare class DrDatePickerService {
|
|
7
|
-
isTimeframeSelectionEnabled: boolean;
|
|
8
|
-
timeframe: TimeframeOption;
|
|
9
|
-
format$: BehaviorSubject<string>;
|
|
10
|
-
updatedQuarter$: Subject<Moment>;
|
|
11
|
-
calendarInstance: MatDatepicker<any>;
|
|
12
|
-
formatConfig: IDatePickerFormatConfig;
|
|
13
|
-
getQuarterDisplay(value: any): string;
|
|
14
|
-
getTimeframe(format: string): "day" | "quarter" | "month" | "year";
|
|
15
|
-
getConfiguredFormat(timeframe: TimeframeOption): string;
|
|
16
|
-
updateTimeframeAndFormat(format: string): void;
|
|
17
|
-
normalizeValue(value: any): any;
|
|
18
|
-
}
|