@datarailsshared/datarailsshared 1.4.23 → 1.4.25-tigers
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 +1475 -1351
- package/bundles/datarailsshared-datarailsshared.umd.js.map +1 -1
- package/datarailsshared-datarailsshared-1.4.25-tigers.tgz +0 -0
- package/datarailsshared-datarailsshared.d.ts +5 -3
- package/datarailsshared-datarailsshared.metadata.json +1 -1
- package/esm2015/datarailsshared-datarailsshared.js +6 -4
- package/esm2015/lib/dr-inputs/date-pickers/directives/dr-date-picker-format.directive.js +47 -0
- package/esm2015/lib/dr-inputs/date-pickers/dr-date-picker/dr-date-picker.component.js +152 -0
- package/esm2015/lib/dr-inputs/date-pickers/dr-date-picker-with-timeframe/dr-date-picker-with-timeframe.component.js +72 -0
- package/esm2015/lib/dr-inputs/date-pickers/dr-date-picker_custom-header/dr-date-picker_custom-header.component.js +128 -0
- package/esm2015/lib/dr-inputs/date-pickers/services/dr-date-picker.service.js +55 -0
- package/esm2015/lib/dr-inputs/dr-inputs.module.js +13 -9
- package/esm2015/lib/dr-spinner/dr-spinner.component.js +6 -17
- package/esm2015/lib/dr-spinner/dr-spinner.directive.js +7 -3
- package/esm2015/lib/dr-tooltip/dr-tooltip.component.js +13 -3
- package/esm2015/lib/dr-tooltip/dr-tooltip.directive.js +43 -10
- package/esm2015/lib/models/datePicker.js +8 -1
- package/esm2015/lib/models/spinnerOptions.js +13 -0
- package/esm2015/public-api.js +4 -3
- package/fesm2015/datarailsshared-datarailsshared.js +644 -538
- package/fesm2015/datarailsshared-datarailsshared.js.map +1 -1
- package/lib/dr-inputs/{dr-date-picker → date-pickers/directives}/dr-date-picker-format.directive.d.ts +1 -1
- package/lib/dr-inputs/date-pickers/dr-date-picker/dr-date-picker.component.d.ts +55 -0
- package/lib/dr-inputs/date-pickers/dr-date-picker-with-timeframe/dr-date-picker-with-timeframe.component.d.ts +26 -0
- package/lib/dr-inputs/{dr-date-picker → date-pickers}/dr-date-picker_custom-header/dr-date-picker_custom-header.component.d.ts +4 -4
- package/lib/dr-inputs/date-pickers/services/dr-date-picker.service.d.ts +18 -0
- package/lib/dr-spinner/dr-spinner.component.d.ts +3 -7
- package/lib/dr-spinner/dr-spinner.directive.d.ts +3 -1
- package/lib/dr-tooltip/dr-tooltip.component.d.ts +4 -0
- package/lib/dr-tooltip/dr-tooltip.directive.d.ts +4 -0
- package/lib/models/datePicker.d.ts +12 -0
- package/lib/models/spinnerOptions.d.ts +14 -0
- package/package.json +1 -1
- package/public-api.d.ts +2 -2
- package/datarailsshared-datarailsshared-1.4.23.tgz +0 -0
- package/esm2015/lib/dr-inputs/dr-date-picker/dr-date-picker-format.directive.js +0 -47
- package/esm2015/lib/dr-inputs/dr-date-picker/dr-date-picker.component.js +0 -183
- package/esm2015/lib/dr-inputs/dr-date-picker/dr-date-picker.service.js +0 -41
- package/esm2015/lib/dr-inputs/dr-date-picker/dr-date-picker_custom-header/dr-date-picker_custom-header.component.js +0 -129
- package/lib/dr-inputs/dr-date-picker/dr-date-picker.component.d.ts +0 -54
- package/lib/dr-inputs/dr-date-picker/dr-date-picker.service.d.ts +0 -12
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { NgControl } from '@angular/forms';
|
|
2
|
-
import { CustomDateFormat, DateDisplay, DateParse } from '
|
|
2
|
+
import { CustomDateFormat, DateDisplay, DateParse } from '../../../models/datePicker';
|
|
3
3
|
export declare class DrDatePickerFormatDirective {
|
|
4
4
|
matDateFormat: CustomDateFormat;
|
|
5
5
|
private ngControl;
|
|
@@ -0,0 +1,55 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
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
|
+
}
|
|
@@ -2,7 +2,7 @@ import { OnDestroy, ChangeDetectorRef } from "@angular/core";
|
|
|
2
2
|
import { MatCalendar, MatCalendarView } from '@angular/material/datepicker';
|
|
3
3
|
import { DateAdapter } from '@angular/material/core';
|
|
4
4
|
import { CustomDateFormat } from "../../../models/datePicker";
|
|
5
|
-
import { DrDatePickerService } from "../dr-date-picker.service";
|
|
5
|
+
import { DrDatePickerService } from "../services/dr-date-picker.service";
|
|
6
6
|
export interface ITimeframeOption {
|
|
7
7
|
title: string;
|
|
8
8
|
value: MatCalendarView;
|
|
@@ -14,7 +14,7 @@ export declare class DrDatePickerCustomHeaderComponent<Moment> implements OnDest
|
|
|
14
14
|
private _dateAdapter;
|
|
15
15
|
private _dateFormats;
|
|
16
16
|
private cdr;
|
|
17
|
-
|
|
17
|
+
datePickerService: DrDatePickerService;
|
|
18
18
|
private _destroyed;
|
|
19
19
|
quarters: number[];
|
|
20
20
|
selectedQuarter: number;
|
|
@@ -33,9 +33,9 @@ export declare class DrDatePickerCustomHeaderComponent<Moment> implements OnDest
|
|
|
33
33
|
ngOnDestroy(): void;
|
|
34
34
|
setPeriodLabels(): void;
|
|
35
35
|
setTimeframe(): void;
|
|
36
|
-
get
|
|
36
|
+
get currentViewIsQuarter(): boolean;
|
|
37
37
|
switchViewOnClickOnPeriodLabel(view: 'year' | 'multi-year'): void;
|
|
38
|
-
|
|
38
|
+
onSelectQuarter(quarterNumber: number): void;
|
|
39
39
|
pagingClicked(forward: any): void;
|
|
40
40
|
pagingDateChange(actionCall: string, amount: number, forward: boolean): void;
|
|
41
41
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
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
|
+
}
|
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare class
|
|
3
|
-
size: 'small' | 'medium' | 'big' | 'giant';
|
|
4
|
-
}
|
|
5
|
-
export declare class DrSpinnerComponent implements OnInit {
|
|
6
|
-
height: string;
|
|
1
|
+
import { ISpinnerOptions } from '../models/spinnerOptions';
|
|
2
|
+
export declare class DrSpinnerComponent {
|
|
7
3
|
private _options;
|
|
8
4
|
set options(data: ISpinnerOptions);
|
|
9
|
-
|
|
5
|
+
get options(): ISpinnerOptions;
|
|
10
6
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ComponentFactoryResolver, ElementRef, OnChanges, OnDestroy, Renderer2, SimpleChanges, ViewContainerRef } from '@angular/core';
|
|
2
|
+
import { SpinnerSize, SpinnerType } from '../models/spinnerOptions';
|
|
2
3
|
export declare class DrSpinnerDirective implements OnChanges, OnDestroy {
|
|
3
4
|
private componentFactoryResolver;
|
|
4
5
|
private viewContainerRef;
|
|
@@ -7,7 +8,8 @@ export declare class DrSpinnerDirective implements OnChanges, OnDestroy {
|
|
|
7
8
|
private _document;
|
|
8
9
|
contentCmpRef: any;
|
|
9
10
|
drSpinner: any;
|
|
10
|
-
drSpinnerSize:
|
|
11
|
+
drSpinnerSize: SpinnerSize;
|
|
12
|
+
drSpinnerType: SpinnerType;
|
|
11
13
|
constructor(componentFactoryResolver: ComponentFactoryResolver, viewContainerRef: ViewContainerRef, el: ElementRef, rdr: Renderer2, _document: any);
|
|
12
14
|
ngOnChanges(changes: SimpleChanges): void;
|
|
13
15
|
ngOnDestroy(): void;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { OnInit } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject } from 'rxjs';
|
|
2
3
|
declare type TooltipOptions = {
|
|
3
4
|
withoutContainerStyles?: boolean;
|
|
4
5
|
withoutArrow?: boolean;
|
|
@@ -10,7 +11,10 @@ export declare class TooltipComponent implements OnInit {
|
|
|
10
11
|
options: TooltipOptions;
|
|
11
12
|
class: string;
|
|
12
13
|
isContentTemplate: boolean;
|
|
14
|
+
isMouseOn$: BehaviorSubject<boolean>;
|
|
13
15
|
constructor();
|
|
14
16
|
ngOnInit(): void;
|
|
17
|
+
setMouseOn(): void;
|
|
18
|
+
unsetMouseOn(): void;
|
|
15
19
|
}
|
|
16
20
|
export {};
|
|
@@ -8,11 +8,15 @@ export declare class DrTooltipDirective implements OnDestroy {
|
|
|
8
8
|
contentContext: {};
|
|
9
9
|
position: string;
|
|
10
10
|
class: string;
|
|
11
|
+
drTooltipMousleaveTimeout: number;
|
|
11
12
|
set drTooltipOptions(options: any);
|
|
12
13
|
set showTooltip(value: boolean);
|
|
13
14
|
private overlayRef;
|
|
15
|
+
private tooltipRef;
|
|
14
16
|
private options;
|
|
15
17
|
private manualHandling;
|
|
18
|
+
private tooltipMouseOnSubscription;
|
|
19
|
+
private mouseleaveTimer;
|
|
16
20
|
constructor(overlay: Overlay, overlayPositionBuilder: OverlayPositionBuilder, elementRef: ElementRef);
|
|
17
21
|
ngOnDestroy(): void;
|
|
18
22
|
show(): void;
|
|
@@ -23,3 +23,15 @@ export declare class CustomDateFormat {
|
|
|
23
23
|
get display(): DateDisplay;
|
|
24
24
|
updateDateFormat(parse: DateParse, display?: DateDisplay): void;
|
|
25
25
|
}
|
|
26
|
+
export interface IDatePickerFormatConfig {
|
|
27
|
+
day?: string;
|
|
28
|
+
month?: string;
|
|
29
|
+
year?: string;
|
|
30
|
+
quarter?: string;
|
|
31
|
+
}
|
|
32
|
+
export declare enum DatePickerPeriodPosition {
|
|
33
|
+
END_OF_PERIOD = 0,
|
|
34
|
+
MIDDLE_OF_PERIOD = 1,
|
|
35
|
+
START_OF_PERIOD = 2,
|
|
36
|
+
DEFAULT = 3
|
|
37
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare enum SpinnerType {
|
|
2
|
+
LOGO = "logo",
|
|
3
|
+
CIRCLE = "circle"
|
|
4
|
+
}
|
|
5
|
+
export declare enum SpinnerSize {
|
|
6
|
+
SMALL = "small",
|
|
7
|
+
MEDIUM = "medium",
|
|
8
|
+
BIG = "big",
|
|
9
|
+
GIANT = "giant"
|
|
10
|
+
}
|
|
11
|
+
export interface ISpinnerOptions extends DOMRect {
|
|
12
|
+
spinnerType?: SpinnerType;
|
|
13
|
+
spinnerSize?: SpinnerSize;
|
|
14
|
+
}
|
package/package.json
CHANGED
package/public-api.d.ts
CHANGED
|
@@ -22,8 +22,6 @@ export * from './lib/dr-inputs/dr-toggle-button/dr-toggle-button.component';
|
|
|
22
22
|
export * from './lib/dr-spinner/dr-spinner.component';
|
|
23
23
|
export * from './lib/dr-spinner/dr-spinner.directive';
|
|
24
24
|
export * from './lib/dr-inputs/button/button.component';
|
|
25
|
-
export * from './lib/dr-inputs/dr-date-picker/dr-date-picker.component';
|
|
26
|
-
export * from './lib/dr-inputs/dr-date-picker/dr-date-picker-format.directive';
|
|
27
25
|
export * from './lib/dr-popover/dr-popover.directive';
|
|
28
26
|
export * from './lib/dr-popover/dr-popover.component';
|
|
29
27
|
export * from './lib/dr-popover/dr-popover.service';
|
|
@@ -39,7 +37,9 @@ export * from './lib/dr-accordion/accordion-item.component';
|
|
|
39
37
|
export * from './lib/dr-accordion/accordion-item-header.component';
|
|
40
38
|
export * from './lib/dr-accordion/accordion-item-body.component';
|
|
41
39
|
export * from './lib/dr-inputs/dr-model-debounce-change.directive';
|
|
40
|
+
export * from './lib/models/datePicker';
|
|
42
41
|
export { TAG_TYPES, ITag, IDateTag, IListTag, ITagForServer } from './lib/models/serverTags';
|
|
42
|
+
export { ISpinnerOptions, SpinnerType, SpinnerSize } from './lib/models/spinnerOptions';
|
|
43
43
|
export { ElPosition, IDropdown, IDropdownItem, IDropdownActionIcon, IDropdownCoordinate, IDropdownCallEvent, IDropdownAction } from './lib/models/dropdown';
|
|
44
44
|
export { DrPopoverRef, IDrPopoverComponentModel, Point, DrPopoverConfig, IPopoverManualClosing, DrPopoverAlignment, DrPopoverAlignmentDimension, } from './lib/models/popover';
|
|
45
45
|
export { DateTagModule } from './lib/date-tags/date-tag.module';
|
|
Binary file
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { Directive, Inject, Input, Optional } from '@angular/core';
|
|
2
|
-
import { NgControl } from '@angular/forms';
|
|
3
|
-
import { DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core';
|
|
4
|
-
import { MomentDateAdapter } from '@angular/material-moment-adapter';
|
|
5
|
-
import { CustomDateFormat } from '../../models/datePicker';
|
|
6
|
-
export class DrDatePickerFormatDirective {
|
|
7
|
-
constructor(matDateFormat, ngControl) {
|
|
8
|
-
this.matDateFormat = matDateFormat;
|
|
9
|
-
this.ngControl = ngControl;
|
|
10
|
-
}
|
|
11
|
-
set datePickerFormat(format) {
|
|
12
|
-
var _a;
|
|
13
|
-
if (this.configDateParse) {
|
|
14
|
-
this.matDateFormat.updateDateFormat(this.configDateParse, this.configDateDisplay);
|
|
15
|
-
}
|
|
16
|
-
else {
|
|
17
|
-
this.matDateFormat.updateDateFormat({ dateInput: format });
|
|
18
|
-
}
|
|
19
|
-
const value = this.ngControl.value;
|
|
20
|
-
(_a = this.ngControl.valueAccessor) === null || _a === void 0 ? void 0 : _a.writeValue(value);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
DrDatePickerFormatDirective.decorators = [
|
|
24
|
-
{ type: Directive, args: [{
|
|
25
|
-
selector: '[drDatePickerFormat]',
|
|
26
|
-
providers: [
|
|
27
|
-
{
|
|
28
|
-
provide: DateAdapter,
|
|
29
|
-
useClass: MomentDateAdapter
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
provide: MAT_DATE_FORMATS,
|
|
33
|
-
useClass: CustomDateFormat
|
|
34
|
-
}
|
|
35
|
-
]
|
|
36
|
-
},] }
|
|
37
|
-
];
|
|
38
|
-
DrDatePickerFormatDirective.ctorParameters = () => [
|
|
39
|
-
{ type: CustomDateFormat, decorators: [{ type: Inject, args: [MAT_DATE_FORMATS,] }] },
|
|
40
|
-
{ type: NgControl, decorators: [{ type: Optional }] }
|
|
41
|
-
];
|
|
42
|
-
DrDatePickerFormatDirective.propDecorators = {
|
|
43
|
-
configDateParse: [{ type: Input }],
|
|
44
|
-
configDateDisplay: [{ type: Input }],
|
|
45
|
-
datePickerFormat: [{ type: Input, args: ['drDatePickerFormat',] }]
|
|
46
|
-
};
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHItZGF0ZS1waWNrZXItZm9ybWF0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGFyYWlsc3NoYXJlZC9zcmMvbGliL2RyLWlucHV0cy9kci1kYXRlLXBpY2tlci9kci1kYXRlLXBpY2tlci1mb3JtYXQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsTUFBTSxFQUNOLEtBQUssRUFDTCxRQUFRLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQTBCLE1BQU0seUJBQXlCLENBQUM7QUFlbkYsTUFBTSxPQUFPLDJCQUEyQjtJQWtCdEMsWUFDbUMsYUFBK0IsRUFDNUMsU0FBb0I7UUFEUCxrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFDNUMsY0FBUyxHQUFULFNBQVMsQ0FBVztJQUUxQyxDQUFDO0lBbEJELElBQ0ksZ0JBQWdCLENBQUMsTUFBYzs7UUFDakMsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQ2pDLElBQUksQ0FBQyxlQUFlLEVBQ3BCLElBQUksQ0FBQyxpQkFBaUIsQ0FDdkIsQ0FBQztTQUNIO2FBQU07WUFDTCxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUM7U0FDMUQ7UUFDRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztRQUNuQyxNQUFBLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSwwQ0FBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEQsQ0FBQzs7O1lBN0JGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsc0JBQXNCO2dCQUNoQyxTQUFTLEVBQUU7b0JBQ1Q7d0JBQ0UsT0FBTyxFQUFFLFdBQVc7d0JBQ3BCLFFBQVEsRUFBRSxpQkFBaUI7cUJBQzVCO29CQUNEO3dCQUNFLE9BQU8sRUFBRSxnQkFBZ0I7d0JBQ3pCLFFBQVEsRUFBRSxnQkFBZ0I7cUJBQzNCO2lCQUNGO2FBQ0Y7OztZQWRRLGdCQUFnQix1QkFrQ3BCLE1BQU0sU0FBQyxnQkFBZ0I7WUFyQ25CLFNBQVMsdUJBc0NiLFFBQVE7Ozs4QkFuQlYsS0FBSztnQ0FDTCxLQUFLOytCQUVMLEtBQUssU0FBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9wdGlvbmFsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRGF0ZUFkYXB0ZXIsIE1BVF9EQVRFX0ZPUk1BVFMgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IE1vbWVudERhdGVBZGFwdGVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwtbW9tZW50LWFkYXB0ZXInO1xuaW1wb3J0IHsgQ3VzdG9tRGF0ZUZvcm1hdCwgRGF0ZURpc3BsYXksIERhdGVQYXJzZSB9IGZyb20gJy4uLy4uL21vZGVscy9kYXRlUGlja2VyJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2RyRGF0ZVBpY2tlckZvcm1hdF0nLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBEYXRlQWRhcHRlcixcbiAgICAgIHVzZUNsYXNzOiBNb21lbnREYXRlQWRhcHRlclxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTUFUX0RBVEVfRk9STUFUUyxcbiAgICAgIHVzZUNsYXNzOiBDdXN0b21EYXRlRm9ybWF0XG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIERyRGF0ZVBpY2tlckZvcm1hdERpcmVjdGl2ZSB7XG4gIEBJbnB1dCgpIHB1YmxpYyBjb25maWdEYXRlUGFyc2U6IERhdGVQYXJzZTtcbiAgQElucHV0KCkgcHVibGljIGNvbmZpZ0RhdGVEaXNwbGF5OiBEYXRlRGlzcGxheTtcblxuICBASW5wdXQoJ2RyRGF0ZVBpY2tlckZvcm1hdCcpXG4gIHNldCBkYXRlUGlja2VyRm9ybWF0KGZvcm1hdDogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnRGF0ZVBhcnNlKSB7XG4gICAgICB0aGlzLm1hdERhdGVGb3JtYXQudXBkYXRlRGF0ZUZvcm1hdChcbiAgICAgICAgdGhpcy5jb25maWdEYXRlUGFyc2UsXG4gICAgICAgIHRoaXMuY29uZmlnRGF0ZURpc3BsYXlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWF0RGF0ZUZvcm1hdC51cGRhdGVEYXRlRm9ybWF0KHtkYXRlSW5wdXQ6IGZvcm1hdH0pO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMubmdDb250cm9sLnZhbHVlO1xuICAgIHRoaXMubmdDb250cm9sLnZhbHVlQWNjZXNzb3I/LndyaXRlVmFsdWUodmFsdWUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChNQVRfREFURV9GT1JNQVRTKSBwdWJsaWMgbWF0RGF0ZUZvcm1hdDogQ3VzdG9tRGF0ZUZvcm1hdCxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIG5nQ29udHJvbDogTmdDb250cm9sXG4gICkge1xuICB9XG59XG4iXX0=
|
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
import { Component, ChangeDetectionStrategy, Input, ChangeDetectorRef, ViewChild, Output, EventEmitter } from '@angular/core';
|
|
2
|
-
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
-
import { MAT_DEFAULT_DATE_FORMAT } from '../../models/datePicker';
|
|
4
|
-
import { DrDatePickerCustomHeaderComponent } from './dr-date-picker_custom-header/dr-date-picker_custom-header.component';
|
|
5
|
-
import { DateAdapter } from '@angular/material/core';
|
|
6
|
-
import { DrDatePickerService } from './dr-date-picker.service';
|
|
7
|
-
import { Subject } from 'rxjs';
|
|
8
|
-
import { takeUntil } from 'rxjs/operators';
|
|
9
|
-
const moment = require('moment');
|
|
10
|
-
const noop = () => { };
|
|
11
|
-
const ɵ0 = noop;
|
|
12
|
-
export class DrDatePickerComponent {
|
|
13
|
-
constructor(cdr, _dateAdapter, datePickerService) {
|
|
14
|
-
this.cdr = cdr;
|
|
15
|
-
this._dateAdapter = _dateAdapter;
|
|
16
|
-
this.datePickerService = datePickerService;
|
|
17
|
-
this._destroyed = new Subject();
|
|
18
|
-
this.readonly = true;
|
|
19
|
-
this._format = MAT_DEFAULT_DATE_FORMAT;
|
|
20
|
-
this.customHeader = DrDatePickerCustomHeaderComponent;
|
|
21
|
-
this.onChangeFormat = new EventEmitter();
|
|
22
|
-
this.timeframeSelection = false;
|
|
23
|
-
this.takeEndOfPeriod = false;
|
|
24
|
-
this.placeholder = 'Select';
|
|
25
|
-
this.min = null;
|
|
26
|
-
this.max = null;
|
|
27
|
-
this.calendarViewSetup = {
|
|
28
|
-
'year': (calendar) => calendar.currentView = 'multi-year',
|
|
29
|
-
'month': (calendar) => calendar.currentView = 'year',
|
|
30
|
-
'quarter': (calendar) => calendar.currentView = 'none',
|
|
31
|
-
'day': (calendar) => calendar.currentView = 'month'
|
|
32
|
-
};
|
|
33
|
-
this.pagingSetup = {
|
|
34
|
-
'year': (forward) => this.pagingDateChange('addCalendarYears', 1, forward),
|
|
35
|
-
'quarter': (forward) => this.pagingDateChange('addCalendarMonths', 3, forward),
|
|
36
|
-
'month': (forward) => this.pagingDateChange('addCalendarMonths', 1, forward),
|
|
37
|
-
'day': (forward) => this.pagingDateChange('addCalendarDays', 1, forward)
|
|
38
|
-
};
|
|
39
|
-
this.innerValue = null;
|
|
40
|
-
this.onTouchedCallback = noop;
|
|
41
|
-
this.onChangeCallback = noop;
|
|
42
|
-
datePickerService.format
|
|
43
|
-
.pipe(takeUntil(this._destroyed))
|
|
44
|
-
.subscribe((value) => {
|
|
45
|
-
this._format = value;
|
|
46
|
-
this.onChangeFormat.emit(this.normalizeValue(value));
|
|
47
|
-
cdr.markForCheck();
|
|
48
|
-
});
|
|
49
|
-
datePickerService.updatedQuater
|
|
50
|
-
.pipe(takeUntil(this._destroyed))
|
|
51
|
-
.subscribe((value) => {
|
|
52
|
-
this.tryToNormalaizeTimeframe(value, 'quarter');
|
|
53
|
-
this.writeValue(value);
|
|
54
|
-
this.onChangeCallback(value);
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
set format(value) {
|
|
58
|
-
if (value) {
|
|
59
|
-
value = this.normalizeValue(value);
|
|
60
|
-
this._format = value;
|
|
61
|
-
this.datePickerService.format.next(value);
|
|
62
|
-
this.datePickerService.setTimeframe(value);
|
|
63
|
-
this.cdr.markForCheck();
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
ngAfterViewInit() {
|
|
67
|
-
this.datePickerService.calendarInstance = this.dp;
|
|
68
|
-
if (this._format === MAT_DEFAULT_DATE_FORMAT) {
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
setTimeout(() => {
|
|
72
|
-
const popupInstance = this.dp._popupComponentRef.instance;
|
|
73
|
-
const calenderInstance = popupInstance._calendar._calendarHeaderPortal._attachedHost._attachedRef.instance;
|
|
74
|
-
calenderInstance.currentPeriodClicked = function () {
|
|
75
|
-
this.calendarViewSetup[this.datePickerService.timeframe] && this.calendarViewSetup[this.datePickerService.timeframe](this.calendar);
|
|
76
|
-
};
|
|
77
|
-
}, 1000);
|
|
78
|
-
}
|
|
79
|
-
tryToNormalaizeTimeframe(normalizedRef, timeframe) {
|
|
80
|
-
if (this.takeEndOfPeriod) {
|
|
81
|
-
normalizedRef.endOf(timeframe);
|
|
82
|
-
}
|
|
83
|
-
normalizedRef.set('hour', 12);
|
|
84
|
-
}
|
|
85
|
-
get value() {
|
|
86
|
-
return this.innerValue;
|
|
87
|
-
}
|
|
88
|
-
set value(v) {
|
|
89
|
-
if (v !== this.innerValue) {
|
|
90
|
-
this.innerValue = v;
|
|
91
|
-
this.onChangeCallback(v);
|
|
92
|
-
}
|
|
93
|
-
this.cdr.markForCheck();
|
|
94
|
-
}
|
|
95
|
-
registerOnChange(fn) {
|
|
96
|
-
this.onChangeCallback = fn;
|
|
97
|
-
}
|
|
98
|
-
registerOnTouched(fn) {
|
|
99
|
-
this.onTouchedCallback = fn;
|
|
100
|
-
}
|
|
101
|
-
writeValue(value) {
|
|
102
|
-
if (value !== this.innerValue) {
|
|
103
|
-
if (value && typeof value === 'number') {
|
|
104
|
-
this.innerValue = moment.unix(value);
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
this.innerValue = value;
|
|
108
|
-
}
|
|
109
|
-
this.tryToNormalaizeTimeframe(this.innerValue, this.datePickerService.timeframe);
|
|
110
|
-
this.cdr.markForCheck();
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
get quarterDisplay() {
|
|
114
|
-
return this.datePickerService.getQuarterDisplay(this.value, this._format);
|
|
115
|
-
}
|
|
116
|
-
normalizeValue(value) {
|
|
117
|
-
if (value.includes('d')) {
|
|
118
|
-
value = value.replace(/d/g, 'D');
|
|
119
|
-
}
|
|
120
|
-
else if (value.includes('D')) {
|
|
121
|
-
value = value.replace(/D/g, 'd');
|
|
122
|
-
}
|
|
123
|
-
return value;
|
|
124
|
-
}
|
|
125
|
-
chosenMonthHandler(normalizedMonth, datepicker) {
|
|
126
|
-
if (this.datePickerService.timeframe === 'month') {
|
|
127
|
-
this.tryToNormalaizeTimeframe(normalizedMonth, 'month');
|
|
128
|
-
this.writeValue(normalizedMonth);
|
|
129
|
-
this.onChangeCallback(normalizedMonth);
|
|
130
|
-
datepicker.close();
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
chosenYearHandler(normalizedYear, datepicker) {
|
|
134
|
-
if (this.datePickerService.timeframe === 'year') {
|
|
135
|
-
this.tryToNormalaizeTimeframe(normalizedYear, 'year');
|
|
136
|
-
this.writeValue(normalizedYear);
|
|
137
|
-
this.onChangeCallback(normalizedYear);
|
|
138
|
-
datepicker.close();
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
pagingClicked(forward) {
|
|
142
|
-
this.pagingSetup[this.datePickerService.timeframe] && this.pagingSetup[this.datePickerService.timeframe](forward);
|
|
143
|
-
this.datePickerService.calendarInstance.close();
|
|
144
|
-
}
|
|
145
|
-
pagingDateChange(actionCall, amount, forward) {
|
|
146
|
-
const newValue = this._dateAdapter[actionCall](this.innerValue, forward ? amount : -amount);
|
|
147
|
-
this.writeValue(newValue);
|
|
148
|
-
this.onChangeCallback(newValue);
|
|
149
|
-
}
|
|
150
|
-
ngOnDestroy() {
|
|
151
|
-
this._destroyed.next();
|
|
152
|
-
this._destroyed.complete();
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
DrDatePickerComponent.decorators = [
|
|
156
|
-
{ type: Component, args: [{
|
|
157
|
-
selector: 'dr-date-picker',
|
|
158
|
-
template: "<div class=\"dr-datepicker__with-timeframe-selection\"\n *ngIf=\"timeframeSelection;else noTimeframeSelection\">\n <div class=\"dr-input-date-paging__flip-page-button\"\n (click)=\"pagingClicked(false)\"\n >\n <i class=\"dr-icon-arrow-left presentation_buttons-navigate_input\"></i> \n </div>\n <div class=\"dr-input-date-paging__quarter-display\"\n *ngIf=\"_format.includes('Q')\"\n (click)=\"datePicker.open()\"\n >{{quarterDisplay}}</div>\n <input [(ngModel)]=\"value\"\n (click)=\"datePicker.open()\"\n [matDatepicker]=\"datePicker\"\n [placeholder]=\"placeholder\"\n [drDatePickerFormat]=\"_format\"\n [readonly]=\"readonly\"\n [class]=\"_format.includes('Q') ? 'when-quarter' : ''\"\n [min]=\"min\"\n [max]=\"max\"/>\n <div class=\"dr-input-date-paging__flip-page-button\"\n (click)=\"pagingClicked(true)\">\n <i class=\"dr-icon-arrow-right presentation_buttons-navigate_input\"></i>\n </div>\n <mat-datepicker #datePicker\n class=\"dr-timeframe-datepicker\"\n [calendarHeaderComponent]=\"customHeader\"\n (yearSelected)=\"chosenYearHandler($event, datePicker)\"\n (monthSelected)=\"chosenMonthHandler($event, datePicker)\">\n </mat-datepicker>\n</div>\n\n<ng-template class=\"dr-datepicker__no-timeframe-selection\"\n #noTimeframeSelection>\n <i class=\"dr-icon-schedule\"></i>\n <input [(ngModel)]=\"value\"\n (click)=\"datePicker.open()\"\n [matDatepicker]=\"datePicker\"\n [placeholder]=\"placeholder\"\n [drDatePickerFormat]=\"_format\"\n [readonly]=\"readonly\"\n [min]=\"min\"\n [max]=\"max\"/>\n <mat-datepicker #datePicker\n (yearSelected)=\"chosenYearHandler($event, datePicker)\"\n (monthSelected)=\"chosenMonthHandler($event, datePicker)\">\n </mat-datepicker>\n</ng-template>\n\n",
|
|
159
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
160
|
-
providers: [
|
|
161
|
-
{ provide: NG_VALUE_ACCESSOR, useExisting: DrDatePickerComponent, multi: true }
|
|
162
|
-
],
|
|
163
|
-
styles: [":host{position:relative;width:100%;display:flex;flex-direction:row;min-height:32px;height:32px;font-size:14px;font-family:\"Poppins\",sans-serif;background-color:#fff;border:1px solid #C3C4CE;border-radius:6px;color:#85889c;overflow:hidden;outline:none;cursor:pointer}:host.period-datepicker{border:none}:host:hover{border-color:#85889c}:host:focus-within{border-color:#21b8f1!important;color:#151b3f}:host.disabled{pointer-events:none;border:none;color:#85889c;background:#E5E6EA}:host.ng-valid.ng-dirty{border-color:#03a678}:host.ng-invalid.ng-dirty:not(:focus-within){border-color:#de2833!important}:host.ng-untouched.ng-valid{border-color:#c3c4ce}:host:after,:host:before{position:absolute;display:flex;border-color:#999999 transparent transparent;color:#999}:host:after{content:\"\";height:0;width:0;border-style:solid;border-width:5px 5px 2.5px;right:11px;top:13px}:host i{position:absolute;color:#999;left:8px;top:3px}:host input{display:flex;flex-grow:1;height:100%;border:none;text-align:left;padding-left:35px;padding-right:25px;cursor:pointer!important;outline:none}:host input.when-quarter{position:absolute;visibility:hidden}:host input:disabled{border:none;color:#85889c;background:transparent}:host input::-webkit-search-decoration,:host input::-webkit-search-cancel-button,:host input::-webkit-search-results-button,:host input::-webkit-search-results-decoration{-webkit-appearance:none}:host .dr-datepicker__with-timeframe-selection{display:flex;align-items:center}:host .dr-datepicker__with-timeframe-selection .dr-input-date-paging__flip-page-button{width:25px;height:25px;border-radius:16px;padding:0;background-color:#fff}:host .dr-datepicker__with-timeframe-selection .dr-input-date-paging__flip-page-button i{position:relative;color:#0c142b;top:unset;left:unset}:host .dr-datepicker__with-timeframe-selection .dr-input-date-paging__flip-page-button:hover{background-color:#f2f2fb;color:#4646ce}:host .dr-datepicker__with-timeframe-selection input{width:90px;padding:0;border-radius:5px;text-decoration:underline;text-align:center}:host .dr-datepicker__with-timeframe-selection input:hover{background-color:#f2f2fb;color:#4646ce}:host .dr-input-date-paging__quarter-display{width:90px;height:22px;padding-left:0;text-align:center;line-height:22px;color:#0c142b;-webkit-text-decoration-line:underline;text-decoration-line:underline}:host .dr-input-date-paging__quarter-display:hover{background-color:#f2f2fb;border-radius:5px;cursor:pointer;-webkit-text-decoration-line:underline;text-decoration-line:underline;color:#4646ce}::ng-deep .mat-datepicker-content{margin:7px 0;box-shadow:0 4px 8px 1px #00000040;border-radius:12px!important}::ng-deep .mat-datepicker-content button[disabled]{border:inherit;color:inherit;background-color:inherit}::ng-deep .mat-datepicker-content button[disabled]:hover{border:inherit}::ng-deep .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background:#F2F2FB;color:#4646ce;font-weight:600}::ng-deep .mat-calendar-body-selected{background-color:#4646ce;color:#f2f2fb;font-weight:600}::ng-deep .mat-calendar-body-today.mat-calendar-body-selected{box-shadow:none}::ng-deep .mat-button-focus-overlay{background:#F3F7FF}::ng-deep .mat-calendar-controls .mat-icon-button:hover .mat-button-focus-overlay{opacity:1!important;background:#F3F7FF;transition:opacity .2s cubic-bezier(.35,0,.25,1)}::ng-deep .mat-calendar-controls .mat-calendar-period-button:hover{background:#F3F7FF;transition:background .2s cubic-bezier(.35,0,.25,1)}::ng-deep .mat-calendar-table-header th{font-size:14px;font-weight:600;color:#19181a}::ng-deep .mat-calendar-table-header-divider{display:none}::ng-deep .mat-calendar-body-label{color:#fff;padding:0}\n"]
|
|
164
|
-
},] }
|
|
165
|
-
];
|
|
166
|
-
DrDatePickerComponent.ctorParameters = () => [
|
|
167
|
-
{ type: ChangeDetectorRef },
|
|
168
|
-
{ type: DateAdapter },
|
|
169
|
-
{ type: DrDatePickerService }
|
|
170
|
-
];
|
|
171
|
-
DrDatePickerComponent.propDecorators = {
|
|
172
|
-
_format: [{ type: Input }],
|
|
173
|
-
onChangeFormat: [{ type: Output }],
|
|
174
|
-
format: [{ type: Input }],
|
|
175
|
-
timeframeSelection: [{ type: Input }],
|
|
176
|
-
takeEndOfPeriod: [{ type: Input }],
|
|
177
|
-
placeholder: [{ type: Input }],
|
|
178
|
-
min: [{ type: Input }],
|
|
179
|
-
max: [{ type: Input }],
|
|
180
|
-
dp: [{ type: ViewChild, args: ['datePicker',] }]
|
|
181
|
-
};
|
|
182
|
-
export { ɵ0 };
|
|
183
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHItZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YXJhaWxzc2hhcmVkL3NyYy9saWIvZHItaW5wdXRzL2RyLWRhdGUtcGlja2VyL2RyLWRhdGUtcGlja2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULHVCQUF1QixFQUN2QixLQUFLLEVBQ0wsaUJBQWlCLEVBQUUsU0FBUyxFQUE0QixNQUFNLEVBQUUsWUFBWSxFQUM3RSxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekUsT0FBTyxFQUFFLHVCQUF1QixFQUFrRCxNQUFNLHlCQUF5QixDQUFDO0FBRWxILE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHVFQUF1RSxDQUFDO0FBQzFILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7QUFFakMsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDOztBQVl0QixNQUFNLE9BQU8scUJBQXFCO0lBc0RoQyxZQUNVLEdBQXNCLEVBQ3RCLFlBQThCLEVBQzlCLGlCQUFzQztRQUZ0QyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBa0I7UUFDOUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFxQjtRQXhEeEMsZUFBVSxHQUFHLElBQUksT0FBTyxFQUFT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S0FBSyxFQUFFLENBQUM7SUFDbEQsQ0FBQztJQUVELGdCQUFnQixDQUFDLFVBQWtCLEVBQUUsTUFBYyxFQUFFLE9BQWdCO1FBQ25FLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUEsQ0FBQyxDQUFDLE1BQU0sQ0FBQSxDQUFDLENBQUMsQ0FBRSxNQUFNLENBQUMsQ0FBQztRQUMzRixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM3QixDQUFDOzs7WUExS0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxnQkFBZ0I7Z0JBQzFCLHMvREFBOEM7Z0JBRTlDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2dCQUMvQyxTQUFTLEVBQUU7b0JBQ1QsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7aUJBQ2hGOzthQUVGOzs7WUF6QkMsaUJBQWlCO1lBT1YsV0FBVztZQUNYLG1CQUFtQjs7O3NCQXFCekIsS0FBSzs2QkFFTCxNQUFNO3FCQUNOLEtBQUs7aUNBU0wsS0FBSzs4QkFDTCxLQUFLOzBCQUNMLEtBQUs7a0JBQ0wsS0FBSztrQkFDTCxLQUFLO2lCQUNMLFNBQVMsU0FBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgSW5wdXQsXG4gIENoYW5nZURldGVjdG9yUmVmLCBWaWV3Q2hpbGQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT3V0cHV0LCBFdmVudEVtaXR0ZXJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXREYXRlcGlja2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBNQVRfREVGQVVMVF9EQVRFX0ZPUk1BVCwgTU9OVEhfWUVBUl9GT1JNQVQsIFFVQVJURVJfRk9STUFULCBZRUFSX0ZPUk1BVCB9IGZyb20gJy4uLy4uL21vZGVscy9kYXRlUGlja2VyJztcbmltcG9ydCB7IE1vbWVudCB9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBEckRhdGVQaWNrZXJDdXN0b21IZWFkZXJDb21wb25lbnQgfSBmcm9tICcuL2RyLWRhdGUtcGlja2VyX2N1c3RvbS1oZWFkZXIvZHItZGF0ZS1waWNrZXJfY3VzdG9tLWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0ZUFkYXB0ZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IERyRGF0ZVBpY2tlclNlcnZpY2UgfSBmcm9tICcuL2RyLWRhdGUtcGlja2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5jb25zdCBtb21lbnQgPSByZXF1aXJlKCdtb21lbnQnKTtcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkci1kYXRlLXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kci1kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RyLWRhdGUtcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICB7IHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogRHJEYXRlUGlja2VyQ29tcG9uZW50LCBtdWx0aTogdHJ1ZSB9XG4gIF0sXG5cbn0pXG5leHBvcnQgY2xhc3MgRHJEYXRlUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgX2Rlc3Ryb3llZCA9IG5ldyBTdWJqZWN0PHZvaWQ+ICgpO1xuICByZWFkb25seSA9IHRydWU7XG4gIEBJbnB1dCgpIF9mb3JtYXQgPSBNQVRfREVGQVVMVF9EQVRFX0ZPUk1BVDtcbiAgY3VzdG9tSGVhZGVyID0gRHJEYXRlUGlja2VyQ3VzdG9tSGVhZGVyQ29tcG9uZW50O1xuICBAT3V0cHV0KCkgb25DaGFuZ2VGb3JtYXQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4gKCk7XG4gIEBJbnB1dCgpIHNldCBmb3JtYXQodmFsdWUpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHZhbHVlID0gdGhpcy5ub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG4gICAgICB0aGlzLl9mb3JtYXQgPSB2YWx1ZTtcbiAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuZm9ybWF0Lm5leHQodmFsdWUpO1xuICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5zZXRUaW1lZnJhbWUodmFsdWUpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpIHRpbWVmcmFtZVNlbGVjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSB0YWtlRW5kT2ZQZXJpb2Q6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICdTZWxlY3QnO1xuICBASW5wdXQoKSBtaW46IERhdGUgPSBudWxsO1xuICBASW5wdXQoKSBtYXg6IERhdGUgPSBudWxsO1xuICBAVmlld0NoaWxkKCdkYXRlUGlja2VyJykgcHVibGljIGRwO1xuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmNhbGVuZGFySW5zdGFuY2UgPSB0aGlzLmRwO1xuICAgIGlmICh0aGlzLl9mb3JtYXQgPT09IE1BVF9ERUZBVUxUX0RBVEVfRk9STUFUKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgY29uc3QgcG9wdXBJbnN0YW5jZSA9IHRoaXMuZHAuX3BvcHVwQ29tcG9uZW50UmVmLmluc3RhbmNlO1xuICAgICAgIGNvbnN0IGNhbGVuZGVySW5zdGFuY2UgPSBwb3B1cEluc3RhbmNlLl9jYWxlbmRhci5fY2FsZW5kYXJIZWFkZXJQb3J0YWwuX2F0dGFjaGVkSG9zdC5fYXR0YWNoZWRSZWYuaW5zdGFuY2U7XG4gICAgICAgY2FsZW5kZXJJbnN0YW5jZS5jdXJyZW50UGVyaW9kQ2xpY2tlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGlzLmNhbGVuZGFyVmlld1NldHVwW3RoaXMuZGF0ZVBpY2tlclNlcnZpY2UudGltZWZyYW1lXSAmJiB0aGlzLmNhbGVuZGFyVmlld1NldHVwW3RoaXMuZGF0ZVBpY2tlclNlcnZpY2UudGltZWZyYW1lXSh0aGlzLmNhbGVuZGFyKTtcbiAgICAgICAgfTtcbiAgICAgIH0sIDEwMDApO1xuICB9XG5cbiAgY2FsZW5kYXJWaWV3U2V0dXAgPSB7XG4gICAgJ3llYXInOiAoY2FsZW5kYXIpID0+IGNhbGVuZGFyLmN1cnJlbnRWaWV3ID0gJ211bHRpLXllYXInLFxuICAgICdtb250aCc6IChjYWxlbmRhcikgPT4gY2FsZW5kYXIuY3VycmVudFZpZXcgPSAneWVhcicsXG4gICAgJ3F1YXJ0ZXInOiAoY2FsZW5kYXIpID0+IGNhbGVuZGFyLmN1cnJlbnRWaWV3ID0gJ25vbmUnLFxuICAgICdkYXknOiAoY2FsZW5kYXIpID0+IGNhbGVuZGFyLmN1cnJlbnRWaWV3ID0gJ21vbnRoJ1xuICB9XG5cbiAgcGFnaW5nU2V0dXAgPSB7XG4gICAgJ3llYXInOiAoZm9yd2FyZCkgPT4gIHRoaXMucGFnaW5nRGF0ZUNoYW5nZSgnYWRkQ2FsZW5kYXJZZWFycycsIDEsIGZvcndhcmQpLFxuICAgICdxdWFydGVyJzogKGZvcndhcmQpID0+ICB0aGlzLnBhZ2luZ0RhdGVDaGFuZ2UoJ2FkZENhbGVuZGFyTW9udGhzJywgMywgZm9yd2FyZCksXG4gICAgJ21vbnRoJzogKGZvcndhcmQpID0+ICB0aGlzLnBhZ2luZ0RhdGVDaGFuZ2UoJ2FkZENhbGVuZGFyTW9udGhzJywgMSwgZm9yd2FyZCksXG4gICAgJ2RheSc6IChmb3J3YXJkKSA9PiAgdGhpcy5wYWdpbmdEYXRlQ2hhbmdlKCdhZGRDYWxlbmRhckRheXMnLCAxLCBmb3J3YXJkKVxuICB9XG5cbiAgcHJpdmF0ZSBpbm5lclZhbHVlOiBhbnkgPSBudWxsO1xuICBwcml2YXRlIG9uVG91Y2hlZENhbGxiYWNrOiAoKSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBvbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gbm9vcDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBfZGF0ZUFkYXB0ZXI6IERhdGVBZGFwdGVyPGFueT4sXG4gICAgcHJpdmF0ZSBkYXRlUGlja2VyU2VydmljZTogRHJEYXRlUGlja2VyU2VydmljZVxuICApIHsgXG4gICAgZGF0ZVBpY2tlclNlcnZpY2UuZm9ybWF0XG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKVxuICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIHRoaXMuX2Zvcm1hdCA9IHZhbHVlO1xuICAgICAgICAgIHRoaXMub25DaGFuZ2VGb3JtYXQuZW1pdCh0aGlzLm5vcm1hbGl6ZVZhbHVlKHZhbHVlKSk7XG4gICAgICAgICAgY2RyLm1hcmtGb3JDaGVjaygpXG4gICAgICAgIH0pO1xuXG4gICAgZGF0ZVBpY2tlclNlcnZpY2UudXBkYXRlZFF1YXRlclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKSlcbiAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMudHJ5VG9Ob3JtYWxhaXplVGltZWZyYW1lKHZhbHVlLCAncXVhcnRlcicpXG4gICAgICAgICAgICB0aGlzLndyaXRlVmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKHZhbHVlKTtcbiAgICAgICAgfSk7XG4gIH1cblxuICB0cnlUb05vcm1hbGFpemVUaW1lZnJhbWUobm9ybWFsaXplZFJlZjogTW9tZW50LCB0aW1lZnJhbWU6IG1vbWVudC51bml0T2ZUaW1lLlN0YXJ0T2YpIHtcbiAgICBpZiAodGhpcy50YWtlRW5kT2ZQZXJpb2QpIHtcbiAgICAgICAgbm9ybWFsaXplZFJlZi5lbmRPZih0aW1lZnJhbWUpO1xuICAgIH1cbiAgICBub3JtYWxpemVkUmVmLnNldCgnaG91cicsIDEyKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5pbm5lclZhbHVlO1xuICB9XG5cbiAgcHVibGljIHNldCB2YWx1ZSh2OiBudW1iZXIpIHtcbiAgICBpZiAodiAhPT0gdGhpcy5pbm5lclZhbHVlKSB7XG4gICAgICAgIHRoaXMuaW5uZXJWYWx1ZSA9IHY7XG4gICAgICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayh2KTtcbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUgIT09IHRoaXMuaW5uZXJWYWx1ZSkge1xuICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhpcy5pbm5lclZhbHVlID0gbW9tZW50LnVuaXgodmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pbm5lclZhbHVlID0gdmFsdWU7XG4gICAgICB9XG4gICAgICB0aGlzLnRyeVRvTm9ybWFsYWl6ZVRpbWVmcmFtZSh0aGlzLmlubmVyVmFsdWUsIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UudGltZWZyYW1lKVxuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHF1YXJ0ZXJEaXNwbGF5KCkge1xuICAgIHJldHVybiB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmdldFF1YXJ0ZXJEaXNwbGF5KHRoaXMudmFsdWUsIHRoaXMuX2Zvcm1hdCk7XG4gIH1cblxuICBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZS5pbmNsdWRlcygnZCcpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL2QvZywgJ0QnKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLmluY2x1ZGVzKCdEJykpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvRC9nLCAnZCcpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBjaG9zZW5Nb250aEhhbmRsZXIobm9ybWFsaXplZE1vbnRoOiBNb21lbnQsIGRhdGVwaWNrZXI6IE1hdERhdGVwaWNrZXI8YW55Pikge1xuICAgIGlmICh0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnRpbWVmcmFtZSA9PT0gJ21vbnRoJykge1xuICAgICAgICB0aGlzLnRyeVRvTm9ybWFsYWl6ZVRpbWVmcmFtZShub3JtYWxpemVkTW9udGgsICdtb250aCcpO1xuICAgICAgICB0aGlzLndyaXRlVmFsdWUobm9ybWFsaXplZE1vbnRoKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKG5vcm1hbGl6ZWRNb250aCk7XG4gICAgICAgIGRhdGVwaWNrZXIuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBjaG9zZW5ZZWFySGFuZGxlcihub3JtYWxpemVkWWVhcjogTW9tZW50LCBkYXRlcGlja2VyOiBNYXREYXRlcGlja2VyPGFueT4pIHtcbiAgICBpZiAodGhpcy5kYXRlUGlja2VyU2VydmljZS50aW1lZnJhbWUgPT09ICd5ZWFyJykge1xuICAgICAgICB0aGlzLnRyeVRvTm9ybWFsYWl6ZVRpbWVmcmFtZShub3JtYWxpemVkWWVhciwgJ3llYXInKTtcbiAgICAgICAgdGhpcy53cml0ZVZhbHVlKG5vcm1hbGl6ZWRZZWFyKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKG5vcm1hbGl6ZWRZZWFyKTtcbiAgICAgICAgZGF0ZXBpY2tlci5jbG9zZSgpO1xuICAgIH1cbiAgfVxuICBcbiAgcGFnaW5nQ2xpY2tlZChmb3J3YXJkKSB7XG4gICAgdGhpcy5wYWdpbmdTZXR1cFt0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnRpbWVmcmFtZV0gJiYgdGhpcy5wYWdpbmdTZXR1cFt0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnRpbWVmcmFtZV0oZm9yd2FyZCk7XG4gICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5jYWxlbmRhckluc3RhbmNlLmNsb3NlKCk7XG4gIH1cblxuICBwYWdpbmdEYXRlQ2hhbmdlKGFjdGlvbkNhbGw6IHN0cmluZywgYW1vdW50OiBudW1iZXIsIGZvcndhcmQ6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuX2RhdGVBZGFwdGVyW2FjdGlvbkNhbGxdKHRoaXMuaW5uZXJWYWx1ZSwgZm9yd2FyZD8gYW1vdW50OiAtIGFtb3VudCk7XG4gICAgdGhpcy53cml0ZVZhbHVlKG5ld1ZhbHVlKTtcbiAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sobmV3VmFsdWUpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fZGVzdHJveWVkLm5leHQoKTtcbiAgICB0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKTtcbiAgfVxufVxuIl19
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { Injectable } from "@angular/core";
|
|
2
|
-
import { Subject, BehaviorSubject } from "rxjs";
|
|
3
|
-
import { MAT_DEFAULT_DATE_FORMAT } from "../../models/datePicker";
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
const moment = require('moment');
|
|
6
|
-
export class DrDatePickerService {
|
|
7
|
-
constructor() {
|
|
8
|
-
this.timeframe = 'day';
|
|
9
|
-
this.format = new BehaviorSubject(MAT_DEFAULT_DATE_FORMAT);
|
|
10
|
-
this.updatedQuater = new Subject();
|
|
11
|
-
}
|
|
12
|
-
getQuarterDisplay(value, format) {
|
|
13
|
-
return 'Q' + moment(value).quarter() + format.charAt(1) + moment(value).year();
|
|
14
|
-
}
|
|
15
|
-
setTimeframe(format) {
|
|
16
|
-
const lowerCaseFormat = format.toLowerCase();
|
|
17
|
-
switch (true) {
|
|
18
|
-
case lowerCaseFormat.includes('q'):
|
|
19
|
-
this.timeframe = 'quarter';
|
|
20
|
-
break;
|
|
21
|
-
case lowerCaseFormat.includes('d'):
|
|
22
|
-
this.timeframe = 'day';
|
|
23
|
-
break;
|
|
24
|
-
case lowerCaseFormat.includes('m'):
|
|
25
|
-
this.timeframe = 'month';
|
|
26
|
-
break;
|
|
27
|
-
case lowerCaseFormat.includes('y'):
|
|
28
|
-
this.timeframe = 'year';
|
|
29
|
-
break;
|
|
30
|
-
default:
|
|
31
|
-
this.timeframe = 'day';
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
DrDatePickerService.ɵprov = i0.ɵɵdefineInjectable({ factory: function DrDatePickerService_Factory() { return new DrDatePickerService(); }, token: DrDatePickerService, providedIn: "root" });
|
|
36
|
-
DrDatePickerService.decorators = [
|
|
37
|
-
{ type: Injectable, args: [{
|
|
38
|
-
providedIn: 'root',
|
|
39
|
-
},] }
|
|
40
|
-
];
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHItZGF0ZS1waWNrZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGFyYWlsc3NoYXJlZC9zcmMvbGliL2RyLWlucHV0cy9kci1kYXRlLXBpY2tlci9kci1kYXRlLXBpY2tlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBRWxFLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQU9qQyxNQUFNLE9BQU8sbUJBQW1CO0lBSGhDO1FBSUksY0FBUyxHQUFvQixLQUFLLENBQUM7UUFDbkMsV0FBTSxHQUFHLElBQUksZUFBZSxDQUFTLHVCQUF1QixDQUFDLENBQUM7UUFDOUQsa0JBQWEsR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO0tBMEJ6QztJQXZCRyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsTUFBTTtRQUMzQixPQUFPLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbkYsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFNO1FBQ2YsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzdDLFFBQVEsSUFBSSxFQUFFO1lBQ1YsS0FBSyxlQUFlLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7Z0JBQzNCLE1BQU07WUFDVixLQUFLLGVBQWUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO2dCQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztnQkFDdkIsTUFBTTtZQUNWLEtBQUssZUFBZSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDO2dCQUN6QixNQUFNO1lBQ1YsS0FBSyxlQUFlLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7Z0JBQ3hCLE1BQU07WUFDVjtnQkFDSSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztTQUM5QjtJQUNMLENBQUM7Ozs7WUEvQkosVUFBVSxTQUFDO2dCQUNSLFVBQVUsRUFBRSxNQUFNO2FBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBNYXREYXRlcGlja2VyIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXJcIjtcbmltcG9ydCB7IE1vbWVudCB9IGZyb20gXCJtb21lbnRcIjtcbmltcG9ydCB7IFN1YmplY3QsIEJlaGF2aW9yU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBNQVRfREVGQVVMVF9EQVRFX0ZPUk1BVCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvZGF0ZVBpY2tlclwiO1xuXG5jb25zdCBtb21lbnQgPSByZXF1aXJlKCdtb21lbnQnKTtcblxuZXhwb3J0IHR5cGUgVGltZWZyYW1lT3B0aW9uID0gJ2RheScgfCAncXVhcnRlcicgfCAnbW9udGgnIHwgJ3llYXInO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBEckRhdGVQaWNrZXJTZXJ2aWNlIHtcbiAgICB0aW1lZnJhbWU6IFRpbWVmcmFtZU9wdGlvbiA9ICdkYXknO1xuICAgIGZvcm1hdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihNQVRfREVGQVVMVF9EQVRFX0ZPUk1BVCk7ICBcbiAgICB1cGRhdGVkUXVhdGVyID0gbmV3IFN1YmplY3Q8TW9tZW50PigpOyBcbiAgICBjYWxlbmRhckluc3RhbmNlOiBNYXREYXRlcGlja2VyPGFueT47XG5cbiAgICBnZXRRdWFydGVyRGlzcGxheSh2YWx1ZSwgZm9ybWF0KXtcbiAgICAgICAgcmV0dXJuICdRJyArIG1vbWVudCh2YWx1ZSkucXVhcnRlcigpICsgZm9ybWF0LmNoYXJBdCgxKSArIG1vbWVudCh2YWx1ZSkueWVhcigpO1xuICAgIH1cbiAgICBcbiAgICBzZXRUaW1lZnJhbWUoZm9ybWF0KSB7XG4gICAgICAgIGNvbnN0IGxvd2VyQ2FzZUZvcm1hdCA9IGZvcm1hdC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBzd2l0Y2ggKHRydWUpIHtcbiAgICAgICAgICAgIGNhc2UgbG93ZXJDYXNlRm9ybWF0LmluY2x1ZGVzKCdxJyk6XG4gICAgICAgICAgICAgICAgdGhpcy50aW1lZnJhbWUgPSAncXVhcnRlcic7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIGxvd2VyQ2FzZUZvcm1hdC5pbmNsdWRlcygnZCcpOlxuICAgICAgICAgICAgICAgIHRoaXMudGltZWZyYW1lID0gJ2RheSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIGxvd2VyQ2FzZUZvcm1hdC5pbmNsdWRlcygnbScpOlxuICAgICAgICAgICAgICAgIHRoaXMudGltZWZyYW1lID0gJ21vbnRoJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgbG93ZXJDYXNlRm9ybWF0LmluY2x1ZGVzKCd5Jyk6XG4gICAgICAgICAgICAgICAgdGhpcy50aW1lZnJhbWUgPSAneWVhcic7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRoaXMudGltZWZyYW1lID0gJ2RheSc7XG4gICAgICAgIH1cbiAgICB9XG59Il19
|