@solidev/data 0.0.8 → 0.1.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 (158) hide show
  1. package/esm2022/lib/auth/auth-interceptor.service.mjs +92 -0
  2. package/{esm2020 → esm2022}/lib/auth/auth.service.mjs +1 -1
  3. package/esm2022/lib/data/data-backend.mjs +135 -0
  4. package/esm2022/lib/data/data-model.mjs +292 -0
  5. package/esm2022/lib/dispedit/choice.pipe.mjs +81 -0
  6. package/{esm2020 → esm2022}/lib/dispedit/dispedit/dispedit.component.mjs +10 -5
  7. package/esm2022/lib/dispedit/factor.pipe.mjs +83 -0
  8. package/esm2022/lib/dispedit/factorc.pipe.mjs +101 -0
  9. package/esm2022/lib/dispedit/fkselect/fkselect.component.mjs +143 -0
  10. package/esm2022/lib/dispedit/flags/flags.component.mjs +141 -0
  11. package/esm2022/lib/dispedit/m2mselect/m2mselect.component.mjs +319 -0
  12. package/esm2022/lib/dispedit/richedit/richedit.component.mjs +127 -0
  13. package/esm2022/lib/dispedit/sdelete/sdelete.component.mjs +94 -0
  14. package/esm2022/lib/messages/message-zone/message-zone.component.mjs +58 -0
  15. package/esm2022/lib/messages/message.service.mjs +152 -0
  16. package/esm2022/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.mjs +66 -0
  17. package/esm2022/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.mjs +65 -0
  18. package/esm2022/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.mjs +113 -0
  19. package/esm2022/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.mjs +30 -0
  20. package/esm2022/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.component.mjs +41 -0
  21. package/esm2022/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.mjs +41 -0
  22. package/esm2022/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.mjs +22 -0
  23. package/esm2022/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.mjs +50 -0
  24. package/esm2022/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.mjs +64 -0
  25. package/esm2022/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.mjs +47 -0
  26. package/esm2022/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.mjs +57 -0
  27. package/esm2022/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.mjs +52 -0
  28. package/esm2022/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.mjs +41 -0
  29. package/esm2022/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.mjs +175 -0
  30. package/esm2022/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.mjs +51 -0
  31. package/esm2022/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.mjs +31 -0
  32. package/esm2022/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.mjs +71 -0
  33. package/esm2022/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.mjs +50 -0
  34. package/esm2022/lib/modellist/model-list.service.mjs +158 -0
  35. package/esm2022/lib/routing/breadcrumb/breadcrumb.component.mjs +143 -0
  36. package/esm2022/lib/updates/update/update.component.mjs +18 -0
  37. package/esm2022/lib/updates/update.service.mjs +59 -0
  38. package/esm2022/lib/uploader/ng-file-drop.directive.mjs +82 -0
  39. package/esm2022/lib/uploader/ng-file-select.directive.mjs +52 -0
  40. package/esm2022/lib/uploader/ngx-uploader.module.mjs +18 -0
  41. package/esm2022/lib/utils/tab-memory.service.mjs +81 -0
  42. package/{fesm2020 → fesm2022}/solidev-data.mjs +153 -149
  43. package/fesm2022/solidev-data.mjs.map +1 -0
  44. package/lib/dispedit/dispedit/dispedit.component.d.ts +1 -1
  45. package/lib/dispedit/fkselect/fkselect.component.d.ts +1 -1
  46. package/lib/dispedit/flags/flags.component.d.ts +1 -1
  47. package/lib/dispedit/m2mselect/m2mselect.component.d.ts +1 -1
  48. package/lib/dispedit/richedit/richedit.component.d.ts +1 -1
  49. package/lib/dispedit/sdelete/sdelete.component.d.ts +1 -1
  50. package/lib/messages/message-zone/message-zone.component.d.ts +1 -1
  51. package/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.d.ts +1 -1
  52. package/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.d.ts +1 -1
  53. package/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.d.ts +1 -1
  54. package/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.d.ts +1 -1
  55. package/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.component.d.ts +1 -1
  56. package/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.d.ts +1 -1
  57. package/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.d.ts +1 -1
  58. package/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.d.ts +1 -1
  59. package/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.d.ts +1 -1
  60. package/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.d.ts +1 -1
  61. package/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.d.ts +1 -1
  62. package/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.d.ts +1 -1
  63. package/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.d.ts +1 -1
  64. package/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.d.ts +1 -1
  65. package/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.d.ts +1 -1
  66. package/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.d.ts +1 -1
  67. package/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.d.ts +1 -1
  68. package/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.d.ts +1 -1
  69. package/lib/routing/breadcrumb/breadcrumb.component.d.ts +1 -1
  70. package/lib/uploader/ng-file-drop.directive.d.ts +1 -1
  71. package/lib/uploader/ng-file-select.directive.d.ts +1 -1
  72. package/package.json +7 -13
  73. package/esm2020/lib/auth/auth-interceptor.service.mjs +0 -91
  74. package/esm2020/lib/data/data-backend.mjs +0 -134
  75. package/esm2020/lib/data/data-model.mjs +0 -291
  76. package/esm2020/lib/dispedit/choice.pipe.mjs +0 -79
  77. package/esm2020/lib/dispedit/factor.pipe.mjs +0 -81
  78. package/esm2020/lib/dispedit/factorc.pipe.mjs +0 -99
  79. package/esm2020/lib/dispedit/fkselect/fkselect.component.mjs +0 -142
  80. package/esm2020/lib/dispedit/flags/flags.component.mjs +0 -140
  81. package/esm2020/lib/dispedit/m2mselect/m2mselect.component.mjs +0 -318
  82. package/esm2020/lib/dispedit/richedit/richedit.component.mjs +0 -126
  83. package/esm2020/lib/dispedit/sdelete/sdelete.component.mjs +0 -93
  84. package/esm2020/lib/messages/message-zone/message-zone.component.mjs +0 -57
  85. package/esm2020/lib/messages/message.service.mjs +0 -151
  86. package/esm2020/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.mjs +0 -65
  87. package/esm2020/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.mjs +0 -64
  88. package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.mjs +0 -112
  89. package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.mjs +0 -29
  90. package/esm2020/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.component.mjs +0 -40
  91. package/esm2020/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.mjs +0 -40
  92. package/esm2020/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.mjs +0 -21
  93. package/esm2020/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.mjs +0 -49
  94. package/esm2020/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.mjs +0 -63
  95. package/esm2020/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.mjs +0 -46
  96. package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.mjs +0 -56
  97. package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.mjs +0 -51
  98. package/esm2020/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.mjs +0 -40
  99. package/esm2020/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.mjs +0 -174
  100. package/esm2020/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.mjs +0 -50
  101. package/esm2020/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.mjs +0 -30
  102. package/esm2020/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.mjs +0 -70
  103. package/esm2020/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.mjs +0 -49
  104. package/esm2020/lib/modellist/model-list.service.mjs +0 -157
  105. package/esm2020/lib/routing/breadcrumb/breadcrumb.component.mjs +0 -142
  106. package/esm2020/lib/updates/update/update.component.mjs +0 -17
  107. package/esm2020/lib/updates/update.service.mjs +0 -58
  108. package/esm2020/lib/uploader/ng-file-drop.directive.mjs +0 -81
  109. package/esm2020/lib/uploader/ng-file-select.directive.mjs +0 -51
  110. package/esm2020/lib/uploader/ngx-uploader.module.mjs +0 -17
  111. package/esm2020/lib/utils/tab-memory.service.mjs +0 -80
  112. package/fesm2015/solidev-data.mjs +0 -6224
  113. package/fesm2015/solidev-data.mjs.map +0 -1
  114. package/fesm2020/solidev-data.mjs.map +0 -1
  115. /package/{esm2020 → esm2022}/lib/auth/jwt.mjs +0 -0
  116. /package/{esm2020 → esm2022}/lib/data/data-collection.mjs +0 -0
  117. /package/{esm2020 → esm2022}/lib/data/data-collection.mock.mjs +0 -0
  118. /package/{esm2020 → esm2022}/lib/data/data-parameters.mjs +0 -0
  119. /package/{esm2020 → esm2022}/lib/data/data-query.mjs +0 -0
  120. /package/{esm2020 → esm2022}/lib/data/data-query.mock.mjs +0 -0
  121. /package/{esm2020 → esm2022}/lib/data/fields/base.mjs +0 -0
  122. /package/{esm2020 → esm2022}/lib/data/fields/boolean.mjs +0 -0
  123. /package/{esm2020 → esm2022}/lib/data/fields/computed.mjs +0 -0
  124. /package/{esm2020 → esm2022}/lib/data/fields/datetime.mjs +0 -0
  125. /package/{esm2020 → esm2022}/lib/data/fields/index.mjs +0 -0
  126. /package/{esm2020 → esm2022}/lib/data/fields/numbers.mjs +0 -0
  127. /package/{esm2020 → esm2022}/lib/data/fields/primaryfield.mjs +0 -0
  128. /package/{esm2020 → esm2022}/lib/data/fields/relations.mjs +0 -0
  129. /package/{esm2020 → esm2022}/lib/data/fields/stringfields.mjs +0 -0
  130. /package/{esm2020 → esm2022}/lib/dispedit/dispedit/dispedit.constants.mjs +0 -0
  131. /package/{esm2020 → esm2022}/lib/modellist/model-list-fields/model-list-field-header/messages.mjs +0 -0
  132. /package/{esm2020 → esm2022}/lib/modellist/model-list-fields/model-list-fields.mjs +0 -0
  133. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/filtertypes.mjs +0 -0
  134. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.mjs +0 -0
  135. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.mjs +0 -0
  136. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.mjs +0 -0
  137. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.mjs +0 -0
  138. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetimerange-filter.mjs +0 -0
  139. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.mjs +0 -0
  140. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/adapters/ban.mjs +0 -0
  141. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.mjs +0 -0
  142. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.mjs +0 -0
  143. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.mjs +0 -0
  144. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.mjs +0 -0
  145. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.mjs +0 -0
  146. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.mjs +0 -0
  147. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/model-list-filter.mjs +0 -0
  148. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/model-list-filters.mjs +0 -0
  149. /package/{esm2020 → esm2022}/lib/modellist/model-list-paginator/model-list-paginator.mjs +0 -0
  150. /package/{esm2020 → esm2022}/lib/modellist/model-list-sorter/model-list-sorter.mjs +0 -0
  151. /package/{esm2020 → esm2022}/lib/routing/routing.mjs +0 -0
  152. /package/{esm2020 → esm2022}/lib/uploader/index.mjs +0 -0
  153. /package/{esm2020 → esm2022}/lib/uploader/interfaces.mjs +0 -0
  154. /package/{esm2020 → esm2022}/lib/uploader/ngx-uploader.class.mjs +0 -0
  155. /package/{esm2020 → esm2022}/lib/utils/slugify.mjs +0 -0
  156. /package/{esm2020 → esm2022}/lib/utils/template.mjs +0 -0
  157. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
  158. /package/{esm2020 → esm2022}/solidev-data.mjs +0 -0
@@ -0,0 +1,71 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { FormControl, ReactiveFormsModule } from '@angular/forms';
3
+ import { debounceTime, Subject, takeUntil } from 'rxjs';
4
+ import { NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap';
5
+ import { CommonModule } from '@angular/common';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/common";
8
+ import * as i2 from "@angular/forms";
9
+ import * as i3 from "@ng-bootstrap/ng-bootstrap";
10
+ class ModelListPaginatorComponent {
11
+ constructor() {
12
+ this.maxPages = 200;
13
+ this.hide = false;
14
+ this.perPageControl = new FormControl(10);
15
+ this.showDirectAccess = false;
16
+ this.directAccess = new FormControl(0);
17
+ this.curPage = 1;
18
+ this._unsubscribe = new Subject();
19
+ }
20
+ onPageChange(page) {
21
+ if (!page) {
22
+ return;
23
+ }
24
+ this.list.paginator.setPage(page);
25
+ }
26
+ ngOnDestroy() {
27
+ this._unsubscribe.next();
28
+ this._unsubscribe.complete();
29
+ }
30
+ ngOnChanges() {
31
+ if (this.list) {
32
+ this.perPageControl.setValue(this.list.paginator.getPageSize(), {
33
+ emitEvent: false,
34
+ });
35
+ this.list.meta.pipe(takeUntil(this._unsubscribe)).subscribe((meta) => {
36
+ if (meta.nav) {
37
+ this.list.paginator.updatePage(meta.nav.page || 1);
38
+ this.curPage = meta.nav.page || 1;
39
+ this.curCount = meta.nav.count;
40
+ this.list.paginator.updatePageSize(meta.nav.size);
41
+ this.pageSize = this.list.paginator.getPageSize();
42
+ this.perPageControl.setValue(this.pageSize, { emitEvent: false });
43
+ }
44
+ });
45
+ this.perPageControl.valueChanges
46
+ .pipe(takeUntil(this._unsubscribe))
47
+ .subscribe((count) => {
48
+ this.list.paginator.setPageSize(count);
49
+ });
50
+ this.directAccess.valueChanges
51
+ .pipe(takeUntil(this._unsubscribe), debounceTime(400))
52
+ .subscribe((count) => {
53
+ this.list.paginator.setPage(+count);
54
+ });
55
+ }
56
+ }
57
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: ModelListPaginatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
58
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: ModelListPaginatorComponent, isStandalone: true, selector: "data-model-list-paginator", inputs: { list: "list", maxPages: "maxPages", hide: "hide" }, usesOnChanges: true, ngImport: i0, template: "\n<div class=\"row\" *ngIf=\"!hide\">\n <div class=\"col-sm-4\">\n <select class=\"form-select perpage\" [formControl]=\"perPageControl\">\n <option value=\"10\" *ngIf=\"maxPages&gt;=10\">10 / page</option>\n <option value=\"20\" *ngIf=\"maxPages&gt;=20\">20 / page</option>\n <option value=\"50\" *ngIf=\"maxPages&gt;=50\">50 / page</option>\n <option value=\"100\" *ngIf=\"maxPages&gt;=100\">100 / page</option>\n <option value=\"200\" *ngIf=\"maxPages&gt;=200\">200 / page</option>\n <option value=\"500\" *ngIf=\"maxPages&gt;=500\">500 / page</option>\n <option value=\"1000\" *ngIf=\"maxPages&gt;=1000\">1000 / page</option>\n <option value=\"2000\" *ngIf=\"maxPages&gt;=2000\">2000 / page</option>\n <option value=\"5000\" *ngIf=\"maxPages&gt;=5000\">5000 / page</option>\n <option value=\"10000\" *ngIf=\"maxPages&gt;=10000\">10000 / page</option>\n </select>\n </div>\n <div class=\"col-sm-5 pagination\" *ngIf=\"list\">\n <div class=\"text-xs-center\">\n <ngb-pagination [pageSize]=\"pageSize\" [collectionSize]=\"curCount\" [page]=\"curPage\" (pageChange)=\"onPageChange($event)\" [maxSize]=\"5\" [rotate]=\"true\"></ngb-pagination>\n </div>\n </div>\n <div class=\"col-sm-3 results\">\n <div>{{curCount}} r\u00E9sultats -<span (click)=\"showDirectAccess=!showDirectAccess\" role=\"button\">acces direct</span></div>\n <div *ngIf=\"showDirectAccess\">\n <input class=\"form-control\" [formControl]=\"directAccess\" type=\"number\" placeholder=\"Aller \u00E0 la page\">\n </div>\n </div>\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: NgbPaginationModule }, { kind: "component", type: i3.NgbPagination, selector: "ngb-pagination", inputs: ["disabled", "boundaryLinks", "directionLinks", "ellipses", "rotate", "collectionSize", "maxSize", "page", "pageSize", "size"], outputs: ["pageChange"] }] }); }
59
+ }
60
+ export { ModelListPaginatorComponent };
61
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: ModelListPaginatorComponent, decorators: [{
62
+ type: Component,
63
+ args: [{ selector: 'data-model-list-paginator', standalone: true, imports: [CommonModule, ReactiveFormsModule, NgbPaginationModule], template: "\n<div class=\"row\" *ngIf=\"!hide\">\n <div class=\"col-sm-4\">\n <select class=\"form-select perpage\" [formControl]=\"perPageControl\">\n <option value=\"10\" *ngIf=\"maxPages&gt;=10\">10 / page</option>\n <option value=\"20\" *ngIf=\"maxPages&gt;=20\">20 / page</option>\n <option value=\"50\" *ngIf=\"maxPages&gt;=50\">50 / page</option>\n <option value=\"100\" *ngIf=\"maxPages&gt;=100\">100 / page</option>\n <option value=\"200\" *ngIf=\"maxPages&gt;=200\">200 / page</option>\n <option value=\"500\" *ngIf=\"maxPages&gt;=500\">500 / page</option>\n <option value=\"1000\" *ngIf=\"maxPages&gt;=1000\">1000 / page</option>\n <option value=\"2000\" *ngIf=\"maxPages&gt;=2000\">2000 / page</option>\n <option value=\"5000\" *ngIf=\"maxPages&gt;=5000\">5000 / page</option>\n <option value=\"10000\" *ngIf=\"maxPages&gt;=10000\">10000 / page</option>\n </select>\n </div>\n <div class=\"col-sm-5 pagination\" *ngIf=\"list\">\n <div class=\"text-xs-center\">\n <ngb-pagination [pageSize]=\"pageSize\" [collectionSize]=\"curCount\" [page]=\"curPage\" (pageChange)=\"onPageChange($event)\" [maxSize]=\"5\" [rotate]=\"true\"></ngb-pagination>\n </div>\n </div>\n <div class=\"col-sm-3 results\">\n <div>{{curCount}} r\u00E9sultats -<span (click)=\"showDirectAccess=!showDirectAccess\" role=\"button\">acces direct</span></div>\n <div *ngIf=\"showDirectAccess\">\n <input class=\"form-control\" [formControl]=\"directAccess\" type=\"number\" placeholder=\"Aller \u00E0 la page\">\n </div>\n </div>\n</div>" }]
64
+ }], propDecorators: { list: [{
65
+ type: Input
66
+ }], maxPages: [{
67
+ type: Input
68
+ }], hide: [{
69
+ type: Input
70
+ }] } });
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtbGlzdC1wYWdpbmF0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS9zcmMvbGliL21vZGVsbGlzdC9tb2RlbC1saXN0LXBhZ2luYXRvci9tb2RlbC1saXN0LXBhZ2luYXRvci9tb2RlbC1saXN0LXBhZ2luYXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhL3NyYy9saWIvbW9kZWxsaXN0L21vZGVsLWxpc3QtcGFnaW5hdG9yL21vZGVsLWxpc3QtcGFnaW5hdG9yL21vZGVsLWxpc3QtcGFnaW5hdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUF3QixNQUFNLGVBQWUsQ0FBQztBQUV2RSxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7QUFHL0MsTUFPYSwyQkFBMkI7SUFQeEM7UUFXa0IsYUFBUSxHQUFHLEdBQUcsQ0FBQztRQUNmLFNBQUksR0FBRyxLQUFLLENBQUM7UUFFdEIsbUJBQWMsR0FBZ0IsSUFBSSxXQUFXLENBQVMsRUFBRSxDQUFDLENBQUM7UUFDMUQscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLGlCQUFZLEdBQWdCLElBQUksV0FBVyxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELFlBQU8sR0FBRyxDQUFDLENBQUM7UUFHWixpQkFBWSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7S0EyQzNDO0lB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cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNb2RlbExpc3QgfSBmcm9tICcuLi8uLi9tb2RlbC1saXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTmdiUGFnaW5hdGlvbk1vZHVsZSB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEYXRhTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9kYXRhL2RhdGEtbW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYXRhLW1vZGVsLWxpc3QtcGFnaW5hdG9yJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21vZGVsLWxpc3QtcGFnaW5hdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbW9kZWwtbGlzdC1wYWdpbmF0b3IuY29tcG9uZW50LnNhc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgTmdiUGFnaW5hdGlvbk1vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIE1vZGVsTGlzdFBhZ2luYXRvckNvbXBvbmVudDxUIGV4dGVuZHMgRGF0YU1vZGVsPlxuICBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25DaGFuZ2VzXG57XG4gIEBJbnB1dCgpIHB1YmxpYyBsaXN0ITogTW9kZWxMaXN0PFQ+O1xuICBASW5wdXQoKSBwdWJsaWMgbWF4UGFnZXMgPSAyMDA7XG4gIEBJbnB1dCgpIHB1YmxpYyBoaWRlID0gZmFsc2U7XG5cbiAgcHVibGljIHBlclBhZ2VDb250cm9sOiBGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDxudW1iZXI+KDEwKTtcbiAgcHVibGljIHNob3dEaXJlY3RBY2Nlc3MgPSBmYWxzZTtcbiAgcHVibGljIGRpcmVjdEFjY2VzczogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2w8bnVtYmVyPigwKTtcbiAgcHVibGljIGN1clBhZ2UgPSAxO1xuICBwdWJsaWMgY3VyQ291bnQhOiBudW1iZXI7XG4gIHB1YmxpYyBwYWdlU2l6ZSE6IG51bWJlcjtcbiAgcHVibGljIF91bnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHVibGljIG9uUGFnZUNoYW5nZShwYWdlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXBhZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5saXN0LnBhZ2luYXRvci5zZXRQYWdlKHBhZ2UpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLl91bnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmxpc3QpIHtcbiAgICAgIHRoaXMucGVyUGFnZUNvbnRyb2wuc2V0VmFsdWUodGhpcy5saXN0LnBhZ2luYXRvci5nZXRQYWdlU2l6ZSgpLCB7XG4gICAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICB9KTtcbiAgICAgIHRoaXMubGlzdC5tZXRhLnBpcGUodGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKChtZXRhKSA9PiB7XG4gICAgICAgIGlmIChtZXRhLm5hdikge1xuICAgICAgICAgIHRoaXMubGlzdC5wYWdpbmF0b3IudXBkYXRlUGFnZShtZXRhLm5hdi5wYWdlIHx8IDEpO1xuICAgICAgICAgIHRoaXMuY3VyUGFnZSA9IG1ldGEubmF2LnBhZ2UgfHwgMTtcbiAgICAgICAgICB0aGlzLmN1ckNvdW50ID0gbWV0YS5uYXYuY291bnQ7XG4gICAgICAgICAgdGhpcy5saXN0LnBhZ2luYXRvci51cGRhdGVQYWdlU2l6ZShtZXRhLm5hdi5zaXplKTtcbiAgICAgICAgICB0aGlzLnBhZ2VTaXplID0gdGhpcy5saXN0LnBhZ2luYXRvci5nZXRQYWdlU2l6ZSgpO1xuICAgICAgICAgIHRoaXMucGVyUGFnZUNvbnRyb2wuc2V0VmFsdWUodGhpcy5wYWdlU2l6ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5wZXJQYWdlQ29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlKSlcbiAgICAgICAgLnN1YnNjcmliZSgoY291bnQpID0+IHtcbiAgICAgICAgICB0aGlzLmxpc3QucGFnaW5hdG9yLnNldFBhZ2VTaXplKGNvdW50KTtcbiAgICAgICAgfSk7XG5cbiAgICAgIHRoaXMuZGlyZWN0QWNjZXNzLnZhbHVlQ2hhbmdlc1xuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmUpLCBkZWJvdW5jZVRpbWUoNDAwKSlcbiAgICAgICAgLnN1YnNjcmliZSgoY291bnQpID0+IHtcbiAgICAgICAgICB0aGlzLmxpc3QucGFnaW5hdG9yLnNldFBhZ2UoK2NvdW50KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iLCJcbjxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cIiFoaWRlXCI+XG4gIDxkaXYgY2xhc3M9XCJjb2wtc20tNFwiPlxuICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBwZXJwYWdlXCIgW2Zvcm1Db250cm9sXT1cInBlclBhZ2VDb250cm9sXCI+XG4gICAgICA8b3B0aW9uIHZhbHVlPVwiMTBcIiAqbmdJZj1cIm1heFBhZ2VzJmd0Oz0xMFwiPjEwIC8gcGFnZTwvb3B0aW9uPlxuICAgICAgPG9wdGlvbiB2YWx1ZT1cIjIwXCIgKm5nSWY9XCJtYXhQYWdlcyZndDs9MjBcIj4yMCAvIHBhZ2U8L29wdGlvbj5cbiAgICAgIDxvcHRpb24gdmFsdWU9XCI1MFwiICpuZ0lmPVwibWF4UGFnZXMmZ3Q7PTUwXCI+NTAgLyBwYWdlPC9vcHRpb24+XG4gICAgICA8b3B0aW9uIHZhbHVlPVwiMTAwXCIgKm5nSWY9XCJtYXhQYWdlcyZndDs9MTAwXCI+MTAwIC8gcGFnZTwvb3B0aW9uPlxuICAgICAgPG9wdGlvbiB2YWx1ZT1cIjIwMFwiICpuZ0lmPVwibWF4UGFnZXMmZ3Q7PTIwMFwiPjIwMCAvIHBhZ2U8L29wdGlvbj5cbiAgICAgIDxvcHRpb24gdmFsdWU9XCI1MDBcIiAqbmdJZj1cIm1heFBhZ2VzJmd0Oz01MDBcIj41MDAgLyBwYWdlPC9vcHRpb24+XG4gICAgICA8b3B0aW9uIHZhbHVlPVwiMTAwMFwiICpuZ0lmPVwibWF4UGFnZXMmZ3Q7PTEwMDBcIj4xMDAwIC8gcGFnZTwvb3B0aW9uPlxuICAgICAgPG9wdGlvbiB2YWx1ZT1cIjIwMDBcIiAqbmdJZj1cIm1heFBhZ2VzJmd0Oz0yMDAwXCI+MjAwMCAvIHBhZ2U8L29wdGlvbj5cbiAgICAgIDxvcHRpb24gdmFsdWU9XCI1MDAwXCIgKm5nSWY9XCJtYXhQYWdlcyZndDs9NTAwMFwiPjUwMDAgLyBwYWdlPC9vcHRpb24+XG4gICAgICA8b3B0aW9uIHZhbHVlPVwiMTAwMDBcIiAqbmdJZj1cIm1heFBhZ2VzJmd0Oz0xMDAwMFwiPjEwMDAwIC8gcGFnZTwvb3B0aW9uPlxuICAgIDwvc2VsZWN0PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNvbC1zbS01IHBhZ2luYXRpb25cIiAqbmdJZj1cImxpc3RcIj5cbiAgICA8ZGl2IGNsYXNzPVwidGV4dC14cy1jZW50ZXJcIj5cbiAgICAgIDxuZ2ItcGFnaW5hdGlvbiBbcGFnZVNpemVdPVwicGFnZVNpemVcIiBbY29sbGVjdGlvblNpemVdPVwiY3VyQ291bnRcIiBbcGFnZV09XCJjdXJQYWdlXCIgKHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIiBbbWF4U2l6ZV09XCI1XCIgW3JvdGF0ZV09XCJ0cnVlXCI+PC9uZ2ItcGFnaW5hdGlvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjb2wtc20tMyByZXN1bHRzXCI+XG4gICAgPGRpdj57e2N1ckNvdW50fX0gcsOpc3VsdGF0cyAtPHNwYW4gKGNsaWNrKT1cInNob3dEaXJlY3RBY2Nlc3M9IXNob3dEaXJlY3RBY2Nlc3NcIiByb2xlPVwiYnV0dG9uXCI+YWNjZXMgZGlyZWN0PC9zcGFuPjwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJzaG93RGlyZWN0QWNjZXNzXCI+XG4gICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbZm9ybUNvbnRyb2xdPVwiZGlyZWN0QWNjZXNzXCIgdHlwZT1cIm51bWJlclwiIHBsYWNlaG9sZGVyPVwiQWxsZXIgw6AgbGEgcGFnZVwiPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==
@@ -0,0 +1,50 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ class ModelListSorterComponent {
6
+ constructor() { }
7
+ isUp() {
8
+ const f = this.list.sorter.get(this.field);
9
+ if (f) {
10
+ return f.direction === 'asc';
11
+ }
12
+ return false;
13
+ }
14
+ isDown() {
15
+ const f = this.list.sorter.get(this.field);
16
+ if (f) {
17
+ return f.direction === 'desc';
18
+ }
19
+ return false;
20
+ }
21
+ setUp() {
22
+ this.list.sorter.set(this.field, 'asc');
23
+ }
24
+ setDown() {
25
+ this.list.sorter.set(this.field, 'desc');
26
+ }
27
+ getCount() {
28
+ return this.list.sorter.get(this.field)
29
+ ? this.list.sorter.getAll().length
30
+ : 0;
31
+ }
32
+ getOrder() {
33
+ return this.list.sorter.getOrder(this.field);
34
+ }
35
+ cancel() {
36
+ this.list.sorter.unset(this.field);
37
+ }
38
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: ModelListSorterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
39
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: ModelListSorterComponent, isStandalone: true, selector: "data-model-list-sorter", inputs: { list: "list", field: "field" }, ngImport: i0, template: "<span class=\"dirs\"><span *ngIf=\"getOrder()&gt;=0 || getCount()&gt;1\" (click)=\"cancel()\" role=\"button\"><span class=\"count\" *ngIf=\"getCount()&gt;1\"> {{getOrder()}}</span><span class=\"bi bi-x\"></span></span><span class=\"bi bi-sort-down-alt\" (click)=\"setUp()\" [class.active]=\"isUp()\" role=\"button\"></span><span class=\"bi bi-sort-down\" (click)=\"setDown()\" [class.active]=\"isDown()\" role=\"button\"></span>&nbsp;</span>\n<ng-content></ng-content>", styles: [".dirs{color:#d3d3d3}.dirs .count{font-size:.7rem;margin-right:-.1rem;vertical-align:super}.active{color:#000}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
40
+ }
41
+ export { ModelListSorterComponent };
42
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: ModelListSorterComponent, decorators: [{
43
+ type: Component,
44
+ args: [{ selector: 'data-model-list-sorter', standalone: true, imports: [CommonModule], template: "<span class=\"dirs\"><span *ngIf=\"getOrder()&gt;=0 || getCount()&gt;1\" (click)=\"cancel()\" role=\"button\"><span class=\"count\" *ngIf=\"getCount()&gt;1\"> {{getOrder()}}</span><span class=\"bi bi-x\"></span></span><span class=\"bi bi-sort-down-alt\" (click)=\"setUp()\" [class.active]=\"isUp()\" role=\"button\"></span><span class=\"bi bi-sort-down\" (click)=\"setDown()\" [class.active]=\"isDown()\" role=\"button\"></span>&nbsp;</span>\n<ng-content></ng-content>", styles: [".dirs{color:#d3d3d3}.dirs .count{font-size:.7rem;margin-right:-.1rem;vertical-align:super}.active{color:#000}\n"] }]
45
+ }], ctorParameters: function () { return []; }, propDecorators: { list: [{
46
+ type: Input
47
+ }], field: [{
48
+ type: Input
49
+ }] } });
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtbGlzdC1zb3J0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS9zcmMvbGliL21vZGVsbGlzdC9tb2RlbC1saXN0LXNvcnRlci9tb2RlbC1saXN0LXNvcnRlci9tb2RlbC1saXN0LXNvcnRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhL3NyYy9saWIvbW9kZWxsaXN0L21vZGVsLWxpc3Qtc29ydGVyL21vZGVsLWxpc3Qtc29ydGVyL21vZGVsLWxpc3Qtc29ydGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBRS9DLE1BT2Esd0JBQXdCO0lBVW5DLGdCQUFlLENBQUM7SUFFVCxJQUFJO1FBQ1QsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsRUFBRTtZQUNMLE9BQU8sQ0FBQyxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUM7U0FDOUI7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTSxNQUFNO1FBQ1gsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsRUFBRTtZQUNMLE9BQU8sQ0FBQyxDQUFDLFNBQVMsS0FBSyxNQUFNLENBQUM7U0FDL0I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTSxLQUFLO1FBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVNLE9BQU87UUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRU0sUUFBUTtRQUNiLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDckMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU07WUFDbEMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFTSxRQUFRO1FBQ2IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTSxNQUFNO1FBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDOzhHQWhEVSx3QkFBd0I7a0dBQXhCLHdCQUF3Qiw0SENYckMsc2RBQ3lCLHdLRFFiLFlBQVk7O1NBRVgsd0JBQXdCOzJGQUF4Qix3QkFBd0I7a0JBUHBDLFNBQVM7K0JBQ0Usd0JBQXdCLGNBR3RCLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQzswRUFNUCxJQUFJO3NCQUFuQixLQUFLO2dCQUlVLEtBQUs7c0JBQXBCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNb2RlbExpc3QgfSBmcm9tICcuLi8uLi9tb2RlbC1saXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGF0YS1tb2RlbC1saXN0LXNvcnRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9tb2RlbC1saXN0LXNvcnRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21vZGVsLWxpc3Qtc29ydGVyLmNvbXBvbmVudC5zYXNzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBNb2RlbExpc3RTb3J0ZXJDb21wb25lbnQge1xuICAvKipcbiAgICogTW9kZWxMaXN0IHJlZmVyZW5jZS5cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBsaXN0ITogTW9kZWxMaXN0PGFueT47XG4gIC8qKlxuICAgKiBTb3J0IGZpZWxkIG5hbWUuXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgZmllbGQhOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIHB1YmxpYyBpc1VwKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGYgPSB0aGlzLmxpc3Quc29ydGVyLmdldCh0aGlzLmZpZWxkKTtcbiAgICBpZiAoZikge1xuICAgICAgcmV0dXJuIGYuZGlyZWN0aW9uID09PSAnYXNjJztcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGlzRG93bigpOiBib29sZWFuIHtcbiAgICBjb25zdCBmID0gdGhpcy5saXN0LnNvcnRlci5nZXQodGhpcy5maWVsZCk7XG4gICAgaWYgKGYpIHtcbiAgICAgIHJldHVybiBmLmRpcmVjdGlvbiA9PT0gJ2Rlc2MnO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgc2V0VXAoKTogdm9pZCB7XG4gICAgdGhpcy5saXN0LnNvcnRlci5zZXQodGhpcy5maWVsZCwgJ2FzYycpO1xuICB9XG5cbiAgcHVibGljIHNldERvd24oKTogdm9pZCB7XG4gICAgdGhpcy5saXN0LnNvcnRlci5zZXQodGhpcy5maWVsZCwgJ2Rlc2MnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmxpc3Quc29ydGVyLmdldCh0aGlzLmZpZWxkKVxuICAgICAgPyB0aGlzLmxpc3Quc29ydGVyLmdldEFsbCgpLmxlbmd0aFxuICAgICAgOiAwO1xuICB9XG5cbiAgcHVibGljIGdldE9yZGVyKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMubGlzdC5zb3J0ZXIuZ2V0T3JkZXIodGhpcy5maWVsZCk7XG4gIH1cblxuICBwdWJsaWMgY2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMubGlzdC5zb3J0ZXIudW5zZXQodGhpcy5maWVsZCk7XG4gIH1cbn1cbiIsIjxzcGFuIGNsYXNzPVwiZGlyc1wiPjxzcGFuICpuZ0lmPVwiZ2V0T3JkZXIoKSZndDs9MCB8fCBnZXRDb3VudCgpJmd0OzFcIiAoY2xpY2spPVwiY2FuY2VsKClcIiByb2xlPVwiYnV0dG9uXCI+PHNwYW4gY2xhc3M9XCJjb3VudFwiICpuZ0lmPVwiZ2V0Q291bnQoKSZndDsxXCI+IHt7Z2V0T3JkZXIoKX19PC9zcGFuPjxzcGFuIGNsYXNzPVwiYmkgYmkteFwiPjwvc3Bhbj48L3NwYW4+PHNwYW4gY2xhc3M9XCJiaSBiaS1zb3J0LWRvd24tYWx0XCIgKGNsaWNrKT1cInNldFVwKClcIiBbY2xhc3MuYWN0aXZlXT1cImlzVXAoKVwiIHJvbGU9XCJidXR0b25cIj48L3NwYW4+PHNwYW4gY2xhc3M9XCJiaSBiaS1zb3J0LWRvd25cIiAoY2xpY2spPVwic2V0RG93bigpXCIgW2NsYXNzLmFjdGl2ZV09XCJpc0Rvd24oKVwiIHJvbGU9XCJidXR0b25cIj48L3NwYW4+Jm5ic3A7PC9zcGFuPlxuPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PiJdfQ==
@@ -0,0 +1,158 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import { combineLatest, NEVER, of, ReplaySubject, share, Subject, takeUntil, } from 'rxjs';
3
+ import { switchMap, tap, throttleTime } from 'rxjs/operators';
4
+ import { ModelListFields } from './model-list-fields/model-list-fields';
5
+ import { ModelListPaginator } from './model-list-paginator/model-list-paginator';
6
+ import { ModelListSorter } from './model-list-sorter/model-list-sorter';
7
+ import { ModelListFilters } from './model-list-filters/model-list-filters';
8
+ import { DATA_AUTH_SERVICE } from '../auth/auth-interceptor.service';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "../auth/auth.service";
11
+ export class ModelList {
12
+ constructor(name) {
13
+ this.messages$ = new ReplaySubject(1);
14
+ this.started = false;
15
+ this.name = name;
16
+ }
17
+ get results() {
18
+ if (!this._results) {
19
+ this._results = this.queryset.results.pipe(
20
+ // tap(() => console.log('@solidev/data: modellist result')),
21
+ share(), takeUntil(this.unsubscribe || NEVER));
22
+ }
23
+ return this._results;
24
+ }
25
+ get meta() {
26
+ if (!this._meta) {
27
+ this._meta = this.queryset.meta.pipe(
28
+ // tap(() => console.log('@solidev/data: modellist meta')),
29
+ share(), takeUntil(this.unsubscribe || NEVER));
30
+ }
31
+ return this._meta;
32
+ }
33
+ get loading() {
34
+ if (!this._loading) {
35
+ this._loading = this.queryset.loading.pipe(
36
+ // tap(() => console.log('@solidev/data: modellist loading')),
37
+ share(), takeUntil(this.unsubscribe || NEVER));
38
+ }
39
+ return this._loading;
40
+ }
41
+ get full() {
42
+ if (!this._full) {
43
+ this._full = this.queryset.full.pipe(
44
+ // tap(() => console.log('@solidev/data: modellist full')),
45
+ share(), takeUntil(this.unsubscribe || NEVER));
46
+ }
47
+ return this._full;
48
+ }
49
+ start(params) {
50
+ let filter$;
51
+ let reloadFired = false;
52
+ if (params.filter && !params.filter.subscribe) {
53
+ filter$ = of(params.filter);
54
+ }
55
+ else if (params.filter && params.filter.subscribe) {
56
+ filter$ = params.filter;
57
+ }
58
+ else {
59
+ filter$ = of({});
60
+ }
61
+ combineLatest([
62
+ this.reload.pipe(tap((v) => (reloadFired = !!v))),
63
+ this.filters.output,
64
+ filter$,
65
+ this.paginator.output,
66
+ this.sorter.output,
67
+ this.fields.output,
68
+ ])
69
+ .pipe(throttleTime(200), switchMap(([reload, filter, manualFilter, paginator, sorter, fields]) => {
70
+ this.queryset
71
+ .filter(filter)
72
+ .filter(manualFilter || {}, true)
73
+ .paginateBy(paginator.page_size)
74
+ .setPage(paginator.page)
75
+ .sort(...sorter)
76
+ .setFields(fields);
77
+ const dbSync = reloadFired;
78
+ reloadFired = false;
79
+ return this.queryset.get(true, dbSync);
80
+ }), takeUntil(this.unsubscribe || NEVER))
81
+ .subscribe({
82
+ next: (results) => {
83
+ // console.log('@solidev/data: modellist:get results', this.name);
84
+ },
85
+ error: (error) => {
86
+ console.error('@solidev/data: error while getting model list results : ', error);
87
+ },
88
+ complete: () => {
89
+ // console.log('@solidev/data: modellist:completed', this.name);
90
+ this.started = false;
91
+ },
92
+ });
93
+ this.reload.next();
94
+ this.started = true;
95
+ }
96
+ }
97
+ class ModelListService {
98
+ constructor(_auth) {
99
+ this._auth = _auth;
100
+ this._instances = new Map();
101
+ this._auth.logout$.subscribe(() => this.reset());
102
+ }
103
+ reset() {
104
+ for (const i of this._instances.values()) {
105
+ if (i.unsubscribe) {
106
+ console.log('Clearing ', i);
107
+ i.unsubscribe.next();
108
+ }
109
+ }
110
+ this._instances.clear();
111
+ }
112
+ get(name, collection, defaults) {
113
+ let ml;
114
+ if (!name || !this._instances.has(name) || !defaults.keep) {
115
+ ml = new ModelList(name);
116
+ ml.queryset = collection.queryset();
117
+ ml.fields = new ModelListFields(collection, defaults.fields);
118
+ ml.sorter = new ModelListSorter(defaults.sorter || []);
119
+ ml.paginator = new ModelListPaginator(defaults.paginator);
120
+ ml.filters = new ModelListFilters(defaults.filters);
121
+ if (defaults.keep) {
122
+ this._instances.set(name, ml);
123
+ }
124
+ }
125
+ else {
126
+ ml = this._instances.get(name);
127
+ }
128
+ if (!ml.started) {
129
+ if (defaults.reload) {
130
+ ml.reload = defaults.reload;
131
+ }
132
+ else {
133
+ ml.reload = new Subject();
134
+ }
135
+ if (defaults.unsubscribe) {
136
+ ml.unsubscribe = defaults.unsubscribe;
137
+ }
138
+ else {
139
+ ml.unsubscribe = new Subject();
140
+ }
141
+ ml.start(defaults);
142
+ }
143
+ return ml;
144
+ }
145
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: ModelListService, deps: [{ token: DATA_AUTH_SERVICE }], target: i0.ɵɵFactoryTarget.Injectable }); }
146
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: ModelListService, providedIn: 'root' }); }
147
+ }
148
+ export { ModelListService };
149
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: ModelListService, decorators: [{
150
+ type: Injectable,
151
+ args: [{
152
+ providedIn: 'root',
153
+ }]
154
+ }], ctorParameters: function () { return [{ type: i1.AuthServiceBase, decorators: [{
155
+ type: Inject,
156
+ args: [DATA_AUTH_SERVICE]
157
+ }] }]; } });
158
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtbGlzdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS9zcmMvbGliL21vZGVsbGlzdC9tb2RlbC1saXN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUNMLGFBQWEsRUFDYixLQUFLLEVBRUwsRUFBRSxFQUNGLGFBQWEsRUFDYixLQUFLLEVBQ0wsT0FBTyxFQUNQLFNBQVMsR0FDVixNQUFNLE1BQU0sQ0FBQztBQVFkLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNqRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFLM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7OztBQXlEckUsTUFBTSxPQUFPLFNBQVM7SUFZcEIsWUFBWSxJQUFZO1FBSGpCLGNBQVMsR0FBRyxJQUFJLGFBQWEsQ0FBb0IsQ0FBQyxDQUFDLENBQUM7UUFDcEQsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUdyQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNuQixDQUFDO0lBSUQsSUFBVyxPQUFPO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSTtZQUN4Qyw2REFBNkQ7WUFDN0QsS0FBSyxFQUFF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SSxRQUFRLENBQUMsTUFBTSxFQUFFO2dCQUNuQixFQUFFLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7YUFDN0I7aUJBQU07Z0JBQ0wsRUFBRSxDQUFDLE1BQU0sR0FBRyxJQUFJLE9BQU8sRUFBa0IsQ0FBQzthQUMzQztZQUNELElBQUksUUFBUSxDQUFDLFdBQVcsRUFBRTtnQkFDeEIsRUFBRSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDO2FBQ3ZDO2lCQUFNO2dCQUNMLEVBQUUsQ0FBQyxXQUFXLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQzthQUN0QztZQUNELEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDcEI7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7OEdBckRVLGdCQUFnQixrQkFJakIsaUJBQWlCO2tIQUpoQixnQkFBZ0IsY0FGZixNQUFNOztTQUVQLGdCQUFnQjsyRkFBaEIsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBS0ksTUFBTTsyQkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIGNvbWJpbmVMYXRlc3QsXG4gIE5FVkVSLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgUmVwbGF5U3ViamVjdCxcbiAgc2hhcmUsXG4gIFN1YmplY3QsXG4gIHRha2VVbnRpbCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEYXRhTW9kZWwgfSBmcm9tICcuLi9kYXRhL2RhdGEtbW9kZWwnO1xuaW1wb3J0IHtcbiAgSVF1ZXJ5TWV0YSxcbiAgSVF1ZXJ5TWV0YU5hdlBhcmFtcyxcbiAgSVF1ZXJ5TmF2LFxuICBRdWVyeXNldCxcbn0gZnJvbSAnLi4vZGF0YS9kYXRhLXF1ZXJ5JztcbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFwLCB0aHJvdHRsZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBNb2RlbExpc3RGaWVsZHMgfSBmcm9tICcuL21vZGVsLWxpc3QtZmllbGRzL21vZGVsLWxpc3QtZmllbGRzJztcbmltcG9ydCB7IE1vZGVsTGlzdFBhZ2luYXRvciB9IGZyb20gJy4vbW9kZWwtbGlzdC1wYWdpbmF0b3IvbW9kZWwtbGlzdC1wYWdpbmF0b3InO1xuaW1wb3J0IHsgTW9kZWxMaXN0U29ydGVyIH0gZnJvbSAnLi9tb2RlbC1saXN0LXNvcnRlci9tb2RlbC1saXN0LXNvcnRlcic7XG5pbXBvcnQgeyBNb2RlbExpc3RGaWx0ZXJzIH0gZnJvbSAnLi9tb2RlbC1saXN0LWZpbHRlcnMvbW9kZWwtbGlzdC1maWx0ZXJzJztcbmltcG9ydCB7IENvbGxlY3Rpb24gfSBmcm9tICcuLi9kYXRhL2RhdGEtY29sbGVjdGlvbic7XG5pbXBvcnQgeyBNb2RlbExpc3RGaWx0ZXIgfSBmcm9tICcuL21vZGVsLWxpc3QtZmlsdGVycy9tb2RlbC1saXN0LWZpbHRlcic7XG5pbXBvcnQgeyBJRmllbGRIZWFkZXJNZXNzYWdlIH0gZnJvbSAnLi9tb2RlbC1saXN0LWZpZWxkcy9tb2RlbC1saXN0LWZpZWxkLWhlYWRlci9tZXNzYWdlcyc7XG5pbXBvcnQgeyBBdXRoU2VydmljZUJhc2UgfSBmcm9tICcuLi9hdXRoL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBEQVRBX0FVVEhfU0VSVklDRSB9IGZyb20gJy4uL2F1dGgvYXV0aC1pbnRlcmNlcHRvci5zZXJ2aWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBDdXN0b21GaWVsZCB7XG4gIG5hbWU6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgcHJpb3JpdHk/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyRGVmYXVsdHMge1xuICBbaW5kZXg6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IHR5cGUgU29ydGVyRGVmYXVsdHMgPSBzdHJpbmdbXTtcblxuLyoqXG4gKiBGaWVsZHMgcGFyYW1ldGVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWVsZHNQYXJhbXMge1xuICAvKiogQWxsb3dlZCBmaWVsZHMsIGFsbCBtb2RlbCBmaWVsZHMgYXJlIGFsbG93ZWQgaWYgZW1wdHkgKi9cbiAgYWxsb3dlZD86IHN0cmluZ1tdO1xuICAvKiogRGVmYXVsdCBlbmFibGVkIGZpZWxkcyAqL1xuICBkZWZhdWx0cz86IHN0cmluZ1tdO1xuICAvKiogRXhjbHVkZWQgZmllbGRzICovXG4gIGV4Y2x1ZGVkPzogc3RyaW5nW107XG4gIC8qKiBDdXN0b20gZmllbGRzICovXG4gIGN1c3RvbT86IEN1c3RvbUZpZWxkW107XG59XG5cbi8qKlxuICogRmlsdGVycyBwYXJhbWV0ZXJzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlcnNQYXJhbXMge1xuICAvKiogQWxsb3dlZCBmaWx0ZXIgbmFtZXMgKi9cbiAgYWxsb3dlZD86IHN0cmluZ1tdO1xuICAvKiogRGVmYXVsdCBhY3RpdmUgZmlsdGVyIG5hbWVzICovXG4gIGRlZmF1bHRzPzogc3RyaW5nW107XG4gIC8qKiBFeGNsdWRlZCBmaWx0ZXIgbmFtZXMgKi9cbiAgZXhjbHVkZWQ/OiBzdHJpbmdbXTtcbiAgLyoqIEZpbHRlcnMgZGVmaW5pdGlvbnMgKi9cbiAgZmlsdGVycz86IE1vZGVsTGlzdEZpbHRlcltdO1xufVxuXG5leHBvcnQgdHlwZSBQYWdpbmF0aW9uUGFyYW1zID0gSVF1ZXJ5TWV0YU5hdlBhcmFtcztcblxuZXhwb3J0IHR5cGUgSU1vZGVsTGlzdE1lc3NhZ2UgPSBJRmllbGRIZWFkZXJNZXNzYWdlO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1vZGVsTGlzdFBhcmFtcyB7XG4gIGZpZWxkcz86IEZpZWxkc1BhcmFtcztcbiAgZmlsdGVycz86IEZpbHRlcnNQYXJhbXM7XG4gIGZpbHRlcj86IEZpbHRlckRlZmF1bHRzIHwgT2JzZXJ2YWJsZTxGaWx0ZXJEZWZhdWx0cz47XG4gIHNvcnRlcj86IFNvcnRlckRlZmF1bHRzO1xuICBwYWdpbmF0b3I/OiBJUXVlcnlOYXY7XG4gIGtlZXA/OiBib29sZWFuO1xuICByZWxvYWQ/OiBTdWJqZWN0PHZvaWQgfCBib29sZWFuPjtcbiAgdW5zdWJzY3JpYmU/OiBTdWJqZWN0PHZvaWQ+O1xufVxuXG5leHBvcnQgY2xhc3MgTW9kZWxMaXN0PFQgZXh0ZW5kcyBEYXRhTW9kZWw+IHtcbiAgcHVibGljIG5hbWUhOiBzdHJpbmc7XG4gIHB1YmxpYyBmaWx0ZXJzITogTW9kZWxMaXN0RmlsdGVycztcbiAgcHVibGljIHNvcnRlciE6IE1vZGVsTGlzdFNvcnRlcjtcbiAgcHVibGljIHBhZ2luYXRvciE6IE1vZGVsTGlzdFBhZ2luYXRvcjtcbiAgcHVibGljIHF1ZXJ5c2V0ITogUXVlcnlzZXQ8VD47XG4gIHB1YmxpYyBmaWVsZHMhOiBNb2RlbExpc3RGaWVsZHM8VD47XG4gIHB1YmxpYyByZWxvYWQhOiBTdWJqZWN0PHZvaWQgfCBib29sZWFuPjtcbiAgcHVibGljIHVuc3Vic2NyaWJlITogU3ViamVjdDx2b2lkPjtcbiAgcHVibGljIG1lc3NhZ2VzJCA9IG5ldyBSZXBsYXlTdWJqZWN0PElNb2RlbExpc3RNZXNzYWdlPigxKTtcbiAgcHVibGljIHN0YXJ0ZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVzdWx0cz86IE9ic2VydmFibGU8VFtdPjtcblxuICBwdWJsaWMgZ2V0IHJlc3VsdHMoKTogT2JzZXJ2YWJsZTxUW10+IHtcbiAgICBpZiAoIXRoaXMuX3Jlc3VsdHMpIHtcbiAgICAgIHRoaXMuX3Jlc3VsdHMgPSB0aGlzLnF1ZXJ5c2V0LnJlc3VsdHMucGlwZShcbiAgICAgICAgLy8gdGFwKCgpID0+IGNvbnNvbGUubG9nKCdAc29saWRldi9kYXRhOiBtb2RlbGxpc3QgcmVzdWx0JykpLFxuICAgICAgICBzaGFyZSgpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSB8fCBORVZFUilcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9yZXN1bHRzO1xuICB9XG5cbiAgcHJpdmF0ZSBfbWV0YT86IE9ic2VydmFibGU8SVF1ZXJ5TWV0YT47XG5cbiAgcHVibGljIGdldCBtZXRhKCk6IE9ic2VydmFibGU8SVF1ZXJ5TWV0YT4ge1xuICAgIGlmICghdGhpcy5fbWV0YSkge1xuICAgICAgdGhpcy5fbWV0YSA9IHRoaXMucXVlcnlzZXQubWV0YS5waXBlKFxuICAgICAgICAvLyB0YXAoKCkgPT4gY29uc29sZS5sb2coJ0Bzb2xpZGV2L2RhdGE6IG1vZGVsbGlzdCBtZXRhJykpLFxuICAgICAgICBzaGFyZSgpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSB8fCBORVZFUilcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9tZXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBfbG9hZGluZz86IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgcHVibGljIGdldCBsb2FkaW5nKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIGlmICghdGhpcy5fbG9hZGluZykge1xuICAgICAgdGhpcy5fbG9hZGluZyA9IHRoaXMucXVlcnlzZXQubG9hZGluZy5waXBlKFxuICAgICAgICAvLyB0YXAoKCkgPT4gY29uc29sZS5sb2coJ0Bzb2xpZGV2L2RhdGE6IG1vZGVsbGlzdCBsb2FkaW5nJykpLFxuICAgICAgICBzaGFyZSgpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSB8fCBORVZFUilcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9sb2FkaW5nO1xuICB9XG5cbiAgcHJpdmF0ZSBfZnVsbD86IE9ic2VydmFibGU8W1RbXSwgYm9vbGVhbiwgSVF1ZXJ5TWV0YV0+O1xuXG4gIHB1YmxpYyBnZXQgZnVsbCgpOiBPYnNlcnZhYmxlPFtUW10sIGJvb2xlYW4sIElRdWVyeU1ldGFdPiB7XG4gICAgaWYgKCF0aGlzLl9mdWxsKSB7XG4gICAgICB0aGlzLl9mdWxsID0gdGhpcy5xdWVyeXNldC5mdWxsLnBpcGUoXG4gICAgICAgIC8vIHRhcCgoKSA9PiBjb25zb2xlLmxvZygnQHNvbGlkZXYvZGF0YTogbW9kZWxsaXN0IGZ1bGwnKSksXG4gICAgICAgIHNoYXJlKCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlIHx8IE5FVkVSKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2Z1bGw7XG4gIH1cblxuICBwdWJsaWMgc3RhcnQocGFyYW1zOiBNb2RlbExpc3RQYXJhbXMpIHtcbiAgICBsZXQgZmlsdGVyJDogT2JzZXJ2YWJsZTxGaWx0ZXJEZWZhdWx0cz47XG4gICAgbGV0IHJlbG9hZEZpcmVkID0gZmFsc2U7XG4gICAgaWYgKHBhcmFtcy5maWx0ZXIgJiYgIXBhcmFtcy5maWx0ZXIuc3Vic2NyaWJlKSB7XG4gICAgICBmaWx0ZXIkID0gb2YocGFyYW1zLmZpbHRlciBhcyBGaWx0ZXJEZWZhdWx0cyk7XG4gICAgfSBlbHNlIGlmIChwYXJhbXMuZmlsdGVyICYmIHBhcmFtcy5maWx0ZXIuc3Vic2NyaWJlKSB7XG4gICAgICBmaWx0ZXIkID0gcGFyYW1zLmZpbHRlciBhcyBPYnNlcnZhYmxlPEZpbHRlckRlZmF1bHRzPjtcbiAgICB9IGVsc2Uge1xuICAgICAgZmlsdGVyJCA9IG9mKHt9KTtcbiAgICB9XG4gICAgY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLnJlbG9hZC5waXBlKHRhcCgodikgPT4gKHJlbG9hZEZpcmVkID0gISF2KSkpLFxuICAgICAgdGhpcy5maWx0ZXJzLm91dHB1dCxcbiAgICAgIGZpbHRlciQsXG4gICAgICB0aGlzLnBhZ2luYXRvci5vdXRwdXQsXG4gICAgICB0aGlzLnNvcnRlci5vdXRwdXQsXG4gICAgICB0aGlzLmZpZWxkcy5vdXRwdXQsXG4gICAgXSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0aHJvdHRsZVRpbWUoMjAwKSxcbiAgICAgICAgc3dpdGNoTWFwKFxuICAgICAgICAgIChbcmVsb2FkLCBmaWx0ZXIsIG1hbnVhbEZpbHRlciwgcGFnaW5hdG9yLCBzb3J0ZXIsIGZpZWxkc10pID0+IHtcbiAgICAgICAgICAgIHRoaXMucXVlcnlzZXRcbiAgICAgICAgICAgICAgLmZpbHRlcihmaWx0ZXIpXG4gICAgICAgICAgICAgIC5maWx0ZXIobWFudWFsRmlsdGVyIHx8IHt9LCB0cnVlKVxuICAgICAgICAgICAgICAucGFnaW5hdGVCeShwYWdpbmF0b3IucGFnZV9zaXplKVxuICAgICAgICAgICAgICAuc2V0UGFnZShwYWdpbmF0b3IucGFnZSlcbiAgICAgICAgICAgICAgLnNvcnQoLi4uc29ydGVyKVxuICAgICAgICAgICAgICAuc2V0RmllbGRzKGZpZWxkcyk7XG4gICAgICAgICAgICBjb25zdCBkYlN5bmMgPSByZWxvYWRGaXJlZDtcbiAgICAgICAgICAgIHJlbG9hZEZpcmVkID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5xdWVyeXNldC5nZXQodHJ1ZSwgZGJTeW5jKTtcbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlIHx8IE5FVkVSKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXN1bHRzOiBhbnkpOiB2b2lkID0+IHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnQHNvbGlkZXYvZGF0YTogbW9kZWxsaXN0OmdldCByZXN1bHRzJywgdGhpcy5uYW1lKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAnQHNvbGlkZXYvZGF0YTogZXJyb3Igd2hpbGUgZ2V0dGluZyBtb2RlbCBsaXN0IHJlc3VsdHMgOiAnLFxuICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdAc29saWRldi9kYXRhOiBtb2RlbGxpc3Q6Y29tcGxldGVkJywgdGhpcy5uYW1lKTtcbiAgICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIHRoaXMucmVsb2FkLm5leHQoKTtcbiAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuICB9XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBNb2RlbExpc3RTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBfaW5zdGFuY2VzOiBNYXA8c3RyaW5nLCBNb2RlbExpc3Q8YW55Pj4gPSBuZXcgTWFwKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChEQVRBX0FVVEhfU0VSVklDRSkgcHJpdmF0ZSBfYXV0aDogQXV0aFNlcnZpY2VCYXNlPGFueSwgYW55LCBhbnk+XG4gICkge1xuICAgIHRoaXMuX2F1dGgubG9nb3V0JC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5yZXNldCgpKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldCgpIHtcbiAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy5faW5zdGFuY2VzLnZhbHVlcygpKSB7XG4gICAgICBpZiAoaS51bnN1YnNjcmliZSkge1xuICAgICAgICBjb25zb2xlLmxvZygnQ2xlYXJpbmcgJywgaSk7XG4gICAgICAgIGkudW5zdWJzY3JpYmUubmV4dCgpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9pbnN0YW5jZXMuY2xlYXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQ8VCBleHRlbmRzIERhdGFNb2RlbD4oXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGNvbGxlY3Rpb246IENvbGxlY3Rpb248VD4sXG4gICAgZGVmYXVsdHM6IE1vZGVsTGlzdFBhcmFtc1xuICApIHtcbiAgICBsZXQgbWw6IE1vZGVsTGlzdDxUPjtcblxuICAgIGlmICghbmFtZSB8fCAhdGhpcy5faW5zdGFuY2VzLmhhcyhuYW1lKSB8fCAhZGVmYXVsdHMua2VlcCkge1xuICAgICAgbWwgPSBuZXcgTW9kZWxMaXN0PFQ+KG5hbWUpO1xuICAgICAgbWwucXVlcnlzZXQgPSBjb2xsZWN0aW9uLnF1ZXJ5c2V0KCk7XG4gICAgICBtbC5maWVsZHMgPSBuZXcgTW9kZWxMaXN0RmllbGRzKGNvbGxlY3Rpb24sIGRlZmF1bHRzLmZpZWxkcyk7XG4gICAgICBtbC5zb3J0ZXIgPSBuZXcgTW9kZWxMaXN0U29ydGVyKGRlZmF1bHRzLnNvcnRlciB8fCBbXSk7XG4gICAgICBtbC5wYWdpbmF0b3IgPSBuZXcgTW9kZWxMaXN0UGFnaW5hdG9yKGRlZmF1bHRzLnBhZ2luYXRvcik7XG4gICAgICBtbC5maWx0ZXJzID0gbmV3IE1vZGVsTGlzdEZpbHRlcnMoZGVmYXVsdHMuZmlsdGVycyk7XG4gICAgICBpZiAoZGVmYXVsdHMua2VlcCkge1xuICAgICAgICB0aGlzLl9pbnN0YW5jZXMuc2V0KG5hbWUsIG1sKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbWwgPSB0aGlzLl9pbnN0YW5jZXMuZ2V0KG5hbWUpITtcbiAgICB9XG4gICAgaWYgKCFtbC5zdGFydGVkKSB7XG4gICAgICBpZiAoZGVmYXVsdHMucmVsb2FkKSB7XG4gICAgICAgIG1sLnJlbG9hZCA9IGRlZmF1bHRzLnJlbG9hZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1sLnJlbG9hZCA9IG5ldyBTdWJqZWN0PHZvaWQgfCBib29sZWFuPigpO1xuICAgICAgfVxuICAgICAgaWYgKGRlZmF1bHRzLnVuc3Vic2NyaWJlKSB7XG4gICAgICAgIG1sLnVuc3Vic2NyaWJlID0gZGVmYXVsdHMudW5zdWJzY3JpYmU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtbC51bnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgICB9XG4gICAgICBtbC5zdGFydChkZWZhdWx0cyk7XG4gICAgfVxuICAgIHJldHVybiBtbDtcbiAgfVxufVxuIl19
@@ -0,0 +1,143 @@
1
+ import { Component, Input, } from '@angular/core';
2
+ import { Subject, takeUntil } from 'rxjs';
3
+ import { NavigationEnd, RouterModule, } from '@angular/router';
4
+ import { filter } from 'rxjs/operators';
5
+ import { CommonModule } from '@angular/common';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/router";
8
+ import * as i2 from "@angular/common";
9
+ /**
10
+ * Use data from route config to create a breadcrumb for current route.
11
+ *
12
+ * Route config data is :
13
+ * - title : route fragment title or lodash template to build title
14
+ * (provided arguments for template processing : route (current segment route snapshot)
15
+ * and data (input argument)
16
+ * - icon: icon classes. Example fa fa-home for home & font awesome
17
+ */
18
+ class BreadcrumbComponent {
19
+ constructor(router, route) {
20
+ this.router = router;
21
+ this.route = route;
22
+ /**
23
+ * Do we display icons ?
24
+ */
25
+ this.icons = true;
26
+ this.tree = [];
27
+ this._subscriptions = new Subject();
28
+ }
29
+ ngOnInit() {
30
+ this.getRouteTree(this.router.routerState);
31
+ this.router.events
32
+ .pipe(takeUntil(this._subscriptions), filter((event) => event instanceof NavigationEnd))
33
+ .subscribe(() => {
34
+ this.getRouteTree(this.router.routerState);
35
+ });
36
+ }
37
+ ngOnDestroy() {
38
+ this._subscriptions.next();
39
+ this._subscriptions.complete();
40
+ }
41
+ ngOnChanges(changes) {
42
+ this.getRouteTree(this.router.routerState);
43
+ }
44
+ getRouteTree(current) {
45
+ const tree = [];
46
+ const url = [];
47
+ let p = current.root.snapshot;
48
+ while (p != null) {
49
+ let rdata = {
50
+ tree: false,
51
+ title: () => 'xxxx',
52
+ icon: '',
53
+ skip: true,
54
+ };
55
+ const data = p.data;
56
+ // Get route data
57
+ if (p.routeConfig && p.routeConfig.data) {
58
+ rdata = p.routeConfig.data;
59
+ }
60
+ if (rdata.tree) {
61
+ // Get icon
62
+ for (const u of p.url) {
63
+ url.push(u.path);
64
+ let rtd = {
65
+ icon: this.getIcon(rdata, data),
66
+ title: this.getTitle(rdata, data, u),
67
+ path: url.join('/'),
68
+ current: false,
69
+ };
70
+ if (rtd.path.length > 0 && rtd.path[0] !== '/') {
71
+ rtd.path = '/' + rtd.path;
72
+ }
73
+ if (!rdata.skip) {
74
+ tree.push(rtd);
75
+ }
76
+ }
77
+ }
78
+ else {
79
+ url.push(p.url.join('/'));
80
+ let rtd = {
81
+ icon: this.getIcon(rdata, data),
82
+ title: this.getTitle(rdata, data),
83
+ path: url.join('/'),
84
+ current: false,
85
+ };
86
+ if (rtd.path.length > 0 && rtd.path[0] !== '/') {
87
+ rtd.path = '/' + rtd.path;
88
+ }
89
+ if (!rdata.skip) {
90
+ tree.push(rtd);
91
+ }
92
+ }
93
+ p = p.firstChild;
94
+ }
95
+ if (tree.length > 0) {
96
+ tree[tree.length - 1].current = true;
97
+ }
98
+ this.tree = tree;
99
+ }
100
+ getTitle(rdata, data, u) {
101
+ if (rdata['title']) {
102
+ if (typeof rdata['title'] === 'function') {
103
+ const tpl = rdata['title'];
104
+ try {
105
+ if (u) {
106
+ return tpl(data, u.path);
107
+ }
108
+ else {
109
+ return tpl(data);
110
+ }
111
+ }
112
+ catch (e) {
113
+ console.warn('Unable to process breadcrumb function', e);
114
+ if (data.title != null) {
115
+ return 'xx';
116
+ }
117
+ }
118
+ }
119
+ else {
120
+ return rdata['title'];
121
+ }
122
+ }
123
+ return 'xxx';
124
+ }
125
+ getIcon(rdata, data) {
126
+ if (data.icon) {
127
+ return data.icon;
128
+ }
129
+ return '';
130
+ }
131
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: BreadcrumbComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
132
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: BreadcrumbComponent, isStandalone: true, selector: "data-breadcrumb", inputs: { data: "data", icons: "icons" }, usesOnChanges: true, ngImport: i0, template: "\n<nav aria-label=\"breadcrumb\">\n <ol class=\"breadcrumb\">\n <ng-container *ngFor=\"let p of tree\">\n <li class=\"breadcrumb-item\" *ngIf=\"!p.current\"><a class=\"breadcrumb-item\" [routerLink]=\"p.path\">\n <ng-container *ngIf=\"icons &amp;&amp; p.icon\"><i class=\"me-2\" [ngClass]=\"p.icon\"></i>{{p.title}}</ng-container>\n <ng-container *ngIf=\"!(icons &amp;&amp; p.icon)\">{{p.title}}</ng-container></a></li>\n <li class=\"breadcrumb-item active\" aria-current=\"page\" *ngIf=\"p.current\">\n <ng-container *ngIf=\"icons &amp;&amp; p.icon\"><i class=\"me-1\" [ngClass]=\"p.icon\"></i>{{p.title}}</ng-container>\n <ng-container *ngIf=\"!(icons &amp;&amp; p.icon)\">{{p.title}}</ng-container>\n </li>\n </ng-container>\n </ol>\n</nav>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] }); }
133
+ }
134
+ export { BreadcrumbComponent };
135
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: BreadcrumbComponent, decorators: [{
136
+ type: Component,
137
+ args: [{ selector: 'data-breadcrumb', standalone: true, imports: [CommonModule, RouterModule], template: "\n<nav aria-label=\"breadcrumb\">\n <ol class=\"breadcrumb\">\n <ng-container *ngFor=\"let p of tree\">\n <li class=\"breadcrumb-item\" *ngIf=\"!p.current\"><a class=\"breadcrumb-item\" [routerLink]=\"p.path\">\n <ng-container *ngIf=\"icons &amp;&amp; p.icon\"><i class=\"me-2\" [ngClass]=\"p.icon\"></i>{{p.title}}</ng-container>\n <ng-container *ngIf=\"!(icons &amp;&amp; p.icon)\">{{p.title}}</ng-container></a></li>\n <li class=\"breadcrumb-item active\" aria-current=\"page\" *ngIf=\"p.current\">\n <ng-container *ngIf=\"icons &amp;&amp; p.icon\"><i class=\"me-1\" [ngClass]=\"p.icon\"></i>{{p.title}}</ng-container>\n <ng-container *ngIf=\"!(icons &amp;&amp; p.icon)\">{{p.title}}</ng-container>\n </li>\n </ng-container>\n </ol>\n</nav>" }]
138
+ }], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }]; }, propDecorators: { data: [{
139
+ type: Input
140
+ }], icons: [{
141
+ type: Input
142
+ }] } });
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhL3NyYy9saWIvcm91dGluZy9icmVhZGNydW1iL2JyZWFkY3J1bWIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS9zcmMvbGliL3JvdXRpbmcvYnJlYWRjcnVtYi9icmVhZGNydW1iLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxHQUtOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFHTCxhQUFhLEVBRWIsWUFBWSxHQUdiLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7OztBQVUvQzs7Ozs7Ozs7R0FRRztBQUNILE1BT2EsbUJBQW1CO0lBWTlCLFlBQW1CLE1BQWMsRUFBUyxLQUFxQjtRQUE1QyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVMsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFQL0Q7O1dBRUc7UUFDYSxVQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLFNBQUksR0FBb0IsRUFBRSxDQUFDO1FBQzFCLG1CQUFjLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUVxQixDQUFDO0lBRW5FLFFBQVE7UUFDTixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO2FBQ2YsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQzlCLE1BQU0sQ0FB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TCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUN2QjtTQUNGO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU0sT0FBTyxDQUNaLEtBQStCLEVBQy9CLElBQXFCO1FBRXJCLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUNiLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztTQUNsQjtRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQzs4R0FsSVUsbUJBQW1CO2tHQUFuQixtQkFBbUIsMElDN0NoQyxneUJBYU0seUREOEJNLFlBQVksNlZBQUUsWUFBWTs7U0FFekIsbUJBQW1COzJGQUFuQixtQkFBbUI7a0JBUC9CLFNBQVM7K0JBQ0UsaUJBQWlCLGNBR2YsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQzswSEFNckIsSUFBSTtzQkFBbkIsS0FBSztnQkFJVSxLQUFLO3NCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIEFjdGl2YXRlZFJvdXRlLFxuICBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICBOYXZpZ2F0aW9uRW5kLFxuICBSb3V0ZXIsXG4gIFJvdXRlck1vZHVsZSxcbiAgUm91dGVyU3RhdGUsXG4gIFVybFNlZ21lbnQsXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQmFzZVJvdXRlUGFyYW1zLCBUcGxGbiB9IGZyb20gJy4uL3JvdXRpbmcnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQYXRoVHJlZUl0ZW0ge1xuICBwYXRoOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGljb246IHN0cmluZztcbiAgY3VycmVudDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBVc2UgZGF0YSBmcm9tIHJvdXRlIGNvbmZpZyB0byBjcmVhdGUgYSBicmVhZGNydW1iIGZvciBjdXJyZW50IHJvdXRlLlxuICpcbiAqIFJvdXRlIGNvbmZpZyBkYXRhIGlzIDpcbiAqIC0gdGl0bGUgOiByb3V0ZSBmcmFnbWVudCB0aXRsZSBvciBsb2Rhc2ggdGVtcGxhdGUgdG8gYnVpbGQgdGl0bGVcbiAqICAgKHByb3ZpZGVkIGFyZ3VtZW50cyBmb3IgdGVtcGxhdGUgcHJvY2Vzc2luZyA6IHJvdXRlIChjdXJyZW50IHNlZ21lbnQgcm91dGUgc25hcHNob3QpXG4gKiAgIGFuZCBkYXRhIChpbnB1dCBhcmd1bWVudClcbiAqIC0gaWNvbjogaWNvbiBjbGFzc2VzLiBFeGFtcGxlIGZhIGZhLWhvbWUgZm9yIGhvbWUgJiBmb250IGF3ZXNvbWVcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGF0YS1icmVhZGNydW1iJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2JyZWFkY3J1bWIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9icmVhZGNydW1iLmNvbXBvbmVudC5jc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUm91dGVyTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgQnJlYWRjcnVtYkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogQWRkaXRpb25hbCBkYXRhIHRvIGJlIHVzZWQgaW4gdGl0bGVUZW1wbGF0ZVxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGRhdGE6IGFueTtcbiAgLyoqXG4gICAqIERvIHdlIGRpc3BsYXkgaWNvbnMgP1xuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGljb25zID0gdHJ1ZTtcbiAgcHVibGljIHRyZWU6IElQYXRoVHJlZUl0ZW1bXSA9IFtdO1xuICBwcml2YXRlIF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcm91dGVyOiBSb3V0ZXIsIHB1YmxpYyByb3V0ZTogQWN0aXZhdGVkUm91dGUpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5nZXRSb3V0ZVRyZWUodGhpcy5yb3V0ZXIucm91dGVyU3RhdGUpO1xuICAgIHRoaXMucm91dGVyLmV2ZW50c1xuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9zdWJzY3JpcHRpb25zKSxcbiAgICAgICAgZmlsdGVyKChldmVudCkgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuZ2V0Um91dGVUcmVlKHRoaXMucm91dGVyLnJvdXRlclN0YXRlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMubmV4dCgpO1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgdGhpcy5nZXRSb3V0ZVRyZWUodGhpcy5yb3V0ZXIucm91dGVyU3RhdGUpO1xuICB9XG5cbiAgcHVibGljIGdldFJvdXRlVHJlZShjdXJyZW50OiBSb3V0ZXJTdGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IHRyZWU6IElQYXRoVHJlZUl0ZW1bXSA9IFtdO1xuICAgIGNvbnN0IHVybDogc3RyaW5nW10gPSBbXTtcbiAgICBsZXQgcDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB8IG51bGwgPSBjdXJyZW50LnJvb3Quc25hcHNob3Q7XG5cbiAgICB3aGlsZSAocCAhPSBudWxsKSB7XG4gICAgICBsZXQgcmRhdGE6IFBhcnRpYWw8QmFzZVJvdXRlUGFyYW1zPiA9IHtcbiAgICAgICAgdHJlZTogZmFsc2UsXG4gICAgICAgIHRpdGxlOiAoKSA9PiAneHh4eCcsXG4gICAgICAgIGljb246ICcnLFxuICAgICAgICBza2lwOiB0cnVlLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGRhdGEgPSBwLmRhdGEgYXMgQmFzZVJvdXRlUGFyYW1zO1xuXG4gICAgICAvLyBHZXQgcm91dGUgZGF0YVxuICAgICAgaWYgKHAucm91dGVDb25maWcgJiYgcC5yb3V0ZUNvbmZpZy5kYXRhKSB7XG4gICAgICAgIHJkYXRhID0gcC5yb3V0ZUNvbmZpZy5kYXRhIGFzIEJhc2VSb3V0ZVBhcmFtcztcbiAgICAgIH1cblxuICAgICAgaWYgKHJkYXRhLnRyZWUpIHtcbiAgICAgICAgLy8gR2V0IGljb25cbiAgICAgICAgZm9yIChjb25zdCB1IG9mIHAudXJsKSB7XG4gICAgICAgICAgdXJsLnB1c2godS5wYXRoKTtcbiAgICAgICAgICBsZXQgcnRkOiBJUGF0aFRyZWVJdGVtID0ge1xuICAgICAgICAgICAgaWNvbjogdGhpcy5nZXRJY29uKHJkYXRhLCBkYXRhKSxcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLmdldFRpdGxlKHJkYXRhLCBkYXRhLCB1KSxcbiAgICAgICAgICAgIHBhdGg6IHVybC5qb2luKCcvJyksXG4gICAgICAgICAgICBjdXJyZW50OiBmYWxzZSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmIChydGQucGF0aC5sZW5ndGggPiAwICYmIHJ0ZC5wYXRoWzBdICE9PSAnLycpIHtcbiAgICAgICAgICAgIHJ0ZC5wYXRoID0gJy8nICsgcnRkLnBhdGg7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghcmRhdGEuc2tpcCkge1xuICAgICAgICAgICAgdHJlZS5wdXNoKHJ0ZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1cmwucHVzaChwLnVybC5qb2luKCcvJykpO1xuICAgICAgICBsZXQgcnRkOiBJUGF0aFRyZWVJdGVtID0ge1xuICAgICAgICAgIGljb246IHRoaXMuZ2V0SWNvbihyZGF0YSwgZGF0YSksXG4gICAgICAgICAgdGl0bGU6IHRoaXMuZ2V0VGl0bGUocmRhdGEsIGRhdGEpLFxuICAgICAgICAgIHBhdGg6IHVybC5qb2luKCcvJyksXG4gICAgICAgICAgY3VycmVudDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChydGQucGF0aC5sZW5ndGggPiAwICYmIHJ0ZC5wYXRoWzBdICE9PSAnLycpIHtcbiAgICAgICAgICBydGQucGF0aCA9ICcvJyArIHJ0ZC5wYXRoO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcmRhdGEuc2tpcCkge1xuICAgICAgICAgIHRyZWUucHVzaChydGQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHAgPSBwLmZpcnN0Q2hpbGQ7XG4gICAgfVxuICAgIGlmICh0cmVlLmxlbmd0aCA+IDApIHtcbiAgICAgIHRyZWVbdHJlZS5sZW5ndGggLSAxXS5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy50cmVlID0gdHJlZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRUaXRsZShcbiAgICByZGF0YTogUGFydGlhbDxCYXNlUm91dGVQYXJhbXM+LFxuICAgIGRhdGE6IEJhc2VSb3V0ZVBhcmFtcyxcbiAgICB1PzogVXJsU2VnbWVudFxuICApOiBzdHJpbmcge1xuICAgIGlmIChyZGF0YVsndGl0bGUnXSkge1xuICAgICAgaWYgKHR5cGVvZiByZGF0YVsndGl0bGUnXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zdCB0cGw6IFRwbEZuPGFueT4gPSByZGF0YVsndGl0bGUnXTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAodSkge1xuICAgICAgICAgICAgcmV0dXJuIHRwbChkYXRhLCB1LnBhdGgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdHBsKGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybignVW5hYmxlIHRvIHByb2Nlc3MgYnJlYWRjcnVtYiBmdW5jdGlvbicsIGUpO1xuICAgICAgICAgIGlmIChkYXRhLnRpdGxlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiAneHgnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJkYXRhWyd0aXRsZSddO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJ3h4eCc7XG4gIH1cblxuICBwdWJsaWMgZ2V0SWNvbihcbiAgICByZGF0YTogUGFydGlhbDxCYXNlUm91dGVQYXJhbXM+LFxuICAgIGRhdGE6IEJhc2VSb3V0ZVBhcmFtc1xuICApOiBzdHJpbmcge1xuICAgIGlmIChkYXRhLmljb24pIHtcbiAgICAgIHJldHVybiBkYXRhLmljb247XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxufVxuIiwiXG48bmF2IGFyaWEtbGFiZWw9XCJicmVhZGNydW1iXCI+XG4gIDxvbCBjbGFzcz1cImJyZWFkY3J1bWJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwIG9mIHRyZWVcIj5cbiAgICAgIDxsaSBjbGFzcz1cImJyZWFkY3J1bWItaXRlbVwiICpuZ0lmPVwiIXAuY3VycmVudFwiPjxhIGNsYXNzPVwiYnJlYWRjcnVtYi1pdGVtXCIgW3JvdXRlckxpbmtdPVwicC5wYXRoXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImljb25zICZhbXA7JmFtcDsgcC5pY29uXCI+PGkgY2xhc3M9XCJtZS0yXCIgW25nQ2xhc3NdPVwicC5pY29uXCI+PC9pPnt7cC50aXRsZX19PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEoaWNvbnMgJmFtcDsmYW1wOyBwLmljb24pXCI+e3twLnRpdGxlfX08L25nLWNvbnRhaW5lcj48L2E+PC9saT5cbiAgICAgIDxsaSBjbGFzcz1cImJyZWFkY3J1bWItaXRlbSBhY3RpdmVcIiBhcmlhLWN1cnJlbnQ9XCJwYWdlXCIgKm5nSWY9XCJwLmN1cnJlbnRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImljb25zICZhbXA7JmFtcDsgcC5pY29uXCI+PGkgY2xhc3M9XCJtZS0xXCIgW25nQ2xhc3NdPVwicC5pY29uXCI+PC9pPnt7cC50aXRsZX19PC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhKGljb25zICZhbXA7JmFtcDsgcC5pY29uKVwiPnt7cC50aXRsZX19PC9uZy1jb250YWluZXI+XG4gICAgICA8L2xpPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L29sPlxuPC9uYXY+Il19
@@ -0,0 +1,18 @@
1
+ import { Component } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../update.service";
5
+ import * as i2 from "@angular/common";
6
+ class UpdateComponent {
7
+ constructor(update) {
8
+ this.update = update;
9
+ }
10
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: UpdateComponent, deps: [{ token: i1.UpdateService }], target: i0.ɵɵFactoryTarget.Component }); }
11
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: UpdateComponent, isStandalone: true, selector: "data-update", ngImport: i0, template: "\n<div class=\"snack\" *ngIf=\"update.available$|async\">\n <p>Une nouvelle version de l'application est disponible.</p>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <button class=\"btn btn-primary btn-block w-100\" (click)=\"update.activate()\">L'ACTIVER MAINTENANT</button>\n </div>\n <div class=\"col-sm-6\">\n <button class=\"btn btn-warning btn-block w-100\" (click)=\"update.dismiss()\">Plus tard</button>\n </div>\n </div>\n</div>", styles: [".snack{position:fixed;bottom:0;margin-left:auto;margin-right:auto;left:auto;right:auto;background-color:#ff7a00cc;padding:20px;z-index:2000;border-top:1px solid rgb(255,122,0);font-size:1.5rem;font-weight:700;color:#8b0000;width:100%;text-align:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] }); }
12
+ }
13
+ export { UpdateComponent };
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: UpdateComponent, decorators: [{
15
+ type: Component,
16
+ args: [{ selector: 'data-update', standalone: true, imports: [CommonModule], template: "\n<div class=\"snack\" *ngIf=\"update.available$|async\">\n <p>Une nouvelle version de l'application est disponible.</p>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <button class=\"btn btn-primary btn-block w-100\" (click)=\"update.activate()\">L'ACTIVER MAINTENANT</button>\n </div>\n <div class=\"col-sm-6\">\n <button class=\"btn btn-warning btn-block w-100\" (click)=\"update.dismiss()\">Plus tard</button>\n </div>\n </div>\n</div>", styles: [".snack{position:fixed;bottom:0;margin-left:auto;margin-right:auto;left:auto;right:auto;background-color:#ff7a00cc;padding:20px;z-index:2000;border-top:1px solid rgb(255,122,0);font-size:1.5rem;font-weight:700;color:#8b0000;width:100%;text-align:center}\n"] }]
17
+ }], ctorParameters: function () { return [{ type: i1.UpdateService }]; } });
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEvc3JjL2xpYi91cGRhdGVzL3VwZGF0ZS91cGRhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS9zcmMvbGliL3VwZGF0ZXMvdXBkYXRlL3VwZGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7OztBQUUvQyxNQU9hLGVBQWU7SUFDMUIsWUFBbUIsTUFBcUI7UUFBckIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtJQUFHLENBQUM7OEdBRGpDLGVBQWU7a0dBQWYsZUFBZSx1RUNYNUIsc2RBV00sdVRERk0sWUFBWTs7U0FFWCxlQUFlOzJGQUFmLGVBQWU7a0JBUDNCLFNBQVM7K0JBQ0UsYUFBYSxjQUdYLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVXBkYXRlU2VydmljZSB9IGZyb20gJy4uL3VwZGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RhdGEtdXBkYXRlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3VwZGF0ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3VwZGF0ZS5jb21wb25lbnQuc2FzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgVXBkYXRlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHVibGljIHVwZGF0ZTogVXBkYXRlU2VydmljZSkge31cbn1cbiIsIlxuPGRpdiBjbGFzcz1cInNuYWNrXCIgKm5nSWY9XCJ1cGRhdGUuYXZhaWxhYmxlJHxhc3luY1wiPlxuICA8cD5VbmUgbm91dmVsbGUgdmVyc2lvbiBkZSBsJ2FwcGxpY2F0aW9uIGVzdCBkaXNwb25pYmxlLjwvcD5cbiAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tYmxvY2sgdy0xMDBcIiAoY2xpY2spPVwidXBkYXRlLmFjdGl2YXRlKClcIj5MJ0FDVElWRVIgTUFJTlRFTkFOVDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4td2FybmluZyBidG4tYmxvY2sgdy0xMDBcIiAoY2xpY2spPVwidXBkYXRlLmRpc21pc3MoKVwiPlBsdXMgdGFyZDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==
@@ -0,0 +1,59 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { filter, first, map, tap } from 'rxjs/operators';
3
+ import { merge, ReplaySubject, timer } from 'rxjs';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/service-worker";
6
+ class UpdateService {
7
+ constructor(appRef, swUpdate) {
8
+ this.appRef = appRef;
9
+ this.swUpdate = swUpdate;
10
+ this.stable = false;
11
+ this._available$ = new ReplaySubject(1);
12
+ this._available$.next(false);
13
+ const appIsStable$ = this.appRef.isStable
14
+ .pipe(first((isStable) => isStable))
15
+ .pipe(tap(() => console.log('App is stable')));
16
+ const checkInterval$ = timer(10 * 1000, 5 * 60 * 1000);
17
+ const checkWhenStable$ = merge(appIsStable$, checkInterval$);
18
+ const updatesAvailable = swUpdate.versionUpdates.pipe(tap((evt) => console.log('Version updates event', evt)), filter((evt) => evt.type === 'VERSION_READY'), map((evt) => ({
19
+ type: 'UPDATE_AVAILABLE',
20
+ current: evt.currentVersion,
21
+ available: evt.latestVersion,
22
+ })));
23
+ updatesAvailable.subscribe(async (evt) => {
24
+ this._available$.next(true);
25
+ });
26
+ checkWhenStable$.subscribe(async () => {
27
+ this.stable = true;
28
+ try {
29
+ console.log('Checking for update');
30
+ const res = await swUpdate.checkForUpdate();
31
+ console.log('Check for update result', res);
32
+ }
33
+ catch (e) {
34
+ console.warn('No service worker');
35
+ }
36
+ });
37
+ }
38
+ get available$() {
39
+ return this._available$.asObservable();
40
+ }
41
+ activate() {
42
+ this._available$.next(false);
43
+ console.log('RELOADING FULL PAGE');
44
+ document.location.reload();
45
+ }
46
+ dismiss() {
47
+ this._available$.next(false);
48
+ }
49
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: UpdateService, deps: [{ token: i0.ApplicationRef }, { token: i1.SwUpdate }], target: i0.ɵɵFactoryTarget.Injectable }); }
50
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: UpdateService, providedIn: 'root' }); }
51
+ }
52
+ export { UpdateService };
53
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: UpdateService, decorators: [{
54
+ type: Injectable,
55
+ args: [{
56
+ providedIn: 'root',
57
+ }]
58
+ }], ctorParameters: function () { return [{ type: i0.ApplicationRef }, { type: i1.SwUpdate }]; } });
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhL3NyYy9saWIvdXBkYXRlcy91cGRhdGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWtCLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzRCxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFFLEtBQUssRUFBYyxhQUFhLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFFL0QsTUFHYSxhQUFhO0lBR3hCLFlBQW9CLE1BQXNCLEVBQVUsUUFBa0I7UUFBbEQsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBRjlELFdBQU0sR0FBRyxLQUFLLENBQUM7UUFHckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLGFBQWEsQ0FBVSxDQUFDLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVE7YUFDdEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqRCxNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLFlBQVksRUFBRSxjQUFjLENBQUMsQ0FBQztRQUM3RCxNQUFNLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUNuRCxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFDdkQsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUE0QixFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsRUFDdkUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ1osSUFBSSxFQUFFLGtCQUFrQjtZQUN4QixPQUFPLEVBQUUsR0FBRyxDQUFDLGNBQWM7WUFDM0IsU0FBUyxFQUFFLEdBQUcsQ0FBQyxhQUFhO1NBQzdCLENBQUMsQ0FBQyxDQUNKLENBQUM7UUFDRixnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ3BDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ25CLElBQUk7Z0JBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2dCQUNuQyxNQUFNLEdBQUcsR0FBRyxNQUFNLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDNUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsRUFBRSxHQUFHLENBQUMsQ0FBQzthQUM3QztZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQzthQUNuQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUlELElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVNLFFBQVE7UUFDYixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDbkMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRU0sT0FBTztRQUNaLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7OEdBakRVLGFBQWE7a0hBQWIsYUFBYSxjQUZaLE1BQU07O1NBRVAsYUFBYTsyRkFBYixhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcGxpY2F0aW9uUmVmLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTd1VwZGF0ZSwgVmVyc2lvblJlYWR5RXZlbnQgfSBmcm9tICdAYW5ndWxhci9zZXJ2aWNlLXdvcmtlcic7XG5pbXBvcnQgeyBmaWx0ZXIsIGZpcnN0LCBtYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IG1lcmdlLCBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0LCB0aW1lciB9IGZyb20gJ3J4anMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgVXBkYXRlU2VydmljZSB7XG4gIHByaXZhdGUgc3RhYmxlID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhcHBSZWY6IEFwcGxpY2F0aW9uUmVmLCBwcml2YXRlIHN3VXBkYXRlOiBTd1VwZGF0ZSkge1xuICAgIHRoaXMuX2F2YWlsYWJsZSQgPSBuZXcgUmVwbGF5U3ViamVjdDxib29sZWFuPigxKTtcbiAgICB0aGlzLl9hdmFpbGFibGUkLm5leHQoZmFsc2UpO1xuICAgIGNvbnN0IGFwcElzU3RhYmxlJCA9IHRoaXMuYXBwUmVmLmlzU3RhYmxlXG4gICAgICAucGlwZShmaXJzdCgoaXNTdGFibGUpID0+IGlzU3RhYmxlKSlcbiAgICAgIC5waXBlKHRhcCgoKSA9PiBjb25zb2xlLmxvZygnQXBwIGlzIHN0YWJsZScpKSk7XG4gICAgY29uc3QgY2hlY2tJbnRlcnZhbCQgPSB0aW1lcigxMCAqIDEwMDAsIDUgKiA2MCAqIDEwMDApO1xuICAgIGNvbnN0IGNoZWNrV2hlblN0YWJsZSQgPSBtZXJnZShhcHBJc1N0YWJsZSQsIGNoZWNrSW50ZXJ2YWwkKTtcbiAgICBjb25zdCB1cGRhdGVzQXZhaWxhYmxlID0gc3dVcGRhdGUudmVyc2lvblVwZGF0ZXMucGlwZShcbiAgICAgIHRhcCgoZXZ0KSA9PiBjb25zb2xlLmxvZygnVmVyc2lvbiB1cGRhdGVzIGV2ZW50JywgZXZ0KSksXG4gICAgICBmaWx0ZXIoKGV2dCk6IGV2dCBpcyBWZXJzaW9uUmVhZHlFdmVudCA9PiBldnQudHlwZSA9PT0gJ1ZFUlNJT05fUkVBRFknKSxcbiAgICAgIG1hcCgoZXZ0KSA9PiAoe1xuICAgICAgICB0eXBlOiAnVVBEQVRFX0FWQUlMQUJMRScsXG4gICAgICAgIGN1cnJlbnQ6IGV2dC5jdXJyZW50VmVyc2lvbixcbiAgICAgICAgYXZhaWxhYmxlOiBldnQubGF0ZXN0VmVyc2lvbixcbiAgICAgIH0pKVxuICAgICk7XG4gICAgdXBkYXRlc0F2YWlsYWJsZS5zdWJzY3JpYmUoYXN5bmMgKGV2dCkgPT4ge1xuICAgICAgdGhpcy5fYXZhaWxhYmxlJC5uZXh0KHRydWUpO1xuICAgIH0pO1xuICAgIGNoZWNrV2hlblN0YWJsZSQuc3Vic2NyaWJlKGFzeW5jICgpID0+IHtcbiAgICAgIHRoaXMuc3RhYmxlID0gdHJ1ZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdDaGVja2luZyBmb3IgdXBkYXRlJyk7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHN3VXBkYXRlLmNoZWNrRm9yVXBkYXRlKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdDaGVjayBmb3IgdXBkYXRlIHJlc3VsdCcsIHJlcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignTm8gc2VydmljZSB3b3JrZXInKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2F2YWlsYWJsZSQ6IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj47XG5cbiAgcHVibGljIGdldCBhdmFpbGFibGUkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9hdmFpbGFibGUkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGFjdGl2YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuX2F2YWlsYWJsZSQubmV4dChmYWxzZSk7XG4gICAgY29uc29sZS5sb2coJ1JFTE9BRElORyBGVUxMIFBBR0UnKTtcbiAgICBkb2N1bWVudC5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNtaXNzKCk6IHZvaWQge1xuICAgIHRoaXMuX2F2YWlsYWJsZSQubmV4dChmYWxzZSk7XG4gIH1cbn1cbiJdfQ==