@datarailsshared/datarailsshared 1.2.0 → 1.3.0

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.
Files changed (82) hide show
  1. package/bundles/datarailsshared-datarailsshared.umd.js +1260 -0
  2. package/bundles/datarailsshared-datarailsshared.umd.js.map +1 -0
  3. package/datarailsshared-datarailsshared-1.3.0.tgz +0 -0
  4. package/datarailsshared-datarailsshared.d.ts +5 -0
  5. package/datarailsshared-datarailsshared.metadata.json +1 -0
  6. package/esm2015/datarailsshared-datarailsshared.js +6 -0
  7. package/esm2015/lib/DateTags/dateTag.component.js +70 -0
  8. package/esm2015/lib/DateTags/dateTag.module.js +50 -0
  9. package/esm2015/lib/DateTags/dayTag/dayTag.component.js +79 -0
  10. package/esm2015/lib/DateTags/forecastTag/forecastTag.component.js +143 -0
  11. package/esm2015/lib/DateTags/monthTag/monthTag.component.js +86 -0
  12. package/esm2015/lib/DateTags/quarterTag/quarterTag.component.js +101 -0
  13. package/esm2015/lib/DateTags/weekTag/weekTag.component.js +124 -0
  14. package/esm2015/lib/DateTags/yearTag/yearTag.component.js +92 -0
  15. package/esm2015/lib/DrTags/drTag.component.js +54 -0
  16. package/esm2015/lib/DrTags/drTag.module.js +22 -0
  17. package/esm2015/lib/ListTags/listTag.component.js +41 -0
  18. package/esm2015/lib/ListTags/listTag.module.js +29 -0
  19. package/esm2015/lib/models/serverTags.js +2 -0
  20. package/esm2015/public-api.js +16 -0
  21. package/fesm2015/datarailsshared-datarailsshared.js +849 -0
  22. package/fesm2015/datarailsshared-datarailsshared.js.map +1 -0
  23. package/{DateTags → lib/DateTags}/dateTag.component.d.ts +1 -0
  24. package/lib/DateTags/dateTag.module.d.ts +4 -0
  25. package/{DateTags → lib/DateTags}/dayTag/dayTag.component.d.ts +5 -0
  26. package/{DateTags → lib/DateTags}/forecastTag/forecastTag.component.d.ts +5 -1
  27. package/lib/DateTags/monthTag/monthTag.component.d.ts +14 -0
  28. package/{DateTags → lib/DateTags}/quarterTag/quarterTag.component.d.ts +5 -3
  29. package/{DateTags → lib/DateTags}/weekTag/weekTag.component.d.ts +10 -6
  30. package/lib/DateTags/yearTag/yearTag.component.d.ts +14 -0
  31. package/{DrTags → lib/DrTags}/drTag.component.d.ts +1 -0
  32. package/{DrTags → lib/DrTags}/drTag.module.d.ts +0 -0
  33. package/{ListTags → lib/ListTags}/listTag.component.d.ts +2 -1
  34. package/{ListTags → lib/ListTags}/listTag.module.d.ts +0 -0
  35. package/{models → lib/models}/serverTags.d.ts +3 -0
  36. package/package.json +19 -21
  37. package/public-api.d.ts +13 -0
  38. package/DateTags/dateTag.module.d.ts +0 -2
  39. package/DateTags/monthTag/monthTag.component.d.ts +0 -7
  40. package/DateTags/yearTag/yearTag.component.d.ts +0 -7
  41. package/bundles/ng-datarails.umd.js +0 -1135
  42. package/bundles/ng-datarails.umd.js.map +0 -1
  43. package/bundles/ng-datarails.umd.min.js +0 -2
  44. package/bundles/ng-datarails.umd.min.js.map +0 -1
  45. package/datarailsshared-datarailsshared-1.2.0.tgz +0 -0
  46. package/esm2015/DateTags/dateTag.component.js +0 -115
  47. package/esm2015/DateTags/dateTag.module.js +0 -54
  48. package/esm2015/DateTags/dayTag/dayTag.component.js +0 -57
  49. package/esm2015/DateTags/forecastTag/forecastTag.component.js +0 -168
  50. package/esm2015/DateTags/monthTag/monthTag.component.js +0 -57
  51. package/esm2015/DateTags/quarterTag/quarterTag.component.js +0 -119
  52. package/esm2015/DateTags/weekTag/weekTag.component.js +0 -130
  53. package/esm2015/DateTags/yearTag/yearTag.component.js +0 -59
  54. package/esm2015/DrTags/drTag.component.js +0 -83
  55. package/esm2015/DrTags/drTag.module.js +0 -31
  56. package/esm2015/ListTags/listTag.component.js +0 -68
  57. package/esm2015/ListTags/listTag.module.js +0 -36
  58. package/esm2015/index.js +0 -9
  59. package/esm2015/models/serverTags.js +0 -62
  60. package/esm2015/ng-datarails.js +0 -19
  61. package/esm5/DateTags/dateTag.component.js +0 -141
  62. package/esm5/DateTags/dateTag.module.js +0 -58
  63. package/esm5/DateTags/dayTag/dayTag.component.js +0 -71
  64. package/esm5/DateTags/forecastTag/forecastTag.component.js +0 -207
  65. package/esm5/DateTags/monthTag/monthTag.component.js +0 -71
  66. package/esm5/DateTags/quarterTag/quarterTag.component.js +0 -160
  67. package/esm5/DateTags/weekTag/weekTag.component.js +0 -172
  68. package/esm5/DateTags/yearTag/yearTag.component.js +0 -73
  69. package/esm5/DrTags/drTag.component.js +0 -96
  70. package/esm5/DrTags/drTag.module.js +0 -35
  71. package/esm5/ListTags/listTag.component.js +0 -81
  72. package/esm5/ListTags/listTag.module.js +0 -40
  73. package/esm5/index.js +0 -9
  74. package/esm5/models/serverTags.js +0 -62
  75. package/esm5/ng-datarails.js +0 -19
  76. package/fesm2015/ng-datarails.js +0 -864
  77. package/fesm2015/ng-datarails.js.map +0 -1
  78. package/fesm5/ng-datarails.js +0 -1074
  79. package/fesm5/ng-datarails.js.map +0 -1
  80. package/index.d.ts +0 -4
  81. package/ng-datarails.d.ts +0 -13
  82. package/ng-datarails.metadata.json +0 -1
@@ -0,0 +1,86 @@
1
+ import { Component, Input } from "@angular/core";
2
+ import { AnyTagComponent } from "../dateTag.component";
3
+ import { FormControl } from "@angular/forms";
4
+ import { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE } from "@angular/material/core";
5
+ import { MAT_MOMENT_DATE_ADAPTER_OPTIONS, MomentDateAdapter } from "@angular/material-moment-adapter";
6
+ // @ts-ignore
7
+ const moment = require("moment");
8
+ const MONTH_FORMATS = {
9
+ parse: {
10
+ dateInput: "DD-MM-YYYY",
11
+ },
12
+ display: {
13
+ dateInput: "MMMM YYYY",
14
+ monthYearLabel: "MMMM YYYY",
15
+ dateA11yLabel: "LL",
16
+ monthYearA11yLabel: "MMMM YYYY"
17
+ },
18
+ };
19
+ const ɵ0 = MONTH_FORMATS;
20
+ export class MonthTagComponent extends AnyTagComponent {
21
+ constructor() {
22
+ super();
23
+ this.lockedDate = [];
24
+ this.date = new FormControl(moment());
25
+ this.dateFilter = (date) => {
26
+ const calendarDate = moment(date);
27
+ let status = true;
28
+ this.lockedDate.forEach(timestamp => {
29
+ const lockDate = moment.unix(timestamp);
30
+ return status = !(lockDate.year() === calendarDate.year() && lockDate.month() === calendarDate.month());
31
+ });
32
+ return status;
33
+ };
34
+ }
35
+ initDate() {
36
+ if (this.defaultValue) {
37
+ this.dateObj.date = moment(new Date(this.defaultValue * 1000)).utc().format("YYYY-MM");
38
+ }
39
+ else {
40
+ this.dateObj.date = moment(new Date()).format("YYYY-MM");
41
+ }
42
+ }
43
+ initName() {
44
+ if (!this.name) {
45
+ this.name = "Month and Year";
46
+ }
47
+ }
48
+ chosenTagHandler(value) {
49
+ const resultDate = moment.utc(value);
50
+ resultDate.hour(12);
51
+ const resultTag = {
52
+ name: this.name,
53
+ value: parseInt(resultDate.format("X"), 10),
54
+ label: resultDate.format("MMMM YYYY"),
55
+ locked: !this.dateFilter(value)
56
+ };
57
+ console.log(resultTag, value);
58
+ this.dateChange.emit(resultTag);
59
+ }
60
+ chosenMonthHandler(normalizedMonth, datepicker) {
61
+ this.date.setValue(normalizedMonth);
62
+ this.dateObj.date = this.date.value;
63
+ this.chosenTagHandler(this.date.value);
64
+ datepicker.close();
65
+ }
66
+ }
67
+ MonthTagComponent.decorators = [
68
+ { type: Component, args: [{
69
+ template: "<div>\n <mat-form-field class=\"date-select-box\">\n <input\n matInput\n placeholder=\"{{name}}\"\n name=\"Month\"\n [formControl]=\"date\"\n [matDatepickerFilter]=\"dateFilter\"\n [matDatepicker]=\"datepicker\">\n <mat-datepicker-toggle matSuffix [for]=\"datepicker\"></mat-datepicker-toggle>\n <mat-datepicker\n #datepicker\n startView=\"year\"\n (monthSelected)=\"chosenMonthHandler($event, datepicker)\"\n ></mat-datepicker>\n </mat-form-field>\n</div>\n",
70
+ selector: "month-tag",
71
+ providers: [
72
+ {
73
+ provide: DateAdapter,
74
+ useClass: MomentDateAdapter,
75
+ deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS],
76
+ },
77
+ { provide: MAT_DATE_FORMATS, useValue: ɵ0 },
78
+ ]
79
+ },] }
80
+ ];
81
+ MonthTagComponent.ctorParameters = () => [];
82
+ MonthTagComponent.propDecorators = {
83
+ lockedDate: [{ type: Input }]
84
+ };
85
+ export { ɵ0 };
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9udGhUYWcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YXJhaWxzc2hhcmVkL3NyYy9saWIvRGF0ZVRhZ3MvbW9udGhUYWcvbW9udGhUYWcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0IsU0FBUyxFQUFnQixLQUFLLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBR2hHLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUVyRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RixPQUFPLEVBQUMsK0JBQStCLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRyxhQUFhO0FBQ2IsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBRWpDLE1BQU0sYUFBYSxHQUFHO0lBQ3BCLEtBQUssRUFBRTtRQUNMLFNBQVMsRUFBRSxZQUFZO0tBQ3hCO0lBQ0QsT0FBTyxFQUFFO1FBQ1AsU0FBUyxFQUFFLFdBQVc7UUFDdEIsY0FBYyxFQUFFLFdBQVc7UUFDM0IsYUFBYSxFQUFFLElBQUk7UUFDbkIsa0JBQWtCLEVBQUUsV0FBVztLQUNoQztDQUNGLENBQUM7V0FXMEMsYUFBYTtBQUl6RCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsZUFBZTtJQUtsRDtRQUNJLEtBQUssRUFBRSxDQUFDO1FBTEgsZUFBVSxHQUFVLEVBQUUsQ0FBQztRQUVoQyxTQUFJLEdBQUcsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQTBDakMsZUFBVSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDcEIsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztZQUVsQixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDbEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFFeEMsT0FBTyxNQUFNLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxZQUFZLENBQUMsSUFBSSxFQUFFLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFLLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQzFHLENBQUMsQ0FBQyxDQUFDO1lBRUgsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQyxDQUFBO0lBakRELENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3hGO2FBQU07WUFDTCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUMxRDtJQUNILENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDZCxJQUFJLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDO1NBQzlCO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQUs7UUFDbEIsTUFBTSxVQUFVLEdBQVcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BCLE1BQU0sU0FBUyxHQUFhO1lBQ3hCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLEtBQUssRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDM0MsS0FBSyxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1lBQ3JDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO1NBQ2xDLENBQUM7UUFDRixPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsZUFBdUIsRUFBRSxVQUFpQztRQUN6RSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUVwQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV2QyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdkIsQ0FBQzs7O1lBeERKLFNBQVMsU0FBQztnQkFDUCwybEJBQXNDO2dCQUN0QyxRQUFRLEVBQUUsV0FBVztnQkFDckIsU0FBUyxFQUFFO29CQUNUO3dCQUNFLE9BQU8sRUFBRSxXQUFXO3dCQUNwQixRQUFRLEVBQUUsaUJBQWlCO3dCQUMzQixJQUFJLEVBQUUsQ0FBQyxlQUFlLEVBQUUsK0JBQStCLENBQUM7cUJBQ3pEO29CQUNELEVBQUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsSUFBZSxFQUFDO2lCQUNyRDthQUNKOzs7O3lCQUdJLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtNb21lbnR9IGZyb20gXCJtb21lbnRcIjtcbmltcG9ydCB7SURhdGVUYWd9IGZyb20gXCIuLi8uLi9tb2RlbHMvc2VydmVyVGFnc1wiO1xuaW1wb3J0IHtBbnlUYWdDb21wb25lbnR9IGZyb20gXCIuLi9kYXRlVGFnLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtNYXREYXRlcGlja2VyfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlclwiO1xuaW1wb3J0IHtGb3JtQ29udHJvbH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQge0RhdGVBZGFwdGVyLCBNQVRfREFURV9GT1JNQVRTLCBNQVRfREFURV9MT0NBTEV9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9jb3JlXCI7XG5pbXBvcnQge01BVF9NT01FTlRfREFURV9BREFQVEVSX09QVElPTlMsIE1vbWVudERhdGVBZGFwdGVyfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwtbW9tZW50LWFkYXB0ZXJcIjtcbi8vIEB0cy1pZ25vcmVcbmNvbnN0IG1vbWVudCA9IHJlcXVpcmUoXCJtb21lbnRcIik7XG5cbmNvbnN0IE1PTlRIX0ZPUk1BVFMgPSB7XG4gIHBhcnNlOiB7XG4gICAgZGF0ZUlucHV0OiBcIkRELU1NLVlZWVlcIixcbiAgfSxcbiAgZGlzcGxheToge1xuICAgIGRhdGVJbnB1dDogXCJNTU1NIFlZWVlcIixcbiAgICBtb250aFllYXJMYWJlbDogXCJNTU1NIFlZWVlcIixcbiAgICBkYXRlQTExeUxhYmVsOiBcIkxMXCIsXG4gICAgbW9udGhZZWFyQTExeUxhYmVsOiBcIk1NTU0gWVlZWVwiXG4gIH0sXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgICB0ZW1wbGF0ZVVybDogXCJtb250aFRhZy5jb21wb25lbnQuaHRtbFwiLFxuICAgIHNlbGVjdG9yOiBcIm1vbnRoLXRhZ1wiLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAge1xuICAgICAgICBwcm92aWRlOiBEYXRlQWRhcHRlcixcbiAgICAgICAgdXNlQ2xhc3M6IE1vbWVudERhdGVBZGFwdGVyLFxuICAgICAgICBkZXBzOiBbTUFUX0RBVEVfTE9DQUxFLCBNQVRfTU9NRU5UX0RBVEVfQURBUFRFUl9PUFRJT05TXSxcbiAgICAgIH0sXG4gICAgICB7cHJvdmlkZTogTUFUX0RBVEVfRk9STUFUUywgdXNlVmFsdWU6IE1PTlRIX0ZPUk1BVFN9LFxuICAgIF0sXG59KVxuXG5leHBvcnQgY2xhc3MgTW9udGhUYWdDb21wb25lbnQgZXh0ZW5kcyBBbnlUYWdDb21wb25lbnQge1xuICAgIEBJbnB1dCgpIGxvY2tlZERhdGU6IGFueVtdID0gW107XG5cbiAgICBkYXRlID0gbmV3IEZvcm1Db250cm9sKG1vbWVudCgpKTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIGluaXREYXRlKCkge1xuICAgICAgaWYgKHRoaXMuZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGF0ZU9iai5kYXRlID0gbW9tZW50KG5ldyBEYXRlKHRoaXMuZGVmYXVsdFZhbHVlICogMTAwMCkpLnV0YygpLmZvcm1hdChcIllZWVktTU1cIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRhdGVPYmouZGF0ZSA9IG1vbWVudChuZXcgRGF0ZSgpKS5mb3JtYXQoXCJZWVlZLU1NXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGluaXROYW1lKCkge1xuICAgICAgaWYgKCF0aGlzLm5hbWUpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJNb250aCBhbmQgWWVhclwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNob3NlblRhZ0hhbmRsZXIodmFsdWUpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0RGF0ZTogTW9tZW50ID0gbW9tZW50LnV0Yyh2YWx1ZSk7XG4gICAgICAgIHJlc3VsdERhdGUuaG91cigxMik7XG4gICAgICAgIGNvbnN0IHJlc3VsdFRhZzogSURhdGVUYWcgPSB7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICB2YWx1ZTogcGFyc2VJbnQocmVzdWx0RGF0ZS5mb3JtYXQoXCJYXCIpLCAxMCksXG4gICAgICAgICAgICBsYWJlbDogcmVzdWx0RGF0ZS5mb3JtYXQoXCJNTU1NIFlZWVlcIiksXG4gICAgICAgICAgICBsb2NrZWQ6ICF0aGlzLmRhdGVGaWx0ZXIodmFsdWUpXG4gICAgICAgIH07XG4gICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdFRhZywgdmFsdWUpO1xuICAgICAgICB0aGlzLmRhdGVDaGFuZ2UuZW1pdChyZXN1bHRUYWcpO1xuICAgIH1cblxuICAgIGNob3Nlbk1vbnRoSGFuZGxlcihub3JtYWxpemVkTW9udGg6IE1vbWVudCwgZGF0ZXBpY2tlcjogTWF0RGF0ZXBpY2tlcjxNb21lbnQ+KSB7XG4gICAgICAgIHRoaXMuZGF0ZS5zZXRWYWx1ZShub3JtYWxpemVkTW9udGgpO1xuICAgICAgICB0aGlzLmRhdGVPYmouZGF0ZSA9IHRoaXMuZGF0ZS52YWx1ZTtcblxuICAgICAgICB0aGlzLmNob3NlblRhZ0hhbmRsZXIodGhpcy5kYXRlLnZhbHVlKTtcblxuICAgICAgICBkYXRlcGlja2VyLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgZGF0ZUZpbHRlciA9IChkYXRlKSA9PiB7XG4gICAgICBjb25zdCBjYWxlbmRhckRhdGUgPSBtb21lbnQoZGF0ZSk7XG4gICAgICBsZXQgc3RhdHVzID0gdHJ1ZTtcblxuICAgICAgdGhpcy5sb2NrZWREYXRlLmZvckVhY2godGltZXN0YW1wID0+IHtcbiAgICAgICAgY29uc3QgbG9ja0RhdGUgPSBtb21lbnQudW5peCh0aW1lc3RhbXApO1xuXG4gICAgICAgIHJldHVybiBzdGF0dXMgPSAhKGxvY2tEYXRlLnllYXIoKSA9PT0gY2FsZW5kYXJEYXRlLnllYXIoKSAmJiBsb2NrRGF0ZS5tb250aCgpID09PSBjYWxlbmRhckRhdGUubW9udGgoKSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHN0YXR1cztcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,101 @@
1
+ import { Component, Input } from "@angular/core";
2
+ import { AnyTagComponent } from "../dateTag.component";
3
+ // @ts-ignore
4
+ const moment = require("moment");
5
+ export class QuarterTagComponent extends AnyTagComponent {
6
+ constructor() {
7
+ super();
8
+ this.lockedDate = [];
9
+ this.selectedValue = 0;
10
+ this.quarters = [];
11
+ this.dateFilter = (date) => {
12
+ let status = true;
13
+ this.lockedDate.forEach(timestamp => {
14
+ const lockDate = moment.unix(timestamp);
15
+ const quarterDate = moment.unix(date.value);
16
+ if (lockDate.year() === quarterDate.year() && lockDate.month() === quarterDate.month()) {
17
+ date.disable = true;
18
+ status = false;
19
+ }
20
+ });
21
+ return status;
22
+ };
23
+ }
24
+ ngOnInit() {
25
+ this.initName();
26
+ this.quarters = this.getQuarterOptions();
27
+ for (const quarter of this.quarters) {
28
+ quarter.disable = false;
29
+ if (quarter.isSelected) {
30
+ this.selectedValue = quarter.value;
31
+ this.chosenTagHandler(quarter.value);
32
+ }
33
+ this.dateFilter(quarter);
34
+ }
35
+ }
36
+ initName() {
37
+ if (!this.name) {
38
+ this.name = "Quarter";
39
+ }
40
+ }
41
+ changeSelectHandler(event) {
42
+ this.chosenTagHandler(event.value);
43
+ }
44
+ chosenTagHandler(value) {
45
+ const date = new Date(value * 1000);
46
+ const resultDate = moment.utc(date);
47
+ const resultTag = {
48
+ name: this.name,
49
+ value: parseInt(resultDate.format("X"), 10),
50
+ label: this.getQuarterLabel(resultDate.toString()),
51
+ locked: !this.dateFilter(value)
52
+ };
53
+ this.dateChange.emit(resultTag);
54
+ }
55
+ getQuarterOptions() {
56
+ const quartersBeforeToday = 8;
57
+ const quartersAfterToday = 8;
58
+ const dateNow = new Date();
59
+ const dateNowUnix = this.getUTCTimestamp(dateNow);
60
+ let defaultValue = dateNowUnix;
61
+ let tempDate = new Date();
62
+ if (this.defaultValue) {
63
+ defaultValue = this.defaultValue * 1000;
64
+ }
65
+ let afterDefault = Math.round(Math.abs(dateNowUnix - defaultValue) / 7776000000) + quartersAfterToday;
66
+ afterDefault = Math.min(afterDefault, 100);
67
+ let i, tempValue;
68
+ const to_return = [];
69
+ for (i = 0 - quartersBeforeToday; i <= afterDefault; i++) {
70
+ tempDate = new Date(defaultValue);
71
+ tempDate.setDate(15);
72
+ tempDate.setMonth(tempDate.getMonth() + 3 * i);
73
+ tempValue = this.getUTCTimestamp(tempDate);
74
+ to_return.push({
75
+ value: tempValue / 1000,
76
+ label: this.getQuarterLabel(tempValue),
77
+ isSelected: (i === 0),
78
+ });
79
+ }
80
+ return to_return;
81
+ }
82
+ getQuarterLabel(timeValue) {
83
+ const date = new Date(timeValue);
84
+ return "Q" + Math.floor((date.getMonth() / 3) + 1) + " " + date.getFullYear();
85
+ }
86
+ getUTCTimestamp(date) {
87
+ const month = Math.floor(date.getMonth() / 3) * 3;
88
+ return Date.UTC(date.getFullYear(), month, 1, 12, 0, 0, 0);
89
+ }
90
+ }
91
+ QuarterTagComponent.decorators = [
92
+ { type: Component, args: [{
93
+ template: "<div>\n <mat-form-field>\n <mat-select placeholder=\"{{name}}\" (selectionChange)=\"changeSelectHandler($event)\" [(value)]=\"selectedValue\">\n <mat-option *ngFor=\"let quarter of quarters\" [value]=\"quarter.value\" [disabled]=\"quarter.disable\">{{quarter.label}}</mat-option>\n </mat-select>\n </mat-form-field>\n</div>\n",
94
+ selector: "quarter-tag"
95
+ },] }
96
+ ];
97
+ QuarterTagComponent.ctorParameters = () => [];
98
+ QuarterTagComponent.propDecorators = {
99
+ lockedDate: [{ type: Input }]
100
+ };
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhcnRlclRhZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9EYXRlVGFncy9xdWFydGVyVGFnL3F1YXJ0ZXJUYWcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFTLE1BQU0sZUFBZSxDQUFDO0FBR3ZELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUVyRCxhQUFhO0FBQ2IsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBTWpDLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxlQUFlO0lBS3BEO1FBQ0ksS0FBSyxFQUFFLENBQUM7UUFMSCxlQUFVLEdBQVUsRUFBRSxDQUFDO1FBQ2hDLGtCQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLGFBQVEsR0FBVSxFQUFFLENBQUM7UUFtRnZCLGVBQVUsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3BCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztZQUVsQixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDbEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDeEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRTVDLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxRQUFRLENBQUMsS0FBSyxFQUFFLEtBQUssV0FBVyxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUN0RixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztvQkFDcEIsTUFBTSxHQUFHLEtBQUssQ0FBQztp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dXQsIE9uSW5pdH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7SURhdGVUYWd9IGZyb20gXCIuLi8uLi9tb2RlbHMvc2VydmVyVGFnc1wiO1xuaW1wb3J0IHtNb21lbnR9IGZyb20gXCJtb21lbnRcIjtcbmltcG9ydCB7QW55VGFnQ29tcG9uZW50fSBmcm9tIFwiLi4vZGF0ZVRhZy5jb21wb25lbnRcIjtcbmltcG9ydCB7TWF0U2VsZWN0Q2hhbmdlfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0XCI7XG4vLyBAdHMtaWdub3JlXG5jb25zdCBtb21lbnQgPSByZXF1aXJlKFwibW9tZW50XCIpO1xuXG5AQ29tcG9uZW50KHtcbiAgICB0ZW1wbGF0ZVVybDogXCJxdWFydGVyVGFnLmNvbXBvbmVudC5odG1sXCIsXG4gICAgc2VsZWN0b3I6IFwicXVhcnRlci10YWdcIixcbn0pXG5leHBvcnQgY2xhc3MgUXVhcnRlclRhZ0NvbXBvbmVudCBleHRlbmRzIEFueVRhZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQElucHV0KCkgbG9ja2VkRGF0ZTogYW55W10gPSBbXTtcbiAgICBzZWxlY3RlZFZhbHVlID0gMDtcbiAgICBxdWFydGVyczogYW55W10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgdGhpcy5pbml0TmFtZSgpO1xuICAgICAgdGhpcy5xdWFydGVycyA9IHRoaXMuZ2V0UXVhcnRlck9wdGlvbnMoKTtcblxuICAgICAgZm9yIChjb25zdCBxdWFydGVyIG9mIHRoaXMucXVhcnRlcnMpIHtcbiAgICAgICAgICBxdWFydGVyLmRpc2FibGUgPSBmYWxzZTtcblxuICAgICAgICAgIGlmIChxdWFydGVyLmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gcXVhcnRlci52YWx1ZTtcbiAgICAgICAgICAgICAgdGhpcy5jaG9zZW5UYWdIYW5kbGVyKHF1YXJ0ZXIudmFsdWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuZGF0ZUZpbHRlcihxdWFydGVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0TmFtZSgpIHtcbiAgICAgIGlmICghdGhpcy5uYW1lKSB7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiUXVhcnRlclwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNoYW5nZVNlbGVjdEhhbmRsZXIoZXZlbnQ6IE1hdFNlbGVjdENoYW5nZSkge1xuICAgICAgdGhpcy5jaG9zZW5UYWdIYW5kbGVyKGV2ZW50LnZhbHVlKTtcbiAgICB9XG5cbiAgICBjaG9zZW5UYWdIYW5kbGVyKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSAqIDEwMDApO1xuICAgICAgICBjb25zdCByZXN1bHREYXRlOiBNb21lbnQgPSBtb21lbnQudXRjKGRhdGUpO1xuICAgICAgICBjb25zdCByZXN1bHRUYWc6IElEYXRlVGFnID0ge1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgdmFsdWU6IHBhcnNlSW50KHJlc3VsdERhdGUuZm9ybWF0KFwiWFwiKSwgMTApLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMuZ2V0UXVhcnRlckxhYmVsKHJlc3VsdERhdGUudG9TdHJpbmcoKSksXG4gICAgICAgICAgICBsb2NrZWQ6ICF0aGlzLmRhdGVGaWx0ZXIodmFsdWUpXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZGF0ZUNoYW5nZS5lbWl0KHJlc3VsdFRhZyk7XG4gICAgfVxuXG4gICAgZ2V0UXVhcnRlck9wdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IHF1YXJ0ZXJzQmVmb3JlVG9kYXkgPSA4O1xuICAgICAgICBjb25zdCBxdWFydGVyc0FmdGVyVG9kYXkgPSA4O1xuICAgICAgICBjb25zdCBkYXRlTm93ID0gbmV3IERhdGUoKTtcbiAgICAgICAgY29uc3QgZGF0ZU5vd1VuaXggPSB0aGlzLmdldFVUQ1RpbWVzdGFtcChkYXRlTm93KTtcbiAgICAgICAgbGV0IGRlZmF1bHRWYWx1ZSA9IGRhdGVOb3dVbml4O1xuICAgICAgICBsZXQgdGVtcERhdGUgPSAgbmV3IERhdGUoKTtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgICAgZGVmYXVsdFZhbHVlID0gdGhpcy5kZWZhdWx0VmFsdWUgKiAxMDAwO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGFmdGVyRGVmYXVsdCA9IE1hdGgucm91bmQoTWF0aC5hYnMoZGF0ZU5vd1VuaXggLSBkZWZhdWx0VmFsdWUpIC8gNzc3NjAwMDAwMCkgKyBxdWFydGVyc0FmdGVyVG9kYXk7XG4gICAgICAgIGFmdGVyRGVmYXVsdCA9IE1hdGgubWluKGFmdGVyRGVmYXVsdCwgMTAwKTtcbiAgICAgICAgbGV0IGksIHRlbXBWYWx1ZTtcbiAgICAgICAgY29uc3QgdG9fcmV0dXJuOiBhbnlbXSA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwIC0gcXVhcnRlcnNCZWZvcmVUb2RheTsgaSA8PSBhZnRlckRlZmF1bHQ7IGkrKykge1xuICAgICAgICAgICAgdGVtcERhdGUgPSBuZXcgRGF0ZShkZWZhdWx0VmFsdWUpO1xuICAgICAgICAgICAgdGVtcERhdGUuc2V0RGF0ZSgxNSk7XG4gICAgICAgICAgICB0ZW1wRGF0ZS5zZXRNb250aCh0ZW1wRGF0ZS5nZXRNb250aCgpICsgMyAqIGkpO1xuICAgICAgICAgICAgdGVtcFZhbHVlID0gdGhpcy5nZXRVVENUaW1lc3RhbXAodGVtcERhdGUpO1xuICAgICAgICAgICAgdG9fcmV0dXJuLnB1c2goe1xuICAgICAgICAgICAgICAgIHZhbHVlOiB0ZW1wVmFsdWUgLyAxMDAwLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmdldFF1YXJ0ZXJMYWJlbCh0ZW1wVmFsdWUpLFxuICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IChpID09PSAwKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b19yZXR1cm47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRRdWFydGVyTGFiZWwodGltZVZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh0aW1lVmFsdWUpO1xuICAgICAgICByZXR1cm4gXCJRXCIgKyBNYXRoLmZsb29yKChkYXRlLmdldE1vbnRoKCkgLyAzKSArIDEpICsgXCIgXCIgKyBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRVVENUaW1lc3RhbXAoZGF0ZSkge1xuICAgICAgICBjb25zdCBtb250aCA9IE1hdGguZmxvb3IoZGF0ZS5nZXRNb250aCgpIC8gMykgKiAzO1xuICAgICAgICByZXR1cm4gRGF0ZS5VVEMoZGF0ZS5nZXRGdWxsWWVhcigpLCBtb250aCwgMSwgMTIsIDAsIDAsIDApO1xuICAgIH1cblxuICBkYXRlRmlsdGVyID0gKGRhdGUpID0+IHtcbiAgICBsZXQgc3RhdHVzID0gdHJ1ZTtcblxuICAgIHRoaXMubG9ja2VkRGF0ZS5mb3JFYWNoKHRpbWVzdGFtcCA9PiB7XG4gICAgICBjb25zdCBsb2NrRGF0ZSA9IG1vbWVudC51bml4KHRpbWVzdGFtcCk7XG4gICAgICBjb25zdCBxdWFydGVyRGF0ZSA9IG1vbWVudC51bml4KGRhdGUudmFsdWUpO1xuXG4gICAgICBpZiAobG9ja0RhdGUueWVhcigpID09PSBxdWFydGVyRGF0ZS55ZWFyKCkgJiYgbG9ja0RhdGUubW9udGgoKSA9PT0gcXVhcnRlckRhdGUubW9udGgoKSkge1xuICAgICAgICBkYXRlLmRpc2FibGUgPSB0cnVlO1xuICAgICAgICBzdGF0dXMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBzdGF0dXM7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,124 @@
1
+ import { Component, Input } from "@angular/core";
2
+ import { AnyTagComponent } from "../dateTag.component";
3
+ import { FormControl } from "@angular/forms";
4
+ import { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE } from "@angular/material/core";
5
+ import { MAT_MOMENT_DATE_ADAPTER_OPTIONS, MomentDateAdapter } from "@angular/material-moment-adapter";
6
+ // @ts-ignore
7
+ const moment = require("moment");
8
+ const WEEK_FORMATS = {
9
+ parse: {
10
+ dateInput: "WW-YYYY",
11
+ },
12
+ display: {
13
+ dateInput: "[Week] WW, YYYY",
14
+ monthYearLabel: "MMMM YYYY",
15
+ dateA11yLabel: "LL",
16
+ monthYearA11yLabel: "MMMM YYYY"
17
+ },
18
+ };
19
+ const ɵ0 = WEEK_FORMATS;
20
+ export class WeekTagComponent extends AnyTagComponent {
21
+ constructor() {
22
+ super();
23
+ this.lockedDate = [];
24
+ this.date = new FormControl(moment());
25
+ this.selectedValue = "";
26
+ this.dateFilter = (date) => {
27
+ const calendarDate = moment(date);
28
+ let status = true;
29
+ this.lockedDate.forEach(timestamp => {
30
+ const lockDate = moment.unix(timestamp);
31
+ return status = !(lockDate.week() === calendarDate.week() && lockDate.year() === calendarDate.year());
32
+ });
33
+ return status;
34
+ };
35
+ }
36
+ ngOnInit() {
37
+ this.initName();
38
+ const now = new Date();
39
+ now.setHours(0, 0, 0, 0);
40
+ const dateUnix = this.getUTCTimestamp(this.getMonday(now));
41
+ let default_value_time = dateUnix;
42
+ const one_day_in_seconds = 86400;
43
+ if (this.defaultValue) {
44
+ default_value_time = (this.defaultValue + one_day_in_seconds) * 1000;
45
+ }
46
+ const default_date = new Date(default_value_time);
47
+ const weekNumber = this.getWeekNumberByDate(default_date);
48
+ const yearNumber = default_date.getFullYear();
49
+ const dateStr = `${yearNumber}-W${weekNumber}`;
50
+ this.dateObj.date = dateStr;
51
+ this.selectedValue = dateStr;
52
+ this.chosenTagHandler(default_date);
53
+ }
54
+ initName() {
55
+ if (!this.name) {
56
+ this.name = "Week";
57
+ }
58
+ }
59
+ chosenDateHandler(normalizedDay) {
60
+ const date = moment(normalizedDay).unix();
61
+ this.chosenTagHandler(date);
62
+ }
63
+ chosenTagHandler(value) {
64
+ let date;
65
+ console.log("chosenTag", value);
66
+ if (value > 1000000000000) {
67
+ date = new Date(value);
68
+ }
69
+ else {
70
+ date = new Date(value * 1000);
71
+ }
72
+ const resultDate = moment(date);
73
+ const resultTag = {
74
+ name: this.name,
75
+ value: parseInt(resultDate.format("X"), 10),
76
+ label: this.getWeekLabel(date),
77
+ locked: !this.dateFilter(value)
78
+ };
79
+ console.log("resultTag", resultTag);
80
+ this.dateChange.emit(resultTag);
81
+ }
82
+ getWeekLabel(date) {
83
+ return "W" + this.pad(moment(date).isoWeek(), 2) +
84
+ " " + moment(date).year();
85
+ }
86
+ getUTCTimestamp(date) {
87
+ return Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), 12, 0, 0, 0);
88
+ }
89
+ getMonday(date) {
90
+ const day = date.getDay() || 7;
91
+ if (day !== 1) {
92
+ date.setHours(-24 * (day - 1));
93
+ }
94
+ return date;
95
+ }
96
+ getWeekNumberByDate(date) {
97
+ return this.pad(moment(date).isoWeek(), 2);
98
+ }
99
+ pad(n, width, z = "0") {
100
+ z = z || "0";
101
+ n = n + "";
102
+ return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
103
+ }
104
+ }
105
+ WeekTagComponent.decorators = [
106
+ { type: Component, args: [{
107
+ template: "<div>\n <mat-form-field class=\"date-select-box\">\n <input\n matInput\n placeholder=\"{{name}}\"\n name=\"week\"\n [formControl]=\"date\"\n [matDatepicker]=\"datepicker\"\n [matDatepickerFilter]=\"dateFilter\"\n (ngModelChange)=\"chosenDateHandler($event)\">\n <mat-datepicker-toggle matSuffix [for]=\"datepicker\"></mat-datepicker-toggle>\n <mat-datepicker\n #datepicker\n startView=\"month\"\n ></mat-datepicker>\n </mat-form-field>\n</div>\n",
108
+ selector: "week-tag",
109
+ providers: [
110
+ {
111
+ provide: DateAdapter,
112
+ useClass: MomentDateAdapter,
113
+ deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS],
114
+ },
115
+ { provide: MAT_DATE_FORMATS, useValue: ɵ0 },
116
+ ]
117
+ },] }
118
+ ];
119
+ WeekTagComponent.ctorParameters = () => [];
120
+ WeekTagComponent.propDecorators = {
121
+ lockedDate: [{ type: Input }]
122
+ };
123
+ export { ɵ0 };
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vla1RhZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9EYXRlVGFncy93ZWVrVGFnL3dlZWtUYWcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFTLE1BQU0sZUFBZSxDQUFDO0FBR3ZELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RixPQUFPLEVBQUMsK0JBQStCLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRyxhQUFhO0FBQ2IsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBRWpDLE1BQU0sWUFBWSxHQUFHO0lBQ25CLEtBQUssRUFBRTtRQUNMLFNBQVMsRUFBRSxTQUFTO0tBQ3JCO0lBQ0QsT0FBTyxFQUFFO1FBQ1AsU0FBUyxFQUFFLGlCQUFpQjtRQUM1QixjQUFjLEVBQUUsV0FBVztRQUMzQixhQUFhLEVBQUUsSUFBSTtRQUNuQixrQkFBa0IsRUFBRSxXQUFXO0tBQ2hDO0NBQ0YsQ0FBQztXQVcwQyxZQUFZO0FBR3hELE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxlQUFlO0lBTWpEO1FBQ0ksS0FBSyxFQUFFLENBQUM7UUFOSCxlQUFVLEdBQVUsRUFBRSxDQUFDO1FBRWhDLFNBQUksR0FBRyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ2pDLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBdUNuQixlQUFVLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNwQixNQUFN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QUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLEdBQUc7UUFDM0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7UUFDYixDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNYLE9BQU8sQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3RSxDQUFDOzs7WUFqSEosU0FBUyxTQUFDO2dCQUNQLDhrQkFBcUM7Z0JBQ3JDLFFBQVEsRUFBRSxVQUFVO2dCQUNwQixTQUFTLEVBQUU7b0JBQ1Q7d0JBQ0UsT0FBTyxFQUFFLFdBQVc7d0JBQ3BCLFFBQVEsRUFBRSxpQkFBaUI7d0JBQzNCLElBQUksRUFBRSxDQUFDLGVBQWUsRUFBRSwrQkFBK0IsQ0FBQztxQkFDekQ7b0JBQ0QsRUFBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxJQUFjLEVBQUM7aUJBQ3BEO2FBQ0o7Ozs7eUJBRUksS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbnB1dCwgT25Jbml0fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtJRGF0ZVRhZ30gZnJvbSBcIi4uLy4uL21vZGVscy9zZXJ2ZXJUYWdzXCI7XG5pbXBvcnQge01vbWVudH0gZnJvbSBcIm1vbWVudFwiO1xuaW1wb3J0IHtBbnlUYWdDb21wb25lbnR9IGZyb20gXCIuLi9kYXRlVGFnLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtGb3JtQ29udHJvbH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQge0RhdGVBZGFwdGVyLCBNQVRfREFURV9GT1JNQVRTLCBNQVRfREFURV9MT0NBTEV9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9jb3JlXCI7XG5pbXBvcnQge01BVF9NT01FTlRfREFURV9BREFQVEVSX09QVElPTlMsIE1vbWVudERhdGVBZGFwdGVyfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwtbW9tZW50LWFkYXB0ZXJcIjtcbi8vIEB0cy1pZ25vcmVcbmNvbnN0IG1vbWVudCA9IHJlcXVpcmUoXCJtb21lbnRcIik7XG5cbmNvbnN0IFdFRUtfRk9STUFUUyA9IHtcbiAgcGFyc2U6IHtcbiAgICBkYXRlSW5wdXQ6IFwiV1ctWVlZWVwiLFxuICB9LFxuICBkaXNwbGF5OiB7XG4gICAgZGF0ZUlucHV0OiBcIltXZWVrXSBXVywgWVlZWVwiLFxuICAgIG1vbnRoWWVhckxhYmVsOiBcIk1NTU0gWVlZWVwiLFxuICAgIGRhdGVBMTF5TGFiZWw6IFwiTExcIixcbiAgICBtb250aFllYXJBMTF5TGFiZWw6IFwiTU1NTSBZWVlZXCJcbiAgfSxcbn07XG5cbkBDb21wb25lbnQoe1xuICAgIHRlbXBsYXRlVXJsOiBcIndlZWtUYWcuY29tcG9uZW50Lmh0bWxcIixcbiAgICBzZWxlY3RvcjogXCJ3ZWVrLXRhZ1wiLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAge1xuICAgICAgICBwcm92aWRlOiBEYXRlQWRhcHRlcixcbiAgICAgICAgdXNlQ2xhc3M6IE1vbWVudERhdGVBZGFwdGVyLFxuICAgICAgICBkZXBzOiBbTUFUX0RBVEVfTE9DQUxFLCBNQVRfTU9NRU5UX0RBVEVfQURBUFRFUl9PUFRJT05TXSxcbiAgICAgIH0sXG4gICAgICB7cHJvdmlkZTogTUFUX0RBVEVfRk9STUFUUywgdXNlVmFsdWU6IFdFRUtfRk9STUFUU30sXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgV2Vla1RhZ0NvbXBvbmVudCBleHRlbmRzIEFueVRhZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQElucHV0KCkgbG9ja2VkRGF0ZTogYW55W10gPSBbXTtcblxuICAgIGRhdGUgPSBuZXcgRm9ybUNvbnRyb2wobW9tZW50KCkpO1xuICAgIHNlbGVjdGVkVmFsdWUgPSBcIlwiO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICB0aGlzLmluaXROYW1lKCk7XG5cbiAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICBub3cuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG5cbiAgICAgIGNvbnN0IGRhdGVVbml4ID0gdGhpcy5nZXRVVENUaW1lc3RhbXAodGhpcy5nZXRNb25kYXkobm93KSk7XG4gICAgICBsZXQgZGVmYXVsdF92YWx1ZV90aW1lID0gZGF0ZVVuaXg7XG4gICAgICBjb25zdCBvbmVfZGF5X2luX3NlY29uZHMgPSA4NjQwMDtcbiAgICAgIGlmICh0aGlzLmRlZmF1bHRWYWx1ZSkge1xuICAgICAgICBkZWZhdWx0X3ZhbHVlX3RpbWUgPSAodGhpcy5kZWZhdWx0VmFsdWUgKyBvbmVfZGF5X2luX3NlY29uZHMpICogMTAwMDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGVmYXVsdF9kYXRlID0gbmV3IERhdGUoZGVmYXVsdF92YWx1ZV90aW1lKTtcbiAgICAgIGNvbnN0IHdlZWtOdW1iZXIgPSB0aGlzLmdldFdlZWtOdW1iZXJCeURhdGUoZGVmYXVsdF9kYXRlKTtcbiAgICAgIGNvbnN0IHllYXJOdW1iZXIgPSBkZWZhdWx0X2RhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgIGNvbnN0IGRhdGVTdHIgPSBgJHt5ZWFyTnVtYmVyfS1XJHt3ZWVrTnVtYmVyfWA7XG4gICAgICB0aGlzLmRhdGVPYmouZGF0ZSA9IGRhdGVTdHI7XG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBkYXRlU3RyO1xuICAgICAgdGhpcy5jaG9zZW5UYWdIYW5kbGVyKGRlZmF1bHRfZGF0ZSk7XG4gICAgfVxuXG4gICAgaW5pdE5hbWUoKSB7XG4gICAgICBpZiAoIXRoaXMubmFtZSkge1xuICAgICAgICB0aGlzLm5hbWUgPSBcIldlZWtcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjaG9zZW5EYXRlSGFuZGxlcihub3JtYWxpemVkRGF5KSB7XG4gICAgICBjb25zdCBkYXRlID0gbW9tZW50KG5vcm1hbGl6ZWREYXkpLnVuaXgoKTtcbiAgICAgIHRoaXMuY2hvc2VuVGFnSGFuZGxlcihkYXRlKTtcbiAgICB9XG5cbiAgICBkYXRlRmlsdGVyID0gKGRhdGUpID0+IHtcbiAgICAgIGNvbnN0IGNhbGVuZGFyRGF0ZSA9IG1vbWVudChkYXRlKTtcbiAgICAgIGxldCBzdGF0dXMgPSB0cnVlO1xuXG4gICAgICB0aGlzLmxvY2tlZERhdGUuZm9yRWFjaCh0aW1lc3RhbXAgPT4ge1xuICAgICAgICBjb25zdCBsb2NrRGF0ZSA9IG1vbWVudC51bml4KHRpbWVzdGFtcCk7XG5cbiAgICAgICAgcmV0dXJuIHN0YXR1cyA9ICEobG9ja0RhdGUud2VlaygpID09PSBjYWxlbmRhckRhdGUud2VlaygpICYmIGxvY2tEYXRlLnllYXIoKSA9PT0gY2FsZW5kYXJEYXRlLnllYXIoKSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHN0YXR1cztcbiAgICB9XG5cbiAgICBjaG9zZW5UYWdIYW5kbGVyKHZhbHVlKSB7XG4gICAgICAgIGxldCBkYXRlO1xuICAgICAgICBjb25zb2xlLmxvZyhcImNob3NlblRhZ1wiLCB2YWx1ZSk7XG4gICAgICAgIGlmICh2YWx1ZSA+IDEwMDAwMDAwMDAwMDApIHtcbiAgICAgICAgICBkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSAqIDEwMDApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0RGF0ZTogTW9tZW50ID0gbW9tZW50KGRhdGUpO1xuICAgICAgICBjb25zdCByZXN1bHRUYWc6IElEYXRlVGFnID0ge1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgdmFsdWU6IHBhcnNlSW50KHJlc3VsdERhdGUuZm9ybWF0KFwiWFwiKSwgMTApLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMuZ2V0V2Vla0xhYmVsKGRhdGUpLFxuICAgICAgICAgICAgbG9ja2VkOiAhdGhpcy5kYXRlRmlsdGVyKHZhbHVlKVxuICAgICAgICB9O1xuICAgICAgICBjb25zb2xlLmxvZyhcInJlc3VsdFRhZ1wiLCByZXN1bHRUYWcpO1xuICAgICAgICB0aGlzLmRhdGVDaGFuZ2UuZW1pdChyZXN1bHRUYWcpO1xuICAgICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRXZWVrTGFiZWwoZGF0ZSkge1xuICAgICAgcmV0dXJuIFwiV1wiICsgdGhpcy5wYWQoIG1vbWVudChkYXRlKS5pc29XZWVrKCksIDIpICtcbiAgICAgICAgXCIgXCIgKyBtb21lbnQoZGF0ZSkueWVhcigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VVRDVGltZXN0YW1wKGRhdGUpIHtcbiAgICAgICAgcmV0dXJuIERhdGUuVVRDKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSwgMTIsIDAsIDAsIDApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TW9uZGF5KGRhdGUpIHtcbiAgICAgICAgY29uc3QgZGF5ID0gZGF0ZS5nZXREYXkoKSB8fCA3O1xuICAgICAgICBpZiAoZGF5ICE9PSAxKSB7XG4gICAgICAgICAgICBkYXRlLnNldEhvdXJzKC0yNCAqIChkYXkgLSAxKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRXZWVrTnVtYmVyQnlEYXRlKGRhdGU6IERhdGUpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhZChtb21lbnQoZGF0ZSkuaXNvV2VlaygpLCAyKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhZChuLCB3aWR0aCwgeiA9IFwiMFwiKSB7XG4gICAgICB6ID0geiB8fCBcIjBcIjtcbiAgICAgIG4gPSBuICsgXCJcIjtcbiAgICAgIHJldHVybiBuLmxlbmd0aCA+PSB3aWR0aCA/IG4gOiBuZXcgQXJyYXkod2lkdGggLSBuLmxlbmd0aCArIDEpLmpvaW4oeikgKyBuO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,92 @@
1
+ import { Component, Input } from "@angular/core";
2
+ import { FormControl } from "@angular/forms";
3
+ import { AnyTagComponent } from "../dateTag.component";
4
+ import { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE } from "@angular/material/core";
5
+ import { MAT_MOMENT_DATE_ADAPTER_OPTIONS, MomentDateAdapter } from "@angular/material-moment-adapter";
6
+ // @ts-ignore
7
+ const moment = require("moment");
8
+ const YEAR_FORMATS = {
9
+ parse: {
10
+ dateInput: "YYYY",
11
+ },
12
+ display: {
13
+ dateInput: "YYYY",
14
+ monthYearLabel: "MMMM YYYY",
15
+ dateA11yLabel: "LL",
16
+ monthYearA11yLabel: "MMMM YYYY"
17
+ },
18
+ };
19
+ const ɵ0 = YEAR_FORMATS;
20
+ export class YearTagComponent extends AnyTagComponent {
21
+ constructor() {
22
+ super();
23
+ this.lockedDate = [];
24
+ this.date = new FormControl(moment());
25
+ this.dateFilter = (date) => {
26
+ const calendarDateYear = moment(date).year();
27
+ let status = true;
28
+ this.lockedDate.forEach(timestamp => {
29
+ const lockDate = moment.unix(timestamp);
30
+ return status = !(lockDate.year() === calendarDateYear);
31
+ });
32
+ return status;
33
+ };
34
+ }
35
+ initDate() {
36
+ if (this.defaultValue) {
37
+ this.dateObj.date = moment(new Date(this.defaultValue * 1000)).utc().format("YYYY");
38
+ }
39
+ else {
40
+ this.dateObj.date = moment(new Date()).format("YYYY");
41
+ }
42
+ }
43
+ initName() {
44
+ if (!this.name) {
45
+ this.name = "Year";
46
+ }
47
+ }
48
+ chosenTagHandler(value) {
49
+ const date = new Date();
50
+ const year = moment(value).year();
51
+ date.setTime(0);
52
+ date.setFullYear(year, 0, 1);
53
+ const resultDate = moment.utc(date);
54
+ resultDate.hour(12);
55
+ const resultTag = {
56
+ name: this.name,
57
+ value: parseInt(resultDate.format("X"), 10),
58
+ label: resultDate.format("YYYY"),
59
+ locked: !this.dateFilter(value)
60
+ };
61
+ console.log("resultTag", resultTag);
62
+ this.dateChange.emit(resultTag);
63
+ }
64
+ chosenYearHandler(normalizedYear, datepicker) {
65
+ const ctrlValue = this.date.value;
66
+ ctrlValue.year(normalizedYear.year());
67
+ this.date.setValue(ctrlValue);
68
+ this.dateObj.date = this.date.value;
69
+ this.chosenTagHandler(this.date.value);
70
+ datepicker.close();
71
+ }
72
+ }
73
+ YearTagComponent.decorators = [
74
+ { type: Component, args: [{
75
+ template: "<div>\n <mat-form-field class=\"date-select-box\">\n <input\n matInput\n placeholder=\"{{name}}\"\n name=\"Year\"\n [formControl]=\"date\"\n [matDatepicker]=\"datepicker\"\n [matDatepickerFilter]=\"dateFilter\">\n <mat-datepicker-toggle matSuffix [for]=\"datepicker\"></mat-datepicker-toggle>\n <mat-datepicker\n #datepicker\n startView=\"multi-year\"\n (yearSelected)=\"chosenYearHandler($event, datepicker)\"\n panelClass=\"date-month-picker\"\n ></mat-datepicker>\n </mat-form-field>\n</div>\n",
76
+ selector: "year-tag",
77
+ providers: [
78
+ {
79
+ provide: DateAdapter,
80
+ useClass: MomentDateAdapter,
81
+ deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS],
82
+ },
83
+ { provide: MAT_DATE_FORMATS, useValue: ɵ0 },
84
+ ]
85
+ },] }
86
+ ];
87
+ YearTagComponent.ctorParameters = () => [];
88
+ YearTagComponent.propDecorators = {
89
+ lockedDate: [{ type: Input }]
90
+ };
91
+ export { ɵ0 };
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWVhclRhZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9EYXRlVGFncy95ZWFyVGFnL3llYXJUYWcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFTLE1BQU0sZUFBZSxDQUFDO0FBQ3ZELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUkzQyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDckQsT0FBTyxFQUFDLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RixPQUFPLEVBQUMsK0JBQStCLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRyxhQUFhO0FBQ2IsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBRWpDLE1BQU0sWUFBWSxHQUFHO0lBQ25CLEtBQUssRUFBRTtRQUNMLFNBQVMsRUFBRSxNQUFNO0tBQ2xCO0lBQ0QsT0FBTyxFQUFFO1FBQ1AsU0FBUyxFQUFFLE1BQU07UUFDakIsY0FBYyxFQUFFLFdBQVc7UUFDM0IsYUFBYSxFQUFFLElBQUk7UUFDbkIsa0JBQWtCLEVBQUUsV0FBVztLQUNoQztDQUNGLENBQUM7V0FXMEMsWUFBWTtBQUl4RCxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsZUFBZTtJQUtuRDtRQUNFLEtBQUssRUFBRSxDQUFDO1FBTEQsZUFBVSxHQUFVLEVBQUUsQ0FBQztRQUVoQyxTQUFJLEdBQUcsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQWdEakMsZUFBVSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDcEIsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsSUFBSSxD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QUU7b0JBQ1Q7d0JBQ0UsT0FBTyxFQUFFLFdBQVc7d0JBQ3BCLFFBQVEsRUFBRSxpQkFBaUI7d0JBQzNCLElBQUksRUFBRSxDQUFDLGVBQWUsRUFBRSwrQkFBK0IsQ0FBQztxQkFDekQ7b0JBQ0QsRUFBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxJQUFjLEVBQUM7aUJBQ3BEO2FBQ0o7Ozs7eUJBR0UsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbnB1dCwgT25Jbml0fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtGb3JtQ29udHJvbH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQge01hdERhdGVwaWNrZXJ9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyXCI7XG5pbXBvcnQge01vbWVudH0gZnJvbSBcIm1vbWVudFwiO1xuaW1wb3J0IHtJRGF0ZVRhZ30gZnJvbSBcIi4uLy4uL21vZGVscy9zZXJ2ZXJUYWdzXCI7XG5pbXBvcnQge0FueVRhZ0NvbXBvbmVudH0gZnJvbSBcIi4uL2RhdGVUYWcuY29tcG9uZW50XCI7XG5pbXBvcnQge0RhdGVBZGFwdGVyLCBNQVRfREFURV9GT1JNQVRTLCBNQVRfREFURV9MT0NBTEV9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9jb3JlXCI7XG5pbXBvcnQge01BVF9NT01FTlRfREFURV9BREFQVEVSX09QVElPTlMsIE1vbWVudERhdGVBZGFwdGVyfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwtbW9tZW50LWFkYXB0ZXJcIjtcbi8vIEB0cy1pZ25vcmVcbmNvbnN0IG1vbWVudCA9IHJlcXVpcmUoXCJtb21lbnRcIik7XG5cbmNvbnN0IFlFQVJfRk9STUFUUyA9IHtcbiAgcGFyc2U6IHtcbiAgICBkYXRlSW5wdXQ6IFwiWVlZWVwiLFxuICB9LFxuICBkaXNwbGF5OiB7XG4gICAgZGF0ZUlucHV0OiBcIllZWVlcIixcbiAgICBtb250aFllYXJMYWJlbDogXCJNTU1NIFlZWVlcIixcbiAgICBkYXRlQTExeUxhYmVsOiBcIkxMXCIsXG4gICAgbW9udGhZZWFyQTExeUxhYmVsOiBcIk1NTU0gWVlZWVwiXG4gIH0sXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgICB0ZW1wbGF0ZVVybDogXCJ5ZWFyVGFnLmNvbXBvbmVudC5odG1sXCIsXG4gICAgc2VsZWN0b3I6IFwieWVhci10YWdcIixcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogRGF0ZUFkYXB0ZXIsXG4gICAgICAgIHVzZUNsYXNzOiBNb21lbnREYXRlQWRhcHRlcixcbiAgICAgICAgZGVwczogW01BVF9EQVRFX0xPQ0FMRSwgTUFUX01PTUVOVF9EQVRFX0FEQVBURVJfT1BUSU9OU10sXG4gICAgICB9LFxuICAgICAge3Byb3ZpZGU6IE1BVF9EQVRFX0ZPUk1BVFMsIHVzZVZhbHVlOiBZRUFSX0ZPUk1BVFN9LFxuICAgIF0sXG59KVxuXG5leHBvcnQgY2xhc3MgWWVhclRhZ0NvbXBvbmVudCBleHRlbmRzIEFueVRhZ0NvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGxvY2tlZERhdGU6IGFueVtdID0gW107XG5cbiAgZGF0ZSA9IG5ldyBGb3JtQ29udHJvbChtb21lbnQoKSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGluaXREYXRlKCkge1xuICAgIGlmICh0aGlzLmRlZmF1bHRWYWx1ZSkge1xuICAgICAgdGhpcy5kYXRlT2JqLmRhdGUgPSBtb21lbnQobmV3IERhdGUodGhpcy5kZWZhdWx0VmFsdWUgKiAxMDAwKSkudXRjKCkuZm9ybWF0KFwiWVlZWVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRlT2JqLmRhdGUgPSBtb21lbnQobmV3IERhdGUoKSkuZm9ybWF0KFwiWVlZWVwiKTtcbiAgICB9XG4gIH1cblxuICBpbml0TmFtZSgpIHtcbiAgICBpZiAoIXRoaXMubmFtZSkge1xuICAgICAgdGhpcy5uYW1lID0gXCJZZWFyXCI7XG4gICAgfVxuICB9XG5cbiAgY2hvc2VuVGFnSGFuZGxlcih2YWx1ZSkge1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICBjb25zdCB5ZWFyID0gbW9tZW50KHZhbHVlKS55ZWFyKCk7XG4gICAgICBkYXRlLnNldFRpbWUoMCk7XG4gICAgICBkYXRlLnNldEZ1bGxZZWFyKHllYXIsIDAsIDEpO1xuICAgICAgY29uc3QgcmVzdWx0RGF0ZTogTW9tZW50ID0gbW9tZW50LnV0YyhkYXRlKTtcbiAgICAgIHJlc3VsdERhdGUuaG91cigxMik7XG4gICAgICBjb25zdCByZXN1bHRUYWc6IElEYXRlVGFnID0ge1xuICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICB2YWx1ZTogcGFyc2VJbnQocmVzdWx0RGF0ZS5mb3JtYXQoXCJYXCIpLCAxMCksXG4gICAgICAgICAgbGFiZWw6IHJlc3VsdERhdGUuZm9ybWF0KFwiWVlZWVwiKSxcbiAgICAgICAgICBsb2NrZWQ6ICF0aGlzLmRhdGVGaWx0ZXIodmFsdWUpXG4gICAgICB9O1xuICAgICAgY29uc29sZS5sb2coXCJyZXN1bHRUYWdcIiwgcmVzdWx0VGFnKTtcbiAgICAgIHRoaXMuZGF0ZUNoYW5nZS5lbWl0KHJlc3VsdFRhZyk7XG4gIH1cblxuICBjaG9zZW5ZZWFySGFuZGxlcihub3JtYWxpemVkWWVhcjogTW9tZW50LCBkYXRlcGlja2VyOiBNYXREYXRlcGlja2VyPE1vbWVudD4pIHtcbiAgICBjb25zdCBjdHJsVmFsdWUgPSB0aGlzLmRhdGUudmFsdWU7XG4gICAgY3RybFZhbHVlLnllYXIobm9ybWFsaXplZFllYXIueWVhcigpKTtcblxuICAgIHRoaXMuZGF0ZS5zZXRWYWx1ZShjdHJsVmFsdWUpO1xuICAgIHRoaXMuZGF0ZU9iai5kYXRlID0gdGhpcy5kYXRlLnZhbHVlO1xuICAgIHRoaXMuY2hvc2VuVGFnSGFuZGxlcih0aGlzLmRhdGUudmFsdWUpO1xuXG4gICAgZGF0ZXBpY2tlci5jbG9zZSgpO1xuICB9XG5cbiAgZGF0ZUZpbHRlciA9IChkYXRlKSA9PiB7XG4gICAgY29uc3QgY2FsZW5kYXJEYXRlWWVhciA9IG1vbWVudChkYXRlKS55ZWFyKCk7XG4gICAgbGV0IHN0YXR1cyA9IHRydWU7XG5cbiAgICB0aGlzLmxvY2tlZERhdGUuZm9yRWFjaCh0aW1lc3RhbXAgPT4ge1xuICAgICAgY29uc3QgbG9ja0RhdGUgPSBtb21lbnQudW5peCh0aW1lc3RhbXApO1xuXG4gICAgICByZXR1cm4gc3RhdHVzID0gIShsb2NrRGF0ZS55ZWFyKCkgPT09IGNhbGVuZGFyRGF0ZVllYXIpXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3RhdHVzO1xuICB9XG59XG4iXX0=