@solidev/data 0.0.1-dev.3 → 0.0.1-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/auth/auth-interceptor.service.mjs +13 -4
- package/esm2020/lib/auth/auth.service.mjs +20 -9
- package/esm2020/lib/data/data-backend.mjs +33 -5
- package/esm2020/lib/data/data-collection.mjs +17 -1
- package/esm2020/lib/data/data-model.mjs +5 -1
- package/esm2020/lib/data/data-query.mjs +32 -25
- package/esm2020/lib/data/fields/base.mjs +9 -8
- package/esm2020/lib/data/fields/computed.mjs +10 -0
- package/esm2020/lib/data/fields/index.mjs +2 -1
- package/esm2020/lib/dispedit/choice.pipe.mjs +44 -4
- package/esm2020/lib/dispedit/dispedit/dispedit.component.mjs +17 -6
- package/esm2020/lib/dispedit/factor.pipe.mjs +37 -4
- package/esm2020/lib/dispedit/factorc.pipe.mjs +59 -8
- package/esm2020/lib/dispedit/fkselect/fkselect.component.mjs +3 -3
- package/esm2020/lib/dispedit/flags/flags.component.mjs +140 -0
- package/esm2020/lib/dispedit/m2mselect/m2mselect.component.mjs +4 -4
- package/esm2020/lib/dispedit/richedit/richedit.component.mjs +103 -0
- package/esm2020/lib/dispedit/sdelete/sdelete.component.mjs +62 -15
- package/esm2020/lib/messages/message-zone/message-zone.component.mjs +3 -3
- package/esm2020/lib/messages/message.service.mjs +3 -3
- package/esm2020/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.mjs +5 -5
- package/esm2020/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.mjs +3 -3
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.mjs +4 -4
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.mjs +4 -4
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.component.mjs +3 -3
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.mjs +3 -3
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.mjs +3 -3
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.mjs +3 -3
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.mjs +4 -4
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.mjs +3 -3
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.mjs +5 -6
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.mjs +6 -1
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.mjs +3 -3
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.mjs +7 -1
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.mjs +7 -7
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.mjs +10 -7
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.mjs +3 -3
- package/esm2020/lib/modellist/model-list-filters/model-list-filter.mjs +11 -10
- package/esm2020/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.mjs +3 -3
- package/esm2020/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.mjs +3 -3
- package/esm2020/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.mjs +3 -3
- package/esm2020/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.mjs +3 -3
- package/esm2020/lib/modellist/model-list.service.mjs +21 -16
- package/esm2020/lib/routing/breadcrumb/breadcrumb.component.mjs +3 -3
- package/esm2020/lib/updates/update/update.component.mjs +17 -0
- package/esm2020/lib/updates/update.service.mjs +58 -0
- package/esm2020/lib/uploader/ng-file-drop.directive.mjs +3 -3
- package/esm2020/lib/uploader/ng-file-select.directive.mjs +3 -3
- package/esm2020/lib/uploader/ngx-uploader.module.mjs +4 -4
- package/esm2020/lib/utils/tab-memory.service.mjs +20 -11
- package/esm2020/public-api.mjs +5 -1
- package/fesm2015/solidev-data.mjs +807 -202
- package/fesm2015/solidev-data.mjs.map +1 -1
- package/fesm2020/solidev-data.mjs +788 -200
- package/fesm2020/solidev-data.mjs.map +1 -1
- package/lib/auth/auth.service.d.ts +6 -1
- package/lib/data/data-backend.d.ts +15 -0
- package/lib/data/data-collection.d.ts +23 -0
- package/lib/data/data-model.d.ts +1 -0
- package/lib/data/data-query.d.ts +14 -11
- package/lib/data/fields/base.d.ts +6 -5
- package/lib/data/fields/computed.d.ts +14 -0
- package/lib/data/fields/index.d.ts +1 -0
- package/lib/dispedit/choice.pipe.d.ts +5 -0
- package/lib/dispedit/dispedit/dispedit.component.d.ts +6 -1
- package/lib/dispedit/factor.pipe.d.ts +7 -0
- package/lib/dispedit/factorc.pipe.d.ts +8 -0
- package/lib/dispedit/fkselect/fkselect.component.d.ts +1 -1
- package/lib/dispedit/flags/flags.component.d.ts +40 -0
- package/lib/dispedit/m2mselect/m2mselect.component.d.ts +1 -1
- package/lib/dispedit/richedit/richedit.component.d.ts +36 -0
- package/lib/dispedit/sdelete/sdelete.component.d.ts +13 -4
- package/lib/messages/message-zone/message-zone.component.d.ts +1 -1
- package/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.d.ts +1 -1
- package/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.d.ts +1 -1
- package/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.d.ts +1 -1
- package/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.d.ts +1 -1
- package/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.component.d.ts +1 -1
- package/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.d.ts +1 -1
- package/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.d.ts +1 -1
- package/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.d.ts +1 -1
- package/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.d.ts +1 -1
- package/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.d.ts +1 -1
- package/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.d.ts +2 -2
- package/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.d.ts +1 -0
- package/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.d.ts +1 -1
- package/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.d.ts +6 -1
- package/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.d.ts +3 -3
- package/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.d.ts +1 -1
- package/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.d.ts +1 -1
- package/lib/modellist/model-list-filters/model-list-filter.d.ts +4 -2
- package/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.d.ts +1 -1
- package/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.d.ts +1 -1
- package/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.d.ts +1 -1
- package/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.d.ts +1 -1
- package/lib/modellist/model-list.service.d.ts +6 -6
- package/lib/routing/breadcrumb/breadcrumb.component.d.ts +1 -1
- package/lib/updates/update/update.component.d.ts +8 -0
- package/lib/updates/update.service.d.ts +16 -0
- package/lib/uploader/ng-file-drop.directive.d.ts +1 -1
- package/lib/uploader/ng-file-select.directive.d.ts +1 -1
- package/lib/utils/tab-memory.service.d.ts +4 -3
- package/package.json +7 -4
- package/public-api.d.ts +4 -0
|
@@ -2,9 +2,9 @@ import * as i0 from '@angular/core';
|
|
|
2
2
|
import { InjectionToken, PLATFORM_ID, Injectable, Inject, Optional, Component, Input, ViewChild, Pipe, LOCALE_ID, DEFAULT_CURRENCY_CODE, EventEmitter, Output, Directive, HostListener, NgModule } from '@angular/core';
|
|
3
3
|
import 'reflect-metadata';
|
|
4
4
|
import * as i2$2 from '@angular/forms';
|
|
5
|
-
import { FormControl, Validators, FormGroup,
|
|
6
|
-
import { throwError, ReplaySubject,
|
|
7
|
-
import { tap, switchMap, map, filter, mergeMap, finalize, catchError, take } from 'rxjs/operators';
|
|
5
|
+
import { FormControl, Validators, FormGroup, ReactiveFormsModule, UntypedFormControl, NG_VALUE_ACCESSOR, UntypedFormGroup } from '@angular/forms';
|
|
6
|
+
import { throwError, ReplaySubject, share, combineLatest, of, takeUntil, NEVER, Subject, debounceTime, distinctUntilChanged, isObservable, firstValueFrom, timer, Observable, BehaviorSubject, merge } from 'rxjs';
|
|
7
|
+
import { tap, switchMap, map, throttleTime, filter, mergeMap, finalize, catchError, take, first } from 'rxjs/operators';
|
|
8
8
|
import * as i2 from '@angular/platform-browser';
|
|
9
9
|
import { makeStateKey } from '@angular/platform-browser';
|
|
10
10
|
import * as i1$1 from '@angular/common';
|
|
@@ -17,12 +17,15 @@ import * as i2$1 from '@ng-bootstrap/ng-bootstrap';
|
|
|
17
17
|
import { NgbOffcanvasModule, NgbDropdownModule, NgbTypeaheadModule, NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap';
|
|
18
18
|
import * as i3 from '@angular/cdk/scrolling';
|
|
19
19
|
import { CdkScrollableModule } from '@angular/cdk/scrolling';
|
|
20
|
+
import * as i2$3 from 'ngx-editor';
|
|
21
|
+
import { Editor, NgxEditorModule } from 'ngx-editor';
|
|
20
22
|
import { trigger, transition, style, animate } from '@angular/animations';
|
|
21
23
|
import { provideAnimations } from '@angular/platform-browser/animations';
|
|
22
24
|
import { __decorate, __param } from 'tslib';
|
|
23
25
|
import jwt_decode from 'jwt-decode';
|
|
24
26
|
import * as i1$2 from '@angular/router';
|
|
25
27
|
import { NavigationEnd, RouterModule } from '@angular/router';
|
|
28
|
+
import * as i1$3 from '@angular/service-worker';
|
|
26
29
|
|
|
27
30
|
/**
|
|
28
31
|
* DATA_API_URL: stores data api base url
|
|
@@ -81,6 +84,7 @@ class BaseFieldManager {
|
|
|
81
84
|
constructor(params) {
|
|
82
85
|
this.required = false;
|
|
83
86
|
this.readonly = false;
|
|
87
|
+
this.computed = false;
|
|
84
88
|
this.editorType = 'input.text';
|
|
85
89
|
this.displayType = 'text';
|
|
86
90
|
Object.assign(this, params);
|
|
@@ -123,6 +127,13 @@ class BaseFieldManager {
|
|
|
123
127
|
toString(data, format = 'default') {
|
|
124
128
|
return `${data}`;
|
|
125
129
|
}
|
|
130
|
+
/**
|
|
131
|
+
* Returns default value for model, using args if needed.
|
|
132
|
+
* @param args
|
|
133
|
+
*/
|
|
134
|
+
default(args = {}) {
|
|
135
|
+
return this.getDefaultValue(args);
|
|
136
|
+
}
|
|
126
137
|
/** Return validators
|
|
127
138
|
*
|
|
128
139
|
* @protected
|
|
@@ -134,13 +145,6 @@ class BaseFieldManager {
|
|
|
134
145
|
}
|
|
135
146
|
return v;
|
|
136
147
|
}
|
|
137
|
-
/**
|
|
138
|
-
* Returns default value for model, using args if needed.
|
|
139
|
-
* @param args
|
|
140
|
-
*/
|
|
141
|
-
default(args = {}) {
|
|
142
|
-
return this.getDefaultValue(args);
|
|
143
|
-
}
|
|
144
148
|
/**
|
|
145
149
|
* Returns default value for model, using args if needed.
|
|
146
150
|
* @param args
|
|
@@ -340,6 +344,7 @@ class DataModel {
|
|
|
340
344
|
}
|
|
341
345
|
/**
|
|
342
346
|
* Set field value. If check is true, only set value if all validators pass.
|
|
347
|
+
* Skip setting field value if manager computed flag is true.
|
|
343
348
|
*
|
|
344
349
|
* The validation result is returned.
|
|
345
350
|
*
|
|
@@ -349,6 +354,9 @@ class DataModel {
|
|
|
349
354
|
* @return null or ValidationError
|
|
350
355
|
*/
|
|
351
356
|
setFV(field, value, check = false) {
|
|
357
|
+
if (this.FM(field).computed) {
|
|
358
|
+
return null;
|
|
359
|
+
}
|
|
352
360
|
if (check) {
|
|
353
361
|
const fc = new FormControl(value);
|
|
354
362
|
for (const v of this.FM(field).validators) {
|
|
@@ -493,11 +501,25 @@ class Queryset {
|
|
|
493
501
|
this.pageSize = 500;
|
|
494
502
|
/** Current page number */
|
|
495
503
|
this.page = 1;
|
|
496
|
-
this._pristine = true;
|
|
497
504
|
this._loading = new ReplaySubject(1);
|
|
505
|
+
/** Loading status (true if currently fetching data) */
|
|
506
|
+
this.loading = this._loading.asObservable().pipe(share());
|
|
498
507
|
this._meta = new ReplaySubject(1);
|
|
508
|
+
/** Results meta part observable */
|
|
509
|
+
this.meta = this._meta.asObservable().pipe(share());
|
|
499
510
|
this._results = new ReplaySubject(1);
|
|
511
|
+
/** Results data part observable */
|
|
512
|
+
this.results = this._results.asObservable().pipe(share());
|
|
513
|
+
this._full = combineLatest([
|
|
514
|
+
this.results,
|
|
515
|
+
this.loading,
|
|
516
|
+
this.meta,
|
|
517
|
+
]);
|
|
518
|
+
/** Full results observable (results, loading, meta) */
|
|
519
|
+
this.full = this._full.pipe(share());
|
|
520
|
+
this._pristine = true;
|
|
500
521
|
/** Default options */
|
|
522
|
+
// console.log('@solidev/data: Creating collection', _coll);
|
|
501
523
|
this.options = { emitFields: true };
|
|
502
524
|
Object.assign(this.options, options);
|
|
503
525
|
}
|
|
@@ -505,25 +527,6 @@ class Queryset {
|
|
|
505
527
|
get pristine() {
|
|
506
528
|
return this._pristine;
|
|
507
529
|
}
|
|
508
|
-
/** Loading status (true if currently fetching data) */
|
|
509
|
-
get loading() {
|
|
510
|
-
return this._loading.asObservable();
|
|
511
|
-
}
|
|
512
|
-
/** Results meta part observable */
|
|
513
|
-
get meta() {
|
|
514
|
-
return this._meta.asObservable();
|
|
515
|
-
}
|
|
516
|
-
/** Results data part observable */
|
|
517
|
-
get results() {
|
|
518
|
-
return this._results.asObservable();
|
|
519
|
-
}
|
|
520
|
-
/** Full results observable (results, loading, meta) */
|
|
521
|
-
get full() {
|
|
522
|
-
if (!this._full) {
|
|
523
|
-
this._full = combineLatest([this.results, this.loading, this.meta]);
|
|
524
|
-
}
|
|
525
|
-
return this._full.pipe(share());
|
|
526
|
-
}
|
|
527
530
|
/**
|
|
528
531
|
* Update current filter data. Null or undefined values are removed from filter data.
|
|
529
532
|
* @param params filter data
|
|
@@ -598,19 +601,28 @@ class Queryset {
|
|
|
598
601
|
}
|
|
599
602
|
return f;
|
|
600
603
|
}
|
|
601
|
-
get(refresh = true) {
|
|
602
|
-
console.log('queryset:get', this, refresh);
|
|
604
|
+
get(refresh = true, sync = false) {
|
|
603
605
|
if (!refresh && !this._pristine) {
|
|
606
|
+
// console.log('@solidev/data: Get not refreshing, return current result observable');
|
|
604
607
|
return this.results;
|
|
605
608
|
}
|
|
609
|
+
// console.log('@solidev/data: start get (query)');
|
|
606
610
|
this._loading.next(true);
|
|
611
|
+
const syncQp = {};
|
|
612
|
+
if (sync) {
|
|
613
|
+
syncQp['db'] = 'sync';
|
|
614
|
+
}
|
|
607
615
|
return this._coll
|
|
608
616
|
.raw({
|
|
609
617
|
method: 'GET',
|
|
610
|
-
params:
|
|
618
|
+
params: {
|
|
619
|
+
...this.getQueryParams(),
|
|
620
|
+
...syncQp,
|
|
621
|
+
},
|
|
611
622
|
})
|
|
612
623
|
.pipe(switchMap((result) => {
|
|
613
624
|
// Process results
|
|
625
|
+
// console.log('@solidev/data: have meta');
|
|
614
626
|
this._meta.next({ nav: result.nav, parameters: result.parameters });
|
|
615
627
|
const out = [];
|
|
616
628
|
for (const r of result.results) {
|
|
@@ -618,8 +630,11 @@ class Queryset {
|
|
|
618
630
|
out.push(m);
|
|
619
631
|
}
|
|
620
632
|
this._pristine = false;
|
|
633
|
+
// console.log('@solidev/data: have loading');
|
|
621
634
|
this._loading.next(false);
|
|
635
|
+
// console.log('@solidev/data: have result');
|
|
622
636
|
this._results.next(out);
|
|
637
|
+
// console.log('@solidev/data: done get');
|
|
623
638
|
return this.results;
|
|
624
639
|
}));
|
|
625
640
|
}
|
|
@@ -719,6 +734,22 @@ class Collection {
|
|
|
719
734
|
headers,
|
|
720
735
|
});
|
|
721
736
|
}
|
|
737
|
+
/**
|
|
738
|
+
* Calls *method* endpoint for this collection and returns raw results.
|
|
739
|
+
*
|
|
740
|
+
* @param method GET/POST/...
|
|
741
|
+
* @param prefix collection_urlPREFIXSUFFIX
|
|
742
|
+
* @param suffix collection_urlPREFIXSUFFIX
|
|
743
|
+
* @param params query paremeters
|
|
744
|
+
* @param body body as json
|
|
745
|
+
* @param headers headers
|
|
746
|
+
*/
|
|
747
|
+
blob({ method = 'GET', prefix = '', suffix = '', params = {}, body = {}, headers = {}, } = {}) {
|
|
748
|
+
return this.backend.blob(this, method, this.getUrl(null, { suffix, prefix }), {
|
|
749
|
+
params,
|
|
750
|
+
headers,
|
|
751
|
+
});
|
|
752
|
+
}
|
|
722
753
|
getUrl(id, { prefix = '', suffix = '' } = {}) {
|
|
723
754
|
if (id === undefined || id === null) {
|
|
724
755
|
if (prefix || suffix) {
|
|
@@ -762,6 +793,7 @@ class DataBackend {
|
|
|
762
793
|
* @param body JSON body
|
|
763
794
|
* @param params query parameters
|
|
764
795
|
* @param headers query headers
|
|
796
|
+
* @param responseType response type
|
|
765
797
|
*
|
|
766
798
|
* @return an observable of response body
|
|
767
799
|
*/
|
|
@@ -770,9 +802,36 @@ class DataBackend {
|
|
|
770
802
|
return this._cachedGet(collection, url, { headers, params });
|
|
771
803
|
}
|
|
772
804
|
else {
|
|
773
|
-
|
|
805
|
+
// @ts-ignore
|
|
806
|
+
return this._http.request(method, url, {
|
|
807
|
+
body,
|
|
808
|
+
params,
|
|
809
|
+
headers,
|
|
810
|
+
});
|
|
774
811
|
}
|
|
775
812
|
}
|
|
813
|
+
/**
|
|
814
|
+
* Launch an action on collection, receiving a blob.
|
|
815
|
+
*
|
|
816
|
+
* @param collection Collection reference
|
|
817
|
+
* @param method HTTP method
|
|
818
|
+
* @param url full URL for action
|
|
819
|
+
* @param body JSON body
|
|
820
|
+
* @param params query parameters
|
|
821
|
+
* @param headers query headers
|
|
822
|
+
* @param responseType response type
|
|
823
|
+
*
|
|
824
|
+
* @return an observable of response body
|
|
825
|
+
*/
|
|
826
|
+
blob(collection, method, url, { body = undefined, params = {}, headers = {} } = {}) {
|
|
827
|
+
// @ts-ignore
|
|
828
|
+
return this._http.request(method, url, {
|
|
829
|
+
body,
|
|
830
|
+
params,
|
|
831
|
+
headers,
|
|
832
|
+
responseType: 'blob',
|
|
833
|
+
});
|
|
834
|
+
}
|
|
776
835
|
put(collection, url, { body = undefined, params = {}, headers = {} } = {}) {
|
|
777
836
|
return this._http.put(url, body, { params, headers });
|
|
778
837
|
}
|
|
@@ -809,9 +868,9 @@ class DataBackend {
|
|
|
809
868
|
return this._cachedGet(collection, url, { headers, params });
|
|
810
869
|
}
|
|
811
870
|
}
|
|
812
|
-
DataBackend.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
813
|
-
DataBackend.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
814
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
871
|
+
DataBackend.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: DataBackend, deps: [{ token: i1.HttpClient }, { token: i2.TransferState }, { token: PLATFORM_ID }, { token: DATA_API_URL }, { token: DATA_MAX_TRANSFERSTATE_TIME, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
872
|
+
DataBackend.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: DataBackend, providedIn: 'root' });
|
|
873
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: DataBackend, decorators: [{
|
|
815
874
|
type: Injectable,
|
|
816
875
|
args: [{
|
|
817
876
|
providedIn: 'root',
|
|
@@ -1301,7 +1360,7 @@ class ModelList {
|
|
|
1301
1360
|
get results() {
|
|
1302
1361
|
if (!this._results) {
|
|
1303
1362
|
this._results = this.queryset.results.pipe(
|
|
1304
|
-
// tap(() => console.log('
|
|
1363
|
+
// tap(() => console.log('@solidev/data: modellist result')),
|
|
1305
1364
|
share(), takeUntil(this.unsubscribe || NEVER));
|
|
1306
1365
|
}
|
|
1307
1366
|
return this._results;
|
|
@@ -1309,7 +1368,7 @@ class ModelList {
|
|
|
1309
1368
|
get meta() {
|
|
1310
1369
|
if (!this._meta) {
|
|
1311
1370
|
this._meta = this.queryset.meta.pipe(
|
|
1312
|
-
// tap(() => console.log('
|
|
1371
|
+
// tap(() => console.log('@solidev/data: modellist meta')),
|
|
1313
1372
|
share(), takeUntil(this.unsubscribe || NEVER));
|
|
1314
1373
|
}
|
|
1315
1374
|
return this._meta;
|
|
@@ -1317,7 +1376,7 @@ class ModelList {
|
|
|
1317
1376
|
get loading() {
|
|
1318
1377
|
if (!this._loading) {
|
|
1319
1378
|
this._loading = this.queryset.loading.pipe(
|
|
1320
|
-
// tap(() => console.log('
|
|
1379
|
+
// tap(() => console.log('@solidev/data: modellist loading')),
|
|
1321
1380
|
share(), takeUntil(this.unsubscribe || NEVER));
|
|
1322
1381
|
}
|
|
1323
1382
|
return this._loading;
|
|
@@ -1325,13 +1384,14 @@ class ModelList {
|
|
|
1325
1384
|
get full() {
|
|
1326
1385
|
if (!this._full) {
|
|
1327
1386
|
this._full = this.queryset.full.pipe(
|
|
1328
|
-
// tap(() => console.log('
|
|
1387
|
+
// tap(() => console.log('@solidev/data: modellist full')),
|
|
1329
1388
|
share(), takeUntil(this.unsubscribe || NEVER));
|
|
1330
1389
|
}
|
|
1331
1390
|
return this._full;
|
|
1332
1391
|
}
|
|
1333
1392
|
start(params) {
|
|
1334
1393
|
let filter$;
|
|
1394
|
+
let reloadFired = false;
|
|
1335
1395
|
if (params.filter && !params.filter.subscribe) {
|
|
1336
1396
|
filter$ = of(params.filter);
|
|
1337
1397
|
}
|
|
@@ -1342,14 +1402,14 @@ class ModelList {
|
|
|
1342
1402
|
filter$ = of({});
|
|
1343
1403
|
}
|
|
1344
1404
|
combineLatest([
|
|
1345
|
-
this.reload,
|
|
1405
|
+
this.reload.pipe(tap((v) => (reloadFired = !!v))),
|
|
1346
1406
|
this.filters.output,
|
|
1347
1407
|
filter$,
|
|
1348
1408
|
this.paginator.output,
|
|
1349
1409
|
this.sorter.output,
|
|
1350
1410
|
this.fields.output,
|
|
1351
1411
|
])
|
|
1352
|
-
.pipe(
|
|
1412
|
+
.pipe(throttleTime(200), switchMap(([reload, filter, manualFilter, paginator, sorter, fields]) => {
|
|
1353
1413
|
this.queryset
|
|
1354
1414
|
.filter(filter)
|
|
1355
1415
|
.filter(manualFilter || {}, true)
|
|
@@ -1357,15 +1417,19 @@ class ModelList {
|
|
|
1357
1417
|
.setPage(paginator.page)
|
|
1358
1418
|
.sort(...sorter)
|
|
1359
1419
|
.setFields(fields);
|
|
1360
|
-
|
|
1420
|
+
const dbSync = reloadFired;
|
|
1421
|
+
reloadFired = false;
|
|
1422
|
+
return this.queryset.get(true, dbSync);
|
|
1361
1423
|
}), takeUntil(this.unsubscribe || NEVER))
|
|
1362
1424
|
.subscribe({
|
|
1363
|
-
next: (results) => {
|
|
1425
|
+
next: (results) => {
|
|
1426
|
+
// console.log('@solidev/data: modellist:get results');
|
|
1427
|
+
},
|
|
1364
1428
|
error: (error) => {
|
|
1365
|
-
console.error('
|
|
1429
|
+
console.error('@solidev/data: error while getting model list results : ', error);
|
|
1366
1430
|
},
|
|
1367
1431
|
complete: () => {
|
|
1368
|
-
// console.log('modellist:completed', this.name);
|
|
1432
|
+
// console.log('@solidev/data: modellist:completed', this.name);
|
|
1369
1433
|
this.started = false;
|
|
1370
1434
|
},
|
|
1371
1435
|
});
|
|
@@ -1411,9 +1475,9 @@ class ModelListService {
|
|
|
1411
1475
|
return ml;
|
|
1412
1476
|
}
|
|
1413
1477
|
}
|
|
1414
|
-
ModelListService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1415
|
-
ModelListService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
1416
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1478
|
+
ModelListService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1479
|
+
ModelListService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListService, providedIn: 'root' });
|
|
1480
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListService, decorators: [{
|
|
1417
1481
|
type: Injectable,
|
|
1418
1482
|
args: [{
|
|
1419
1483
|
providedIn: 'root',
|
|
@@ -1456,9 +1520,9 @@ class ModelListFieldsSelectorComponent {
|
|
|
1456
1520
|
}
|
|
1457
1521
|
}
|
|
1458
1522
|
}
|
|
1459
|
-
ModelListFieldsSelectorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1460
|
-
ModelListFieldsSelectorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
1461
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1523
|
+
ModelListFieldsSelectorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListFieldsSelectorComponent, deps: [{ token: i2$1.NgbOffcanvas }], target: i0.ɵɵFactoryTarget.Component });
|
|
1524
|
+
ModelListFieldsSelectorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.3", type: ModelListFieldsSelectorComponent, isStandalone: true, selector: "data-model-list-fields-selector", inputs: { list: "list" }, providers: [{ provide: CDK_DRAG_CONFIG, useValue: DragConfig }], viewQueries: [{ propertyName: "ofctpl", first: true, predicate: ["selector"], descendants: true, static: true }], ngImport: i0, template: "<i class=\"bi bi-list-ul\" (click)=\"open()\" role=\"button\"></i>\n<ng-template #selector let-offcanvas>\n <div class=\"offcanvas-header\">\n <h4 class=\"offcanvas-title\">Choix des champs</h4>\n <button class=\"btn-close\" type=\"button\" aria-label=\"Close\" (click)=\"offcanvas.dismiss('x')\"></button>\n </div>\n <div class=\"offcanvas-body\" cdkScrollable>\n <div class=\"fields-list\" cdkDropList cdkDropListLockAxis=\"y\" (cdkDropListDropped)=\"drop($event)\" *ngIf=\"list.fields.fields|async as fields\">\n <ng-container *ngFor=\"let f of fields\">\n <div class=\"field-box\" cdkDrag (click)=\"toggle(f)\" [cdkDragData]=\"f.name\" [class.enabled]=\"f.enabled\" [class.compact]=\"fields.length>30\">{{f.label}}</div>\n </ng-container>\n </div>\n </div>\n</ng-template>", styles: [".fields-list{width:100%;max-width:100%;border:var(--bs-border-style) var(--bs-border-width) var(--bs-border-color);min-height:50px;display:block;background:var(--bs-body-bg-rgb);border-radius:var(--bs-border-radius-sm);overflow:hidden}.field-box{padding:.5rem 1rem;border-bottom:solid 1px #ccc;color:var(--bs-secondary);display:flex;flex-direction:row;align-items:center;justify-content:space-between;box-sizing:border-box;cursor:move;background:white;font-size:var(--bs-body-font-size)}.field-box.compact{padding:.2rem 1rem;font-size:.8rem}.field-box.enabled{background-color:#90ee90;color:var(--bs-black)}.cdk-drag-preview{box-sizing:border-box;border-radius:var(--bs-border-radius-sm);box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.field-box:last-child{border:none}.fields-list.cdk-drop-list-dragging .field-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i3.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "directive", type: i4.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i4.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "ngmodule", type: CdkScrollableModule }, { kind: "ngmodule", type: NgbOffcanvasModule }] });
|
|
1525
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListFieldsSelectorComponent, decorators: [{
|
|
1462
1526
|
type: Component,
|
|
1463
1527
|
args: [{ selector: 'data-model-list-fields-selector', standalone: true, imports: [
|
|
1464
1528
|
CommonModule,
|
|
@@ -1507,9 +1571,9 @@ class ModelListSorterComponent {
|
|
|
1507
1571
|
this.list.sorter.unset(this.field);
|
|
1508
1572
|
}
|
|
1509
1573
|
}
|
|
1510
|
-
ModelListSorterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1511
|
-
ModelListSorterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
1512
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1574
|
+
ModelListSorterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListSorterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1575
|
+
ModelListSorterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.3", type: ModelListSorterComponent, isStandalone: true, selector: "data-model-list-sorter", inputs: { list: "list", field: "field" }, ngImport: i0, template: "<span class=\"dirs\"><span *ngIf=\"getOrder()>=0 || getCount()>1\" (click)=\"cancel()\" role=\"button\"><span class=\"count\" *ngIf=\"getCount()>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> </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$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
1576
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListSorterComponent, decorators: [{
|
|
1513
1577
|
type: Component,
|
|
1514
1578
|
args: [{ selector: 'data-model-list-sorter', standalone: true, imports: [CommonModule], template: "<span class=\"dirs\"><span *ngIf=\"getOrder()>=0 || getCount()>1\" (click)=\"cancel()\" role=\"button\"><span class=\"count\" *ngIf=\"getCount()>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> </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"] }]
|
|
1515
1579
|
}], ctorParameters: function () { return []; }, propDecorators: { list: [{
|
|
@@ -1530,11 +1594,11 @@ class ModelListFieldHeaderComponent {
|
|
|
1530
1594
|
this.list.fields.enable(f.name);
|
|
1531
1595
|
}
|
|
1532
1596
|
}
|
|
1533
|
-
ModelListFieldHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1534
|
-
ModelListFieldHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
1535
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1597
|
+
ModelListFieldHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListFieldHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1598
|
+
ModelListFieldHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.3", type: ModelListFieldHeaderComponent, isStandalone: true, selector: "data-model-list-field-header", inputs: { list: "list", field: "field", sort: "sort", sortField: "sortField" }, ngImport: i0, template: "\n<ng-template #label><span #ref>\n <ng-content></ng-content></span><span *ngIf=\"!ref.children.length\">{{list.fields.get(field)?.label||field}}</span></ng-template>\n<div class=\"d-flex flex-row justify-content-between align-items-end slabel\" [class.active]=\"mnu.isOpen()\">\n <div class=\"flex-grow-1\">\n <data-model-list-sorter [list]=\"list\" [field]=\"sortField||field\" *ngIf=\"sort\">\n <ng-container *ngTemplateOutlet=\"label\"></ng-container>\n </data-model-list-sorter>\n <ng-container *ngIf=\"!sort\">\n <ng-container *ngTemplateOutlet=\"label\"></ng-container>\n </ng-container>\n </div>\n <div class=\"navicons d-flex flex-row\"><i class=\"bi bi-caret-left-fill\" role=\"button\" (click)=\"list.fields.move(field, 'before')\"></i>\n <div ngbDropdown #mnu=\"ngbDropdown\"><i class=\"bi bi-record\" ngbDropdownToggle></i>\n <div ngbDropdownMenu>\n <button ngbDropdownItem (click)=\"disable()\"><i class=\"bi bi-trash me-2\"></i>Supprimer</button>\n <h6 class=\"dropdown-header\">Ajouter une colonne apr\u00E8s</h6>\n <ng-container *ngFor=\"let f of list.fields.fields|async\">\n <ng-container *ngIf=\"f.allowed && !f.enabled\">\n <button ngbDropdownItem (click)=\"enable(f)\"><i class=\"bi bi-plus-circle me-2\"></i>{{f.label||f.name}}</button>\n </ng-container>\n </ng-container>\n </div>\n </div><i class=\"bi bi-caret-right-fill\" role=\"button\" (click)=\"list.fields.move(field, 'after')\"></i>\n </div>\n</div>", styles: [".slabel .navicons{opacity:0}.slabel:hover .navicons,.slabel.active .navicons{opacity:1!important}.dropdown-toggle:after{display:none!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: NgbDropdownModule }, { kind: "directive", type: i2$1.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i2$1.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i2$1.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: i2$1.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["disabled"] }, { kind: "component", type: ModelListSorterComponent, selector: "data-model-list-sorter", inputs: ["list", "field"] }] });
|
|
1599
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListFieldHeaderComponent, decorators: [{
|
|
1536
1600
|
type: Component,
|
|
1537
|
-
args: [{ selector: 'data-model-list-field-header', standalone: true, imports: [CommonModule, NgbDropdownModule, ModelListSorterComponent], template: "\n<ng-template #label><span #ref>\n <ng-content></ng-content></span><span *ngIf=\"!ref.children.length\">{{list.fields.get(field)?.label||field}}</span></ng-template>\n<div class=\"d-flex flex-row justify-content-between slabel\" [class.active]=\"mnu.isOpen()\">\n <div class=\"flex-grow-1\">\n <data-model-list-sorter [list]=\"list\" [field]=\"sortField||field\" *ngIf=\"sort\">\n <ng-container *ngTemplateOutlet=\"label\"></ng-container>\n </data-model-list-sorter>\n <ng-container *ngIf=\"!sort\">\n <ng-container *ngTemplateOutlet=\"label\"></ng-container>\n </ng-container>\n </div>\n <div class=\"navicons d-flex flex-row\"><i class=\"bi bi-caret-left-fill\" role=\"button\" (click)=\"list.fields.move(field, 'before')\"></i>\n <div ngbDropdown #mnu=\"ngbDropdown\"><i class=\"bi bi-record\" ngbDropdownToggle></i>\n <div ngbDropdownMenu>\n <button ngbDropdownItem (click)=\"disable()\"><i class=\"bi bi-trash me-2\"></i>Supprimer</button>\n <h6 class=\"dropdown-header\">Ajouter une colonne apr\u00E8s</h6>\n <ng-container *ngFor=\"let f of list.fields.fields|async\">\n <ng-container *ngIf=\"f.allowed && !f.enabled\">\n <button ngbDropdownItem (click)=\"enable(f)\"><i class=\"bi bi-plus-circle me-2\"></i>{{f.label||f.name}}</button>\n </ng-container>\n </ng-container>\n </div>\n </div><i class=\"bi bi-caret-right-fill\" role=\"button\" (click)=\"list.fields.move(field, 'after')\"></i>\n </div>\n</div>", styles: [".slabel .navicons{opacity:0}.slabel:hover .navicons,.slabel.active .navicons{opacity:1!important}.dropdown-toggle:after{display:none!important}\n"] }]
|
|
1601
|
+
args: [{ selector: 'data-model-list-field-header', standalone: true, imports: [CommonModule, NgbDropdownModule, ModelListSorterComponent], template: "\n<ng-template #label><span #ref>\n <ng-content></ng-content></span><span *ngIf=\"!ref.children.length\">{{list.fields.get(field)?.label||field}}</span></ng-template>\n<div class=\"d-flex flex-row justify-content-between align-items-end slabel\" [class.active]=\"mnu.isOpen()\">\n <div class=\"flex-grow-1\">\n <data-model-list-sorter [list]=\"list\" [field]=\"sortField||field\" *ngIf=\"sort\">\n <ng-container *ngTemplateOutlet=\"label\"></ng-container>\n </data-model-list-sorter>\n <ng-container *ngIf=\"!sort\">\n <ng-container *ngTemplateOutlet=\"label\"></ng-container>\n </ng-container>\n </div>\n <div class=\"navicons d-flex flex-row\"><i class=\"bi bi-caret-left-fill\" role=\"button\" (click)=\"list.fields.move(field, 'before')\"></i>\n <div ngbDropdown #mnu=\"ngbDropdown\"><i class=\"bi bi-record\" ngbDropdownToggle></i>\n <div ngbDropdownMenu>\n <button ngbDropdownItem (click)=\"disable()\"><i class=\"bi bi-trash me-2\"></i>Supprimer</button>\n <h6 class=\"dropdown-header\">Ajouter une colonne apr\u00E8s</h6>\n <ng-container *ngFor=\"let f of list.fields.fields|async\">\n <ng-container *ngIf=\"f.allowed && !f.enabled\">\n <button ngbDropdownItem (click)=\"enable(f)\"><i class=\"bi bi-plus-circle me-2\"></i>{{f.label||f.name}}</button>\n </ng-container>\n </ng-container>\n </div>\n </div><i class=\"bi bi-caret-right-fill\" role=\"button\" (click)=\"list.fields.move(field, 'after')\"></i>\n </div>\n</div>", styles: [".slabel .navicons{opacity:0}.slabel:hover .navicons,.slabel.active .navicons{opacity:1!important}.dropdown-toggle:after{display:none!important}\n"] }]
|
|
1538
1602
|
}], ctorParameters: function () { return []; }, propDecorators: { list: [{
|
|
1539
1603
|
type: Input
|
|
1540
1604
|
}], field: [{
|
|
@@ -1556,9 +1620,9 @@ class ModelListFiltersSelectComponent {
|
|
|
1556
1620
|
this.list.filters.update();
|
|
1557
1621
|
}
|
|
1558
1622
|
}
|
|
1559
|
-
ModelListFiltersSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1560
|
-
ModelListFiltersSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
1561
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1623
|
+
ModelListFiltersSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListFiltersSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1624
|
+
ModelListFiltersSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.3", type: ModelListFiltersSelectComponent, isStandalone: true, selector: "data-model-list-filters-select", inputs: { list: "list", containerClasses: "containerClasses", itemActiveClasses: "itemActiveClasses", itemInactiveClasses: "itemInactiveClasses" }, ngImport: i0, template: "<span *ngFor=\"let f of list.filters.available|async\" (click)=\"toggle(f)\" [ngClass]=\"containerClasses\"><span *ngIf=\"f.enabled\" role=\"button\" [ngClass]=\"itemActiveClasses\" [title]=\"f.desc\"><i class=\"bi bi-check2-square me-2\"></i><span>{{f.label}}</span></span><span *ngIf=\"!f.enabled\" role=\"button\" [ngClass]=\"itemInactiveClasses\" [title]=\"f.desc\"><i class=\"bi bi-square me-2\"></i><span>{{f.label}}</span></span></span>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }] });
|
|
1625
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListFiltersSelectComponent, decorators: [{
|
|
1562
1626
|
type: Component,
|
|
1563
1627
|
args: [{ selector: 'data-model-list-filters-select', standalone: true, imports: [CommonModule], template: "<span *ngFor=\"let f of list.filters.available|async\" (click)=\"toggle(f)\" [ngClass]=\"containerClasses\"><span *ngIf=\"f.enabled\" role=\"button\" [ngClass]=\"itemActiveClasses\" [title]=\"f.desc\"><i class=\"bi bi-check2-square me-2\"></i><span>{{f.label}}</span></span><span *ngIf=\"!f.enabled\" role=\"button\" [ngClass]=\"itemInactiveClasses\" [title]=\"f.desc\"><i class=\"bi bi-square me-2\"></i><span>{{f.label}}</span></span></span>" }]
|
|
1564
1628
|
}], ctorParameters: function () { return []; }, propDecorators: { list: [{
|
|
@@ -1574,14 +1638,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImpor
|
|
|
1574
1638
|
class ModelListTextFilterComponent {
|
|
1575
1639
|
constructor() {
|
|
1576
1640
|
this.classes = '';
|
|
1577
|
-
this.fc = new
|
|
1641
|
+
this.fc = new FormControl(null);
|
|
1578
1642
|
}
|
|
1579
1643
|
ngOnInit() {
|
|
1580
1644
|
this.filter.valueChanges.subscribe((val) => {
|
|
1581
1645
|
this.fc.setValue(val.value, { emitEvent: false });
|
|
1582
1646
|
});
|
|
1583
1647
|
this.fc.valueChanges.pipe(debounceTime(250)).subscribe((val) => {
|
|
1584
|
-
if (this.filter.set(val, val)) {
|
|
1648
|
+
if (this.filter.set(val, val || '')) {
|
|
1585
1649
|
this.list.filters.update();
|
|
1586
1650
|
}
|
|
1587
1651
|
});
|
|
@@ -1591,9 +1655,9 @@ class ModelListTextFilterComponent {
|
|
|
1591
1655
|
this.list.filters.update();
|
|
1592
1656
|
}
|
|
1593
1657
|
}
|
|
1594
|
-
ModelListTextFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1595
|
-
ModelListTextFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
1596
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1658
|
+
ModelListTextFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListTextFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1659
|
+
ModelListTextFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.3", type: ModelListTextFilterComponent, isStandalone: true, selector: "data-model-list-text-filter", inputs: { list: "list", filter: "filter", classes: "classes" }, ngImport: i0, template: "\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <input class=\"form-control\" type=\"text\" [formControl]=\"fc\" [placeholder]=\"filter.help\">\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$2.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$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
|
|
1660
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListTextFilterComponent, decorators: [{
|
|
1597
1661
|
type: Component,
|
|
1598
1662
|
args: [{ selector: 'data-model-list-text-filter', standalone: true, imports: [CommonModule, ReactiveFormsModule], template: "\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <input class=\"form-control\" type=\"text\" [formControl]=\"fc\" [placeholder]=\"filter.help\">\n</div>" }]
|
|
1599
1663
|
}], ctorParameters: function () { return []; }, propDecorators: { list: [{
|
|
@@ -1689,9 +1753,9 @@ class ModelListAutocompleteFilterComponent {
|
|
|
1689
1753
|
}), takeUntil(this._subscription));
|
|
1690
1754
|
}
|
|
1691
1755
|
}
|
|
1692
|
-
ModelListAutocompleteFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1693
|
-
ModelListAutocompleteFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
1694
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1756
|
+
ModelListAutocompleteFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListAutocompleteFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1757
|
+
ModelListAutocompleteFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.3", type: ModelListAutocompleteFilterComponent, isStandalone: true, selector: "data-model-list-autocomplete-filter", inputs: { list: "list", filter: "filter", classes: "classes" }, ngImport: i0, template: "\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <input class=\"form-control\" [formControl]=\"fc\" [ngbTypeahead]=\"search\" [editable]=\"false\" [focusFirst]=\"true\" [inputFormatter]=\"display\" [resultFormatter]=\"display\" [placeholder]=\"filter.help\" (keyup.arrowDown)=\"scrollAction($event)\" (keyup.arrowUp)=\"scrollAction($event)\" #th=\"ngbTypeahead\" [class.tascroll]=\"filter.scroll\">\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: NgbTypeaheadModule }, { kind: "directive", type: i2$1.NgbTypeahead, selector: "input[ngbTypeahead]", inputs: ["autocomplete", "container", "editable", "focusFirst", "inputFormatter", "ngbTypeahead", "resultFormatter", "resultTemplate", "showHint", "placement", "popperOptions", "popupClass"], outputs: ["selectItem"], exportAs: ["ngbTypeahead"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$2.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$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
|
|
1758
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListAutocompleteFilterComponent, decorators: [{
|
|
1695
1759
|
type: Component,
|
|
1696
1760
|
args: [{ selector: 'data-model-list-autocomplete-filter', standalone: true, imports: [CommonModule, NgbTypeaheadModule, ReactiveFormsModule], template: "\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <input class=\"form-control\" [formControl]=\"fc\" [ngbTypeahead]=\"search\" [editable]=\"false\" [focusFirst]=\"true\" [inputFormatter]=\"display\" [resultFormatter]=\"display\" [placeholder]=\"filter.help\" (keyup.arrowDown)=\"scrollAction($event)\" (keyup.arrowUp)=\"scrollAction($event)\" #th=\"ngbTypeahead\" [class.tascroll]=\"filter.scroll\">\n</div>" }]
|
|
1697
1761
|
}], ctorParameters: function () { return []; }, propDecorators: { list: [{
|
|
@@ -1708,9 +1772,9 @@ class ModelListAutocompleteMultiFilterComponent extends ModelListAutocompleteFil
|
|
|
1708
1772
|
this.list.filters.update();
|
|
1709
1773
|
}
|
|
1710
1774
|
}
|
|
1711
|
-
ModelListAutocompleteMultiFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1712
|
-
ModelListAutocompleteMultiFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
1713
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1775
|
+
ModelListAutocompleteMultiFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListAutocompleteMultiFilterComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
1776
|
+
ModelListAutocompleteMultiFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.3", type: ModelListAutocompleteMultiFilterComponent, isStandalone: true, selector: "data-model-list-autocomplete-multi-filter", inputs: { filter: "filter" }, usesInheritance: true, ngImport: i0, template: "\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <input class=\"form-control\" [formControl]=\"fc\" [ngbTypeahead]=\"search\" [editable]=\"false\" [focusFirst]=\"true\" [inputFormatter]=\"display\" [resultFormatter]=\"display\" [placeholder]=\"filter.help\" (keyup.arrowDown)=\"scrollAction($event)\" (keyup.arrowUp)=\"scrollAction($event)\" #th=\"ngbTypeahead\" [class.tascroll]=\"filter.scroll\">\n <div class=\"enabled mt-1\">\n <div *ngFor=\"let e of filter.mcurrent$|async\"><i class=\"bi bi-trash me-2\" (click)=\"unset(e.value, e.desc)\" role=\"button\"></i>{{e.desc}}</div>\n </div>\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: NgbTypeaheadModule }, { kind: "directive", type: i2$1.NgbTypeahead, selector: "input[ngbTypeahead]", inputs: ["autocomplete", "container", "editable", "focusFirst", "inputFormatter", "ngbTypeahead", "resultFormatter", "resultTemplate", "showHint", "placement", "popperOptions", "popupClass"], outputs: ["selectItem"], exportAs: ["ngbTypeahead"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$2.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$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
|
|
1777
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListAutocompleteMultiFilterComponent, decorators: [{
|
|
1714
1778
|
type: Component,
|
|
1715
1779
|
args: [{ selector: 'data-model-list-autocomplete-multi-filter', standalone: true, imports: [CommonModule, NgbTypeaheadModule, ReactiveFormsModule], template: "\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <input class=\"form-control\" [formControl]=\"fc\" [ngbTypeahead]=\"search\" [editable]=\"false\" [focusFirst]=\"true\" [inputFormatter]=\"display\" [resultFormatter]=\"display\" [placeholder]=\"filter.help\" (keyup.arrowDown)=\"scrollAction($event)\" (keyup.arrowUp)=\"scrollAction($event)\" #th=\"ngbTypeahead\" [class.tascroll]=\"filter.scroll\">\n <div class=\"enabled mt-1\">\n <div *ngFor=\"let e of filter.mcurrent$|async\"><i class=\"bi bi-trash me-2\" (click)=\"unset(e.value, e.desc)\" role=\"button\"></i>{{e.desc}}</div>\n </div>\n</div>" }]
|
|
1716
1780
|
}], propDecorators: { filter: [{
|
|
@@ -1737,9 +1801,9 @@ class ModelListDatetimeFilterComponent {
|
|
|
1737
1801
|
this.list.filters.update();
|
|
1738
1802
|
}
|
|
1739
1803
|
}
|
|
1740
|
-
ModelListDatetimeFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1741
|
-
ModelListDatetimeFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
1742
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1804
|
+
ModelListDatetimeFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListDatetimeFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1805
|
+
ModelListDatetimeFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.3", type: ModelListDatetimeFilterComponent, isStandalone: true, selector: "data-model-list-datetime-filter", inputs: { list: "list", filter: "filter", classes: "classes" }, ngImport: i0, template: "\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <input class=\"form-control\" type=\"datetime-local\" [formControl]=\"fc\" [placeholder]=\"filter.help\">\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$2.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$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
|
|
1806
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListDatetimeFilterComponent, decorators: [{
|
|
1743
1807
|
type: Component,
|
|
1744
1808
|
args: [{ selector: 'data-model-list-datetime-filter', standalone: true, imports: [CommonModule, ReactiveFormsModule], template: "\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <input class=\"form-control\" type=\"datetime-local\" [formControl]=\"fc\" [placeholder]=\"filter.help\">\n</div>" }]
|
|
1745
1809
|
}], ctorParameters: function () { return []; }, propDecorators: { list: [{
|
|
@@ -1755,9 +1819,9 @@ class ModelListDatetimeRangeFilterComponent {
|
|
|
1755
1819
|
this.classes = '';
|
|
1756
1820
|
}
|
|
1757
1821
|
}
|
|
1758
|
-
ModelListDatetimeRangeFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1759
|
-
ModelListDatetimeRangeFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
1760
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1822
|
+
ModelListDatetimeRangeFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListDatetimeRangeFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1823
|
+
ModelListDatetimeRangeFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.3", type: ModelListDatetimeRangeFilterComponent, isStandalone: true, selector: "data-model-list-datetime-range-filter", inputs: { list: "list", filter: "filter", classes: "classes" }, ngImport: i0, template: "<p>model-list-datetime-range-filter works!</p>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
1824
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListDatetimeRangeFilterComponent, decorators: [{
|
|
1761
1825
|
type: Component,
|
|
1762
1826
|
args: [{ selector: 'data-model-list-datetime-range-filter', standalone: true, imports: [CommonModule], template: "<p>model-list-datetime-range-filter works!</p>" }]
|
|
1763
1827
|
}], ctorParameters: function () { return []; }, propDecorators: { list: [{
|
|
@@ -1773,9 +1837,9 @@ class ModelListFlagsFilterComponent {
|
|
|
1773
1837
|
this.classes = '';
|
|
1774
1838
|
}
|
|
1775
1839
|
}
|
|
1776
|
-
ModelListFlagsFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1777
|
-
ModelListFlagsFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
1778
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1840
|
+
ModelListFlagsFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListFlagsFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1841
|
+
ModelListFlagsFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.3", type: ModelListFlagsFilterComponent, isStandalone: true, selector: "data-model-list-flags-filter", inputs: { list: "list", filter: "filter", classes: "classes" }, ngImport: i0, template: "<p>model-list-flags-filter works!</p>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
1842
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListFlagsFilterComponent, decorators: [{
|
|
1779
1843
|
type: Component,
|
|
1780
1844
|
args: [{ selector: 'data-model-list-flags-filter', standalone: true, imports: [CommonModule], template: "<p>model-list-flags-filter works!</p>" }]
|
|
1781
1845
|
}], ctorParameters: function () { return []; }, propDecorators: { list: [{
|
|
@@ -1826,9 +1890,9 @@ class ModelListGeodistanceFilterComponent {
|
|
|
1826
1890
|
elem.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
|
|
1827
1891
|
}
|
|
1828
1892
|
}
|
|
1829
|
-
ModelListGeodistanceFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1830
|
-
ModelListGeodistanceFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
1831
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1893
|
+
ModelListGeodistanceFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListGeodistanceFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1894
|
+
ModelListGeodistanceFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.3", type: ModelListGeodistanceFilterComponent, isStandalone: true, selector: "data-model-list-geodistance-filter", inputs: { list: "list", filter: "filter", classes: "classes" }, ngImport: i0, template: "\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <div class=\"row g-1\">\n <div class=\"col-4\">\n <select class=\"form-select\" [formControl]=\"fd\">\n <option value=\"\">Distance</option>\n <option value=\"lte,10\">< 10 km</option>\n <option value=\"lte,20\">< 20 km</option>\n <option value=\"lte,30\">< 30 km</option>\n <option value=\"lte,50\">< 50 km</option>\n <option value=\"lte,80\">< 80 km</option>\n <option value=\"lte,100\">< 100 km</option>\n <option value=\"lte,150\">< 150 km</option>\n <option value=\"lte,200\">< 200 km</option>\n <option value=\"lte,250\">< 250 km</option>\n <option value=\"lte,300\">< 300 km</option>\n <option value=\"lte,500\">< 500 km</option>\n <option value=\"lte,1000\">< 1000 km</option>\n </select>\n </div>\n <div class=\"col-8\">\n <input class=\"form-control\" [formControl]=\"fc\" [ngbTypeahead]=\"search\" [editable]=\"false\" [focusFirst]=\"true\" [inputFormatter]=\"display\" [resultFormatter]=\"display\" [placeholder]=\"filter.help\" (keyup.arrowDown)=\"scrollAction($event)\" (keyup.arrowUp)=\"scrollAction($event)\" #th=\"ngbTypeahead\" [class.tascroll]=\"filter.scroll\">\n </div>\n </div>\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: NgbTypeaheadModule }, { kind: "directive", type: i2$1.NgbTypeahead, selector: "input[ngbTypeahead]", inputs: ["autocomplete", "container", "editable", "focusFirst", "inputFormatter", "ngbTypeahead", "resultFormatter", "resultTemplate", "showHint", "placement", "popperOptions", "popupClass"], outputs: ["selectItem"], exportAs: ["ngbTypeahead"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2$2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2$2.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$2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
|
|
1895
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListGeodistanceFilterComponent, decorators: [{
|
|
1832
1896
|
type: Component,
|
|
1833
1897
|
args: [{ selector: 'data-model-list-geodistance-filter', standalone: true, imports: [CommonModule, NgbTypeaheadModule, ReactiveFormsModule], template: "\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <div class=\"row g-1\">\n <div class=\"col-4\">\n <select class=\"form-select\" [formControl]=\"fd\">\n <option value=\"\">Distance</option>\n <option value=\"lte,10\">< 10 km</option>\n <option value=\"lte,20\">< 20 km</option>\n <option value=\"lte,30\">< 30 km</option>\n <option value=\"lte,50\">< 50 km</option>\n <option value=\"lte,80\">< 80 km</option>\n <option value=\"lte,100\">< 100 km</option>\n <option value=\"lte,150\">< 150 km</option>\n <option value=\"lte,200\">< 200 km</option>\n <option value=\"lte,250\">< 250 km</option>\n <option value=\"lte,300\">< 300 km</option>\n <option value=\"lte,500\">< 500 km</option>\n <option value=\"lte,1000\">< 1000 km</option>\n </select>\n </div>\n <div class=\"col-8\">\n <input class=\"form-control\" [formControl]=\"fc\" [ngbTypeahead]=\"search\" [editable]=\"false\" [focusFirst]=\"true\" [inputFormatter]=\"display\" [resultFormatter]=\"display\" [placeholder]=\"filter.help\" (keyup.arrowDown)=\"scrollAction($event)\" (keyup.arrowUp)=\"scrollAction($event)\" #th=\"ngbTypeahead\" [class.tascroll]=\"filter.scroll\">\n </div>\n </div>\n</div>" }]
|
|
1834
1898
|
}], ctorParameters: function () { return []; }, propDecorators: { list: [{
|
|
@@ -1846,7 +1910,6 @@ class ModelListSelectFilterComponent {
|
|
|
1846
1910
|
}
|
|
1847
1911
|
ngOnInit() {
|
|
1848
1912
|
this.filter.valueChanges.subscribe((val) => {
|
|
1849
|
-
console.log('Changing value', val);
|
|
1850
1913
|
this.fc.setValue(val ? val.value : null, {
|
|
1851
1914
|
emitEvent: false,
|
|
1852
1915
|
});
|
|
@@ -1876,9 +1939,9 @@ class ModelListSelectFilterComponent {
|
|
|
1876
1939
|
this.list.filters.update();
|
|
1877
1940
|
}
|
|
1878
1941
|
}
|
|
1879
|
-
ModelListSelectFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1880
|
-
ModelListSelectFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
1881
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1942
|
+
ModelListSelectFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListSelectFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1943
|
+
ModelListSelectFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.3", type: ModelListSelectFilterComponent, isStandalone: true, selector: "data-model-list-select-filter", inputs: { list: "list", filter: "filter", classes: "classes" }, ngImport: i0, template: "\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <select class=\"form-select\" [formControl]=\"fc\">\n <option [ngValue]=\"null\">-- {{filter.help}} --</option>\n <option *ngFor=\"let c of filter.choices|async\" [ngValue]=\"c.value\">{{c.desc}}</option>\n </select>\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2$2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2$2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
|
|
1944
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListSelectFilterComponent, decorators: [{
|
|
1882
1945
|
type: Component,
|
|
1883
1946
|
args: [{ selector: 'data-model-list-select-filter', standalone: true, imports: [CommonModule, ReactiveFormsModule], template: "\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <select class=\"form-select\" [formControl]=\"fc\">\n <option [ngValue]=\"null\">-- {{filter.help}} --</option>\n <option *ngFor=\"let c of filter.choices|async\" [ngValue]=\"c.value\">{{c.desc}}</option>\n </select>\n</div>" }]
|
|
1884
1947
|
}], ctorParameters: function () { return []; }, propDecorators: { list: [{
|
|
@@ -1918,9 +1981,9 @@ class ModelListSelectMultiFilterComponent {
|
|
|
1918
1981
|
this.list.filters.update();
|
|
1919
1982
|
}
|
|
1920
1983
|
}
|
|
1921
|
-
ModelListSelectMultiFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1922
|
-
ModelListSelectMultiFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
1923
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1984
|
+
ModelListSelectMultiFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListSelectMultiFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1985
|
+
ModelListSelectMultiFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.3", type: ModelListSelectMultiFilterComponent, isStandalone: true, selector: "data-model-list-select-multi-filter", inputs: { list: "list", filter: "filter", classes: "classes" }, ngImport: i0, template: "\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <select class=\"form-select\" [formControl]=\"fc\">\n <option [ngValue]=\"null\">-- {{filter.help}} --</option>\n <option *ngFor=\"let c of filter.choices|async\" [ngValue]=\"c.value\">{{c.desc}}</option>\n </select>\n <div class=\"enabled mt-1\">\n <div *ngFor=\"let e of filter.mcurrent$|async\"><i class=\"bi bi-trash me-2\" (click)=\"unset(e.value, e.desc)\" role=\"button\"></i>{{e.desc}}</div>\n </div>\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2$2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2$2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
|
|
1986
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListSelectMultiFilterComponent, decorators: [{
|
|
1924
1987
|
type: Component,
|
|
1925
1988
|
args: [{ selector: 'data-model-list-select-multi-filter', standalone: true, imports: [CommonModule, ReactiveFormsModule], template: "\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <select class=\"form-select\" [formControl]=\"fc\">\n <option [ngValue]=\"null\">-- {{filter.help}} --</option>\n <option *ngFor=\"let c of filter.choices|async\" [ngValue]=\"c.value\">{{c.desc}}</option>\n </select>\n <div class=\"enabled mt-1\">\n <div *ngFor=\"let e of filter.mcurrent$|async\"><i class=\"bi bi-trash me-2\" (click)=\"unset(e.value, e.desc)\" role=\"button\"></i>{{e.desc}}</div>\n </div>\n</div>" }]
|
|
1926
1989
|
}], ctorParameters: function () { return []; }, propDecorators: { list: [{
|
|
@@ -1936,9 +1999,9 @@ class ModelListTreeFilterComponent {
|
|
|
1936
1999
|
this.classes = '';
|
|
1937
2000
|
}
|
|
1938
2001
|
}
|
|
1939
|
-
ModelListTreeFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1940
|
-
ModelListTreeFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
1941
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2002
|
+
ModelListTreeFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListTreeFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2003
|
+
ModelListTreeFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.3", type: ModelListTreeFilterComponent, isStandalone: true, selector: "data-model-list-tree-filter", inputs: { list: "list", filter: "filter", classes: "classes" }, ngImport: i0, template: "<p>model-list-tree-filter works!</p>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
2004
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListTreeFilterComponent, decorators: [{
|
|
1942
2005
|
type: Component,
|
|
1943
2006
|
args: [{ selector: 'data-model-list-tree-filter', standalone: true, imports: [CommonModule], template: "<p>model-list-tree-filter works!</p>" }]
|
|
1944
2007
|
}], ctorParameters: function () { return []; }, propDecorators: { list: [{
|
|
@@ -1973,9 +2036,9 @@ class ModelListNumberFilterComponent {
|
|
|
1973
2036
|
this.list.filters.update();
|
|
1974
2037
|
}
|
|
1975
2038
|
}
|
|
1976
|
-
ModelListNumberFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1977
|
-
ModelListNumberFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
1978
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2039
|
+
ModelListNumberFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListNumberFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2040
|
+
ModelListNumberFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.3", type: ModelListNumberFilterComponent, isStandalone: true, selector: "data-model-list-number-filter", inputs: { list: "list", filter: "filter", classes: "classes" }, ngImport: i0, template: "\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\">\n <div class=\"bi bi-trash\"></div>\n </div>\n <label>{{filter.label}}</label>\n <div class=\"input-group\" ngbDropdown>\n <button class=\"btn btn-outline-secondary\" type=\"button\" ngbDropdownToggle><span class=\"me-2\">{{filter.operator.label}}</span>\n <div class=\"dropdown-menu\" ngbDropdownMenu>\n <button ngbDropdownItem *ngFor=\"let op of filter.operations\" (click)=\"selectOp(op.operator)\" [class.text-primary]=\"op.operator === filter.operator.operator\">{{op.label}}</button>\n </div>\n </button>\n <input class=\"form-control\" type=\"number\" [formControl]=\"fc\" [placeholder]=\"filter.help\">\n </div>\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$2.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$2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: NgbDropdownModule }, { kind: "directive", type: i2$1.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i2$1.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i2$1.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: i2$1.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["disabled"] }] });
|
|
2041
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListNumberFilterComponent, decorators: [{
|
|
1979
2042
|
type: Component,
|
|
1980
2043
|
args: [{ selector: 'data-model-list-number-filter', standalone: true, imports: [CommonModule, ReactiveFormsModule, NgbDropdownModule], template: "\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\">\n <div class=\"bi bi-trash\"></div>\n </div>\n <label>{{filter.label}}</label>\n <div class=\"input-group\" ngbDropdown>\n <button class=\"btn btn-outline-secondary\" type=\"button\" ngbDropdownToggle><span class=\"me-2\">{{filter.operator.label}}</span>\n <div class=\"dropdown-menu\" ngbDropdownMenu>\n <button ngbDropdownItem *ngFor=\"let op of filter.operations\" (click)=\"selectOp(op.operator)\" [class.text-primary]=\"op.operator === filter.operator.operator\">{{op.label}}</button>\n </div>\n </button>\n <input class=\"form-control\" type=\"number\" [formControl]=\"fc\" [placeholder]=\"filter.help\">\n </div>\n</div>" }]
|
|
1981
2044
|
}], ctorParameters: function () { return []; }, propDecorators: { list: [{
|
|
@@ -2006,9 +2069,9 @@ class ModelListDateFilterComponent {
|
|
|
2006
2069
|
this.list.filters.update();
|
|
2007
2070
|
}
|
|
2008
2071
|
}
|
|
2009
|
-
ModelListDateFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2010
|
-
ModelListDateFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
2011
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2072
|
+
ModelListDateFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListDateFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2073
|
+
ModelListDateFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.3", type: ModelListDateFilterComponent, isStandalone: true, selector: "data-model-list-date-filter", inputs: { list: "list", filter: "filter", classes: "classes" }, ngImport: i0, template: "\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <input class=\"form-control\" type=\"date\" [formControl]=\"fc\" [placeholder]=\"filter.help\">\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$2.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$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
|
|
2074
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListDateFilterComponent, decorators: [{
|
|
2012
2075
|
type: Component,
|
|
2013
2076
|
args: [{ selector: 'data-model-list-date-filter', standalone: true, imports: [CommonModule, ReactiveFormsModule], template: "\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <input class=\"form-control\" type=\"date\" [formControl]=\"fc\" [placeholder]=\"filter.help\">\n</div>" }]
|
|
2014
2077
|
}], ctorParameters: function () { return []; }, propDecorators: { list: [{
|
|
@@ -2026,9 +2089,9 @@ class ModelListFiltersComponent {
|
|
|
2026
2089
|
this.itemClasses = '';
|
|
2027
2090
|
}
|
|
2028
2091
|
}
|
|
2029
|
-
ModelListFiltersComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2030
|
-
ModelListFiltersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
2031
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2092
|
+
ModelListFiltersComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListFiltersComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2093
|
+
ModelListFiltersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.3", type: ModelListFiltersComponent, isStandalone: true, selector: "data-model-list-filters", inputs: { list: "list", containerClasses: "containerClasses", itemClasses: "itemClasses" }, ngImport: i0, template: "\n<div [ngClass]=\"containerClasses\">\n <ng-container *ngFor=\"let f of list.filters.enabled|async\">\n <ng-container [ngSwitch]=\"f.type\">\n <data-model-list-autocomplete-filter *ngSwitchCase=\"'autocomplete'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-autocomplete-filter>\n <data-model-list-autocomplete-multi-filter *ngSwitchCase=\"'autocompletemulti'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-autocomplete-multi-filter>\n <data-model-list-datetime-filter *ngSwitchCase=\"'datetime'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-datetime-filter>\n <data-model-list-date-filter *ngSwitchCase=\"'date'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-date-filter>\n <data-model-list-datetime-range-filter *ngSwitchCase=\"'datetimerange'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-datetime-range-filter>\n <data-model-list-flags-filter *ngSwitchCase=\"'flags'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-flags-filter>\n <data-model-list-geodistance-filter *ngSwitchCase=\"'geodistance'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-geodistance-filter>\n <data-model-list-number-filter *ngSwitchCase=\"'number'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-number-filter>\n <data-model-list-select-filter *ngSwitchCase=\"'select'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-select-filter>\n <data-model-list-select-multi-filter *ngSwitchCase=\"'selectmulti'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-select-multi-filter>\n <data-model-list-text-filter *ngSwitchCase=\"'text'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-text-filter>\n <data-model-list-tree-filter *ngSwitchCase=\"'tree'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-tree-filter>\n </ng-container>\n </ng-container>\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "component", type: ModelListTextFilterComponent, selector: "data-model-list-text-filter", inputs: ["list", "filter", "classes"] }, { kind: "component", type: ModelListNumberFilterComponent, selector: "data-model-list-number-filter", inputs: ["list", "filter", "classes"] }, { kind: "component", type: ModelListAutocompleteFilterComponent, selector: "data-model-list-autocomplete-filter", inputs: ["list", "filter", "classes"] }, { kind: "component", type: ModelListAutocompleteMultiFilterComponent, selector: "data-model-list-autocomplete-multi-filter", inputs: ["filter"] }, { kind: "component", type: ModelListDatetimeFilterComponent, selector: "data-model-list-datetime-filter", inputs: ["list", "filter", "classes"] }, { kind: "component", type: ModelListDateFilterComponent, selector: "data-model-list-date-filter", inputs: ["list", "filter", "classes"] }, { kind: "component", type: ModelListDatetimeRangeFilterComponent, selector: "data-model-list-datetime-range-filter", inputs: ["list", "filter", "classes"] }, { kind: "component", type: ModelListFlagsFilterComponent, selector: "data-model-list-flags-filter", inputs: ["list", "filter", "classes"] }, { kind: "component", type: ModelListGeodistanceFilterComponent, selector: "data-model-list-geodistance-filter", inputs: ["list", "filter", "classes"] }, { kind: "component", type: ModelListSelectFilterComponent, selector: "data-model-list-select-filter", inputs: ["list", "filter", "classes"] }, { kind: "component", type: ModelListSelectMultiFilterComponent, selector: "data-model-list-select-multi-filter", inputs: ["list", "filter", "classes"] }, { kind: "component", type: ModelListTreeFilterComponent, selector: "data-model-list-tree-filter", inputs: ["list", "filter", "classes"] }] });
|
|
2094
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListFiltersComponent, decorators: [{
|
|
2032
2095
|
type: Component,
|
|
2033
2096
|
args: [{ selector: 'data-model-list-filters', standalone: true, imports: [
|
|
2034
2097
|
CommonModule,
|
|
@@ -2074,6 +2137,7 @@ class ModelListFilter {
|
|
|
2074
2137
|
this.allowed = false;
|
|
2075
2138
|
this.enabled = false;
|
|
2076
2139
|
this.type = 'text';
|
|
2140
|
+
this.default = params.default;
|
|
2077
2141
|
// FIXME: add value init
|
|
2078
2142
|
}
|
|
2079
2143
|
get mcurrent$() {
|
|
@@ -2082,6 +2146,12 @@ class ModelListFilter {
|
|
|
2082
2146
|
get current$() {
|
|
2083
2147
|
return this._current.asObservable();
|
|
2084
2148
|
}
|
|
2149
|
+
get valueChanges() {
|
|
2150
|
+
if (this.multi) {
|
|
2151
|
+
return this._mcurrent.asObservable();
|
|
2152
|
+
}
|
|
2153
|
+
return this._current.asObservable();
|
|
2154
|
+
}
|
|
2085
2155
|
updateFilter(filter) {
|
|
2086
2156
|
if (this.multi && this._mvalue.size > 0) {
|
|
2087
2157
|
filter[this.field] = this.getMultiValue();
|
|
@@ -2092,12 +2162,6 @@ class ModelListFilter {
|
|
|
2092
2162
|
filter[this.field] = this.getValue();
|
|
2093
2163
|
}
|
|
2094
2164
|
}
|
|
2095
|
-
get valueChanges() {
|
|
2096
|
-
if (this.multi) {
|
|
2097
|
-
return this._mcurrent.asObservable();
|
|
2098
|
-
}
|
|
2099
|
-
return this._current.asObservable();
|
|
2100
|
-
}
|
|
2101
2165
|
clear(notify = true) {
|
|
2102
2166
|
if (this.multi) {
|
|
2103
2167
|
this._mvalue = new Map();
|
|
@@ -2125,6 +2189,9 @@ class ModelListFilter {
|
|
|
2125
2189
|
}
|
|
2126
2190
|
return this.stoggle(value, desc, notify);
|
|
2127
2191
|
}
|
|
2192
|
+
getValue() {
|
|
2193
|
+
return `${this._value?.value}`;
|
|
2194
|
+
}
|
|
2128
2195
|
mtoggle(value, desc, notify = true) {
|
|
2129
2196
|
if (this._mvalue.has(`${value}`)) {
|
|
2130
2197
|
this._mvalue.delete(`${value}`);
|
|
@@ -2180,9 +2247,6 @@ class ModelListFilter {
|
|
|
2180
2247
|
getMultiValue() {
|
|
2181
2248
|
return Array.from(this._mvalue.keys()).join(',');
|
|
2182
2249
|
}
|
|
2183
|
-
getValue() {
|
|
2184
|
-
return `${this._value?.value}`;
|
|
2185
|
-
}
|
|
2186
2250
|
notify(notify = true) {
|
|
2187
2251
|
if (notify) {
|
|
2188
2252
|
if (this.multi) {
|
|
@@ -2377,7 +2441,12 @@ class ModelListSelectFilter extends ModelListFilter {
|
|
|
2377
2441
|
this.choices = params.choices;
|
|
2378
2442
|
}
|
|
2379
2443
|
}
|
|
2444
|
+
// Set default only for cur type
|
|
2445
|
+
if (this.default && this.type == 'select') {
|
|
2446
|
+
this.set(this.default, '', true);
|
|
2447
|
+
}
|
|
2380
2448
|
}
|
|
2449
|
+
setDefault() { }
|
|
2381
2450
|
}
|
|
2382
2451
|
|
|
2383
2452
|
class ModelListSelectMultiFilter extends ModelListSelectFilter {
|
|
@@ -2391,18 +2460,27 @@ class ModelListSelectMultiFilter extends ModelListSelectFilter {
|
|
|
2391
2460
|
if (this.help == '') {
|
|
2392
2461
|
this.help = 'Choix par liste déroulante (multiple)';
|
|
2393
2462
|
}
|
|
2463
|
+
// Set default only for cur type
|
|
2464
|
+
if (this.default && this.type == 'selectmulti') {
|
|
2465
|
+
for (const f of this.default) {
|
|
2466
|
+
this.set(f.value, f.desc, true);
|
|
2467
|
+
}
|
|
2468
|
+
}
|
|
2394
2469
|
}
|
|
2395
2470
|
}
|
|
2396
2471
|
|
|
2397
2472
|
class ModelListTextFilter extends ModelListFilter {
|
|
2398
2473
|
constructor(params) {
|
|
2399
2474
|
super(params);
|
|
2400
|
-
this.type =
|
|
2401
|
-
if (this.label ==
|
|
2402
|
-
this.label =
|
|
2475
|
+
this.type = 'text';
|
|
2476
|
+
if (this.label == '') {
|
|
2477
|
+
this.label = 'Recherche par texte';
|
|
2403
2478
|
}
|
|
2404
|
-
if (this.help ==
|
|
2405
|
-
this.help =
|
|
2479
|
+
if (this.help == '') {
|
|
2480
|
+
this.help = 'Texte à rechercher';
|
|
2481
|
+
}
|
|
2482
|
+
if (this.default) {
|
|
2483
|
+
this.set(this.default, '', true);
|
|
2406
2484
|
}
|
|
2407
2485
|
}
|
|
2408
2486
|
}
|
|
@@ -2491,9 +2569,9 @@ class ModelListPaginatorComponent {
|
|
|
2491
2569
|
}
|
|
2492
2570
|
}
|
|
2493
2571
|
}
|
|
2494
|
-
ModelListPaginatorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2495
|
-
ModelListPaginatorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
2496
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2572
|
+
ModelListPaginatorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListPaginatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2573
|
+
ModelListPaginatorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.3", 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>=10\">10 / page</option>\n <option value=\"20\" *ngIf=\"maxPages>=20\">20 / page</option>\n <option value=\"50\" *ngIf=\"maxPages>=50\">50 / page</option>\n <option value=\"100\" *ngIf=\"maxPages>=100\">100 / page</option>\n <option value=\"200\" *ngIf=\"maxPages>=200\">200 / page</option>\n <option value=\"500\" *ngIf=\"maxPages>=500\">500 / page</option>\n <option value=\"1000\" *ngIf=\"maxPages>=1000\">1000 / page</option>\n <option value=\"2000\" *ngIf=\"maxPages>=2000\">2000 / page</option>\n <option value=\"5000\" *ngIf=\"maxPages>=5000\">5000 / page</option>\n <option value=\"10000\" *ngIf=\"maxPages>=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$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2$2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2$2.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$2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2$2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: NgbPaginationModule }, { kind: "component", type: i2$1.NgbPagination, selector: "ngb-pagination", inputs: ["disabled", "boundaryLinks", "directionLinks", "ellipses", "rotate", "collectionSize", "maxSize", "page", "pageSize", "size"], outputs: ["pageChange"] }] });
|
|
2574
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ModelListPaginatorComponent, decorators: [{
|
|
2497
2575
|
type: Component,
|
|
2498
2576
|
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>=10\">10 / page</option>\n <option value=\"20\" *ngIf=\"maxPages>=20\">20 / page</option>\n <option value=\"50\" *ngIf=\"maxPages>=50\">50 / page</option>\n <option value=\"100\" *ngIf=\"maxPages>=100\">100 / page</option>\n <option value=\"200\" *ngIf=\"maxPages>=200\">200 / page</option>\n <option value=\"500\" *ngIf=\"maxPages>=500\">500 / page</option>\n <option value=\"1000\" *ngIf=\"maxPages>=1000\">1000 / page</option>\n <option value=\"2000\" *ngIf=\"maxPages>=2000\">2000 / page</option>\n <option value=\"5000\" *ngIf=\"maxPages>=5000\">5000 / page</option>\n <option value=\"10000\" *ngIf=\"maxPages>=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>" }]
|
|
2499
2577
|
}], propDecorators: { list: [{
|
|
@@ -2531,15 +2609,55 @@ class ChoicePipe {
|
|
|
2531
2609
|
return `[${fvalue}] ??`;
|
|
2532
2610
|
}
|
|
2533
2611
|
}
|
|
2534
|
-
ChoicePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2535
|
-
ChoicePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
2536
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2612
|
+
ChoicePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ChoicePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
2613
|
+
ChoicePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.0.3", ngImport: i0, type: ChoicePipe, isStandalone: true, name: "choice" });
|
|
2614
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ChoicePipe, decorators: [{
|
|
2537
2615
|
type: Pipe,
|
|
2538
2616
|
args: [{
|
|
2539
2617
|
name: 'choice',
|
|
2540
2618
|
standalone: true,
|
|
2541
2619
|
}]
|
|
2542
2620
|
}] });
|
|
2621
|
+
class PChoicePipe {
|
|
2622
|
+
transform(value, model, field, mode = 'desc') {
|
|
2623
|
+
if (!model) {
|
|
2624
|
+
return '-';
|
|
2625
|
+
}
|
|
2626
|
+
if (!value) {
|
|
2627
|
+
return '-';
|
|
2628
|
+
}
|
|
2629
|
+
// Use value from input, not from field
|
|
2630
|
+
const fvalue = value; //- (model as any)[field];
|
|
2631
|
+
if (mode === 'code') {
|
|
2632
|
+
return `${fvalue}`;
|
|
2633
|
+
}
|
|
2634
|
+
const manager = model.FM(field);
|
|
2635
|
+
const choices = manager.choices;
|
|
2636
|
+
if (!choices) {
|
|
2637
|
+
return `${fvalue}`;
|
|
2638
|
+
}
|
|
2639
|
+
for (const ch of choices) {
|
|
2640
|
+
if (ch.value === fvalue) {
|
|
2641
|
+
if (mode === 'desc') {
|
|
2642
|
+
return ch.desc;
|
|
2643
|
+
}
|
|
2644
|
+
else {
|
|
2645
|
+
return `[${fvalue}] ${ch.desc}`;
|
|
2646
|
+
}
|
|
2647
|
+
}
|
|
2648
|
+
}
|
|
2649
|
+
return `[${fvalue}] ??`;
|
|
2650
|
+
}
|
|
2651
|
+
}
|
|
2652
|
+
PChoicePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: PChoicePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
2653
|
+
PChoicePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.0.3", ngImport: i0, type: PChoicePipe, isStandalone: true, name: "pchoice" });
|
|
2654
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: PChoicePipe, decorators: [{
|
|
2655
|
+
type: Pipe,
|
|
2656
|
+
args: [{
|
|
2657
|
+
name: 'pchoice',
|
|
2658
|
+
standalone: true,
|
|
2659
|
+
}]
|
|
2660
|
+
}] });
|
|
2543
2661
|
|
|
2544
2662
|
function isValue(value) {
|
|
2545
2663
|
return !(value == null || value === '' || value !== value);
|
|
@@ -2573,9 +2691,9 @@ class FactorPipe {
|
|
|
2573
2691
|
return formatNumber(num / factor, locale, digitsInfo);
|
|
2574
2692
|
}
|
|
2575
2693
|
}
|
|
2576
|
-
FactorPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2577
|
-
FactorPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
2578
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2694
|
+
FactorPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: FactorPipe, deps: [{ token: LOCALE_ID }], target: i0.ɵɵFactoryTarget.Pipe });
|
|
2695
|
+
FactorPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.0.3", ngImport: i0, type: FactorPipe, isStandalone: true, name: "factor" });
|
|
2696
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: FactorPipe, decorators: [{
|
|
2579
2697
|
type: Pipe,
|
|
2580
2698
|
args: [{
|
|
2581
2699
|
name: 'factor',
|
|
@@ -2585,9 +2703,42 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImpor
|
|
|
2585
2703
|
type: Inject,
|
|
2586
2704
|
args: [LOCALE_ID]
|
|
2587
2705
|
}] }]; } });
|
|
2706
|
+
class PFactorPipe {
|
|
2707
|
+
constructor(_locale) {
|
|
2708
|
+
this._locale = _locale;
|
|
2709
|
+
}
|
|
2710
|
+
transform(value, model, field, digitsInfo, locale) {
|
|
2711
|
+
if (!model)
|
|
2712
|
+
return null;
|
|
2713
|
+
if (!value)
|
|
2714
|
+
return null;
|
|
2715
|
+
locale = locale || this._locale;
|
|
2716
|
+
// Use value from input, not from model
|
|
2717
|
+
const fvalue = value; // (model as any)[field];
|
|
2718
|
+
if (!isValue(fvalue))
|
|
2719
|
+
return null;
|
|
2720
|
+
const manager = model.FM(field);
|
|
2721
|
+
let factor = manager.factor;
|
|
2722
|
+
factor = factor || 1;
|
|
2723
|
+
const num = strToNumber(fvalue);
|
|
2724
|
+
return formatNumber(num / factor, locale, digitsInfo);
|
|
2725
|
+
}
|
|
2726
|
+
}
|
|
2727
|
+
PFactorPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: PFactorPipe, deps: [{ token: LOCALE_ID }], target: i0.ɵɵFactoryTarget.Pipe });
|
|
2728
|
+
PFactorPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.0.3", ngImport: i0, type: PFactorPipe, isStandalone: true, name: "pfactor" });
|
|
2729
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: PFactorPipe, decorators: [{
|
|
2730
|
+
type: Pipe,
|
|
2731
|
+
args: [{
|
|
2732
|
+
name: 'pfactor',
|
|
2733
|
+
standalone: true,
|
|
2734
|
+
}]
|
|
2735
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
2736
|
+
type: Inject,
|
|
2737
|
+
args: [LOCALE_ID]
|
|
2738
|
+
}] }]; } });
|
|
2588
2739
|
|
|
2589
2740
|
class FactorcPipe {
|
|
2590
|
-
constructor(_locale, _defaultCurrencyCode = '
|
|
2741
|
+
constructor(_locale, _defaultCurrencyCode = 'EUR') {
|
|
2591
2742
|
this._locale = _locale;
|
|
2592
2743
|
this._defaultCurrencyCode = _defaultCurrencyCode;
|
|
2593
2744
|
}
|
|
@@ -2599,6 +2750,9 @@ class FactorcPipe {
|
|
|
2599
2750
|
return null;
|
|
2600
2751
|
locale = locale || this._locale;
|
|
2601
2752
|
let currency = currencyCode || this._defaultCurrencyCode;
|
|
2753
|
+
if (!display) {
|
|
2754
|
+
display = 'symbol';
|
|
2755
|
+
}
|
|
2602
2756
|
if (display !== 'code') {
|
|
2603
2757
|
if (display === 'symbol' || display === 'symbol-narrow') {
|
|
2604
2758
|
currency = getCurrencySymbol(currency, display === 'symbol' ? 'wide' : 'narrow', locale);
|
|
@@ -2608,15 +2762,14 @@ class FactorcPipe {
|
|
|
2608
2762
|
}
|
|
2609
2763
|
}
|
|
2610
2764
|
const manager = value.FM(field);
|
|
2611
|
-
|
|
2612
|
-
factor = factor || 1;
|
|
2765
|
+
const factor = manager.factor || 1;
|
|
2613
2766
|
const num = strToNumber(fvalue);
|
|
2614
|
-
return formatCurrency(num, locale, currency, currencyCode, digitsInfo);
|
|
2767
|
+
return formatCurrency(num / factor, locale, currency, currencyCode, digitsInfo);
|
|
2615
2768
|
}
|
|
2616
2769
|
}
|
|
2617
|
-
FactorcPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2618
|
-
FactorcPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
2619
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2770
|
+
FactorcPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: FactorcPipe, deps: [{ token: LOCALE_ID }, { token: DEFAULT_CURRENCY_CODE }], target: i0.ɵɵFactoryTarget.Pipe });
|
|
2771
|
+
FactorcPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.0.3", ngImport: i0, type: FactorcPipe, isStandalone: true, name: "factorc" });
|
|
2772
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: FactorcPipe, decorators: [{
|
|
2620
2773
|
type: Pipe,
|
|
2621
2774
|
args: [{
|
|
2622
2775
|
name: 'factorc',
|
|
@@ -2629,6 +2782,55 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImpor
|
|
|
2629
2782
|
type: Inject,
|
|
2630
2783
|
args: [DEFAULT_CURRENCY_CODE]
|
|
2631
2784
|
}] }]; } });
|
|
2785
|
+
class PFactorcPipe {
|
|
2786
|
+
constructor(_locale, _defaultCurrencyCode = 'EUR') {
|
|
2787
|
+
this._locale = _locale;
|
|
2788
|
+
this._defaultCurrencyCode = _defaultCurrencyCode;
|
|
2789
|
+
}
|
|
2790
|
+
transform(value, model, field, currencyCode, display, digitsInfo, locale) {
|
|
2791
|
+
if (!model)
|
|
2792
|
+
return null;
|
|
2793
|
+
if (!value)
|
|
2794
|
+
return null;
|
|
2795
|
+
// Use value from input, not from model
|
|
2796
|
+
const fvalue = value; // (model as any)[field];
|
|
2797
|
+
if (!isValue(fvalue)) {
|
|
2798
|
+
return null;
|
|
2799
|
+
}
|
|
2800
|
+
locale = locale || this._locale;
|
|
2801
|
+
let currency = currencyCode || this._defaultCurrencyCode;
|
|
2802
|
+
if (!display) {
|
|
2803
|
+
display = 'symbol';
|
|
2804
|
+
}
|
|
2805
|
+
if (display !== 'code') {
|
|
2806
|
+
if (display === 'symbol' || display === 'symbol-narrow') {
|
|
2807
|
+
currency = getCurrencySymbol(currency, display === 'symbol' ? 'wide' : 'narrow', locale);
|
|
2808
|
+
}
|
|
2809
|
+
else {
|
|
2810
|
+
currency = display;
|
|
2811
|
+
}
|
|
2812
|
+
}
|
|
2813
|
+
const manager = model.FM(field);
|
|
2814
|
+
const factor = manager.factor || 1;
|
|
2815
|
+
const num = strToNumber(fvalue);
|
|
2816
|
+
return formatCurrency(num / factor, locale, currency, currencyCode, digitsInfo);
|
|
2817
|
+
}
|
|
2818
|
+
}
|
|
2819
|
+
PFactorcPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: PFactorcPipe, deps: [{ token: LOCALE_ID }, { token: DEFAULT_CURRENCY_CODE }], target: i0.ɵɵFactoryTarget.Pipe });
|
|
2820
|
+
PFactorcPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.0.3", ngImport: i0, type: PFactorcPipe, isStandalone: true, name: "pfactorc" });
|
|
2821
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: PFactorcPipe, decorators: [{
|
|
2822
|
+
type: Pipe,
|
|
2823
|
+
args: [{
|
|
2824
|
+
name: 'pfactorc',
|
|
2825
|
+
standalone: true,
|
|
2826
|
+
}]
|
|
2827
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
2828
|
+
type: Inject,
|
|
2829
|
+
args: [LOCALE_ID]
|
|
2830
|
+
}] }, { type: undefined, decorators: [{
|
|
2831
|
+
type: Inject,
|
|
2832
|
+
args: [DEFAULT_CURRENCY_CODE]
|
|
2833
|
+
}] }]; } });
|
|
2632
2834
|
|
|
2633
2835
|
class FkselectComponent {
|
|
2634
2836
|
constructor() {
|
|
@@ -2721,9 +2923,9 @@ class FkselectComponent {
|
|
|
2721
2923
|
}));
|
|
2722
2924
|
}
|
|
2723
2925
|
}
|
|
2724
|
-
FkselectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2725
|
-
FkselectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
2726
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2926
|
+
FkselectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: FkselectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2927
|
+
FkselectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.3", type: FkselectComponent, isStandalone: true, selector: "data-fkselect", inputs: { model: "model", field: "field", edit: "edit", value: "value", queryset: "queryset", collection: "collection", update: "update", filter: "filter", mode: "mode", display: "display", search: "search", label: "label", placeholder: "placeholder", inputClasses: "inputClasses" }, outputs: { selected: "selected", cancelled: "cancelled", cleared: "cleared" }, ngImport: i0, template: "\n<div class=\"form-group\">\n <label *ngIf=\"label\">{{label}}</label>\n <div class=\"input-group\">\n <input class=\"form-control\" [formControl]=\"fc\" [placeholder]=\"placeholder\" [ngbTypeahead]=\"searchFn\" [editable]=\"false\" [focusFirst]=\"true\" [inputFormatter]=\"displayFn\" [resultFormatter]=\"displayFn\" (keyup.escape)=\"cancelled.emit()\">\n <div class=\"input-group-text\"><i class=\"bi bi-trash float-end pointer\" (click)=\"clearAction()\"></i></div>\n </div>\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$2.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$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: NgbTypeaheadModule }, { kind: "directive", type: i2$1.NgbTypeahead, selector: "input[ngbTypeahead]", inputs: ["autocomplete", "container", "editable", "focusFirst", "inputFormatter", "ngbTypeahead", "resultFormatter", "resultTemplate", "showHint", "placement", "popperOptions", "popupClass"], outputs: ["selectItem"], exportAs: ["ngbTypeahead"] }] });
|
|
2928
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: FkselectComponent, decorators: [{
|
|
2727
2929
|
type: Component,
|
|
2728
2930
|
args: [{ selector: 'data-fkselect', standalone: true, imports: [CommonModule, ReactiveFormsModule, NgbTypeaheadModule], template: "\n<div class=\"form-group\">\n <label *ngIf=\"label\">{{label}}</label>\n <div class=\"input-group\">\n <input class=\"form-control\" [formControl]=\"fc\" [placeholder]=\"placeholder\" [ngbTypeahead]=\"searchFn\" [editable]=\"false\" [focusFirst]=\"true\" [inputFormatter]=\"displayFn\" [resultFormatter]=\"displayFn\" (keyup.escape)=\"cancelled.emit()\">\n <div class=\"input-group-text\"><i class=\"bi bi-trash float-end pointer\" (click)=\"clearAction()\"></i></div>\n </div>\n</div>" }]
|
|
2729
2931
|
}], ctorParameters: function () { return []; }, propDecorators: { model: [{
|
|
@@ -3011,15 +3213,15 @@ class M2mselectComponent {
|
|
|
3011
3213
|
}));
|
|
3012
3214
|
}
|
|
3013
3215
|
}
|
|
3014
|
-
M2mselectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
3015
|
-
M2mselectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
3216
|
+
M2mselectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: M2mselectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3217
|
+
M2mselectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.3", type: M2mselectComponent, isStandalone: true, selector: "data-m2mselect", inputs: { model: "model", field: "field", edit: "edit", values: "values", queryset: "queryset", collection: "collection", filter: "filter", mode: "mode", display: "display", search: "search", label: "label", placeholder: "placeholder", emptyLabel: "emptyLabel", inputClasses: "inputClasses" }, outputs: { added: "added", removed: "removed", cancelled: "cancelled", cleared: "cleared", detailsChanged: "detailsChanged", changed: "changed" }, providers: [
|
|
3016
3218
|
{
|
|
3017
3219
|
provide: NG_VALUE_ACCESSOR,
|
|
3018
3220
|
multi: true,
|
|
3019
3221
|
useExisting: M2mselectComponent,
|
|
3020
3222
|
},
|
|
3021
|
-
], ngImport: i0, template: "\n<div class=\"form-group\">\n <label *ngIf=\"label\">{{label}}</label>\n <div class=\"input-group\">\n <input class=\"form-control\" [formControl]=\"fc\" [placeholder]=\"placeholder\" [ngbTypeahead]=\"searchFn\" [editable]=\"false\" [focusFirst]=\"true\" [inputFormatter]=\"displayFn\" [resultFormatter]=\"displayFn\" (keyup.escape)=\"cancelled.emit()\">\n <div class=\"input-group-text\"><i class=\"bi bi-trash float-end pointer\" (click)=\"cleared.emit()\"></i></div>\n </div>\n <div *ngFor=\"let i of values\"><i class=\"bi bi-trash ms-2 float-end\" (click)=\"onRemove(i)\"></i>{{displayFn(i)}}</div>\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$2.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$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: NgbTypeaheadModule }, { kind: "directive", type: i2$1.NgbTypeahead, selector: "input[ngbTypeahead]", inputs: ["autocomplete", "container", "editable", "focusFirst", "inputFormatter", "ngbTypeahead", "resultFormatter", "resultTemplate", "showHint", "placement", "popupClass"], outputs: ["selectItem"], exportAs: ["ngbTypeahead"] }] });
|
|
3022
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
3223
|
+
], ngImport: i0, template: "\n<div class=\"form-group\">\n <label *ngIf=\"label\">{{label}}</label>\n <div class=\"input-group\">\n <input class=\"form-control\" [formControl]=\"fc\" [placeholder]=\"placeholder\" [ngbTypeahead]=\"searchFn\" [editable]=\"false\" [focusFirst]=\"true\" [inputFormatter]=\"displayFn\" [resultFormatter]=\"displayFn\" (keyup.escape)=\"cancelled.emit()\">\n <div class=\"input-group-text\"><i class=\"bi bi-trash float-end pointer\" (click)=\"cleared.emit()\"></i></div>\n </div>\n <div *ngFor=\"let i of values\"><i class=\"bi bi-trash ms-2 float-end\" (click)=\"onRemove(i)\"></i>{{displayFn(i)}}</div>\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$2.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$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: NgbTypeaheadModule }, { kind: "directive", type: i2$1.NgbTypeahead, selector: "input[ngbTypeahead]", inputs: ["autocomplete", "container", "editable", "focusFirst", "inputFormatter", "ngbTypeahead", "resultFormatter", "resultTemplate", "showHint", "placement", "popperOptions", "popupClass"], outputs: ["selectItem"], exportAs: ["ngbTypeahead"] }] });
|
|
3224
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: M2mselectComponent, decorators: [{
|
|
3023
3225
|
type: Component,
|
|
3024
3226
|
args: [{ selector: 'data-m2mselect', providers: [
|
|
3025
3227
|
{
|
|
@@ -3204,9 +3406,9 @@ class DataMessageService {
|
|
|
3204
3406
|
this._messages$.next(out);
|
|
3205
3407
|
}
|
|
3206
3408
|
}
|
|
3207
|
-
DataMessageService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
3208
|
-
DataMessageService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
3209
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
3409
|
+
DataMessageService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: DataMessageService, deps: [{ token: i0.NgZone }, { token: DATA_MESSAGE_SOUNDS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
3410
|
+
DataMessageService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: DataMessageService, providedIn: "root" });
|
|
3411
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: DataMessageService, decorators: [{
|
|
3210
3412
|
type: Injectable,
|
|
3211
3413
|
args: [{
|
|
3212
3414
|
providedIn: "root"
|
|
@@ -3233,6 +3435,11 @@ class DispeditComponent {
|
|
|
3233
3435
|
* If mode is inline, edit is always true.
|
|
3234
3436
|
*/
|
|
3235
3437
|
this.edit = false;
|
|
3438
|
+
/**
|
|
3439
|
+
* Can be switched to edit mode?
|
|
3440
|
+
* default : true
|
|
3441
|
+
*/
|
|
3442
|
+
this.editable = true;
|
|
3236
3443
|
/**
|
|
3237
3444
|
* Display mode
|
|
3238
3445
|
* - dd provides display / edit within a dt/dd block
|
|
@@ -3296,7 +3503,8 @@ class DispeditComponent {
|
|
|
3296
3503
|
this.realPlaceholder = this.placeholder || this.manager?.description || '';
|
|
3297
3504
|
this.realDefault = this.default;
|
|
3298
3505
|
this.save = this.save === undefined ? this.mode === 'dd' : this.save;
|
|
3299
|
-
if (!this.edit && this.mode === 'dd')
|
|
3506
|
+
if ((!this.edit && this.mode === 'dd') ||
|
|
3507
|
+
(!this.editable && this.mode === 'inline')) {
|
|
3300
3508
|
this.enableDisplayMode();
|
|
3301
3509
|
}
|
|
3302
3510
|
else {
|
|
@@ -3326,6 +3534,9 @@ class DispeditComponent {
|
|
|
3326
3534
|
* - update form control classes
|
|
3327
3535
|
*/
|
|
3328
3536
|
enableEditMode() {
|
|
3537
|
+
if (!this.editable) {
|
|
3538
|
+
return;
|
|
3539
|
+
}
|
|
3329
3540
|
this._getChoices();
|
|
3330
3541
|
this._getRealEditor();
|
|
3331
3542
|
this._setFormControl();
|
|
@@ -3617,9 +3828,9 @@ class DispeditComponent {
|
|
|
3617
3828
|
}
|
|
3618
3829
|
_setDisplayClasses() { }
|
|
3619
3830
|
}
|
|
3620
|
-
DispeditComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
3621
|
-
DispeditComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.5", type: DispeditComponent, isStandalone: true, selector: "data-dispedit", inputs: { model: "model", field: "field", form: "form", edit: "edit", mode: "mode", choices: "choices", inputClasses: "inputClasses", editor: "editor", viewer: "viewer", default: "default", placeholder: "placeholder", help: "help", hideLabel: "hideLabel", queryset: "queryset", collection: "collection", display: "display", filter: "filter" }, outputs: { changed: "changed" }, usesOnChanges: true, ngImport: i0, template: "\n<ng-template #titleTpl>\n <ng-content></ng-content>\n</ng-template>\n<ng-template #dispTpl>\n <ng-container [ngSwitch]=\"realDisplay\"><span class=\"editable disp-text\" *ngSwitchCase=\"'text'\" (click)=\"enableEditMode()\">{{txtValue}}</span><span class=\"editable disp-choice\" *ngSwitchCase=\"'choice'\" (click)=\"enableEditMode()\">{{txtValue}}</span><span class=\"editable disp-decimal\" *ngSwitchCase=\"'decimal'\" (click)=\"enableEditMode()\">{{txtValue}}</span><span class=\"editable disp-boolean\" *ngSwitchCase=\"'boolean'\" (click)=\"enableEditMode()\">{{txtValue}}</span><span class=\"editable disp-fkdetails\" *ngSwitchCase=\"'fkdetails'\" (click)=\"enableEditMode()\">\n <div class=\"fkitem\">{{txtValue}}</div></span><span class=\"editable disp-m2mdetails\" *ngSwitchCase=\"'m2mdetails'\" (click)=\"enableEditMode()\">\n <div class=\"m2mitem\" *ngFor=\"let v of txtValues\">{{v}}</div></span><span class=\"editable disp-datetime\" *ngSwitchCase=\"'datetime'\" (click)=\"enableEditMode()\">\n <ng-container *ngIf=\"dispValue\">{{txtValue|date:'short'}}</ng-container>\n <ng-container *ngIf=\"!dispValue\">{{txtValue}}</ng-container></span><span class=\"editable disp-datetime\" *ngSwitchCase=\"'date'\" (click)=\"enableEditMode()\">\n <ng-container *ngIf=\"dispValue\">{{txtValue|date:'shortDate'}}</ng-container>\n <ng-container *ngIf=\"!dispValue\">{{txtValue}}</ng-container></span>\n <!--span.editable.disp-quill(*ngSwitchCase=\"'quill'\", (click)=\"enableEditMode()\")-->\n <!-- quill-view-html([content]=\"txtValue||''\")-->\n </ng-container>\n</ng-template>\n<ng-template #editTpl let-form=\"form\">\n <ng-container [ngSwitch]=\"realEditor\">\n <ng-container *ngSwitchCase=\"'input.text'\">\n <input type=\"text\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['minlength']\">Trop court : {{$any(manager).minLength}} caract\u00E8res minimum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['maxlength']\">Trop long : {{$any(manager).maxLength}} caract\u00E8res maximum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['pattern']\">Format invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.email'\">\n <input type=\"email\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['minlength']\">Trop court : {{$any(manager).minLength}} caract\u00E8res minimum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['maxlength']\">Trop long : {{$any(manager).maxLength}} caract\u00E8res maximum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['pattern']\">Format invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['email']\">Format d'email invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.password'\">\n <input type=\"password\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['minlength']\">Trop court : {{$any(manager).minLength}} caract\u00E8res minimum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['maxlength']\">Trop long : {{$any(manager).maxLength}} caract\u00E8res maximum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['pattern']\">Format invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.datetime'\">\n <input type=\"datetime-local\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" (keyup.enter)=\"update()\">\n <div class=\"form-text\">{{realHelp}}</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['minDate']\">Doit \u00EAtre post\u00E9rieur \u00E0 {{$any(manager).min|date:'short'}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['maxDate']\">Doit \u00EAtre ant\u00E9rieur \u00E0 {{$any(manager).max|date:'short'}}...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.date'\">\n <input type=\"date\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" (keyup.enter)=\"update()\">\n <div class=\"form-text\">{{realHelp}}</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['minDate']\">Doit \u00EAtre post\u00E9rieur \u00E0 {{$any(manager).min|date:'short'}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['maxDate']\">Doit \u00EAtre ant\u00E9rieur \u00E0 {{$any(manager).max|date:'short'}}...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.number'\">\n <input type=\"number\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['min']\">Trop petit : minimum {{$any(manager).min}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['max']\">Trop grand : maximum {{$any(manager).max}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.decimal'\">\n <input type=\"number\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['min']\">Trop petit : minimum {{$any(manager).min}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['max']\">Trop grand : maximum {{$any(manager).max}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.checkbox'\">\n <input class=\"form-check-input\" type=\"checkbox\" [formControl]=\"form.get(field)\" (keyup.escape)=\"unsetEdit()\" (change)=\"update()\">\n <div class=\"form-text\">{{realHelp}}</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'textarea'\">\n <textarea [formControl]=\"form.get(field)\" (keyup.escape)=\"unsetEdit()\" [ngClass]=\"inputClasses\" (keyup.control.enter)=\"update()\" [placeholder]=\"realPlaceholder\"></textarea>\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['minlength']\">Trop court : {{$any(manager).minLength}} caract\u00E8res minimum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['maxlength']\">Trop long : {{$any(manager).maxLength}} caract\u00E8res maximum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['pattern']\">Format invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <!--ng-container(*ngSwitchCase=\"'quill'\")-->\n <!-- quill-editor([formControl]=\"form.get(field)\")-->\n <!-- .form-text(*ngIf=\"realHelp\") {{realHelp}}-->\n <!-- span.ms-1(*ngIf=\"required\") (requis)-->\n <!-- .invalid-feedback.mt-0([class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['minlength']\") Trop court : {{$any(manager).minLength}} caract\u00E8res minimum...-->\n <!-- .invalid-feedback.mt-0([class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['maxlength']\") Trop long : {{$any(manager).maxLength}} caract\u00E8res maximum...-->\n <!-- .invalid-feedback.mt-0([class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['pattern']\") Format invalide...-->\n <!-- .invalid-feedback.mt-0([class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['required']\") Ce champ est requis...-->\n <!-- button([ngClass]=\"inputClasses\") Enregistrer-->\n <ng-container *ngSwitchCase=\"'fkselect'\">\n <data-fkselect [collection]=\"collection\" [filter]=\"filter\" (selected)=\"selectedRefItem($event)\" [placeholder]=\"placeholder\" (cancelled)=\"unsetEdit()\" (cleared)=\"selectedRefItem(null)\"></data-fkselect>\n </ng-container>\n <ng-container *ngSwitchCase=\"'m2mselect'\">\n <data-m2mselect [collection]=\"collection\" [filter]=\"filter\" (changed)=\"update()\" [formControl]=\"form.get(field)\" (detailsChanged)=\"onM2MValuesChanges($event)\" [model]=\"model\" [field]=\"field\" [placeholder]=\"placeholder\"></data-m2mselect>\n </ng-container>\n <ng-container *ngSwitchCase=\"'select'\">\n <select [formControl]=\"form.get(field)\" (keyup.escape)=\"unsetEdit()\" (change)=\"update()\" [ngClass]=\"inputClasses\">\n <option *ngFor=\"let c of realChoices\" [ngValue]=\"c.value ? c.value : c\">{{c.desc ? c.desc : c}}</option>\n </select>\n <div class=\"form-text\">{{realHelp}}</div>\n </ng-container>\n </ng-container>\n</ng-template>\n<!-- Disp/edit toggler-->\n<ng-template #dispeditTpl>\n <ng-container *ngIf=\"!edit\">\n <ng-container *ngTemplateOutlet=\"dispTpl\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"edit\">\n <ng-container *ngIf=\"fg\">\n <form [formGroup]=\"fg\" (submit)=\"update()\">\n <ng-container *ngTemplateOutlet=\"editTpl; context: {form: fg}\"></ng-container>\n </form>\n </ng-container>\n </ng-container>\n</ng-template>\n<!-- DispEdit noform-->\n<ng-template #dispeditFormTpl>\n <ng-container *ngIf=\"!edit\">\n <ng-container *ngTemplateOutlet=\"dispTpl\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"edit\">\n <ng-container *ngIf=\"form\">\n <ng-container *ngTemplateOutlet=\"editTpl; context: {form: form}\"></ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n<!-- Dd display-->\n<ng-container *ngIf=\"mode==='dd'\">\n <dt [class.required]=\"required\" *ngIf=\"!hideLabel\"><span class=\"editable\" (click)=\"toggleEdit()\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container></span><span class=\"pointer float-end\" (click)=\"setDefault()\" *ngIf=\"realDefault!== undefined && edit\"><i class=\"bi bi-trash ms-2\"></i></span></dt>\n <dd [class.mb-0]=\"hideLabel\">\n <ng-container *ngTemplateOutlet=\"dispeditTpl\"></ng-container>\n </dd>\n</ng-container>\n<!-- Inline display-->\n<ng-container *ngIf=\"mode==='inline'\">\n <ng-container *ngIf=\"!hideLabel\"><span class=\"pointer float-end\" (click)=\"setDefault()\" *ngIf=\"realDefault!== undefined && edit\"><i class=\"bi bi-trash ms-2\"></i></span>\n <label [class.required]=\"required\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"dispeditTpl\"></ng-container>\n</ng-container>\n<!-- Form display-->\n<ng-container *ngIf=\"mode==='form'\">\n <ng-container *ngIf=\"!hideLabel\"><span class=\"pointer float-end\" (click)=\"setDefault()\" *ngIf=\"realDefault!== undefined && edit\"><i class=\"bi bi-trash ms-2\"></i></span>\n <label [class.required]=\"required\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"dispeditFormTpl\"></ng-container>\n</ng-container>", styles: [".editable{cursor:pointer}form.inline{display:inline-block}.required{font-weight:700}.required:after{content:\" (*)\"}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "pipe", type: i1$1.DatePipe, name: "date" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2$2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2$2.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$2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2$2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2$2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: FkselectComponent, selector: "data-fkselect", inputs: ["model", "field", "edit", "value", "queryset", "collection", "update", "filter", "mode", "display", "search", "label", "placeholder", "inputClasses"], outputs: ["selected", "cancelled", "cleared"] }, { kind: "component", type: M2mselectComponent, selector: "data-m2mselect", inputs: ["model", "field", "edit", "values", "queryset", "collection", "filter", "mode", "display", "search", "label", "placeholder", "emptyLabel", "inputClasses"], outputs: ["added", "removed", "cancelled", "cleared", "detailsChanged", "changed"] }] });
|
|
3622
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
3831
|
+
DispeditComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: DispeditComponent, deps: [{ token: DATA_DISPLAY_CONFIG, optional: true }, { token: DataMessageService }], target: i0.ɵɵFactoryTarget.Component });
|
|
3832
|
+
DispeditComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.3", type: DispeditComponent, isStandalone: true, selector: "data-dispedit", inputs: { model: "model", field: "field", form: "form", edit: "edit", editable: "editable", mode: "mode", choices: "choices", inputClasses: "inputClasses", editor: "editor", viewer: "viewer", default: "default", placeholder: "placeholder", help: "help", hideLabel: "hideLabel", queryset: "queryset", collection: "collection", display: "display", filter: "filter" }, outputs: { changed: "changed" }, usesOnChanges: true, ngImport: i0, template: "\n<ng-template #titleTpl>\n <ng-content></ng-content>\n</ng-template>\n<ng-template #dispTpl>\n <ng-container [ngSwitch]=\"realDisplay\"><span class=\"editable disp-text\" *ngSwitchCase=\"'text'\" (click)=\"enableEditMode()\">{{txtValue}}</span><span class=\"editable disp-choice\" *ngSwitchCase=\"'choice'\" (click)=\"enableEditMode()\">{{txtValue}}</span><span class=\"editable disp-decimal\" *ngSwitchCase=\"'decimal'\" (click)=\"enableEditMode()\">{{txtValue}}</span><span class=\"editable disp-boolean\" *ngSwitchCase=\"'boolean'\" (click)=\"enableEditMode()\">{{txtValue}}</span><span class=\"editable disp-fkdetails\" *ngSwitchCase=\"'fkdetails'\" (click)=\"enableEditMode()\">\n <div class=\"fkitem\">{{txtValue}}</div></span><span class=\"editable disp-m2mdetails\" *ngSwitchCase=\"'m2mdetails'\" (click)=\"enableEditMode()\">\n <div class=\"m2mitem\" *ngFor=\"let v of txtValues\">{{v}}</div></span><span class=\"editable disp-datetime\" *ngSwitchCase=\"'datetime'\" (click)=\"enableEditMode()\">\n <ng-container *ngIf=\"dispValue\">{{txtValue|date:'short'}}</ng-container>\n <ng-container *ngIf=\"!dispValue\">{{txtValue}}</ng-container></span><span class=\"editable disp-datetime\" *ngSwitchCase=\"'date'\" (click)=\"enableEditMode()\">\n <ng-container *ngIf=\"dispValue\">{{txtValue|date:'shortDate'}}</ng-container>\n <ng-container *ngIf=\"!dispValue\">{{txtValue}}</ng-container></span></ng-container>\n</ng-template>\n<ng-template #editTpl let-form=\"form\">\n <ng-container [ngSwitch]=\"realEditor\">\n <ng-container *ngSwitchCase=\"'input.text'\">\n <input type=\"text\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['minlength']\">Trop court : {{$any(manager).minLength}} caract\u00E8res minimum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['maxlength']\">Trop long : {{$any(manager).maxLength}} caract\u00E8res maximum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['pattern']\">Format invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.email'\">\n <input type=\"email\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['minlength']\">Trop court : {{$any(manager).minLength}} caract\u00E8res minimum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['maxlength']\">Trop long : {{$any(manager).maxLength}} caract\u00E8res maximum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['pattern']\">Format invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['email']\">Format d'email invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.password'\">\n <input type=\"password\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['minlength']\">Trop court : {{$any(manager).minLength}} caract\u00E8res minimum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['maxlength']\">Trop long : {{$any(manager).maxLength}} caract\u00E8res maximum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['pattern']\">Format invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.datetime'\">\n <input type=\"datetime-local\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" (keyup.enter)=\"update()\">\n <div class=\"form-text\">{{realHelp}}</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['minDate']\">Doit \u00EAtre post\u00E9rieur \u00E0 {{$any(manager).min|date:'short'}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['maxDate']\">Doit \u00EAtre ant\u00E9rieur \u00E0 {{$any(manager).max|date:'short'}}...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.date'\">\n <input type=\"date\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" (keyup.enter)=\"update()\">\n <div class=\"form-text\">{{realHelp}}</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['minDate']\">Doit \u00EAtre post\u00E9rieur \u00E0 {{$any(manager).min|date:'short'}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['maxDate']\">Doit \u00EAtre ant\u00E9rieur \u00E0 {{$any(manager).max|date:'short'}}...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.number'\">\n <input type=\"number\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['min']\">Trop petit : minimum {{$any(manager).min}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['max']\">Trop grand : maximum {{$any(manager).max}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.decimal'\">\n <input type=\"number\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['min']\">Trop petit : minimum {{$any(manager).min}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['max']\">Trop grand : maximum {{$any(manager).max}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.checkbox'\">\n <input class=\"form-check-input\" type=\"checkbox\" [formControl]=\"form.get(field)\" (keyup.escape)=\"unsetEdit()\" (change)=\"update()\">\n <div class=\"form-text\">{{realHelp}}</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'textarea'\">\n <textarea [formControl]=\"form.get(field)\" (keyup.escape)=\"unsetEdit()\" [ngClass]=\"inputClasses\" (keyup.control.enter)=\"update()\" [placeholder]=\"realPlaceholder\"></textarea>\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['minlength']\">Trop court : {{$any(manager).minLength}} caract\u00E8res minimum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['maxlength']\">Trop long : {{$any(manager).maxLength}} caract\u00E8res maximum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['pattern']\">Format invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'fkselect'\">\n <data-fkselect [collection]=\"collection\" [filter]=\"filter\" (selected)=\"selectedRefItem($event)\" [placeholder]=\"placeholder\" (cancelled)=\"unsetEdit()\" (cleared)=\"selectedRefItem(null)\"></data-fkselect>\n </ng-container>\n <ng-container *ngSwitchCase=\"'m2mselect'\">\n <data-m2mselect [collection]=\"collection\" [filter]=\"filter\" (changed)=\"update()\" [formControl]=\"form.get(field)\" (detailsChanged)=\"onM2MValuesChanges($event)\" [model]=\"model\" [field]=\"field\" [placeholder]=\"placeholder\"></data-m2mselect>\n </ng-container>\n <ng-container *ngSwitchCase=\"'select'\">\n <select [formControl]=\"form.get(field)\" (keyup.escape)=\"unsetEdit()\" (change)=\"update()\" [ngClass]=\"inputClasses\">\n <option *ngFor=\"let c of realChoices\" [ngValue]=\"c.value ? c.value : c\">{{c.desc ? c.desc : c}}</option>\n </select>\n <div class=\"form-text\">{{realHelp}}</div>\n </ng-container>\n </ng-container>\n</ng-template>\n<!-- Disp/edit toggler-->\n<ng-template #dispeditTpl>\n <ng-container *ngIf=\"!edit\">\n <ng-container *ngTemplateOutlet=\"dispTpl\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"edit\">\n <ng-container *ngIf=\"fg\">\n <form [formGroup]=\"fg\" (submit)=\"update()\">\n <ng-container *ngTemplateOutlet=\"editTpl; context: {form: fg}\"></ng-container>\n </form>\n </ng-container>\n </ng-container>\n</ng-template>\n<!-- DispEdit noform-->\n<ng-template #dispeditFormTpl>\n <ng-container *ngIf=\"!edit\">\n <ng-container *ngTemplateOutlet=\"dispTpl\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"edit\">\n <ng-container *ngIf=\"form\">\n <ng-container *ngTemplateOutlet=\"editTpl; context: {form: form}\"></ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n<!-- Dd display-->\n<ng-container *ngIf=\"mode==='dd'\">\n <dt [class.required]=\"required\" *ngIf=\"!hideLabel\"><span class=\"editable\" (click)=\"toggleEdit()\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container></span><span class=\"pointer float-end\" (click)=\"setDefault()\" *ngIf=\"realDefault!== undefined && edit\"><i class=\"bi bi-trash ms-2\"></i></span></dt>\n <dd [class.mb-0]=\"hideLabel\">\n <ng-container *ngTemplateOutlet=\"dispeditTpl\"></ng-container>\n </dd>\n</ng-container>\n<!-- Inline display-->\n<ng-container *ngIf=\"mode==='inline'\">\n <ng-container *ngIf=\"!hideLabel\"><span class=\"pointer float-end\" (click)=\"setDefault()\" *ngIf=\"realDefault!== undefined && edit\"><i class=\"bi bi-trash ms-2\"></i></span>\n <label [class.required]=\"required\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"dispeditTpl\"></ng-container>\n</ng-container>\n<!-- Form display-->\n<ng-container *ngIf=\"mode==='form'\">\n <ng-container *ngIf=\"!hideLabel\"><span class=\"pointer float-end\" (click)=\"setDefault()\" *ngIf=\"realDefault!== undefined && edit\"><i class=\"bi bi-trash ms-2\"></i></span>\n <label [class.required]=\"required\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"dispeditFormTpl\"></ng-container>\n</ng-container>", styles: [".editable{cursor:pointer}form.inline{display:inline-block}.required{font-weight:700}.required:after{content:\" (*)\"}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "pipe", type: i1$1.DatePipe, name: "date" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2$2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2$2.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$2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2$2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2$2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: FkselectComponent, selector: "data-fkselect", inputs: ["model", "field", "edit", "value", "queryset", "collection", "update", "filter", "mode", "display", "search", "label", "placeholder", "inputClasses"], outputs: ["selected", "cancelled", "cleared"] }, { kind: "component", type: M2mselectComponent, selector: "data-m2mselect", inputs: ["model", "field", "edit", "values", "queryset", "collection", "filter", "mode", "display", "search", "label", "placeholder", "emptyLabel", "inputClasses"], outputs: ["added", "removed", "cancelled", "cleared", "detailsChanged", "changed"] }] });
|
|
3833
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: DispeditComponent, decorators: [{
|
|
3623
3834
|
type: Component,
|
|
3624
3835
|
args: [{ selector: 'data-dispedit', standalone: true, imports: [
|
|
3625
3836
|
CommonModule,
|
|
@@ -3627,7 +3838,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImpor
|
|
|
3627
3838
|
FkselectComponent,
|
|
3628
3839
|
M2mselectComponent,
|
|
3629
3840
|
ChoicePipe,
|
|
3630
|
-
], template: "\n<ng-template #titleTpl>\n <ng-content></ng-content>\n</ng-template>\n<ng-template #dispTpl>\n <ng-container [ngSwitch]=\"realDisplay\"><span class=\"editable disp-text\" *ngSwitchCase=\"'text'\" (click)=\"enableEditMode()\">{{txtValue}}</span><span class=\"editable disp-choice\" *ngSwitchCase=\"'choice'\" (click)=\"enableEditMode()\">{{txtValue}}</span><span class=\"editable disp-decimal\" *ngSwitchCase=\"'decimal'\" (click)=\"enableEditMode()\">{{txtValue}}</span><span class=\"editable disp-boolean\" *ngSwitchCase=\"'boolean'\" (click)=\"enableEditMode()\">{{txtValue}}</span><span class=\"editable disp-fkdetails\" *ngSwitchCase=\"'fkdetails'\" (click)=\"enableEditMode()\">\n <div class=\"fkitem\">{{txtValue}}</div></span><span class=\"editable disp-m2mdetails\" *ngSwitchCase=\"'m2mdetails'\" (click)=\"enableEditMode()\">\n <div class=\"m2mitem\" *ngFor=\"let v of txtValues\">{{v}}</div></span><span class=\"editable disp-datetime\" *ngSwitchCase=\"'datetime'\" (click)=\"enableEditMode()\">\n <ng-container *ngIf=\"dispValue\">{{txtValue|date:'short'}}</ng-container>\n <ng-container *ngIf=\"!dispValue\">{{txtValue}}</ng-container></span><span class=\"editable disp-datetime\" *ngSwitchCase=\"'date'\" (click)=\"enableEditMode()\">\n <ng-container *ngIf=\"dispValue\">{{txtValue|date:'shortDate'}}</ng-container>\n <ng-container *ngIf=\"!dispValue\">{{txtValue}}</ng-container></span>\n <!--span.editable.disp-quill(*ngSwitchCase=\"'quill'\", (click)=\"enableEditMode()\")-->\n <!-- quill-view-html([content]=\"txtValue||''\")-->\n </ng-container>\n</ng-template>\n<ng-template #editTpl let-form=\"form\">\n <ng-container [ngSwitch]=\"realEditor\">\n <ng-container *ngSwitchCase=\"'input.text'\">\n <input type=\"text\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['minlength']\">Trop court : {{$any(manager).minLength}} caract\u00E8res minimum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['maxlength']\">Trop long : {{$any(manager).maxLength}} caract\u00E8res maximum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['pattern']\">Format invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.email'\">\n <input type=\"email\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['minlength']\">Trop court : {{$any(manager).minLength}} caract\u00E8res minimum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['maxlength']\">Trop long : {{$any(manager).maxLength}} caract\u00E8res maximum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['pattern']\">Format invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['email']\">Format d'email invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.password'\">\n <input type=\"password\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['minlength']\">Trop court : {{$any(manager).minLength}} caract\u00E8res minimum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['maxlength']\">Trop long : {{$any(manager).maxLength}} caract\u00E8res maximum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['pattern']\">Format invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.datetime'\">\n <input type=\"datetime-local\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" (keyup.enter)=\"update()\">\n <div class=\"form-text\">{{realHelp}}</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['minDate']\">Doit \u00EAtre post\u00E9rieur \u00E0 {{$any(manager).min|date:'short'}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['maxDate']\">Doit \u00EAtre ant\u00E9rieur \u00E0 {{$any(manager).max|date:'short'}}...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.date'\">\n <input type=\"date\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" (keyup.enter)=\"update()\">\n <div class=\"form-text\">{{realHelp}}</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['minDate']\">Doit \u00EAtre post\u00E9rieur \u00E0 {{$any(manager).min|date:'short'}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['maxDate']\">Doit \u00EAtre ant\u00E9rieur \u00E0 {{$any(manager).max|date:'short'}}...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.number'\">\n <input type=\"number\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['min']\">Trop petit : minimum {{$any(manager).min}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['max']\">Trop grand : maximum {{$any(manager).max}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.decimal'\">\n <input type=\"number\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['min']\">Trop petit : minimum {{$any(manager).min}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['max']\">Trop grand : maximum {{$any(manager).max}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.checkbox'\">\n <input class=\"form-check-input\" type=\"checkbox\" [formControl]=\"form.get(field)\" (keyup.escape)=\"unsetEdit()\" (change)=\"update()\">\n <div class=\"form-text\">{{realHelp}}</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'textarea'\">\n <textarea [formControl]=\"form.get(field)\" (keyup.escape)=\"unsetEdit()\" [ngClass]=\"inputClasses\" (keyup.control.enter)=\"update()\" [placeholder]=\"realPlaceholder\"></textarea>\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['minlength']\">Trop court : {{$any(manager).minLength}} caract\u00E8res minimum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['maxlength']\">Trop long : {{$any(manager).maxLength}} caract\u00E8res maximum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['pattern']\">Format invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <!--ng-container(*ngSwitchCase=\"'quill'\")-->\n <!-- quill-editor([formControl]=\"form.get(field)\")-->\n <!-- .form-text(*ngIf=\"realHelp\") {{realHelp}}-->\n <!-- span.ms-1(*ngIf=\"required\") (requis)-->\n <!-- .invalid-feedback.mt-0([class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['minlength']\") Trop court : {{$any(manager).minLength}} caract\u00E8res minimum...-->\n <!-- .invalid-feedback.mt-0([class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['maxlength']\") Trop long : {{$any(manager).maxLength}} caract\u00E8res maximum...-->\n <!-- .invalid-feedback.mt-0([class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['pattern']\") Format invalide...-->\n <!-- .invalid-feedback.mt-0([class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['required']\") Ce champ est requis...-->\n <!-- button([ngClass]=\"inputClasses\") Enregistrer-->\n <ng-container *ngSwitchCase=\"'fkselect'\">\n <data-fkselect [collection]=\"collection\" [filter]=\"filter\" (selected)=\"selectedRefItem($event)\" [placeholder]=\"placeholder\" (cancelled)=\"unsetEdit()\" (cleared)=\"selectedRefItem(null)\"></data-fkselect>\n </ng-container>\n <ng-container *ngSwitchCase=\"'m2mselect'\">\n <data-m2mselect [collection]=\"collection\" [filter]=\"filter\" (changed)=\"update()\" [formControl]=\"form.get(field)\" (detailsChanged)=\"onM2MValuesChanges($event)\" [model]=\"model\" [field]=\"field\" [placeholder]=\"placeholder\"></data-m2mselect>\n </ng-container>\n <ng-container *ngSwitchCase=\"'select'\">\n <select [formControl]=\"form.get(field)\" (keyup.escape)=\"unsetEdit()\" (change)=\"update()\" [ngClass]=\"inputClasses\">\n <option *ngFor=\"let c of realChoices\" [ngValue]=\"c.value ? c.value : c\">{{c.desc ? c.desc : c}}</option>\n </select>\n <div class=\"form-text\">{{realHelp}}</div>\n </ng-container>\n </ng-container>\n</ng-template>\n<!-- Disp/edit toggler-->\n<ng-template #dispeditTpl>\n <ng-container *ngIf=\"!edit\">\n <ng-container *ngTemplateOutlet=\"dispTpl\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"edit\">\n <ng-container *ngIf=\"fg\">\n <form [formGroup]=\"fg\" (submit)=\"update()\">\n <ng-container *ngTemplateOutlet=\"editTpl; context: {form: fg}\"></ng-container>\n </form>\n </ng-container>\n </ng-container>\n</ng-template>\n<!-- DispEdit noform-->\n<ng-template #dispeditFormTpl>\n <ng-container *ngIf=\"!edit\">\n <ng-container *ngTemplateOutlet=\"dispTpl\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"edit\">\n <ng-container *ngIf=\"form\">\n <ng-container *ngTemplateOutlet=\"editTpl; context: {form: form}\"></ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n<!-- Dd display-->\n<ng-container *ngIf=\"mode==='dd'\">\n <dt [class.required]=\"required\" *ngIf=\"!hideLabel\"><span class=\"editable\" (click)=\"toggleEdit()\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container></span><span class=\"pointer float-end\" (click)=\"setDefault()\" *ngIf=\"realDefault!== undefined && edit\"><i class=\"bi bi-trash ms-2\"></i></span></dt>\n <dd [class.mb-0]=\"hideLabel\">\n <ng-container *ngTemplateOutlet=\"dispeditTpl\"></ng-container>\n </dd>\n</ng-container>\n<!-- Inline display-->\n<ng-container *ngIf=\"mode==='inline'\">\n <ng-container *ngIf=\"!hideLabel\"><span class=\"pointer float-end\" (click)=\"setDefault()\" *ngIf=\"realDefault!== undefined && edit\"><i class=\"bi bi-trash ms-2\"></i></span>\n <label [class.required]=\"required\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"dispeditTpl\"></ng-container>\n</ng-container>\n<!-- Form display-->\n<ng-container *ngIf=\"mode==='form'\">\n <ng-container *ngIf=\"!hideLabel\"><span class=\"pointer float-end\" (click)=\"setDefault()\" *ngIf=\"realDefault!== undefined && edit\"><i class=\"bi bi-trash ms-2\"></i></span>\n <label [class.required]=\"required\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"dispeditFormTpl\"></ng-container>\n</ng-container>", styles: [".editable{cursor:pointer}form.inline{display:inline-block}.required{font-weight:700}.required:after{content:\" (*)\"}\n"] }]
|
|
3841
|
+
], template: "\n<ng-template #titleTpl>\n <ng-content></ng-content>\n</ng-template>\n<ng-template #dispTpl>\n <ng-container [ngSwitch]=\"realDisplay\"><span class=\"editable disp-text\" *ngSwitchCase=\"'text'\" (click)=\"enableEditMode()\">{{txtValue}}</span><span class=\"editable disp-choice\" *ngSwitchCase=\"'choice'\" (click)=\"enableEditMode()\">{{txtValue}}</span><span class=\"editable disp-decimal\" *ngSwitchCase=\"'decimal'\" (click)=\"enableEditMode()\">{{txtValue}}</span><span class=\"editable disp-boolean\" *ngSwitchCase=\"'boolean'\" (click)=\"enableEditMode()\">{{txtValue}}</span><span class=\"editable disp-fkdetails\" *ngSwitchCase=\"'fkdetails'\" (click)=\"enableEditMode()\">\n <div class=\"fkitem\">{{txtValue}}</div></span><span class=\"editable disp-m2mdetails\" *ngSwitchCase=\"'m2mdetails'\" (click)=\"enableEditMode()\">\n <div class=\"m2mitem\" *ngFor=\"let v of txtValues\">{{v}}</div></span><span class=\"editable disp-datetime\" *ngSwitchCase=\"'datetime'\" (click)=\"enableEditMode()\">\n <ng-container *ngIf=\"dispValue\">{{txtValue|date:'short'}}</ng-container>\n <ng-container *ngIf=\"!dispValue\">{{txtValue}}</ng-container></span><span class=\"editable disp-datetime\" *ngSwitchCase=\"'date'\" (click)=\"enableEditMode()\">\n <ng-container *ngIf=\"dispValue\">{{txtValue|date:'shortDate'}}</ng-container>\n <ng-container *ngIf=\"!dispValue\">{{txtValue}}</ng-container></span></ng-container>\n</ng-template>\n<ng-template #editTpl let-form=\"form\">\n <ng-container [ngSwitch]=\"realEditor\">\n <ng-container *ngSwitchCase=\"'input.text'\">\n <input type=\"text\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['minlength']\">Trop court : {{$any(manager).minLength}} caract\u00E8res minimum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['maxlength']\">Trop long : {{$any(manager).maxLength}} caract\u00E8res maximum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['pattern']\">Format invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.email'\">\n <input type=\"email\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['minlength']\">Trop court : {{$any(manager).minLength}} caract\u00E8res minimum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['maxlength']\">Trop long : {{$any(manager).maxLength}} caract\u00E8res maximum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['pattern']\">Format invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['email']\">Format d'email invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.password'\">\n <input type=\"password\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['minlength']\">Trop court : {{$any(manager).minLength}} caract\u00E8res minimum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['maxlength']\">Trop long : {{$any(manager).maxLength}} caract\u00E8res maximum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['pattern']\">Format invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.datetime'\">\n <input type=\"datetime-local\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" (keyup.enter)=\"update()\">\n <div class=\"form-text\">{{realHelp}}</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['minDate']\">Doit \u00EAtre post\u00E9rieur \u00E0 {{$any(manager).min|date:'short'}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['maxDate']\">Doit \u00EAtre ant\u00E9rieur \u00E0 {{$any(manager).max|date:'short'}}...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.date'\">\n <input type=\"date\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" (keyup.enter)=\"update()\">\n <div class=\"form-text\">{{realHelp}}</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['minDate']\">Doit \u00EAtre post\u00E9rieur \u00E0 {{$any(manager).min|date:'short'}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['maxDate']\">Doit \u00EAtre ant\u00E9rieur \u00E0 {{$any(manager).max|date:'short'}}...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.number'\">\n <input type=\"number\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['min']\">Trop petit : minimum {{$any(manager).min}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['max']\">Trop grand : maximum {{$any(manager).max}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.decimal'\">\n <input type=\"number\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['min']\">Trop petit : minimum {{$any(manager).min}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['max']\">Trop grand : maximum {{$any(manager).max}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.checkbox'\">\n <input class=\"form-check-input\" type=\"checkbox\" [formControl]=\"form.get(field)\" (keyup.escape)=\"unsetEdit()\" (change)=\"update()\">\n <div class=\"form-text\">{{realHelp}}</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'textarea'\">\n <textarea [formControl]=\"form.get(field)\" (keyup.escape)=\"unsetEdit()\" [ngClass]=\"inputClasses\" (keyup.control.enter)=\"update()\" [placeholder]=\"realPlaceholder\"></textarea>\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['minlength']\">Trop court : {{$any(manager).minLength}} caract\u00E8res minimum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['maxlength']\">Trop long : {{$any(manager).maxLength}} caract\u00E8res maximum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['pattern']\">Format invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'fkselect'\">\n <data-fkselect [collection]=\"collection\" [filter]=\"filter\" (selected)=\"selectedRefItem($event)\" [placeholder]=\"placeholder\" (cancelled)=\"unsetEdit()\" (cleared)=\"selectedRefItem(null)\"></data-fkselect>\n </ng-container>\n <ng-container *ngSwitchCase=\"'m2mselect'\">\n <data-m2mselect [collection]=\"collection\" [filter]=\"filter\" (changed)=\"update()\" [formControl]=\"form.get(field)\" (detailsChanged)=\"onM2MValuesChanges($event)\" [model]=\"model\" [field]=\"field\" [placeholder]=\"placeholder\"></data-m2mselect>\n </ng-container>\n <ng-container *ngSwitchCase=\"'select'\">\n <select [formControl]=\"form.get(field)\" (keyup.escape)=\"unsetEdit()\" (change)=\"update()\" [ngClass]=\"inputClasses\">\n <option *ngFor=\"let c of realChoices\" [ngValue]=\"c.value ? c.value : c\">{{c.desc ? c.desc : c}}</option>\n </select>\n <div class=\"form-text\">{{realHelp}}</div>\n </ng-container>\n </ng-container>\n</ng-template>\n<!-- Disp/edit toggler-->\n<ng-template #dispeditTpl>\n <ng-container *ngIf=\"!edit\">\n <ng-container *ngTemplateOutlet=\"dispTpl\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"edit\">\n <ng-container *ngIf=\"fg\">\n <form [formGroup]=\"fg\" (submit)=\"update()\">\n <ng-container *ngTemplateOutlet=\"editTpl; context: {form: fg}\"></ng-container>\n </form>\n </ng-container>\n </ng-container>\n</ng-template>\n<!-- DispEdit noform-->\n<ng-template #dispeditFormTpl>\n <ng-container *ngIf=\"!edit\">\n <ng-container *ngTemplateOutlet=\"dispTpl\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"edit\">\n <ng-container *ngIf=\"form\">\n <ng-container *ngTemplateOutlet=\"editTpl; context: {form: form}\"></ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n<!-- Dd display-->\n<ng-container *ngIf=\"mode==='dd'\">\n <dt [class.required]=\"required\" *ngIf=\"!hideLabel\"><span class=\"editable\" (click)=\"toggleEdit()\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container></span><span class=\"pointer float-end\" (click)=\"setDefault()\" *ngIf=\"realDefault!== undefined && edit\"><i class=\"bi bi-trash ms-2\"></i></span></dt>\n <dd [class.mb-0]=\"hideLabel\">\n <ng-container *ngTemplateOutlet=\"dispeditTpl\"></ng-container>\n </dd>\n</ng-container>\n<!-- Inline display-->\n<ng-container *ngIf=\"mode==='inline'\">\n <ng-container *ngIf=\"!hideLabel\"><span class=\"pointer float-end\" (click)=\"setDefault()\" *ngIf=\"realDefault!== undefined && edit\"><i class=\"bi bi-trash ms-2\"></i></span>\n <label [class.required]=\"required\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"dispeditTpl\"></ng-container>\n</ng-container>\n<!-- Form display-->\n<ng-container *ngIf=\"mode==='form'\">\n <ng-container *ngIf=\"!hideLabel\"><span class=\"pointer float-end\" (click)=\"setDefault()\" *ngIf=\"realDefault!== undefined && edit\"><i class=\"bi bi-trash ms-2\"></i></span>\n <label [class.required]=\"required\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"dispeditFormTpl\"></ng-container>\n</ng-container>", styles: [".editable{cursor:pointer}form.inline{display:inline-block}.required{font-weight:700}.required:after{content:\" (*)\"}\n"] }]
|
|
3631
3842
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
3632
3843
|
type: Optional
|
|
3633
3844
|
}, {
|
|
@@ -3641,6 +3852,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImpor
|
|
|
3641
3852
|
type: Input
|
|
3642
3853
|
}], edit: [{
|
|
3643
3854
|
type: Input
|
|
3855
|
+
}], editable: [{
|
|
3856
|
+
type: Input
|
|
3644
3857
|
}], mode: [{
|
|
3645
3858
|
type: Input
|
|
3646
3859
|
}], choices: [{
|
|
@@ -3671,36 +3884,308 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImpor
|
|
|
3671
3884
|
type: Output
|
|
3672
3885
|
}] } });
|
|
3673
3886
|
|
|
3887
|
+
class FlagsComponent {
|
|
3888
|
+
constructor(_msg) {
|
|
3889
|
+
this._msg = _msg;
|
|
3890
|
+
this.field = 'flags';
|
|
3891
|
+
// FIXME: make all flags endpoint as optional parameters
|
|
3892
|
+
this.get_flags_endpoint = 'get_flags';
|
|
3893
|
+
this.edit = false;
|
|
3894
|
+
this.editable = true;
|
|
3895
|
+
this.free = false;
|
|
3896
|
+
this.create = true;
|
|
3897
|
+
this.action = false; // if set to true, use add_flag and remove_flag model actions
|
|
3898
|
+
this.curflags = [];
|
|
3899
|
+
this.txtflag = '';
|
|
3900
|
+
this.selflag = '';
|
|
3901
|
+
this.flaglist = [];
|
|
3902
|
+
this._subscriptions$ = new Subject();
|
|
3903
|
+
}
|
|
3904
|
+
ngOnDestroy() {
|
|
3905
|
+
this._subscriptions$.next();
|
|
3906
|
+
this._subscriptions$.complete();
|
|
3907
|
+
}
|
|
3908
|
+
async ngOnInit() {
|
|
3909
|
+
if (!this.flags && this.model._collection) {
|
|
3910
|
+
this.flags = this.model._collection.action(null, 'GET', this.get_flags_endpoint);
|
|
3911
|
+
}
|
|
3912
|
+
if (this.model && this.field && this.model[this.field]) {
|
|
3913
|
+
this.curflags = this.model[this.field];
|
|
3914
|
+
}
|
|
3915
|
+
else {
|
|
3916
|
+
console.warn('Model or field problem in flagsfield component');
|
|
3917
|
+
this.curflags = [];
|
|
3918
|
+
}
|
|
3919
|
+
this.ft = new FormControl('');
|
|
3920
|
+
this.fs = new FormControl('');
|
|
3921
|
+
this.fs.valueChanges
|
|
3922
|
+
.pipe(takeUntil(this._subscriptions$), debounceTime(250))
|
|
3923
|
+
.subscribe((value) => {
|
|
3924
|
+
if (value) {
|
|
3925
|
+
this.addFlag(value);
|
|
3926
|
+
}
|
|
3927
|
+
});
|
|
3928
|
+
}
|
|
3929
|
+
async addFreeFlag() {
|
|
3930
|
+
await this.addFlag(this.ft.value);
|
|
3931
|
+
}
|
|
3932
|
+
async addFlag(flag) {
|
|
3933
|
+
if (!this.flagPresent(flag)) {
|
|
3934
|
+
this.curflags.push(flag);
|
|
3935
|
+
if (this.action) {
|
|
3936
|
+
try {
|
|
3937
|
+
await firstValueFrom(this.model.action('POST', 'add_flag', { body: { flag } }));
|
|
3938
|
+
this._msg.success('Flag enregistré avec succès');
|
|
3939
|
+
}
|
|
3940
|
+
catch (e) {
|
|
3941
|
+
this._msg.error('Erreur lors de la sauvegarde', e);
|
|
3942
|
+
}
|
|
3943
|
+
}
|
|
3944
|
+
else {
|
|
3945
|
+
await this.update();
|
|
3946
|
+
}
|
|
3947
|
+
}
|
|
3948
|
+
}
|
|
3949
|
+
async update() {
|
|
3950
|
+
this.model[this.field] = this.curflags;
|
|
3951
|
+
try {
|
|
3952
|
+
await firstValueFrom(this.model.update([this.field]));
|
|
3953
|
+
this.fs.setValue('', { emitEvent: false });
|
|
3954
|
+
this.ft.setValue('', { emitEvent: false });
|
|
3955
|
+
this._msg.success('Flag enregistré avec succès');
|
|
3956
|
+
}
|
|
3957
|
+
catch (error) {
|
|
3958
|
+
this._msg.error('Erreur lors de la sauvegarde', `API Return : ${error}`, error._body);
|
|
3959
|
+
}
|
|
3960
|
+
}
|
|
3961
|
+
flagPresent(flag) {
|
|
3962
|
+
return this.curflags.findIndex((f) => flag === f) !== -1;
|
|
3963
|
+
}
|
|
3964
|
+
async removeFlag(flag) {
|
|
3965
|
+
this.curflags.splice(this.curflags.findIndex((f) => flag === f), 1);
|
|
3966
|
+
if (this.action) {
|
|
3967
|
+
try {
|
|
3968
|
+
await firstValueFrom(this.model.action('POST', 'remove_flag', { body: { flag } }));
|
|
3969
|
+
this._msg.success('Removed');
|
|
3970
|
+
}
|
|
3971
|
+
catch (e) {
|
|
3972
|
+
this._msg.error('Removing flag failed', e);
|
|
3973
|
+
}
|
|
3974
|
+
}
|
|
3975
|
+
else {
|
|
3976
|
+
await this.update();
|
|
3977
|
+
}
|
|
3978
|
+
}
|
|
3979
|
+
async toggleEdit() {
|
|
3980
|
+
if (this.editable) {
|
|
3981
|
+
if (!this.edit) {
|
|
3982
|
+
this.flaglist = await firstValueFrom(this.flags);
|
|
3983
|
+
this.edit = true;
|
|
3984
|
+
}
|
|
3985
|
+
else {
|
|
3986
|
+
this.edit = false;
|
|
3987
|
+
}
|
|
3988
|
+
}
|
|
3989
|
+
else {
|
|
3990
|
+
this.edit = false;
|
|
3991
|
+
}
|
|
3992
|
+
}
|
|
3993
|
+
}
|
|
3994
|
+
FlagsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: FlagsComponent, deps: [{ token: DataMessageService }], target: i0.ɵɵFactoryTarget.Component });
|
|
3995
|
+
FlagsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.3", type: FlagsComponent, isStandalone: true, selector: "data-flags", inputs: { model: "model", field: "field", get_flags_endpoint: "get_flags_endpoint", edit: "edit", editable: "editable", flags: "flags", free: "free", create: "create", action: "action" }, ngImport: i0, template: "\n<dt (click)=\"toggleEdit()\" role=\"button\">\n <ng-content></ng-content>\n</dt>\n<dd *ngIf=\"!edit\" (click)=\"toggleEdit()\" role=\"button\"><span class=\"badge bg-info me-1\" *ngFor=\"let flag of curflags\">{{flag}}</span></dd>\n<dd *ngIf=\"edit\">\n <div class=\"row\">\n <ng-container *ngIf=\"!free\">\n <div class=\"col\">\n <select class=\"form-select form-select-sm\" [formControl]=\"fs\">\n <option *ngFor=\"let flag of flaglist\" [value]=\"flag.flag\">{{flag.flag}}<span class=\"ms-1\" *ngIf=\"flag.count\">({{flag.count}})</span></option>\n </select>\n </div>\n <div class=\"col\" *ngIf=\"create\">\n <input class=\"form-control form-control-sm\" placeholder=\"Nouveau flag\" [formControl]=\"ft\" (keyup.enter)=\"addFreeFlag()\">\n </div>\n </ng-container>\n <ng-container *ngIf=\"free\">\n <div class=\"col-12\">\n <input class=\"form-control form-select-sm\" placeholder=\"Nouveau flag\" [formControl]=\"ft\" (keyup.enter)=\"addFreeFlag()\" (keyup.escape)=\"toggleEdit()\">\n </div>\n </ng-container>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-12\"><span class=\"badge bg-info me-1\" *ngFor=\"let flag of curflags\" (click)=\"removeFlag(flag)\" role=\"button\"><i class=\"bi bi-trash me-1\"></i>{{flag}}</span><i class=\"bi bi-x-lg text-muted ms-2\" role=\"button\" (click)=\"toggleEdit()\"></i></div>\n </div>\n</dd>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2$2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2$2.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$2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
|
|
3996
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: FlagsComponent, decorators: [{
|
|
3997
|
+
type: Component,
|
|
3998
|
+
args: [{ selector: 'data-flags', standalone: true, imports: [CommonModule, ReactiveFormsModule], template: "\n<dt (click)=\"toggleEdit()\" role=\"button\">\n <ng-content></ng-content>\n</dt>\n<dd *ngIf=\"!edit\" (click)=\"toggleEdit()\" role=\"button\"><span class=\"badge bg-info me-1\" *ngFor=\"let flag of curflags\">{{flag}}</span></dd>\n<dd *ngIf=\"edit\">\n <div class=\"row\">\n <ng-container *ngIf=\"!free\">\n <div class=\"col\">\n <select class=\"form-select form-select-sm\" [formControl]=\"fs\">\n <option *ngFor=\"let flag of flaglist\" [value]=\"flag.flag\">{{flag.flag}}<span class=\"ms-1\" *ngIf=\"flag.count\">({{flag.count}})</span></option>\n </select>\n </div>\n <div class=\"col\" *ngIf=\"create\">\n <input class=\"form-control form-control-sm\" placeholder=\"Nouveau flag\" [formControl]=\"ft\" (keyup.enter)=\"addFreeFlag()\">\n </div>\n </ng-container>\n <ng-container *ngIf=\"free\">\n <div class=\"col-12\">\n <input class=\"form-control form-select-sm\" placeholder=\"Nouveau flag\" [formControl]=\"ft\" (keyup.enter)=\"addFreeFlag()\" (keyup.escape)=\"toggleEdit()\">\n </div>\n </ng-container>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-12\"><span class=\"badge bg-info me-1\" *ngFor=\"let flag of curflags\" (click)=\"removeFlag(flag)\" role=\"button\"><i class=\"bi bi-trash me-1\"></i>{{flag}}</span><i class=\"bi bi-x-lg text-muted ms-2\" role=\"button\" (click)=\"toggleEdit()\"></i></div>\n </div>\n</dd>" }]
|
|
3999
|
+
}], ctorParameters: function () { return [{ type: DataMessageService }]; }, propDecorators: { model: [{
|
|
4000
|
+
type: Input
|
|
4001
|
+
}], field: [{
|
|
4002
|
+
type: Input
|
|
4003
|
+
}], get_flags_endpoint: [{
|
|
4004
|
+
type: Input
|
|
4005
|
+
}], edit: [{
|
|
4006
|
+
type: Input
|
|
4007
|
+
}], editable: [{
|
|
4008
|
+
type: Input
|
|
4009
|
+
}], flags: [{
|
|
4010
|
+
type: Input
|
|
4011
|
+
}], free: [{
|
|
4012
|
+
type: Input
|
|
4013
|
+
}], create: [{
|
|
4014
|
+
type: Input
|
|
4015
|
+
}], action: [{
|
|
4016
|
+
type: Input
|
|
4017
|
+
}] } });
|
|
4018
|
+
|
|
4019
|
+
class RicheditComponent {
|
|
4020
|
+
constructor() {
|
|
4021
|
+
this.editable = true;
|
|
4022
|
+
this.edit = true;
|
|
4023
|
+
this.mode = 'dd';
|
|
4024
|
+
/**
|
|
4025
|
+
* Hide label (for inline forms)
|
|
4026
|
+
*/
|
|
4027
|
+
this.hideLabel = false;
|
|
4028
|
+
/**
|
|
4029
|
+
* Hide button (for changed usage)
|
|
4030
|
+
*/
|
|
4031
|
+
this.hideButton = false;
|
|
4032
|
+
this.changed = new EventEmitter();
|
|
4033
|
+
this.toolbar = [
|
|
4034
|
+
['bold', 'italic'],
|
|
4035
|
+
['underline', 'strike'],
|
|
4036
|
+
['code', 'blockquote'],
|
|
4037
|
+
['ordered_list', 'bullet_list'],
|
|
4038
|
+
[{ heading: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] }],
|
|
4039
|
+
['link'],
|
|
4040
|
+
['text_color', 'background_color'],
|
|
4041
|
+
['align_left', 'align_center', 'align_right', 'align_justify'],
|
|
4042
|
+
];
|
|
4043
|
+
this.html = '';
|
|
4044
|
+
this.fc = new FormControl('');
|
|
4045
|
+
}
|
|
4046
|
+
ngOnInit() {
|
|
4047
|
+
this.editor = new Editor();
|
|
4048
|
+
this.manager = this.model?.FM(this.field);
|
|
4049
|
+
this.required = this.manager?.required || false;
|
|
4050
|
+
if (this.model) {
|
|
4051
|
+
this.fc.setValue(this.model[this.field] || '', {
|
|
4052
|
+
emitEvent: false,
|
|
4053
|
+
});
|
|
4054
|
+
}
|
|
4055
|
+
if (this.edit) {
|
|
4056
|
+
this.fc.enable();
|
|
4057
|
+
}
|
|
4058
|
+
else {
|
|
4059
|
+
this.fc.disable();
|
|
4060
|
+
}
|
|
4061
|
+
this.fc.valueChanges.subscribe((v) => this.changed.emit(v));
|
|
4062
|
+
}
|
|
4063
|
+
// make sure to destory the editor
|
|
4064
|
+
ngOnDestroy() {
|
|
4065
|
+
this.editor.destroy();
|
|
4066
|
+
}
|
|
4067
|
+
toggleEdit() {
|
|
4068
|
+
if (this.editable) {
|
|
4069
|
+
if (this.edit) {
|
|
4070
|
+
this.fc.disable();
|
|
4071
|
+
this.edit = false;
|
|
4072
|
+
}
|
|
4073
|
+
else {
|
|
4074
|
+
this.fc.enable();
|
|
4075
|
+
this.edit = true;
|
|
4076
|
+
}
|
|
4077
|
+
}
|
|
4078
|
+
else {
|
|
4079
|
+
this.fc.disable();
|
|
4080
|
+
this.edit = false;
|
|
4081
|
+
}
|
|
4082
|
+
}
|
|
4083
|
+
async save() {
|
|
4084
|
+
this.model.setFV(this.field, this.fc.value);
|
|
4085
|
+
if (this.mode === 'dd') {
|
|
4086
|
+
await firstValueFrom(this.model.save({ updateModel: true }));
|
|
4087
|
+
}
|
|
4088
|
+
}
|
|
4089
|
+
}
|
|
4090
|
+
RicheditComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: RicheditComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4091
|
+
RicheditComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.3", type: RicheditComponent, isStandalone: true, selector: "data-richedit", inputs: { model: "model", field: "field", editable: "editable", edit: "edit", mode: "mode", hideLabel: "hideLabel", hideButton: "hideButton" }, outputs: { changed: "changed" }, ngImport: i0, template: "\n<ng-template #editorTemplate>\n <div class=\"NgxEditor__Wrapper\">\n <ngx-editor-menu [editor]=\"editor\" [toolbar]=\"toolbar\" *ngIf=\"edit\"></ngx-editor-menu>\n <ngx-editor [editor]=\"editor\" [formControl]=\"fc\" [placeholder]=\"''\"></ngx-editor>\n </div>\n <button class=\"btn btn-primary btn-sm w-100 mt-1\" *ngIf=\"edit && !hideButton\" (click)=\"save()\"><i class=\"bi bi-save me-2\"></i>Enregistrer</button>\n</ng-template>\n<ng-template #titleTpl>\n <ng-content></ng-content>\n</ng-template>\n<!-- Dd display-->\n<ng-container *ngIf=\"mode==='dd'\">\n <dt [class.required]=\"required\" *ngIf=\"!hideLabel\"><span class=\"editable\" (click)=\"toggleEdit()\" role=\"button\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container></span></dt>\n <dd [class.mb-0]=\"hideLabel\">\n <ng-container *ngTemplateOutlet=\"editorTemplate\"></ng-container>\n </dd>\n</ng-container>\n<!-- Inline display-->\n<ng-container *ngIf=\"mode==='inline'\">\n <ng-container *ngIf=\"!hideLabel\">\n <label [class.required]=\"required\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"editorTemplate\"></ng-container>\n</ng-container>\n<!-- Form display-->\n<ng-container *ngIf=\"mode==='form'\">\n <ng-container *ngIf=\"!hideLabel\">\n <label [class.required]=\"required\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"editorTemplate\"></ng-container>\n</ng-container>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: NgxEditorModule }, { kind: "component", type: i2$3.NgxEditorComponent, selector: "ngx-editor", inputs: ["editor", "outputFormat", "placeholder"], outputs: ["focusOut", "focusIn"] }, { kind: "component", type: i2$3.MenuComponent, selector: "ngx-editor-menu", inputs: ["toolbar", "colorPresets", "disabled", "editor", "customMenuRef", "dropdownPlacement"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
|
|
4092
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: RicheditComponent, decorators: [{
|
|
4093
|
+
type: Component,
|
|
4094
|
+
args: [{ selector: 'data-richedit', standalone: true, imports: [CommonModule, NgxEditorModule, ReactiveFormsModule], template: "\n<ng-template #editorTemplate>\n <div class=\"NgxEditor__Wrapper\">\n <ngx-editor-menu [editor]=\"editor\" [toolbar]=\"toolbar\" *ngIf=\"edit\"></ngx-editor-menu>\n <ngx-editor [editor]=\"editor\" [formControl]=\"fc\" [placeholder]=\"''\"></ngx-editor>\n </div>\n <button class=\"btn btn-primary btn-sm w-100 mt-1\" *ngIf=\"edit && !hideButton\" (click)=\"save()\"><i class=\"bi bi-save me-2\"></i>Enregistrer</button>\n</ng-template>\n<ng-template #titleTpl>\n <ng-content></ng-content>\n</ng-template>\n<!-- Dd display-->\n<ng-container *ngIf=\"mode==='dd'\">\n <dt [class.required]=\"required\" *ngIf=\"!hideLabel\"><span class=\"editable\" (click)=\"toggleEdit()\" role=\"button\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container></span></dt>\n <dd [class.mb-0]=\"hideLabel\">\n <ng-container *ngTemplateOutlet=\"editorTemplate\"></ng-container>\n </dd>\n</ng-container>\n<!-- Inline display-->\n<ng-container *ngIf=\"mode==='inline'\">\n <ng-container *ngIf=\"!hideLabel\">\n <label [class.required]=\"required\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"editorTemplate\"></ng-container>\n</ng-container>\n<!-- Form display-->\n<ng-container *ngIf=\"mode==='form'\">\n <ng-container *ngIf=\"!hideLabel\">\n <label [class.required]=\"required\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"editorTemplate\"></ng-container>\n</ng-container>" }]
|
|
4095
|
+
}], propDecorators: { model: [{
|
|
4096
|
+
type: Input
|
|
4097
|
+
}], field: [{
|
|
4098
|
+
type: Input
|
|
4099
|
+
}], editable: [{
|
|
4100
|
+
type: Input
|
|
4101
|
+
}], edit: [{
|
|
4102
|
+
type: Input
|
|
4103
|
+
}], mode: [{
|
|
4104
|
+
type: Input
|
|
4105
|
+
}], hideLabel: [{
|
|
4106
|
+
type: Input
|
|
4107
|
+
}], hideButton: [{
|
|
4108
|
+
type: Input
|
|
4109
|
+
}], changed: [{
|
|
4110
|
+
type: Output
|
|
4111
|
+
}] } });
|
|
4112
|
+
|
|
3674
4113
|
class SafeDeleteComponent {
|
|
3675
|
-
constructor(_ofc) {
|
|
4114
|
+
constructor(_ofc, _msgs) {
|
|
3676
4115
|
this._ofc = _ofc;
|
|
4116
|
+
this._msgs = _msgs;
|
|
3677
4117
|
this.checks = {};
|
|
4118
|
+
this.messages = {};
|
|
3678
4119
|
this.deleted = new EventEmitter();
|
|
3679
4120
|
this.display = 'button';
|
|
3680
4121
|
}
|
|
3681
4122
|
async checkDelete(model) {
|
|
3682
|
-
|
|
3683
|
-
|
|
3684
|
-
|
|
3685
|
-
|
|
4123
|
+
const service = this.service || this.model._collection;
|
|
4124
|
+
if (service) {
|
|
4125
|
+
try {
|
|
4126
|
+
this.result = await firstValueFrom(service.delete(this.model, { params: { doit: 'no' } }));
|
|
4127
|
+
this.ofc = this._ofc.open(this._dialogRef, {
|
|
4128
|
+
position: 'end',
|
|
4129
|
+
});
|
|
4130
|
+
}
|
|
4131
|
+
catch (e) {
|
|
4132
|
+
console.error(e);
|
|
4133
|
+
if (this.messages.error) {
|
|
4134
|
+
this._msgs.error(this.messages.error, e.error?.message || e.message || '');
|
|
4135
|
+
}
|
|
4136
|
+
}
|
|
4137
|
+
}
|
|
3686
4138
|
}
|
|
3687
4139
|
async reallyDelete() {
|
|
3688
|
-
|
|
3689
|
-
|
|
3690
|
-
|
|
4140
|
+
if (this.actionFn) {
|
|
4141
|
+
const res = await this.actionFn(this.model);
|
|
4142
|
+
if (res.success && this.messages.success) {
|
|
4143
|
+
this._msgs.success(this.messages.success);
|
|
4144
|
+
}
|
|
4145
|
+
else if (!res.success && this.messages.error) {
|
|
4146
|
+
this._msgs.error(this.messages.error);
|
|
4147
|
+
}
|
|
4148
|
+
this.ofc?.close();
|
|
4149
|
+
if (res.success) {
|
|
4150
|
+
this.deleted.emit(this.result);
|
|
4151
|
+
}
|
|
4152
|
+
}
|
|
4153
|
+
else {
|
|
4154
|
+
const service = this.service || this.model._collection;
|
|
4155
|
+
if (service) {
|
|
4156
|
+
try {
|
|
4157
|
+
this.result = await firstValueFrom(service.delete(this.model, { params: { doit: 'really' } }));
|
|
4158
|
+
if (this.messages.success) {
|
|
4159
|
+
this._msgs.success(this.messages.success);
|
|
4160
|
+
}
|
|
4161
|
+
this.ofc?.close();
|
|
4162
|
+
this.deleted.emit(this.result);
|
|
4163
|
+
}
|
|
4164
|
+
catch (e) {
|
|
4165
|
+
console.error(e);
|
|
4166
|
+
if (this.messages.error) {
|
|
4167
|
+
this._msgs.error(this.messages.error, e.error?.message || e.message || '');
|
|
4168
|
+
}
|
|
4169
|
+
}
|
|
4170
|
+
}
|
|
4171
|
+
}
|
|
3691
4172
|
}
|
|
3692
4173
|
}
|
|
3693
|
-
SafeDeleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
3694
|
-
SafeDeleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
3695
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
4174
|
+
SafeDeleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: SafeDeleteComponent, deps: [{ token: i2$1.NgbOffcanvas }, { token: DataMessageService }], target: i0.ɵɵFactoryTarget.Component });
|
|
4175
|
+
SafeDeleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.3", type: SafeDeleteComponent, isStandalone: true, selector: "data-safe-delete", inputs: { model: "model", service: "service", actionFn: "actionFn", checks: "checks", messages: "messages", display: "display" }, outputs: { deleted: "deleted" }, viewQueries: [{ propertyName: "_dialogRef", first: true, predicate: ["dialog"], descendants: true, static: true }], ngImport: i0, template: "\n<ng-template #dialog let-offcanvas>\n <div class=\"offcanvas-header\">\n <h2 class=\"offcanvas-title text-danger text-center\"><i class=\"bi bi-trash me-2\"></i>Supprimer r\u00E9ellement ??</h2>\n </div>\n <div class=\"offcanvas-body text-danger\" *ngIf=\"result\">\n <div class=\"text-center my-4 fs-1\"><i class=\"bi bi-exclamation-diamond my-5\"></i></div>\n <div class=\"fs-4\">\n <p>La suppression de cet \u00E9l\u00E9ment supprimera {{result.count}} \u00E9l\u00E9ments dans la base de donn\u00E9es..</p>\n </div>\n <table class=\"table table-sm table-striped table-danger\">\n <thead>\n <tr>\n <th>Type d'\u00E9l\u00E9ment</th>\n <th>Nombre</th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let rl of result.details\">\n <tr>\n <td>{{checks[rl[0]] ? checks[rl[0]] : rl[0]}}</td>\n <td>{{rl[1]}}</td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n <button class=\"w-100 btn btn-lg btn-danger\" (click)=\"reallyDelete()\"><i class=\"bi bi-trash me-2\"></i>Je confirme la suppression</button>\n <button class=\"w-100 btn btn-outline-secondary my-3\" (click)=\"offcanvas.close()\"><i class=\"bi bi-door-open me-2\"></i>Je renonce \u00E0 la suppression</button>\n </div>\n</ng-template>\n<ng-template #contentTpl>\n <ng-content></ng-content>\n</ng-template>\n<button class=\"btn btn-sm btn-danger\" (click)=\"checkDelete(model)\" *ngIf=\"display==='button'\"><i class=\"bi bi-trash\"></i>\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\n</button>\n<button class=\"btn btn-sm btn-outline-danger float-end\" (click)=\"checkDelete(model)\" *ngIf=\"display==='fbutton'\"><i class=\"bi bi-trash mx-2\"></i></button><i class=\"bi bi-trash mx-2\" (click)=\"checkDelete(model)\" *ngIf=\"display==='icon'\" role=\"button\"></i>\n<div (click)=\"checkDelete(model)\" *ngIf=\"display==='custom'\" role=\"button\">\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: NgbOffcanvasModule }] });
|
|
4176
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: SafeDeleteComponent, decorators: [{
|
|
3696
4177
|
type: Component,
|
|
3697
|
-
args: [{ selector: 'data-safe-delete', standalone: true, imports: [CommonModule, NgbOffcanvasModule], template: "\n<ng-template #dialog let-offcanvas>\n <div class=\"offcanvas-header\">\n <h2 class=\"offcanvas-title text-danger text-center\"><i class=\"bi bi-trash me-2\"></i>Supprimer r\u00E9ellement ??</h2>\n </div>\n <div class=\"offcanvas-body text-danger\" *ngIf=\"result\">\n <div class=\"text-center my-4 fs-1\"><i class=\"bi bi-exclamation-diamond my-5\"></i></div>\n <div class=\"fs-4\">\n <p>La suppression de cet \u00E9l\u00E9ment supprimera {{result.count}} \u00E9l\u00E9ments dans la base de donn\u00E9es..</p>\n </div>\n <table class=\"table table-sm table-striped table-danger\">\n <thead>\n <tr>\n <th>Type d'\u00E9l\u00E9ment</th>\n <th>Nombre</th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let rl of result.details\">\n <tr>\n <td>{{checks[rl[0]] ? checks[rl[0]] : rl[0]}}</td>\n <td>{{rl[1]}}</td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n <button class=\"w-100 btn btn-lg btn-danger\" (click)=\"reallyDelete()\"><i class=\"bi bi-trash me-2\"></i>Je confirme la suppression</button>\n <button class=\"w-100 btn btn-outline-secondary my-3\" (click)=\"offcanvas.close()\"><i class=\"bi bi-door-open me-2\"></i>Je renonce \u00E0 la suppression</button>\n </div>\n</ng-template>\n<button class=\"btn btn-sm btn-outline-danger float-end\" (click)=\"checkDelete(model)\" *ngIf=\"display==='
|
|
3698
|
-
}], ctorParameters: function () { return [{ type: i2$1.NgbOffcanvas }]; }, propDecorators: { model: [{
|
|
4178
|
+
args: [{ selector: 'data-safe-delete', standalone: true, imports: [CommonModule, NgbOffcanvasModule], template: "\n<ng-template #dialog let-offcanvas>\n <div class=\"offcanvas-header\">\n <h2 class=\"offcanvas-title text-danger text-center\"><i class=\"bi bi-trash me-2\"></i>Supprimer r\u00E9ellement ??</h2>\n </div>\n <div class=\"offcanvas-body text-danger\" *ngIf=\"result\">\n <div class=\"text-center my-4 fs-1\"><i class=\"bi bi-exclamation-diamond my-5\"></i></div>\n <div class=\"fs-4\">\n <p>La suppression de cet \u00E9l\u00E9ment supprimera {{result.count}} \u00E9l\u00E9ments dans la base de donn\u00E9es..</p>\n </div>\n <table class=\"table table-sm table-striped table-danger\">\n <thead>\n <tr>\n <th>Type d'\u00E9l\u00E9ment</th>\n <th>Nombre</th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let rl of result.details\">\n <tr>\n <td>{{checks[rl[0]] ? checks[rl[0]] : rl[0]}}</td>\n <td>{{rl[1]}}</td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n <button class=\"w-100 btn btn-lg btn-danger\" (click)=\"reallyDelete()\"><i class=\"bi bi-trash me-2\"></i>Je confirme la suppression</button>\n <button class=\"w-100 btn btn-outline-secondary my-3\" (click)=\"offcanvas.close()\"><i class=\"bi bi-door-open me-2\"></i>Je renonce \u00E0 la suppression</button>\n </div>\n</ng-template>\n<ng-template #contentTpl>\n <ng-content></ng-content>\n</ng-template>\n<button class=\"btn btn-sm btn-danger\" (click)=\"checkDelete(model)\" *ngIf=\"display==='button'\"><i class=\"bi bi-trash\"></i>\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\n</button>\n<button class=\"btn btn-sm btn-outline-danger float-end\" (click)=\"checkDelete(model)\" *ngIf=\"display==='fbutton'\"><i class=\"bi bi-trash mx-2\"></i></button><i class=\"bi bi-trash mx-2\" (click)=\"checkDelete(model)\" *ngIf=\"display==='icon'\" role=\"button\"></i>\n<div (click)=\"checkDelete(model)\" *ngIf=\"display==='custom'\" role=\"button\">\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\n</div>" }]
|
|
4179
|
+
}], ctorParameters: function () { return [{ type: i2$1.NgbOffcanvas }, { type: DataMessageService }]; }, propDecorators: { model: [{
|
|
3699
4180
|
type: Input
|
|
3700
4181
|
}], service: [{
|
|
3701
4182
|
type: Input
|
|
4183
|
+
}], actionFn: [{
|
|
4184
|
+
type: Input
|
|
3702
4185
|
}], checks: [{
|
|
3703
4186
|
type: Input
|
|
4187
|
+
}], messages: [{
|
|
4188
|
+
type: Input
|
|
3704
4189
|
}], deleted: [{
|
|
3705
4190
|
type: Output
|
|
3706
4191
|
}], display: [{
|
|
@@ -4035,6 +4520,15 @@ const integerField = (updates = {}) => genericDataField(updates, 'integerField',
|
|
|
4035
4520
|
const floatField = (updates = {}) => genericDataField(updates, 'floatField', FloatFieldManager);
|
|
4036
4521
|
const decimalField = (updates = { factor: 100 }) => genericDataField(updates, 'decimalField', DecimalFieldManager);
|
|
4037
4522
|
|
|
4523
|
+
class ComputedFieldManager extends BaseFieldManager {
|
|
4524
|
+
constructor() {
|
|
4525
|
+
super(...arguments);
|
|
4526
|
+
this.computed = true;
|
|
4527
|
+
}
|
|
4528
|
+
fromJson(data, coll) { }
|
|
4529
|
+
}
|
|
4530
|
+
const computedField = (meta = {}) => genericDataField(meta, 'computedField', ComputedFieldManager);
|
|
4531
|
+
|
|
4038
4532
|
class MessageZoneComponent {
|
|
4039
4533
|
constructor(messages) {
|
|
4040
4534
|
this.messages = messages;
|
|
@@ -4053,8 +4547,8 @@ class MessageZoneComponent {
|
|
|
4053
4547
|
this._subscriptions$.complete();
|
|
4054
4548
|
}
|
|
4055
4549
|
}
|
|
4056
|
-
MessageZoneComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
4057
|
-
MessageZoneComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
4550
|
+
MessageZoneComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: MessageZoneComponent, deps: [{ token: DataMessageService }], target: i0.ɵɵFactoryTarget.Component });
|
|
4551
|
+
MessageZoneComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.3", type: MessageZoneComponent, isStandalone: true, selector: "data-message-zone", inputs: { filter: "filter" }, providers: [provideAnimations()], ngImport: i0, template: "\n<div class=\"messagezone\">\n <div class=\"alert\" *ngFor=\"let message of current\" [@dispStatus]=\"message.status\" [class]=\"message.style\" (click)=\"message.showTrace=!message.showTrace\">\n <button class=\"btn-close\" type=\"button\" (click)=\"messages.ack(message)\" aria-label=\"Close\"></button><strong>{{message.title}}</strong> {{message.message}}\n <div class=\"pretrace\" *ngIf=\"message.showTrace\">{{message.trace}}</div>\n </div>\n</div>", styles: [".messagezone{position:fixed;top:30px;right:40px;width:35vw;height:auto;z-index:1050}.messagezone .pretrace{white-space:pre-wrap;font-family:monospace;font-size:.7rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], animations: [
|
|
4058
4552
|
trigger('dispStatus', [
|
|
4059
4553
|
transition('void => *', [
|
|
4060
4554
|
style({ opacity: 0 }),
|
|
@@ -4066,7 +4560,7 @@ MessageZoneComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", v
|
|
|
4066
4560
|
]),
|
|
4067
4561
|
]),
|
|
4068
4562
|
] });
|
|
4069
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
4563
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: MessageZoneComponent, decorators: [{
|
|
4070
4564
|
type: Component,
|
|
4071
4565
|
args: [{ selector: 'data-message-zone', standalone: true, imports: [CommonModule], providers: [provideAnimations()], animations: [
|
|
4072
4566
|
trigger('dispStatus', [
|
|
@@ -4532,9 +5026,9 @@ class NgFileDropDirective {
|
|
|
4532
5026
|
this.uploadOutput.emit(event);
|
|
4533
5027
|
}
|
|
4534
5028
|
}
|
|
4535
|
-
NgFileDropDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
4536
|
-
NgFileDropDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
4537
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
5029
|
+
NgFileDropDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: NgFileDropDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
5030
|
+
NgFileDropDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.3", type: NgFileDropDirective, selector: "[dataFileDrop]", inputs: { options: "options", uploadInput: "uploadInput" }, outputs: { uploadOutput: "uploadOutput" }, host: { listeners: { "drop": "onDrop($event)", "dragover": "onDragOver($event)", "dragleave": "onDragLeave($event)" } }, ngImport: i0 });
|
|
5031
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: NgFileDropDirective, decorators: [{
|
|
4538
5032
|
type: Directive,
|
|
4539
5033
|
args: [{
|
|
4540
5034
|
selector: "[dataFileDrop]"
|
|
@@ -4589,9 +5083,9 @@ class NgFileSelectDirective {
|
|
|
4589
5083
|
}
|
|
4590
5084
|
}
|
|
4591
5085
|
}
|
|
4592
|
-
NgFileSelectDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
4593
|
-
NgFileSelectDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
4594
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
5086
|
+
NgFileSelectDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: NgFileSelectDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
5087
|
+
NgFileSelectDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.3", type: NgFileSelectDirective, selector: "[dataFileSelect]", inputs: { options: "options", uploadInput: "uploadInput" }, outputs: { uploadOutput: "uploadOutput" }, ngImport: i0 });
|
|
5088
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: NgFileSelectDirective, decorators: [{
|
|
4595
5089
|
type: Directive,
|
|
4596
5090
|
args: [{
|
|
4597
5091
|
selector: "[dataFileSelect]"
|
|
@@ -4606,10 +5100,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImpor
|
|
|
4606
5100
|
|
|
4607
5101
|
class NgxUploaderModule {
|
|
4608
5102
|
}
|
|
4609
|
-
NgxUploaderModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
4610
|
-
NgxUploaderModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
4611
|
-
NgxUploaderModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
4612
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
5103
|
+
NgxUploaderModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: NgxUploaderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
5104
|
+
NgxUploaderModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.3", ngImport: i0, type: NgxUploaderModule, declarations: [NgFileDropDirective, NgFileSelectDirective], exports: [NgFileDropDirective, NgFileSelectDirective] });
|
|
5105
|
+
NgxUploaderModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: NgxUploaderModule });
|
|
5106
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: NgxUploaderModule, decorators: [{
|
|
4613
5107
|
type: NgModule,
|
|
4614
5108
|
args: [{
|
|
4615
5109
|
declarations: [NgFileDropDirective, NgFileSelectDirective],
|
|
@@ -4643,10 +5137,12 @@ class Jwt {
|
|
|
4643
5137
|
const DATA_AUTH_PARAMS = new InjectionToken('data.auth.params');
|
|
4644
5138
|
const DATA_AUTH_USER_SERVICE = new InjectionToken('data.auth.user.service');
|
|
4645
5139
|
let AuthServiceBase = class AuthServiceBase {
|
|
4646
|
-
constructor(userService, _params, _http) {
|
|
5140
|
+
constructor(userService, _params, _router, _http, _msgs) {
|
|
4647
5141
|
this.userService = userService;
|
|
4648
5142
|
this._params = _params;
|
|
5143
|
+
this._router = _router;
|
|
4649
5144
|
this._http = _http;
|
|
5145
|
+
this._msgs = _msgs;
|
|
4650
5146
|
this._user$ = new ReplaySubject(1);
|
|
4651
5147
|
this.autoLogin();
|
|
4652
5148
|
}
|
|
@@ -4723,6 +5219,7 @@ let AuthServiceBase = class AuthServiceBase {
|
|
|
4723
5219
|
}
|
|
4724
5220
|
}
|
|
4725
5221
|
refresh() {
|
|
5222
|
+
console.log('service token refresh');
|
|
4726
5223
|
if (!this._token.refresh) {
|
|
4727
5224
|
this.logout();
|
|
4728
5225
|
return of(null);
|
|
@@ -4731,12 +5228,20 @@ let AuthServiceBase = class AuthServiceBase {
|
|
|
4731
5228
|
.post(this.refreshUrl, {
|
|
4732
5229
|
refresh: this._token.refresh,
|
|
4733
5230
|
})
|
|
4734
|
-
.pipe(
|
|
4735
|
-
|
|
4736
|
-
|
|
4737
|
-
|
|
4738
|
-
|
|
4739
|
-
|
|
5231
|
+
.pipe(catchError((err, caught) => {
|
|
5232
|
+
console.error('Token refresh error', err, caught);
|
|
5233
|
+
this.logout();
|
|
5234
|
+
this._msgs.warning('Vous devez vous reconnecter');
|
|
5235
|
+
this._router.navigate(this._params.loginRoute);
|
|
5236
|
+
return of(null);
|
|
5237
|
+
}), tap((tok) => {
|
|
5238
|
+
if (tok) {
|
|
5239
|
+
this._token = new Jwt({
|
|
5240
|
+
access: tok.access,
|
|
5241
|
+
refresh: this._token.refresh,
|
|
5242
|
+
});
|
|
5243
|
+
this.saveAuth();
|
|
5244
|
+
}
|
|
4740
5245
|
}));
|
|
4741
5246
|
}
|
|
4742
5247
|
};
|
|
@@ -4760,14 +5265,21 @@ class AuthInterceptor {
|
|
|
4760
5265
|
if (!req.url.startsWith(this._apiUrl)) {
|
|
4761
5266
|
return next.handle(req);
|
|
4762
5267
|
}
|
|
5268
|
+
if (req.url.startsWith(this._auth.refreshUrl) ||
|
|
5269
|
+
req.url.startsWith(this._auth.loginUrl)) {
|
|
5270
|
+
return next.handle(req);
|
|
5271
|
+
}
|
|
4763
5272
|
if (!this._auth.isAnonymous) {
|
|
4764
5273
|
req = this._addToken(req, this._auth.accessToken);
|
|
4765
5274
|
}
|
|
4766
5275
|
return next.handle(req).pipe(catchError((error) => {
|
|
5276
|
+
console.log('Catched http error', error);
|
|
4767
5277
|
if (error instanceof HttpErrorResponse && error.status === 401) {
|
|
5278
|
+
console.log('Passing to handle 401');
|
|
4768
5279
|
return this._handle401Error(req, next);
|
|
4769
5280
|
}
|
|
4770
5281
|
else {
|
|
5282
|
+
console.log('throwing error');
|
|
4771
5283
|
return throwError(error);
|
|
4772
5284
|
}
|
|
4773
5285
|
}));
|
|
@@ -4776,6 +5288,7 @@ class AuthInterceptor {
|
|
|
4776
5288
|
if (!this._isRefreshing) {
|
|
4777
5289
|
this._isRefreshing = true;
|
|
4778
5290
|
this._refreshTokenSubject.next(null);
|
|
5291
|
+
console.log('refreshing token');
|
|
4779
5292
|
return this._auth.refresh().pipe(switchMap((token) => {
|
|
4780
5293
|
if (token === null) {
|
|
4781
5294
|
return throwError(() => new HttpErrorResponse({
|
|
@@ -4793,6 +5306,7 @@ class AuthInterceptor {
|
|
|
4793
5306
|
}));
|
|
4794
5307
|
}
|
|
4795
5308
|
else {
|
|
5309
|
+
console.log('piping to refresh token subject');
|
|
4796
5310
|
return this._refreshTokenSubject.pipe(filter((token) => token != null), take(1), switchMap((token) => next.handle(this._addToken(request, token.access))));
|
|
4797
5311
|
}
|
|
4798
5312
|
}
|
|
@@ -4804,9 +5318,9 @@ class AuthInterceptor {
|
|
|
4804
5318
|
});
|
|
4805
5319
|
}
|
|
4806
5320
|
}
|
|
4807
|
-
AuthInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
4808
|
-
AuthInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
4809
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
5321
|
+
AuthInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: AuthInterceptor, deps: [{ token: DATA_AUTH_SERVICE }, { token: DATA_API_URL }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
5322
|
+
AuthInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: AuthInterceptor, providedIn: 'root' });
|
|
5323
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: AuthInterceptor, decorators: [{
|
|
4810
5324
|
type: Injectable,
|
|
4811
5325
|
args: [{
|
|
4812
5326
|
providedIn: 'root',
|
|
@@ -4999,9 +5513,9 @@ class BreadcrumbComponent {
|
|
|
4999
5513
|
return '';
|
|
5000
5514
|
}
|
|
5001
5515
|
}
|
|
5002
|
-
BreadcrumbComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
5003
|
-
BreadcrumbComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
5004
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
5516
|
+
BreadcrumbComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: BreadcrumbComponent, deps: [{ token: i1$2.Router }, { token: i1$2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
|
|
5517
|
+
BreadcrumbComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.3", 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 && p.icon\"><i class=\"me-2\" [ngClass]=\"p.icon\"></i>{{p.title}}</ng-container>\n <ng-container *ngIf=\"!(icons && 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 && p.icon\"><i class=\"me-1\" [ngClass]=\"p.icon\"></i>{{p.title}}</ng-container>\n <ng-container *ngIf=\"!(icons && p.icon)\">{{p.title}}</ng-container>\n </li>\n </ng-container>\n </ol>\n</nav>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
|
|
5518
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: BreadcrumbComponent, decorators: [{
|
|
5005
5519
|
type: Component,
|
|
5006
5520
|
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 && p.icon\"><i class=\"me-2\" [ngClass]=\"p.icon\"></i>{{p.title}}</ng-container>\n <ng-container *ngIf=\"!(icons && 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 && p.icon\"><i class=\"me-1\" [ngClass]=\"p.icon\"></i>{{p.title}}</ng-container>\n <ng-container *ngIf=\"!(icons && p.icon)\">{{p.title}}</ng-container>\n </li>\n </ng-container>\n </ol>\n</nav>" }]
|
|
5007
5521
|
}], ctorParameters: function () { return [{ type: i1$2.Router }, { type: i1$2.ActivatedRoute }]; }, propDecorators: { data: [{
|
|
@@ -5017,9 +5531,11 @@ class NavDriver {
|
|
|
5017
5531
|
this.defaults = defaults;
|
|
5018
5532
|
this.save = save;
|
|
5019
5533
|
this._current = this.defaults;
|
|
5020
|
-
|
|
5021
|
-
|
|
5022
|
-
|
|
5534
|
+
if (this.save) {
|
|
5535
|
+
const value = this._parent.load(this.name);
|
|
5536
|
+
if (value !== null) {
|
|
5537
|
+
this._current = value;
|
|
5538
|
+
}
|
|
5023
5539
|
}
|
|
5024
5540
|
}
|
|
5025
5541
|
get current() {
|
|
@@ -5028,14 +5544,17 @@ class NavDriver {
|
|
|
5028
5544
|
set current(value) {
|
|
5029
5545
|
this._current = value;
|
|
5030
5546
|
this.lastActive = new Date();
|
|
5031
|
-
this.
|
|
5547
|
+
if (this.save) {
|
|
5548
|
+
this._parent.save();
|
|
5549
|
+
}
|
|
5032
5550
|
}
|
|
5033
5551
|
get value() {
|
|
5034
5552
|
return { name: this.name, value: this._current };
|
|
5035
5553
|
}
|
|
5036
5554
|
}
|
|
5037
5555
|
class TabMemoryService {
|
|
5038
|
-
constructor() {
|
|
5556
|
+
constructor(_route) {
|
|
5557
|
+
this._route = _route;
|
|
5039
5558
|
this.tabMem = {};
|
|
5040
5559
|
}
|
|
5041
5560
|
static targetToString(target) {
|
|
@@ -5045,11 +5564,14 @@ class TabMemoryService {
|
|
|
5045
5564
|
}
|
|
5046
5565
|
return out;
|
|
5047
5566
|
}
|
|
5048
|
-
memFor(target, defaults, save = true) {
|
|
5567
|
+
memFor(target, defaults, save = true, fragment) {
|
|
5049
5568
|
const tname = TabMemoryService.targetToString(target);
|
|
5050
5569
|
if (this.tabMem[tname] === undefined) {
|
|
5051
5570
|
this.tabMem[tname] = new NavDriver(this, tname, defaults, save);
|
|
5052
5571
|
}
|
|
5572
|
+
if (fragment) {
|
|
5573
|
+
this.tabMem[tname].current = fragment;
|
|
5574
|
+
}
|
|
5053
5575
|
return this.tabMem[tname];
|
|
5054
5576
|
}
|
|
5055
5577
|
save() {
|
|
@@ -5070,14 +5592,14 @@ class TabMemoryService {
|
|
|
5070
5592
|
return null;
|
|
5071
5593
|
}
|
|
5072
5594
|
}
|
|
5073
|
-
TabMemoryService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
5074
|
-
TabMemoryService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
5075
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
5595
|
+
TabMemoryService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: TabMemoryService, deps: [{ token: i1$2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
5596
|
+
TabMemoryService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: TabMemoryService, providedIn: 'root' });
|
|
5597
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: TabMemoryService, decorators: [{
|
|
5076
5598
|
type: Injectable,
|
|
5077
5599
|
args: [{
|
|
5078
5600
|
providedIn: 'root',
|
|
5079
5601
|
}]
|
|
5080
|
-
}], ctorParameters: function () { return []; } });
|
|
5602
|
+
}], ctorParameters: function () { return [{ type: i1$2.ActivatedRoute }]; } });
|
|
5081
5603
|
|
|
5082
5604
|
const slugify = (str) => {
|
|
5083
5605
|
str = str.replace(/^\s+|\s+$/g, ''); // trim
|
|
@@ -5095,6 +5617,71 @@ const slugify = (str) => {
|
|
|
5095
5617
|
return str;
|
|
5096
5618
|
};
|
|
5097
5619
|
|
|
5620
|
+
class UpdateService {
|
|
5621
|
+
constructor(appRef, swUpdate) {
|
|
5622
|
+
this.appRef = appRef;
|
|
5623
|
+
this.swUpdate = swUpdate;
|
|
5624
|
+
this.stable = false;
|
|
5625
|
+
this._available$ = new ReplaySubject(1);
|
|
5626
|
+
this._available$.next(false);
|
|
5627
|
+
const appIsStable$ = this.appRef.isStable
|
|
5628
|
+
.pipe(first((isStable) => isStable))
|
|
5629
|
+
.pipe(tap(() => console.log('App is stable')));
|
|
5630
|
+
const checkInterval$ = timer(10 * 1000, 5 * 60 * 1000);
|
|
5631
|
+
const checkWhenStable$ = merge(appIsStable$, checkInterval$);
|
|
5632
|
+
const updatesAvailable = swUpdate.versionUpdates.pipe(tap((evt) => console.log('Version updates event', evt)), filter((evt) => evt.type === 'VERSION_READY'), map((evt) => ({
|
|
5633
|
+
type: 'UPDATE_AVAILABLE',
|
|
5634
|
+
current: evt.currentVersion,
|
|
5635
|
+
available: evt.latestVersion,
|
|
5636
|
+
})));
|
|
5637
|
+
updatesAvailable.subscribe(async (evt) => {
|
|
5638
|
+
this._available$.next(true);
|
|
5639
|
+
});
|
|
5640
|
+
checkWhenStable$.subscribe(async () => {
|
|
5641
|
+
this.stable = true;
|
|
5642
|
+
try {
|
|
5643
|
+
console.log('Checking for update');
|
|
5644
|
+
const res = await swUpdate.checkForUpdate();
|
|
5645
|
+
console.log('Check for update result', res);
|
|
5646
|
+
}
|
|
5647
|
+
catch (e) {
|
|
5648
|
+
console.warn('No service worker');
|
|
5649
|
+
}
|
|
5650
|
+
});
|
|
5651
|
+
}
|
|
5652
|
+
get available$() {
|
|
5653
|
+
return this._available$.asObservable();
|
|
5654
|
+
}
|
|
5655
|
+
activate() {
|
|
5656
|
+
this._available$.next(false);
|
|
5657
|
+
console.log('RELOADING FULL PAGE');
|
|
5658
|
+
document.location.reload();
|
|
5659
|
+
}
|
|
5660
|
+
dismiss() {
|
|
5661
|
+
this._available$.next(false);
|
|
5662
|
+
}
|
|
5663
|
+
}
|
|
5664
|
+
UpdateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: UpdateService, deps: [{ token: i0.ApplicationRef }, { token: i1$3.SwUpdate }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
5665
|
+
UpdateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: UpdateService, providedIn: 'root' });
|
|
5666
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: UpdateService, decorators: [{
|
|
5667
|
+
type: Injectable,
|
|
5668
|
+
args: [{
|
|
5669
|
+
providedIn: 'root',
|
|
5670
|
+
}]
|
|
5671
|
+
}], ctorParameters: function () { return [{ type: i0.ApplicationRef }, { type: i1$3.SwUpdate }]; } });
|
|
5672
|
+
|
|
5673
|
+
class UpdateComponent {
|
|
5674
|
+
constructor(update) {
|
|
5675
|
+
this.update = update;
|
|
5676
|
+
}
|
|
5677
|
+
}
|
|
5678
|
+
UpdateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: UpdateComponent, deps: [{ token: UpdateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
5679
|
+
UpdateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.3", 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: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }] });
|
|
5680
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: UpdateComponent, decorators: [{
|
|
5681
|
+
type: Component,
|
|
5682
|
+
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"] }]
|
|
5683
|
+
}], ctorParameters: function () { return [{ type: UpdateService }]; } });
|
|
5684
|
+
|
|
5098
5685
|
/*
|
|
5099
5686
|
* Public API Surface of data
|
|
5100
5687
|
*/
|
|
@@ -5103,5 +5690,6 @@ const slugify = (str) => {
|
|
|
5103
5690
|
* Generated bundle index. Do not edit.
|
|
5104
5691
|
*/
|
|
5105
5692
|
|
|
5106
|
-
export { AuthInterceptor, AuthServiceBase, BanAdapter, BootstrapDataDisplayConfig, BreadcrumbComponent, ChoicePipe, Collection, CollectionMock, DATA_API_URL, DATA_AUTH_PARAMS, DATA_AUTH_SERVICE, DATA_AUTH_USER_SERVICE, DATA_DISPLAY_CONFIG, DATA_MAX_TRANSFERSTATE_TIME, DATA_MESSAGE_SOUNDS, DEFAULT_TIMEOUTS, DataBackend, DataMessageService, DataModel, DataUploaderService, DispeditComponent, FactorPipe, FactorcPipe, FkselectComponent, Jwt, Link, M2mselectComponent, Message, MessageZoneComponent, ModelList, ModelListAutocompleteFilter, ModelListAutocompleteMultiFilter, ModelListDateFilter, ModelListDatetimeFilter, ModelListDatetimerangeFilter, ModelListFieldHeaderComponent, ModelListFieldsSelectorComponent, ModelListFilters, ModelListFiltersComponent, ModelListFiltersSelectComponent, ModelListFlagsFilter, ModelListGeodistanceFilter, ModelListNumberFilter, ModelListNumberOperations, ModelListPaginatorComponent, ModelListSelectFilter, ModelListSelectMultiFilter, ModelListService, ModelListSorterComponent, ModelListTextFilter, ModelListTreeFilter, NavDriver, NgFileDropDirective, NgFileSelectDirective, NgxUploaderModule, Queryset, RData, STATUS, SafeDeleteComponent, TabMemoryService, UploadStatus, booleanField, charField, dateField, datetimeField, decimalField, detailsField, emailField, floatField, foreignKeyField, humanizeBytes, integerField, isValue, manyToManyField, passwordField, primaryField, reverseForeignKeyField, slugify, strToNumber, textField };
|
|
5693
|
+
export { AuthInterceptor, AuthServiceBase, BanAdapter, BootstrapDataDisplayConfig, BreadcrumbComponent, ChoicePipe, Collection, CollectionMock, DATA_API_URL, DATA_AUTH_PARAMS, DATA_AUTH_SERVICE, DATA_AUTH_USER_SERVICE, DATA_DISPLAY_CONFIG, DATA_MAX_TRANSFERSTATE_TIME, DATA_MESSAGE_SOUNDS, DEFAULT_TIMEOUTS, DataBackend, DataMessageService, DataModel, DataUploaderService, DispeditComponent, FactorPipe, FactorcPipe, FkselectComponent, FlagsComponent, Jwt, Link, M2mselectComponent, Message, MessageZoneComponent, ModelList, ModelListAutocompleteFilter, ModelListAutocompleteMultiFilter, ModelListDateFilter, ModelListDatetimeFilter, ModelListDatetimerangeFilter, ModelListFieldHeaderComponent, ModelListFieldsSelectorComponent, ModelListFilters, ModelListFiltersComponent, ModelListFiltersSelectComponent, ModelListFlagsFilter, ModelListGeodistanceFilter, ModelListNumberFilter, ModelListNumberOperations, ModelListPaginatorComponent, ModelListSelectFilter, ModelListSelectMultiFilter, ModelListService, ModelListSorterComponent, ModelListTextFilter, ModelListTreeFilter, NavDriver, NgFileDropDirective, NgFileSelectDirective, NgxUploaderModule, PChoicePipe, PFactorPipe, PFactorcPipe, Queryset, RData, RicheditComponent, STATUS, SafeDeleteComponent, TabMemoryService, UpdateComponent, UpdateService, UploadStatus, booleanField, charField, computedField, dateField, datetimeField, decimalField, detailsField, emailField, floatField, foreignKeyField, humanizeBytes, integerField, isValue, manyToManyField, passwordField, primaryField, reverseForeignKeyField, slugify, strToNumber, textField };
|
|
5694
|
+
//# sourceMappingURL=solidev-data.mjs.map
|
|
5107
5695
|
//# sourceMappingURL=solidev-data.mjs.map
|