@solidev/data 0.0.1-dev.2 → 0.0.1-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +3 -3
- 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 +94 -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/filtertypes.mjs +1 -1
- 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 +40 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.mjs +14 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.mjs +24 -5
- 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 +7 -5
- 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 +6 -1
- package/fesm2015/solidev-data.mjs +813 -200
- package/fesm2015/solidev-data.mjs.map +1 -1
- package/fesm2020/solidev-data.mjs +794 -198
- package/fesm2020/solidev-data.mjs.map +1 -1
- package/lib/auth/auth.service.d.ts +6 -1
- 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 +31 -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/filtertypes.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 +15 -0
- package/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.d.ts +4 -0
- package/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.d.ts +5 -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 +5 -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
|
}
|
|
@@ -809,9 +824,9 @@ class DataBackend {
|
|
|
809
824
|
return this._cachedGet(collection, url, { headers, params });
|
|
810
825
|
}
|
|
811
826
|
}
|
|
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: "
|
|
827
|
+
DataBackend.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", 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 });
|
|
828
|
+
DataBackend.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DataBackend, providedIn: 'root' });
|
|
829
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DataBackend, decorators: [{
|
|
815
830
|
type: Injectable,
|
|
816
831
|
args: [{
|
|
817
832
|
providedIn: 'root',
|
|
@@ -1301,7 +1316,7 @@ class ModelList {
|
|
|
1301
1316
|
get results() {
|
|
1302
1317
|
if (!this._results) {
|
|
1303
1318
|
this._results = this.queryset.results.pipe(
|
|
1304
|
-
// tap(() => console.log('
|
|
1319
|
+
// tap(() => console.log('@solidev/data: modellist result')),
|
|
1305
1320
|
share(), takeUntil(this.unsubscribe || NEVER));
|
|
1306
1321
|
}
|
|
1307
1322
|
return this._results;
|
|
@@ -1309,7 +1324,7 @@ class ModelList {
|
|
|
1309
1324
|
get meta() {
|
|
1310
1325
|
if (!this._meta) {
|
|
1311
1326
|
this._meta = this.queryset.meta.pipe(
|
|
1312
|
-
// tap(() => console.log('
|
|
1327
|
+
// tap(() => console.log('@solidev/data: modellist meta')),
|
|
1313
1328
|
share(), takeUntil(this.unsubscribe || NEVER));
|
|
1314
1329
|
}
|
|
1315
1330
|
return this._meta;
|
|
@@ -1317,7 +1332,7 @@ class ModelList {
|
|
|
1317
1332
|
get loading() {
|
|
1318
1333
|
if (!this._loading) {
|
|
1319
1334
|
this._loading = this.queryset.loading.pipe(
|
|
1320
|
-
// tap(() => console.log('
|
|
1335
|
+
// tap(() => console.log('@solidev/data: modellist loading')),
|
|
1321
1336
|
share(), takeUntil(this.unsubscribe || NEVER));
|
|
1322
1337
|
}
|
|
1323
1338
|
return this._loading;
|
|
@@ -1325,13 +1340,14 @@ class ModelList {
|
|
|
1325
1340
|
get full() {
|
|
1326
1341
|
if (!this._full) {
|
|
1327
1342
|
this._full = this.queryset.full.pipe(
|
|
1328
|
-
// tap(() => console.log('
|
|
1343
|
+
// tap(() => console.log('@solidev/data: modellist full')),
|
|
1329
1344
|
share(), takeUntil(this.unsubscribe || NEVER));
|
|
1330
1345
|
}
|
|
1331
1346
|
return this._full;
|
|
1332
1347
|
}
|
|
1333
1348
|
start(params) {
|
|
1334
1349
|
let filter$;
|
|
1350
|
+
let reloadFired = false;
|
|
1335
1351
|
if (params.filter && !params.filter.subscribe) {
|
|
1336
1352
|
filter$ = of(params.filter);
|
|
1337
1353
|
}
|
|
@@ -1342,14 +1358,14 @@ class ModelList {
|
|
|
1342
1358
|
filter$ = of({});
|
|
1343
1359
|
}
|
|
1344
1360
|
combineLatest([
|
|
1345
|
-
this.reload,
|
|
1361
|
+
this.reload.pipe(tap((v) => (reloadFired = !!v))),
|
|
1346
1362
|
this.filters.output,
|
|
1347
1363
|
filter$,
|
|
1348
1364
|
this.paginator.output,
|
|
1349
1365
|
this.sorter.output,
|
|
1350
1366
|
this.fields.output,
|
|
1351
1367
|
])
|
|
1352
|
-
.pipe(
|
|
1368
|
+
.pipe(throttleTime(200), switchMap(([reload, filter, manualFilter, paginator, sorter, fields]) => {
|
|
1353
1369
|
this.queryset
|
|
1354
1370
|
.filter(filter)
|
|
1355
1371
|
.filter(manualFilter || {}, true)
|
|
@@ -1357,15 +1373,19 @@ class ModelList {
|
|
|
1357
1373
|
.setPage(paginator.page)
|
|
1358
1374
|
.sort(...sorter)
|
|
1359
1375
|
.setFields(fields);
|
|
1360
|
-
|
|
1376
|
+
const dbSync = reloadFired;
|
|
1377
|
+
reloadFired = false;
|
|
1378
|
+
return this.queryset.get(true, dbSync);
|
|
1361
1379
|
}), takeUntil(this.unsubscribe || NEVER))
|
|
1362
1380
|
.subscribe({
|
|
1363
|
-
next: (results) => {
|
|
1381
|
+
next: (results) => {
|
|
1382
|
+
// console.log('@solidev/data: modellist:get results');
|
|
1383
|
+
},
|
|
1364
1384
|
error: (error) => {
|
|
1365
|
-
console.error('
|
|
1385
|
+
console.error('@solidev/data: error while getting model list results : ', error);
|
|
1366
1386
|
},
|
|
1367
1387
|
complete: () => {
|
|
1368
|
-
// console.log('modellist:completed', this.name);
|
|
1388
|
+
// console.log('@solidev/data: modellist:completed', this.name);
|
|
1369
1389
|
this.started = false;
|
|
1370
1390
|
},
|
|
1371
1391
|
});
|
|
@@ -1411,9 +1431,9 @@ class ModelListService {
|
|
|
1411
1431
|
return ml;
|
|
1412
1432
|
}
|
|
1413
1433
|
}
|
|
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: "
|
|
1434
|
+
ModelListService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1435
|
+
ModelListService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListService, providedIn: 'root' });
|
|
1436
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListService, decorators: [{
|
|
1417
1437
|
type: Injectable,
|
|
1418
1438
|
args: [{
|
|
1419
1439
|
providedIn: 'root',
|
|
@@ -1456,9 +1476,9 @@ class ModelListFieldsSelectorComponent {
|
|
|
1456
1476
|
}
|
|
1457
1477
|
}
|
|
1458
1478
|
}
|
|
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: "
|
|
1479
|
+
ModelListFieldsSelectorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListFieldsSelectorComponent, deps: [{ token: i2$1.NgbOffcanvas }], target: i0.ɵɵFactoryTarget.Component });
|
|
1480
|
+
ModelListFieldsSelectorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", 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 }] });
|
|
1481
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListFieldsSelectorComponent, decorators: [{
|
|
1462
1482
|
type: Component,
|
|
1463
1483
|
args: [{ selector: 'data-model-list-fields-selector', standalone: true, imports: [
|
|
1464
1484
|
CommonModule,
|
|
@@ -1507,9 +1527,9 @@ class ModelListSorterComponent {
|
|
|
1507
1527
|
this.list.sorter.unset(this.field);
|
|
1508
1528
|
}
|
|
1509
1529
|
}
|
|
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: "
|
|
1530
|
+
ModelListSorterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListSorterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1531
|
+
ModelListSorterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", 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"] }] });
|
|
1532
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListSorterComponent, decorators: [{
|
|
1513
1533
|
type: Component,
|
|
1514
1534
|
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
1535
|
}], ctorParameters: function () { return []; }, propDecorators: { list: [{
|
|
@@ -1530,11 +1550,11 @@ class ModelListFieldHeaderComponent {
|
|
|
1530
1550
|
this.list.fields.enable(f.name);
|
|
1531
1551
|
}
|
|
1532
1552
|
}
|
|
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: "
|
|
1553
|
+
ModelListFieldHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListFieldHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1554
|
+
ModelListFieldHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", 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"] }] });
|
|
1555
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListFieldHeaderComponent, decorators: [{
|
|
1536
1556
|
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"] }]
|
|
1557
|
+
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
1558
|
}], ctorParameters: function () { return []; }, propDecorators: { list: [{
|
|
1539
1559
|
type: Input
|
|
1540
1560
|
}], field: [{
|
|
@@ -1556,9 +1576,9 @@ class ModelListFiltersSelectComponent {
|
|
|
1556
1576
|
this.list.filters.update();
|
|
1557
1577
|
}
|
|
1558
1578
|
}
|
|
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: "
|
|
1579
|
+
ModelListFiltersSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListFiltersSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1580
|
+
ModelListFiltersSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", 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" }] });
|
|
1581
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListFiltersSelectComponent, decorators: [{
|
|
1562
1582
|
type: Component,
|
|
1563
1583
|
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
1584
|
}], ctorParameters: function () { return []; }, propDecorators: { list: [{
|
|
@@ -1574,14 +1594,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImpor
|
|
|
1574
1594
|
class ModelListTextFilterComponent {
|
|
1575
1595
|
constructor() {
|
|
1576
1596
|
this.classes = '';
|
|
1577
|
-
this.fc = new
|
|
1597
|
+
this.fc = new FormControl(null);
|
|
1578
1598
|
}
|
|
1579
1599
|
ngOnInit() {
|
|
1580
1600
|
this.filter.valueChanges.subscribe((val) => {
|
|
1581
1601
|
this.fc.setValue(val.value, { emitEvent: false });
|
|
1582
1602
|
});
|
|
1583
1603
|
this.fc.valueChanges.pipe(debounceTime(250)).subscribe((val) => {
|
|
1584
|
-
if (this.filter.set(val, val)) {
|
|
1604
|
+
if (this.filter.set(val, val || '')) {
|
|
1585
1605
|
this.list.filters.update();
|
|
1586
1606
|
}
|
|
1587
1607
|
});
|
|
@@ -1591,9 +1611,9 @@ class ModelListTextFilterComponent {
|
|
|
1591
1611
|
this.list.filters.update();
|
|
1592
1612
|
}
|
|
1593
1613
|
}
|
|
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: "
|
|
1614
|
+
ModelListTextFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListTextFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1615
|
+
ModelListTextFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", 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"] }] });
|
|
1616
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListTextFilterComponent, decorators: [{
|
|
1597
1617
|
type: Component,
|
|
1598
1618
|
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
1619
|
}], ctorParameters: function () { return []; }, propDecorators: { list: [{
|
|
@@ -1689,9 +1709,9 @@ class ModelListAutocompleteFilterComponent {
|
|
|
1689
1709
|
}), takeUntil(this._subscription));
|
|
1690
1710
|
}
|
|
1691
1711
|
}
|
|
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: "
|
|
1712
|
+
ModelListAutocompleteFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListAutocompleteFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1713
|
+
ModelListAutocompleteFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", 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"] }] });
|
|
1714
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListAutocompleteFilterComponent, decorators: [{
|
|
1695
1715
|
type: Component,
|
|
1696
1716
|
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
1717
|
}], ctorParameters: function () { return []; }, propDecorators: { list: [{
|
|
@@ -1708,9 +1728,9 @@ class ModelListAutocompleteMultiFilterComponent extends ModelListAutocompleteFil
|
|
|
1708
1728
|
this.list.filters.update();
|
|
1709
1729
|
}
|
|
1710
1730
|
}
|
|
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: "
|
|
1731
|
+
ModelListAutocompleteMultiFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListAutocompleteMultiFilterComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
1732
|
+
ModelListAutocompleteMultiFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", 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"] }] });
|
|
1733
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListAutocompleteMultiFilterComponent, decorators: [{
|
|
1714
1734
|
type: Component,
|
|
1715
1735
|
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
1736
|
}], propDecorators: { filter: [{
|
|
@@ -1720,13 +1740,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImpor
|
|
|
1720
1740
|
class ModelListDatetimeFilterComponent {
|
|
1721
1741
|
constructor() {
|
|
1722
1742
|
this.classes = '';
|
|
1743
|
+
this.fc = new FormControl();
|
|
1744
|
+
}
|
|
1745
|
+
ngOnInit() {
|
|
1746
|
+
this.filter.valueChanges.subscribe((val) => {
|
|
1747
|
+
this.fc.setValue(val.value, { emitEvent: false });
|
|
1748
|
+
});
|
|
1749
|
+
this.fc.valueChanges.pipe(debounceTime(250)).subscribe((val) => {
|
|
1750
|
+
if (this.filter.set(val, val)) {
|
|
1751
|
+
this.list.filters.update();
|
|
1752
|
+
}
|
|
1753
|
+
});
|
|
1754
|
+
}
|
|
1755
|
+
disable() {
|
|
1756
|
+
this.filter.enabled = false;
|
|
1757
|
+
this.list.filters.update();
|
|
1723
1758
|
}
|
|
1724
1759
|
}
|
|
1725
|
-
ModelListDatetimeFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1726
|
-
ModelListDatetimeFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
1727
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1760
|
+
ModelListDatetimeFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListDatetimeFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1761
|
+
ModelListDatetimeFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", 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"] }] });
|
|
1762
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListDatetimeFilterComponent, decorators: [{
|
|
1728
1763
|
type: Component,
|
|
1729
|
-
args: [{ selector: 'data-model-list-datetime-filter', standalone: true, imports: [CommonModule], template: "<
|
|
1764
|
+
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>" }]
|
|
1730
1765
|
}], ctorParameters: function () { return []; }, propDecorators: { list: [{
|
|
1731
1766
|
type: Input
|
|
1732
1767
|
}], filter: [{
|
|
@@ -1740,9 +1775,9 @@ class ModelListDatetimeRangeFilterComponent {
|
|
|
1740
1775
|
this.classes = '';
|
|
1741
1776
|
}
|
|
1742
1777
|
}
|
|
1743
|
-
ModelListDatetimeRangeFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1744
|
-
ModelListDatetimeRangeFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
1745
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1778
|
+
ModelListDatetimeRangeFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListDatetimeRangeFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1779
|
+
ModelListDatetimeRangeFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", 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 }] });
|
|
1780
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListDatetimeRangeFilterComponent, decorators: [{
|
|
1746
1781
|
type: Component,
|
|
1747
1782
|
args: [{ selector: 'data-model-list-datetime-range-filter', standalone: true, imports: [CommonModule], template: "<p>model-list-datetime-range-filter works!</p>" }]
|
|
1748
1783
|
}], ctorParameters: function () { return []; }, propDecorators: { list: [{
|
|
@@ -1758,9 +1793,9 @@ class ModelListFlagsFilterComponent {
|
|
|
1758
1793
|
this.classes = '';
|
|
1759
1794
|
}
|
|
1760
1795
|
}
|
|
1761
|
-
ModelListFlagsFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1762
|
-
ModelListFlagsFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
1763
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1796
|
+
ModelListFlagsFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListFlagsFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1797
|
+
ModelListFlagsFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", 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 }] });
|
|
1798
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListFlagsFilterComponent, decorators: [{
|
|
1764
1799
|
type: Component,
|
|
1765
1800
|
args: [{ selector: 'data-model-list-flags-filter', standalone: true, imports: [CommonModule], template: "<p>model-list-flags-filter works!</p>" }]
|
|
1766
1801
|
}], ctorParameters: function () { return []; }, propDecorators: { list: [{
|
|
@@ -1811,9 +1846,9 @@ class ModelListGeodistanceFilterComponent {
|
|
|
1811
1846
|
elem.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
|
|
1812
1847
|
}
|
|
1813
1848
|
}
|
|
1814
|
-
ModelListGeodistanceFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1815
|
-
ModelListGeodistanceFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
1816
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1849
|
+
ModelListGeodistanceFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListGeodistanceFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1850
|
+
ModelListGeodistanceFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", 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"] }] });
|
|
1851
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListGeodistanceFilterComponent, decorators: [{
|
|
1817
1852
|
type: Component,
|
|
1818
1853
|
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>" }]
|
|
1819
1854
|
}], ctorParameters: function () { return []; }, propDecorators: { list: [{
|
|
@@ -1831,7 +1866,6 @@ class ModelListSelectFilterComponent {
|
|
|
1831
1866
|
}
|
|
1832
1867
|
ngOnInit() {
|
|
1833
1868
|
this.filter.valueChanges.subscribe((val) => {
|
|
1834
|
-
console.log('Changing value', val);
|
|
1835
1869
|
this.fc.setValue(val ? val.value : null, {
|
|
1836
1870
|
emitEvent: false,
|
|
1837
1871
|
});
|
|
@@ -1861,9 +1895,9 @@ class ModelListSelectFilterComponent {
|
|
|
1861
1895
|
this.list.filters.update();
|
|
1862
1896
|
}
|
|
1863
1897
|
}
|
|
1864
|
-
ModelListSelectFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1865
|
-
ModelListSelectFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
1866
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1898
|
+
ModelListSelectFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListSelectFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1899
|
+
ModelListSelectFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", 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"] }] });
|
|
1900
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListSelectFilterComponent, decorators: [{
|
|
1867
1901
|
type: Component,
|
|
1868
1902
|
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>" }]
|
|
1869
1903
|
}], ctorParameters: function () { return []; }, propDecorators: { list: [{
|
|
@@ -1903,9 +1937,9 @@ class ModelListSelectMultiFilterComponent {
|
|
|
1903
1937
|
this.list.filters.update();
|
|
1904
1938
|
}
|
|
1905
1939
|
}
|
|
1906
|
-
ModelListSelectMultiFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1907
|
-
ModelListSelectMultiFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
1908
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1940
|
+
ModelListSelectMultiFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListSelectMultiFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1941
|
+
ModelListSelectMultiFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", 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"] }] });
|
|
1942
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListSelectMultiFilterComponent, decorators: [{
|
|
1909
1943
|
type: Component,
|
|
1910
1944
|
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>" }]
|
|
1911
1945
|
}], ctorParameters: function () { return []; }, propDecorators: { list: [{
|
|
@@ -1921,9 +1955,9 @@ class ModelListTreeFilterComponent {
|
|
|
1921
1955
|
this.classes = '';
|
|
1922
1956
|
}
|
|
1923
1957
|
}
|
|
1924
|
-
ModelListTreeFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1925
|
-
ModelListTreeFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
1926
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1958
|
+
ModelListTreeFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListTreeFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1959
|
+
ModelListTreeFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", 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 }] });
|
|
1960
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListTreeFilterComponent, decorators: [{
|
|
1927
1961
|
type: Component,
|
|
1928
1962
|
args: [{ selector: 'data-model-list-tree-filter', standalone: true, imports: [CommonModule], template: "<p>model-list-tree-filter works!</p>" }]
|
|
1929
1963
|
}], ctorParameters: function () { return []; }, propDecorators: { list: [{
|
|
@@ -1958,9 +1992,9 @@ class ModelListNumberFilterComponent {
|
|
|
1958
1992
|
this.list.filters.update();
|
|
1959
1993
|
}
|
|
1960
1994
|
}
|
|
1961
|
-
ModelListNumberFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1962
|
-
ModelListNumberFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
1963
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1995
|
+
ModelListNumberFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListNumberFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1996
|
+
ModelListNumberFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", 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"] }] });
|
|
1997
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListNumberFilterComponent, decorators: [{
|
|
1964
1998
|
type: Component,
|
|
1965
1999
|
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>" }]
|
|
1966
2000
|
}], ctorParameters: function () { return []; }, propDecorators: { list: [{
|
|
@@ -1971,6 +2005,39 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImpor
|
|
|
1971
2005
|
type: Input
|
|
1972
2006
|
}] } });
|
|
1973
2007
|
|
|
2008
|
+
class ModelListDateFilterComponent {
|
|
2009
|
+
constructor() {
|
|
2010
|
+
this.classes = '';
|
|
2011
|
+
this.fc = new FormControl();
|
|
2012
|
+
}
|
|
2013
|
+
ngOnInit() {
|
|
2014
|
+
this.filter.valueChanges.subscribe((val) => {
|
|
2015
|
+
this.fc.setValue(val.value, { emitEvent: false });
|
|
2016
|
+
});
|
|
2017
|
+
this.fc.valueChanges.pipe(debounceTime(250)).subscribe((val) => {
|
|
2018
|
+
if (this.filter.set(val, val)) {
|
|
2019
|
+
this.list.filters.update();
|
|
2020
|
+
}
|
|
2021
|
+
});
|
|
2022
|
+
}
|
|
2023
|
+
disable() {
|
|
2024
|
+
this.filter.enabled = false;
|
|
2025
|
+
this.list.filters.update();
|
|
2026
|
+
}
|
|
2027
|
+
}
|
|
2028
|
+
ModelListDateFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListDateFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2029
|
+
ModelListDateFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", 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"] }] });
|
|
2030
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListDateFilterComponent, decorators: [{
|
|
2031
|
+
type: Component,
|
|
2032
|
+
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>" }]
|
|
2033
|
+
}], ctorParameters: function () { return []; }, propDecorators: { list: [{
|
|
2034
|
+
type: Input
|
|
2035
|
+
}], filter: [{
|
|
2036
|
+
type: Input
|
|
2037
|
+
}], classes: [{
|
|
2038
|
+
type: Input
|
|
2039
|
+
}] } });
|
|
2040
|
+
|
|
1974
2041
|
// FIXME: register filter components and load them dynamically to allow user defined filters
|
|
1975
2042
|
class ModelListFiltersComponent {
|
|
1976
2043
|
constructor() {
|
|
@@ -1978,9 +2045,9 @@ class ModelListFiltersComponent {
|
|
|
1978
2045
|
this.itemClasses = '';
|
|
1979
2046
|
}
|
|
1980
2047
|
}
|
|
1981
|
-
ModelListFiltersComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1982
|
-
ModelListFiltersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
1983
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2048
|
+
ModelListFiltersComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListFiltersComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2049
|
+
ModelListFiltersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", 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"] }] });
|
|
2050
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListFiltersComponent, decorators: [{
|
|
1984
2051
|
type: Component,
|
|
1985
2052
|
args: [{ selector: 'data-model-list-filters', standalone: true, imports: [
|
|
1986
2053
|
CommonModule,
|
|
@@ -1989,13 +2056,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImpor
|
|
|
1989
2056
|
ModelListAutocompleteFilterComponent,
|
|
1990
2057
|
ModelListAutocompleteMultiFilterComponent,
|
|
1991
2058
|
ModelListDatetimeFilterComponent,
|
|
2059
|
+
ModelListDateFilterComponent,
|
|
1992
2060
|
ModelListDatetimeRangeFilterComponent,
|
|
1993
2061
|
ModelListFlagsFilterComponent,
|
|
1994
2062
|
ModelListGeodistanceFilterComponent,
|
|
1995
2063
|
ModelListSelectFilterComponent,
|
|
1996
2064
|
ModelListSelectMultiFilterComponent,
|
|
1997
2065
|
ModelListTreeFilterComponent,
|
|
1998
|
-
], 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-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>" }]
|
|
2066
|
+
], 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>" }]
|
|
1999
2067
|
}], propDecorators: { list: [{
|
|
2000
2068
|
type: Input
|
|
2001
2069
|
}], containerClasses: [{
|
|
@@ -2025,6 +2093,7 @@ class ModelListFilter {
|
|
|
2025
2093
|
this.allowed = false;
|
|
2026
2094
|
this.enabled = false;
|
|
2027
2095
|
this.type = 'text';
|
|
2096
|
+
this.default = params.default;
|
|
2028
2097
|
// FIXME: add value init
|
|
2029
2098
|
}
|
|
2030
2099
|
get mcurrent$() {
|
|
@@ -2033,6 +2102,12 @@ class ModelListFilter {
|
|
|
2033
2102
|
get current$() {
|
|
2034
2103
|
return this._current.asObservable();
|
|
2035
2104
|
}
|
|
2105
|
+
get valueChanges() {
|
|
2106
|
+
if (this.multi) {
|
|
2107
|
+
return this._mcurrent.asObservable();
|
|
2108
|
+
}
|
|
2109
|
+
return this._current.asObservable();
|
|
2110
|
+
}
|
|
2036
2111
|
updateFilter(filter) {
|
|
2037
2112
|
if (this.multi && this._mvalue.size > 0) {
|
|
2038
2113
|
filter[this.field] = this.getMultiValue();
|
|
@@ -2043,12 +2118,6 @@ class ModelListFilter {
|
|
|
2043
2118
|
filter[this.field] = this.getValue();
|
|
2044
2119
|
}
|
|
2045
2120
|
}
|
|
2046
|
-
get valueChanges() {
|
|
2047
|
-
if (this.multi) {
|
|
2048
|
-
return this._mcurrent.asObservable();
|
|
2049
|
-
}
|
|
2050
|
-
return this._current.asObservable();
|
|
2051
|
-
}
|
|
2052
2121
|
clear(notify = true) {
|
|
2053
2122
|
if (this.multi) {
|
|
2054
2123
|
this._mvalue = new Map();
|
|
@@ -2076,6 +2145,9 @@ class ModelListFilter {
|
|
|
2076
2145
|
}
|
|
2077
2146
|
return this.stoggle(value, desc, notify);
|
|
2078
2147
|
}
|
|
2148
|
+
getValue() {
|
|
2149
|
+
return `${this._value?.value}`;
|
|
2150
|
+
}
|
|
2079
2151
|
mtoggle(value, desc, notify = true) {
|
|
2080
2152
|
if (this._mvalue.has(`${value}`)) {
|
|
2081
2153
|
this._mvalue.delete(`${value}`);
|
|
@@ -2131,9 +2203,6 @@ class ModelListFilter {
|
|
|
2131
2203
|
getMultiValue() {
|
|
2132
2204
|
return Array.from(this._mvalue.keys()).join(',');
|
|
2133
2205
|
}
|
|
2134
|
-
getValue() {
|
|
2135
|
-
return `${this._value?.value}`;
|
|
2136
|
-
}
|
|
2137
2206
|
notify(notify = true) {
|
|
2138
2207
|
if (notify) {
|
|
2139
2208
|
if (this.multi) {
|
|
@@ -2196,6 +2265,19 @@ class ModelListDatetimeFilter extends ModelListFilter {
|
|
|
2196
2265
|
}
|
|
2197
2266
|
}
|
|
2198
2267
|
|
|
2268
|
+
class ModelListDateFilter extends ModelListFilter {
|
|
2269
|
+
constructor(params) {
|
|
2270
|
+
super(params);
|
|
2271
|
+
this.type = 'date';
|
|
2272
|
+
if (this.label == '') {
|
|
2273
|
+
this.label = 'Sélectionnez par date';
|
|
2274
|
+
}
|
|
2275
|
+
if (this.help == '') {
|
|
2276
|
+
this.help = 'Date cible';
|
|
2277
|
+
}
|
|
2278
|
+
}
|
|
2279
|
+
}
|
|
2280
|
+
|
|
2199
2281
|
class ModelListDatetimerangeFilter extends ModelListFilter {
|
|
2200
2282
|
constructor(params) {
|
|
2201
2283
|
super(params);
|
|
@@ -2315,7 +2397,12 @@ class ModelListSelectFilter extends ModelListFilter {
|
|
|
2315
2397
|
this.choices = params.choices;
|
|
2316
2398
|
}
|
|
2317
2399
|
}
|
|
2400
|
+
// Set default only for cur type
|
|
2401
|
+
if (this.default && this.type == 'select') {
|
|
2402
|
+
this.set(this.default, '', true);
|
|
2403
|
+
}
|
|
2318
2404
|
}
|
|
2405
|
+
setDefault() { }
|
|
2319
2406
|
}
|
|
2320
2407
|
|
|
2321
2408
|
class ModelListSelectMultiFilter extends ModelListSelectFilter {
|
|
@@ -2329,18 +2416,27 @@ class ModelListSelectMultiFilter extends ModelListSelectFilter {
|
|
|
2329
2416
|
if (this.help == '') {
|
|
2330
2417
|
this.help = 'Choix par liste déroulante (multiple)';
|
|
2331
2418
|
}
|
|
2419
|
+
// Set default only for cur type
|
|
2420
|
+
if (this.default && this.type == 'selectmulti') {
|
|
2421
|
+
for (const f of this.default) {
|
|
2422
|
+
this.set(f.value, f.desc, true);
|
|
2423
|
+
}
|
|
2424
|
+
}
|
|
2332
2425
|
}
|
|
2333
2426
|
}
|
|
2334
2427
|
|
|
2335
2428
|
class ModelListTextFilter extends ModelListFilter {
|
|
2336
2429
|
constructor(params) {
|
|
2337
2430
|
super(params);
|
|
2338
|
-
this.type =
|
|
2339
|
-
if (this.label ==
|
|
2340
|
-
this.label =
|
|
2431
|
+
this.type = 'text';
|
|
2432
|
+
if (this.label == '') {
|
|
2433
|
+
this.label = 'Recherche par texte';
|
|
2341
2434
|
}
|
|
2342
|
-
if (this.help ==
|
|
2343
|
-
this.help =
|
|
2435
|
+
if (this.help == '') {
|
|
2436
|
+
this.help = 'Texte à rechercher';
|
|
2437
|
+
}
|
|
2438
|
+
if (this.default) {
|
|
2439
|
+
this.set(this.default, '', true);
|
|
2344
2440
|
}
|
|
2345
2441
|
}
|
|
2346
2442
|
}
|
|
@@ -2429,9 +2525,9 @@ class ModelListPaginatorComponent {
|
|
|
2429
2525
|
}
|
|
2430
2526
|
}
|
|
2431
2527
|
}
|
|
2432
|
-
ModelListPaginatorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2433
|
-
ModelListPaginatorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
2434
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2528
|
+
ModelListPaginatorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListPaginatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2529
|
+
ModelListPaginatorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", 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"] }] });
|
|
2530
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelListPaginatorComponent, decorators: [{
|
|
2435
2531
|
type: Component,
|
|
2436
2532
|
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>" }]
|
|
2437
2533
|
}], propDecorators: { list: [{
|
|
@@ -2469,15 +2565,55 @@ class ChoicePipe {
|
|
|
2469
2565
|
return `[${fvalue}] ??`;
|
|
2470
2566
|
}
|
|
2471
2567
|
}
|
|
2472
|
-
ChoicePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2473
|
-
ChoicePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
2474
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2568
|
+
ChoicePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ChoicePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
2569
|
+
ChoicePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: ChoicePipe, isStandalone: true, name: "choice" });
|
|
2570
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ChoicePipe, decorators: [{
|
|
2475
2571
|
type: Pipe,
|
|
2476
2572
|
args: [{
|
|
2477
2573
|
name: 'choice',
|
|
2478
2574
|
standalone: true,
|
|
2479
2575
|
}]
|
|
2480
2576
|
}] });
|
|
2577
|
+
class PChoicePipe {
|
|
2578
|
+
transform(value, model, field, mode = 'desc') {
|
|
2579
|
+
if (!model) {
|
|
2580
|
+
return '-';
|
|
2581
|
+
}
|
|
2582
|
+
if (!value) {
|
|
2583
|
+
return '-';
|
|
2584
|
+
}
|
|
2585
|
+
// Use value from input, not from field
|
|
2586
|
+
const fvalue = value; //- (model as any)[field];
|
|
2587
|
+
if (mode === 'code') {
|
|
2588
|
+
return `${fvalue}`;
|
|
2589
|
+
}
|
|
2590
|
+
const manager = model.FM(field);
|
|
2591
|
+
const choices = manager.choices;
|
|
2592
|
+
if (!choices) {
|
|
2593
|
+
return `${fvalue}`;
|
|
2594
|
+
}
|
|
2595
|
+
for (const ch of choices) {
|
|
2596
|
+
if (ch.value === fvalue) {
|
|
2597
|
+
if (mode === 'desc') {
|
|
2598
|
+
return ch.desc;
|
|
2599
|
+
}
|
|
2600
|
+
else {
|
|
2601
|
+
return `[${fvalue}] ${ch.desc}`;
|
|
2602
|
+
}
|
|
2603
|
+
}
|
|
2604
|
+
}
|
|
2605
|
+
return `[${fvalue}] ??`;
|
|
2606
|
+
}
|
|
2607
|
+
}
|
|
2608
|
+
PChoicePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: PChoicePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
2609
|
+
PChoicePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: PChoicePipe, isStandalone: true, name: "pchoice" });
|
|
2610
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: PChoicePipe, decorators: [{
|
|
2611
|
+
type: Pipe,
|
|
2612
|
+
args: [{
|
|
2613
|
+
name: 'pchoice',
|
|
2614
|
+
standalone: true,
|
|
2615
|
+
}]
|
|
2616
|
+
}] });
|
|
2481
2617
|
|
|
2482
2618
|
function isValue(value) {
|
|
2483
2619
|
return !(value == null || value === '' || value !== value);
|
|
@@ -2511,9 +2647,9 @@ class FactorPipe {
|
|
|
2511
2647
|
return formatNumber(num / factor, locale, digitsInfo);
|
|
2512
2648
|
}
|
|
2513
2649
|
}
|
|
2514
|
-
FactorPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2515
|
-
FactorPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
2516
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2650
|
+
FactorPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FactorPipe, deps: [{ token: LOCALE_ID }], target: i0.ɵɵFactoryTarget.Pipe });
|
|
2651
|
+
FactorPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: FactorPipe, isStandalone: true, name: "factor" });
|
|
2652
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FactorPipe, decorators: [{
|
|
2517
2653
|
type: Pipe,
|
|
2518
2654
|
args: [{
|
|
2519
2655
|
name: 'factor',
|
|
@@ -2523,9 +2659,42 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImpor
|
|
|
2523
2659
|
type: Inject,
|
|
2524
2660
|
args: [LOCALE_ID]
|
|
2525
2661
|
}] }]; } });
|
|
2662
|
+
class PFactorPipe {
|
|
2663
|
+
constructor(_locale) {
|
|
2664
|
+
this._locale = _locale;
|
|
2665
|
+
}
|
|
2666
|
+
transform(value, model, field, digitsInfo, locale) {
|
|
2667
|
+
if (!model)
|
|
2668
|
+
return null;
|
|
2669
|
+
if (!value)
|
|
2670
|
+
return null;
|
|
2671
|
+
locale = locale || this._locale;
|
|
2672
|
+
// Use value from input, not from model
|
|
2673
|
+
const fvalue = value; // (model as any)[field];
|
|
2674
|
+
if (!isValue(fvalue))
|
|
2675
|
+
return null;
|
|
2676
|
+
const manager = model.FM(field);
|
|
2677
|
+
let factor = manager.factor;
|
|
2678
|
+
factor = factor || 1;
|
|
2679
|
+
const num = strToNumber(fvalue);
|
|
2680
|
+
return formatNumber(num / factor, locale, digitsInfo);
|
|
2681
|
+
}
|
|
2682
|
+
}
|
|
2683
|
+
PFactorPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: PFactorPipe, deps: [{ token: LOCALE_ID }], target: i0.ɵɵFactoryTarget.Pipe });
|
|
2684
|
+
PFactorPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: PFactorPipe, isStandalone: true, name: "pfactor" });
|
|
2685
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: PFactorPipe, decorators: [{
|
|
2686
|
+
type: Pipe,
|
|
2687
|
+
args: [{
|
|
2688
|
+
name: 'pfactor',
|
|
2689
|
+
standalone: true,
|
|
2690
|
+
}]
|
|
2691
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
2692
|
+
type: Inject,
|
|
2693
|
+
args: [LOCALE_ID]
|
|
2694
|
+
}] }]; } });
|
|
2526
2695
|
|
|
2527
2696
|
class FactorcPipe {
|
|
2528
|
-
constructor(_locale, _defaultCurrencyCode = '
|
|
2697
|
+
constructor(_locale, _defaultCurrencyCode = 'EUR') {
|
|
2529
2698
|
this._locale = _locale;
|
|
2530
2699
|
this._defaultCurrencyCode = _defaultCurrencyCode;
|
|
2531
2700
|
}
|
|
@@ -2537,6 +2706,9 @@ class FactorcPipe {
|
|
|
2537
2706
|
return null;
|
|
2538
2707
|
locale = locale || this._locale;
|
|
2539
2708
|
let currency = currencyCode || this._defaultCurrencyCode;
|
|
2709
|
+
if (!display) {
|
|
2710
|
+
display = 'symbol';
|
|
2711
|
+
}
|
|
2540
2712
|
if (display !== 'code') {
|
|
2541
2713
|
if (display === 'symbol' || display === 'symbol-narrow') {
|
|
2542
2714
|
currency = getCurrencySymbol(currency, display === 'symbol' ? 'wide' : 'narrow', locale);
|
|
@@ -2546,15 +2718,14 @@ class FactorcPipe {
|
|
|
2546
2718
|
}
|
|
2547
2719
|
}
|
|
2548
2720
|
const manager = value.FM(field);
|
|
2549
|
-
|
|
2550
|
-
factor = factor || 1;
|
|
2721
|
+
const factor = manager.factor || 1;
|
|
2551
2722
|
const num = strToNumber(fvalue);
|
|
2552
|
-
return formatCurrency(num, locale, currency, currencyCode, digitsInfo);
|
|
2723
|
+
return formatCurrency(num / factor, locale, currency, currencyCode, digitsInfo);
|
|
2553
2724
|
}
|
|
2554
2725
|
}
|
|
2555
|
-
FactorcPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2556
|
-
FactorcPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
2557
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2726
|
+
FactorcPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FactorcPipe, deps: [{ token: LOCALE_ID }, { token: DEFAULT_CURRENCY_CODE }], target: i0.ɵɵFactoryTarget.Pipe });
|
|
2727
|
+
FactorcPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: FactorcPipe, isStandalone: true, name: "factorc" });
|
|
2728
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FactorcPipe, decorators: [{
|
|
2558
2729
|
type: Pipe,
|
|
2559
2730
|
args: [{
|
|
2560
2731
|
name: 'factorc',
|
|
@@ -2567,6 +2738,55 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImpor
|
|
|
2567
2738
|
type: Inject,
|
|
2568
2739
|
args: [DEFAULT_CURRENCY_CODE]
|
|
2569
2740
|
}] }]; } });
|
|
2741
|
+
class PFactorcPipe {
|
|
2742
|
+
constructor(_locale, _defaultCurrencyCode = 'EUR') {
|
|
2743
|
+
this._locale = _locale;
|
|
2744
|
+
this._defaultCurrencyCode = _defaultCurrencyCode;
|
|
2745
|
+
}
|
|
2746
|
+
transform(value, model, field, currencyCode, display, digitsInfo, locale) {
|
|
2747
|
+
if (!model)
|
|
2748
|
+
return null;
|
|
2749
|
+
if (!value)
|
|
2750
|
+
return null;
|
|
2751
|
+
// Use value from input, not from model
|
|
2752
|
+
const fvalue = value; // (model as any)[field];
|
|
2753
|
+
if (!isValue(fvalue)) {
|
|
2754
|
+
return null;
|
|
2755
|
+
}
|
|
2756
|
+
locale = locale || this._locale;
|
|
2757
|
+
let currency = currencyCode || this._defaultCurrencyCode;
|
|
2758
|
+
if (!display) {
|
|
2759
|
+
display = 'symbol';
|
|
2760
|
+
}
|
|
2761
|
+
if (display !== 'code') {
|
|
2762
|
+
if (display === 'symbol' || display === 'symbol-narrow') {
|
|
2763
|
+
currency = getCurrencySymbol(currency, display === 'symbol' ? 'wide' : 'narrow', locale);
|
|
2764
|
+
}
|
|
2765
|
+
else {
|
|
2766
|
+
currency = display;
|
|
2767
|
+
}
|
|
2768
|
+
}
|
|
2769
|
+
const manager = model.FM(field);
|
|
2770
|
+
const factor = manager.factor || 1;
|
|
2771
|
+
const num = strToNumber(fvalue);
|
|
2772
|
+
return formatCurrency(num / factor, locale, currency, currencyCode, digitsInfo);
|
|
2773
|
+
}
|
|
2774
|
+
}
|
|
2775
|
+
PFactorcPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: PFactorcPipe, deps: [{ token: LOCALE_ID }, { token: DEFAULT_CURRENCY_CODE }], target: i0.ɵɵFactoryTarget.Pipe });
|
|
2776
|
+
PFactorcPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: PFactorcPipe, isStandalone: true, name: "pfactorc" });
|
|
2777
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: PFactorcPipe, decorators: [{
|
|
2778
|
+
type: Pipe,
|
|
2779
|
+
args: [{
|
|
2780
|
+
name: 'pfactorc',
|
|
2781
|
+
standalone: true,
|
|
2782
|
+
}]
|
|
2783
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
2784
|
+
type: Inject,
|
|
2785
|
+
args: [LOCALE_ID]
|
|
2786
|
+
}] }, { type: undefined, decorators: [{
|
|
2787
|
+
type: Inject,
|
|
2788
|
+
args: [DEFAULT_CURRENCY_CODE]
|
|
2789
|
+
}] }]; } });
|
|
2570
2790
|
|
|
2571
2791
|
class FkselectComponent {
|
|
2572
2792
|
constructor() {
|
|
@@ -2659,9 +2879,9 @@ class FkselectComponent {
|
|
|
2659
2879
|
}));
|
|
2660
2880
|
}
|
|
2661
2881
|
}
|
|
2662
|
-
FkselectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2663
|
-
FkselectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
2664
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2882
|
+
FkselectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FkselectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2883
|
+
FkselectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", 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"] }] });
|
|
2884
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FkselectComponent, decorators: [{
|
|
2665
2885
|
type: Component,
|
|
2666
2886
|
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>" }]
|
|
2667
2887
|
}], ctorParameters: function () { return []; }, propDecorators: { model: [{
|
|
@@ -2949,15 +3169,15 @@ class M2mselectComponent {
|
|
|
2949
3169
|
}));
|
|
2950
3170
|
}
|
|
2951
3171
|
}
|
|
2952
|
-
M2mselectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2953
|
-
M2mselectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
3172
|
+
M2mselectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: M2mselectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3173
|
+
M2mselectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", 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: [
|
|
2954
3174
|
{
|
|
2955
3175
|
provide: NG_VALUE_ACCESSOR,
|
|
2956
3176
|
multi: true,
|
|
2957
3177
|
useExisting: M2mselectComponent,
|
|
2958
3178
|
},
|
|
2959
|
-
], 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"] }] });
|
|
2960
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
3179
|
+
], 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"] }] });
|
|
3180
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: M2mselectComponent, decorators: [{
|
|
2961
3181
|
type: Component,
|
|
2962
3182
|
args: [{ selector: 'data-m2mselect', providers: [
|
|
2963
3183
|
{
|
|
@@ -3142,9 +3362,9 @@ class DataMessageService {
|
|
|
3142
3362
|
this._messages$.next(out);
|
|
3143
3363
|
}
|
|
3144
3364
|
}
|
|
3145
|
-
DataMessageService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
3146
|
-
DataMessageService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
3147
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
3365
|
+
DataMessageService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DataMessageService, deps: [{ token: i0.NgZone }, { token: DATA_MESSAGE_SOUNDS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
3366
|
+
DataMessageService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DataMessageService, providedIn: "root" });
|
|
3367
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DataMessageService, decorators: [{
|
|
3148
3368
|
type: Injectable,
|
|
3149
3369
|
args: [{
|
|
3150
3370
|
providedIn: "root"
|
|
@@ -3171,6 +3391,11 @@ class DispeditComponent {
|
|
|
3171
3391
|
* If mode is inline, edit is always true.
|
|
3172
3392
|
*/
|
|
3173
3393
|
this.edit = false;
|
|
3394
|
+
/**
|
|
3395
|
+
* Can be switched to edit mode?
|
|
3396
|
+
* default : true
|
|
3397
|
+
*/
|
|
3398
|
+
this.editable = true;
|
|
3174
3399
|
/**
|
|
3175
3400
|
* Display mode
|
|
3176
3401
|
* - dd provides display / edit within a dt/dd block
|
|
@@ -3234,7 +3459,8 @@ class DispeditComponent {
|
|
|
3234
3459
|
this.realPlaceholder = this.placeholder || this.manager?.description || '';
|
|
3235
3460
|
this.realDefault = this.default;
|
|
3236
3461
|
this.save = this.save === undefined ? this.mode === 'dd' : this.save;
|
|
3237
|
-
if (!this.edit && this.mode === 'dd')
|
|
3462
|
+
if ((!this.edit && this.mode === 'dd') ||
|
|
3463
|
+
(!this.editable && this.mode === 'inline')) {
|
|
3238
3464
|
this.enableDisplayMode();
|
|
3239
3465
|
}
|
|
3240
3466
|
else {
|
|
@@ -3264,6 +3490,9 @@ class DispeditComponent {
|
|
|
3264
3490
|
* - update form control classes
|
|
3265
3491
|
*/
|
|
3266
3492
|
enableEditMode() {
|
|
3493
|
+
if (!this.editable) {
|
|
3494
|
+
return;
|
|
3495
|
+
}
|
|
3267
3496
|
this._getChoices();
|
|
3268
3497
|
this._getRealEditor();
|
|
3269
3498
|
this._setFormControl();
|
|
@@ -3555,9 +3784,9 @@ class DispeditComponent {
|
|
|
3555
3784
|
}
|
|
3556
3785
|
_setDisplayClasses() { }
|
|
3557
3786
|
}
|
|
3558
|
-
DispeditComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
3559
|
-
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"] }] });
|
|
3560
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
3787
|
+
DispeditComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DispeditComponent, deps: [{ token: DATA_DISPLAY_CONFIG, optional: true }, { token: DataMessageService }], target: i0.ɵɵFactoryTarget.Component });
|
|
3788
|
+
DispeditComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", 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"] }] });
|
|
3789
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DispeditComponent, decorators: [{
|
|
3561
3790
|
type: Component,
|
|
3562
3791
|
args: [{ selector: 'data-dispedit', standalone: true, imports: [
|
|
3563
3792
|
CommonModule,
|
|
@@ -3565,7 +3794,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImpor
|
|
|
3565
3794
|
FkselectComponent,
|
|
3566
3795
|
M2mselectComponent,
|
|
3567
3796
|
ChoicePipe,
|
|
3568
|
-
], 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"] }]
|
|
3797
|
+
], 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"] }]
|
|
3569
3798
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
3570
3799
|
type: Optional
|
|
3571
3800
|
}, {
|
|
@@ -3579,6 +3808,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImpor
|
|
|
3579
3808
|
type: Input
|
|
3580
3809
|
}], edit: [{
|
|
3581
3810
|
type: Input
|
|
3811
|
+
}], editable: [{
|
|
3812
|
+
type: Input
|
|
3582
3813
|
}], mode: [{
|
|
3583
3814
|
type: Input
|
|
3584
3815
|
}], choices: [{
|
|
@@ -3609,36 +3840,299 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImpor
|
|
|
3609
3840
|
type: Output
|
|
3610
3841
|
}] } });
|
|
3611
3842
|
|
|
3843
|
+
class FlagsComponent {
|
|
3844
|
+
constructor(_msg) {
|
|
3845
|
+
this._msg = _msg;
|
|
3846
|
+
this.field = 'flags';
|
|
3847
|
+
// FIXME: make all flags endpoint as optional parameters
|
|
3848
|
+
this.get_flags_endpoint = 'get_flags';
|
|
3849
|
+
this.edit = false;
|
|
3850
|
+
this.editable = true;
|
|
3851
|
+
this.free = false;
|
|
3852
|
+
this.create = true;
|
|
3853
|
+
this.action = false; // if set to true, use add_flag and remove_flag model actions
|
|
3854
|
+
this.curflags = [];
|
|
3855
|
+
this.txtflag = '';
|
|
3856
|
+
this.selflag = '';
|
|
3857
|
+
this.flaglist = [];
|
|
3858
|
+
this._subscriptions$ = new Subject();
|
|
3859
|
+
}
|
|
3860
|
+
ngOnDestroy() {
|
|
3861
|
+
this._subscriptions$.next();
|
|
3862
|
+
this._subscriptions$.complete();
|
|
3863
|
+
}
|
|
3864
|
+
async ngOnInit() {
|
|
3865
|
+
if (!this.flags && this.model._collection) {
|
|
3866
|
+
this.flags = this.model._collection.action(null, 'GET', this.get_flags_endpoint);
|
|
3867
|
+
}
|
|
3868
|
+
if (this.model && this.field && this.model[this.field]) {
|
|
3869
|
+
this.curflags = this.model[this.field];
|
|
3870
|
+
}
|
|
3871
|
+
else {
|
|
3872
|
+
console.warn('Model or field problem in flagsfield component');
|
|
3873
|
+
this.curflags = [];
|
|
3874
|
+
}
|
|
3875
|
+
this.ft = new FormControl('');
|
|
3876
|
+
this.fs = new FormControl('');
|
|
3877
|
+
this.fs.valueChanges
|
|
3878
|
+
.pipe(takeUntil(this._subscriptions$), debounceTime(250))
|
|
3879
|
+
.subscribe((value) => {
|
|
3880
|
+
if (value) {
|
|
3881
|
+
this.addFlag(value);
|
|
3882
|
+
}
|
|
3883
|
+
});
|
|
3884
|
+
}
|
|
3885
|
+
async addFreeFlag() {
|
|
3886
|
+
await this.addFlag(this.ft.value);
|
|
3887
|
+
}
|
|
3888
|
+
async addFlag(flag) {
|
|
3889
|
+
if (!this.flagPresent(flag)) {
|
|
3890
|
+
this.curflags.push(flag);
|
|
3891
|
+
if (this.action) {
|
|
3892
|
+
try {
|
|
3893
|
+
await firstValueFrom(this.model.action('POST', 'add_flag', { body: { flag } }));
|
|
3894
|
+
this._msg.success('Flag enregistré avec succès');
|
|
3895
|
+
}
|
|
3896
|
+
catch (e) {
|
|
3897
|
+
this._msg.error('Erreur lors de la sauvegarde', e);
|
|
3898
|
+
}
|
|
3899
|
+
}
|
|
3900
|
+
else {
|
|
3901
|
+
await this.update();
|
|
3902
|
+
}
|
|
3903
|
+
}
|
|
3904
|
+
}
|
|
3905
|
+
async update() {
|
|
3906
|
+
this.model[this.field] = this.curflags;
|
|
3907
|
+
try {
|
|
3908
|
+
await firstValueFrom(this.model.update([this.field]));
|
|
3909
|
+
this.fs.setValue('', { emitEvent: false });
|
|
3910
|
+
this.ft.setValue('', { emitEvent: false });
|
|
3911
|
+
this._msg.success('Flag enregistré avec succès');
|
|
3912
|
+
}
|
|
3913
|
+
catch (error) {
|
|
3914
|
+
this._msg.error('Erreur lors de la sauvegarde', `API Return : ${error}`, error._body);
|
|
3915
|
+
}
|
|
3916
|
+
}
|
|
3917
|
+
flagPresent(flag) {
|
|
3918
|
+
return this.curflags.findIndex((f) => flag === f) !== -1;
|
|
3919
|
+
}
|
|
3920
|
+
async removeFlag(flag) {
|
|
3921
|
+
this.curflags.splice(this.curflags.findIndex((f) => flag === f), 1);
|
|
3922
|
+
if (this.action) {
|
|
3923
|
+
try {
|
|
3924
|
+
await firstValueFrom(this.model.action('POST', 'remove_flag', { body: { flag } }));
|
|
3925
|
+
this._msg.success('Removed');
|
|
3926
|
+
}
|
|
3927
|
+
catch (e) {
|
|
3928
|
+
this._msg.error('Removing flag failed', e);
|
|
3929
|
+
}
|
|
3930
|
+
}
|
|
3931
|
+
else {
|
|
3932
|
+
await this.update();
|
|
3933
|
+
}
|
|
3934
|
+
}
|
|
3935
|
+
async toggleEdit() {
|
|
3936
|
+
if (this.editable) {
|
|
3937
|
+
if (!this.edit) {
|
|
3938
|
+
this.flaglist = await firstValueFrom(this.flags);
|
|
3939
|
+
this.edit = true;
|
|
3940
|
+
}
|
|
3941
|
+
else {
|
|
3942
|
+
this.edit = false;
|
|
3943
|
+
}
|
|
3944
|
+
}
|
|
3945
|
+
else {
|
|
3946
|
+
this.edit = false;
|
|
3947
|
+
}
|
|
3948
|
+
}
|
|
3949
|
+
}
|
|
3950
|
+
FlagsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FlagsComponent, deps: [{ token: DataMessageService }], target: i0.ɵɵFactoryTarget.Component });
|
|
3951
|
+
FlagsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", 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"] }] });
|
|
3952
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FlagsComponent, decorators: [{
|
|
3953
|
+
type: Component,
|
|
3954
|
+
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>" }]
|
|
3955
|
+
}], ctorParameters: function () { return [{ type: DataMessageService }]; }, propDecorators: { model: [{
|
|
3956
|
+
type: Input
|
|
3957
|
+
}], field: [{
|
|
3958
|
+
type: Input
|
|
3959
|
+
}], get_flags_endpoint: [{
|
|
3960
|
+
type: Input
|
|
3961
|
+
}], edit: [{
|
|
3962
|
+
type: Input
|
|
3963
|
+
}], editable: [{
|
|
3964
|
+
type: Input
|
|
3965
|
+
}], flags: [{
|
|
3966
|
+
type: Input
|
|
3967
|
+
}], free: [{
|
|
3968
|
+
type: Input
|
|
3969
|
+
}], create: [{
|
|
3970
|
+
type: Input
|
|
3971
|
+
}], action: [{
|
|
3972
|
+
type: Input
|
|
3973
|
+
}] } });
|
|
3974
|
+
|
|
3975
|
+
class RicheditComponent {
|
|
3976
|
+
constructor() {
|
|
3977
|
+
this.editable = true;
|
|
3978
|
+
this.edit = true;
|
|
3979
|
+
this.mode = 'dd';
|
|
3980
|
+
/**
|
|
3981
|
+
* Hide label (for inline forms)
|
|
3982
|
+
*/
|
|
3983
|
+
this.hideLabel = false;
|
|
3984
|
+
this.toolbar = [
|
|
3985
|
+
['bold', 'italic'],
|
|
3986
|
+
['underline', 'strike'],
|
|
3987
|
+
['code', 'blockquote'],
|
|
3988
|
+
['ordered_list', 'bullet_list'],
|
|
3989
|
+
[{ heading: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] }],
|
|
3990
|
+
['link'],
|
|
3991
|
+
['text_color', 'background_color'],
|
|
3992
|
+
['align_left', 'align_center', 'align_right', 'align_justify'],
|
|
3993
|
+
];
|
|
3994
|
+
this.html = '';
|
|
3995
|
+
this.fc = new FormControl('');
|
|
3996
|
+
}
|
|
3997
|
+
ngOnInit() {
|
|
3998
|
+
this.editor = new Editor();
|
|
3999
|
+
this.manager = this.model?.FM(this.field);
|
|
4000
|
+
this.required = this.manager?.required || false;
|
|
4001
|
+
if (this.model) {
|
|
4002
|
+
this.fc.setValue(this.model[this.field] || '', {
|
|
4003
|
+
emitEvent: false,
|
|
4004
|
+
});
|
|
4005
|
+
}
|
|
4006
|
+
if (this.edit) {
|
|
4007
|
+
this.fc.enable();
|
|
4008
|
+
}
|
|
4009
|
+
else {
|
|
4010
|
+
this.fc.disable();
|
|
4011
|
+
}
|
|
4012
|
+
this.fc.valueChanges.subscribe((v) => console.log(v));
|
|
4013
|
+
}
|
|
4014
|
+
// make sure to destory the editor
|
|
4015
|
+
ngOnDestroy() {
|
|
4016
|
+
this.editor.destroy();
|
|
4017
|
+
}
|
|
4018
|
+
toggleEdit() {
|
|
4019
|
+
if (this.editable) {
|
|
4020
|
+
if (this.edit) {
|
|
4021
|
+
this.fc.disable();
|
|
4022
|
+
this.edit = false;
|
|
4023
|
+
}
|
|
4024
|
+
else {
|
|
4025
|
+
this.fc.enable();
|
|
4026
|
+
this.edit = true;
|
|
4027
|
+
}
|
|
4028
|
+
}
|
|
4029
|
+
else {
|
|
4030
|
+
this.fc.disable();
|
|
4031
|
+
this.edit = false;
|
|
4032
|
+
}
|
|
4033
|
+
}
|
|
4034
|
+
async save() {
|
|
4035
|
+
this.model.setFV(this.field, this.fc.value);
|
|
4036
|
+
if (this.mode === 'dd') {
|
|
4037
|
+
await firstValueFrom(this.model.save({ updateModel: true }));
|
|
4038
|
+
}
|
|
4039
|
+
}
|
|
4040
|
+
}
|
|
4041
|
+
RicheditComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: RicheditComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4042
|
+
RicheditComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: RicheditComponent, isStandalone: true, selector: "data-richedit", inputs: { model: "model", field: "field", editable: "editable", edit: "edit", mode: "mode", hideLabel: "hideLabel" }, 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\" (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"] }] });
|
|
4043
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: RicheditComponent, decorators: [{
|
|
4044
|
+
type: Component,
|
|
4045
|
+
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\" (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>" }]
|
|
4046
|
+
}], propDecorators: { model: [{
|
|
4047
|
+
type: Input
|
|
4048
|
+
}], field: [{
|
|
4049
|
+
type: Input
|
|
4050
|
+
}], editable: [{
|
|
4051
|
+
type: Input
|
|
4052
|
+
}], edit: [{
|
|
4053
|
+
type: Input
|
|
4054
|
+
}], mode: [{
|
|
4055
|
+
type: Input
|
|
4056
|
+
}], hideLabel: [{
|
|
4057
|
+
type: Input
|
|
4058
|
+
}] } });
|
|
4059
|
+
|
|
3612
4060
|
class SafeDeleteComponent {
|
|
3613
|
-
constructor(_ofc) {
|
|
4061
|
+
constructor(_ofc, _msgs) {
|
|
3614
4062
|
this._ofc = _ofc;
|
|
4063
|
+
this._msgs = _msgs;
|
|
3615
4064
|
this.checks = {};
|
|
4065
|
+
this.messages = {};
|
|
3616
4066
|
this.deleted = new EventEmitter();
|
|
3617
4067
|
this.display = 'button';
|
|
3618
4068
|
}
|
|
3619
4069
|
async checkDelete(model) {
|
|
3620
|
-
|
|
3621
|
-
|
|
3622
|
-
|
|
3623
|
-
|
|
4070
|
+
const service = this.service || this.model._collection;
|
|
4071
|
+
if (service) {
|
|
4072
|
+
try {
|
|
4073
|
+
this.result = await firstValueFrom(service.delete(this.model, { params: { doit: 'no' } }));
|
|
4074
|
+
this.ofc = this._ofc.open(this._dialogRef, {
|
|
4075
|
+
position: 'end',
|
|
4076
|
+
});
|
|
4077
|
+
}
|
|
4078
|
+
catch (e) {
|
|
4079
|
+
console.error(e);
|
|
4080
|
+
if (this.messages.error) {
|
|
4081
|
+
this._msgs.error(this.messages.error, e.error?.message || e.message || '');
|
|
4082
|
+
}
|
|
4083
|
+
}
|
|
4084
|
+
}
|
|
3624
4085
|
}
|
|
3625
4086
|
async reallyDelete() {
|
|
3626
|
-
|
|
3627
|
-
|
|
3628
|
-
|
|
4087
|
+
if (this.actionFn) {
|
|
4088
|
+
const res = await this.actionFn(this.model);
|
|
4089
|
+
if (res.success && this.messages.success) {
|
|
4090
|
+
this._msgs.success(this.messages.success);
|
|
4091
|
+
}
|
|
4092
|
+
else if (!res.success && this.messages.error) {
|
|
4093
|
+
this._msgs.error(this.messages.error);
|
|
4094
|
+
}
|
|
4095
|
+
this.ofc?.close();
|
|
4096
|
+
if (res.success) {
|
|
4097
|
+
this.deleted.emit(this.result);
|
|
4098
|
+
}
|
|
4099
|
+
}
|
|
4100
|
+
else {
|
|
4101
|
+
const service = this.service || this.model._collection;
|
|
4102
|
+
if (service) {
|
|
4103
|
+
try {
|
|
4104
|
+
this.result = await firstValueFrom(service.delete(this.model, { params: { doit: 'really' } }));
|
|
4105
|
+
if (this.messages.success) {
|
|
4106
|
+
this._msgs.success(this.messages.success);
|
|
4107
|
+
}
|
|
4108
|
+
this.ofc?.close();
|
|
4109
|
+
this.deleted.emit(this.result);
|
|
4110
|
+
}
|
|
4111
|
+
catch (e) {
|
|
4112
|
+
console.error(e);
|
|
4113
|
+
if (this.messages.error) {
|
|
4114
|
+
this._msgs.error(this.messages.error, e.error?.message || e.message || '');
|
|
4115
|
+
}
|
|
4116
|
+
}
|
|
4117
|
+
}
|
|
4118
|
+
}
|
|
3629
4119
|
}
|
|
3630
4120
|
}
|
|
3631
|
-
SafeDeleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
3632
|
-
SafeDeleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
3633
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
4121
|
+
SafeDeleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: SafeDeleteComponent, deps: [{ token: i2$1.NgbOffcanvas }, { token: DataMessageService }], target: i0.ɵɵFactoryTarget.Component });
|
|
4122
|
+
SafeDeleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", 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 }] });
|
|
4123
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: SafeDeleteComponent, decorators: [{
|
|
3634
4124
|
type: Component,
|
|
3635
|
-
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==='
|
|
3636
|
-
}], ctorParameters: function () { return [{ type: i2$1.NgbOffcanvas }]; }, propDecorators: { model: [{
|
|
4125
|
+
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>" }]
|
|
4126
|
+
}], ctorParameters: function () { return [{ type: i2$1.NgbOffcanvas }, { type: DataMessageService }]; }, propDecorators: { model: [{
|
|
3637
4127
|
type: Input
|
|
3638
4128
|
}], service: [{
|
|
3639
4129
|
type: Input
|
|
4130
|
+
}], actionFn: [{
|
|
4131
|
+
type: Input
|
|
3640
4132
|
}], checks: [{
|
|
3641
4133
|
type: Input
|
|
4134
|
+
}], messages: [{
|
|
4135
|
+
type: Input
|
|
3642
4136
|
}], deleted: [{
|
|
3643
4137
|
type: Output
|
|
3644
4138
|
}], display: [{
|
|
@@ -3973,6 +4467,15 @@ const integerField = (updates = {}) => genericDataField(updates, 'integerField',
|
|
|
3973
4467
|
const floatField = (updates = {}) => genericDataField(updates, 'floatField', FloatFieldManager);
|
|
3974
4468
|
const decimalField = (updates = { factor: 100 }) => genericDataField(updates, 'decimalField', DecimalFieldManager);
|
|
3975
4469
|
|
|
4470
|
+
class ComputedFieldManager extends BaseFieldManager {
|
|
4471
|
+
constructor() {
|
|
4472
|
+
super(...arguments);
|
|
4473
|
+
this.computed = true;
|
|
4474
|
+
}
|
|
4475
|
+
fromJson(data, coll) { }
|
|
4476
|
+
}
|
|
4477
|
+
const computedField = (meta = {}) => genericDataField(meta, 'computedField', ComputedFieldManager);
|
|
4478
|
+
|
|
3976
4479
|
class MessageZoneComponent {
|
|
3977
4480
|
constructor(messages) {
|
|
3978
4481
|
this.messages = messages;
|
|
@@ -3991,8 +4494,8 @@ class MessageZoneComponent {
|
|
|
3991
4494
|
this._subscriptions$.complete();
|
|
3992
4495
|
}
|
|
3993
4496
|
}
|
|
3994
|
-
MessageZoneComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
3995
|
-
MessageZoneComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
4497
|
+
MessageZoneComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: MessageZoneComponent, deps: [{ token: DataMessageService }], target: i0.ɵɵFactoryTarget.Component });
|
|
4498
|
+
MessageZoneComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", 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: [
|
|
3996
4499
|
trigger('dispStatus', [
|
|
3997
4500
|
transition('void => *', [
|
|
3998
4501
|
style({ opacity: 0 }),
|
|
@@ -4004,7 +4507,7 @@ MessageZoneComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", v
|
|
|
4004
4507
|
]),
|
|
4005
4508
|
]),
|
|
4006
4509
|
] });
|
|
4007
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
4510
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: MessageZoneComponent, decorators: [{
|
|
4008
4511
|
type: Component,
|
|
4009
4512
|
args: [{ selector: 'data-message-zone', standalone: true, imports: [CommonModule], providers: [provideAnimations()], animations: [
|
|
4010
4513
|
trigger('dispStatus', [
|
|
@@ -4470,9 +4973,9 @@ class NgFileDropDirective {
|
|
|
4470
4973
|
this.uploadOutput.emit(event);
|
|
4471
4974
|
}
|
|
4472
4975
|
}
|
|
4473
|
-
NgFileDropDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
4474
|
-
NgFileDropDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
4475
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
4976
|
+
NgFileDropDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: NgFileDropDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
4977
|
+
NgFileDropDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", 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 });
|
|
4978
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: NgFileDropDirective, decorators: [{
|
|
4476
4979
|
type: Directive,
|
|
4477
4980
|
args: [{
|
|
4478
4981
|
selector: "[dataFileDrop]"
|
|
@@ -4527,9 +5030,9 @@ class NgFileSelectDirective {
|
|
|
4527
5030
|
}
|
|
4528
5031
|
}
|
|
4529
5032
|
}
|
|
4530
|
-
NgFileSelectDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
4531
|
-
NgFileSelectDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
4532
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
5033
|
+
NgFileSelectDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: NgFileSelectDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
5034
|
+
NgFileSelectDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: NgFileSelectDirective, selector: "[dataFileSelect]", inputs: { options: "options", uploadInput: "uploadInput" }, outputs: { uploadOutput: "uploadOutput" }, ngImport: i0 });
|
|
5035
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: NgFileSelectDirective, decorators: [{
|
|
4533
5036
|
type: Directive,
|
|
4534
5037
|
args: [{
|
|
4535
5038
|
selector: "[dataFileSelect]"
|
|
@@ -4544,10 +5047,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImpor
|
|
|
4544
5047
|
|
|
4545
5048
|
class NgxUploaderModule {
|
|
4546
5049
|
}
|
|
4547
|
-
NgxUploaderModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
4548
|
-
NgxUploaderModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
4549
|
-
NgxUploaderModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
4550
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
5050
|
+
NgxUploaderModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: NgxUploaderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
5051
|
+
NgxUploaderModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: NgxUploaderModule, declarations: [NgFileDropDirective, NgFileSelectDirective], exports: [NgFileDropDirective, NgFileSelectDirective] });
|
|
5052
|
+
NgxUploaderModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: NgxUploaderModule });
|
|
5053
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: NgxUploaderModule, decorators: [{
|
|
4551
5054
|
type: NgModule,
|
|
4552
5055
|
args: [{
|
|
4553
5056
|
declarations: [NgFileDropDirective, NgFileSelectDirective],
|
|
@@ -4581,10 +5084,12 @@ class Jwt {
|
|
|
4581
5084
|
const DATA_AUTH_PARAMS = new InjectionToken('data.auth.params');
|
|
4582
5085
|
const DATA_AUTH_USER_SERVICE = new InjectionToken('data.auth.user.service');
|
|
4583
5086
|
let AuthServiceBase = class AuthServiceBase {
|
|
4584
|
-
constructor(userService, _params, _http) {
|
|
5087
|
+
constructor(userService, _params, _router, _http, _msgs) {
|
|
4585
5088
|
this.userService = userService;
|
|
4586
5089
|
this._params = _params;
|
|
5090
|
+
this._router = _router;
|
|
4587
5091
|
this._http = _http;
|
|
5092
|
+
this._msgs = _msgs;
|
|
4588
5093
|
this._user$ = new ReplaySubject(1);
|
|
4589
5094
|
this.autoLogin();
|
|
4590
5095
|
}
|
|
@@ -4661,6 +5166,7 @@ let AuthServiceBase = class AuthServiceBase {
|
|
|
4661
5166
|
}
|
|
4662
5167
|
}
|
|
4663
5168
|
refresh() {
|
|
5169
|
+
console.log('service token refresh');
|
|
4664
5170
|
if (!this._token.refresh) {
|
|
4665
5171
|
this.logout();
|
|
4666
5172
|
return of(null);
|
|
@@ -4669,12 +5175,20 @@ let AuthServiceBase = class AuthServiceBase {
|
|
|
4669
5175
|
.post(this.refreshUrl, {
|
|
4670
5176
|
refresh: this._token.refresh,
|
|
4671
5177
|
})
|
|
4672
|
-
.pipe(
|
|
4673
|
-
|
|
4674
|
-
|
|
4675
|
-
|
|
4676
|
-
|
|
4677
|
-
|
|
5178
|
+
.pipe(catchError((err, caught) => {
|
|
5179
|
+
console.error('Token refresh error', err, caught);
|
|
5180
|
+
this.logout();
|
|
5181
|
+
this._msgs.warning('Vous devez vous reconnecter');
|
|
5182
|
+
this._router.navigate(this._params.loginRoute);
|
|
5183
|
+
return of(null);
|
|
5184
|
+
}), tap((tok) => {
|
|
5185
|
+
if (tok) {
|
|
5186
|
+
this._token = new Jwt({
|
|
5187
|
+
access: tok.access,
|
|
5188
|
+
refresh: this._token.refresh,
|
|
5189
|
+
});
|
|
5190
|
+
this.saveAuth();
|
|
5191
|
+
}
|
|
4678
5192
|
}));
|
|
4679
5193
|
}
|
|
4680
5194
|
};
|
|
@@ -4698,14 +5212,21 @@ class AuthInterceptor {
|
|
|
4698
5212
|
if (!req.url.startsWith(this._apiUrl)) {
|
|
4699
5213
|
return next.handle(req);
|
|
4700
5214
|
}
|
|
5215
|
+
if (req.url.startsWith(this._auth.refreshUrl) ||
|
|
5216
|
+
req.url.startsWith(this._auth.loginUrl)) {
|
|
5217
|
+
return next.handle(req);
|
|
5218
|
+
}
|
|
4701
5219
|
if (!this._auth.isAnonymous) {
|
|
4702
5220
|
req = this._addToken(req, this._auth.accessToken);
|
|
4703
5221
|
}
|
|
4704
5222
|
return next.handle(req).pipe(catchError((error) => {
|
|
5223
|
+
console.log('Catched http error', error);
|
|
4705
5224
|
if (error instanceof HttpErrorResponse && error.status === 401) {
|
|
5225
|
+
console.log('Passing to handle 401');
|
|
4706
5226
|
return this._handle401Error(req, next);
|
|
4707
5227
|
}
|
|
4708
5228
|
else {
|
|
5229
|
+
console.log('throwing error');
|
|
4709
5230
|
return throwError(error);
|
|
4710
5231
|
}
|
|
4711
5232
|
}));
|
|
@@ -4714,6 +5235,7 @@ class AuthInterceptor {
|
|
|
4714
5235
|
if (!this._isRefreshing) {
|
|
4715
5236
|
this._isRefreshing = true;
|
|
4716
5237
|
this._refreshTokenSubject.next(null);
|
|
5238
|
+
console.log('refreshing token');
|
|
4717
5239
|
return this._auth.refresh().pipe(switchMap((token) => {
|
|
4718
5240
|
if (token === null) {
|
|
4719
5241
|
return throwError(() => new HttpErrorResponse({
|
|
@@ -4731,6 +5253,7 @@ class AuthInterceptor {
|
|
|
4731
5253
|
}));
|
|
4732
5254
|
}
|
|
4733
5255
|
else {
|
|
5256
|
+
console.log('piping to refresh token subject');
|
|
4734
5257
|
return this._refreshTokenSubject.pipe(filter((token) => token != null), take(1), switchMap((token) => next.handle(this._addToken(request, token.access))));
|
|
4735
5258
|
}
|
|
4736
5259
|
}
|
|
@@ -4742,9 +5265,9 @@ class AuthInterceptor {
|
|
|
4742
5265
|
});
|
|
4743
5266
|
}
|
|
4744
5267
|
}
|
|
4745
|
-
AuthInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
4746
|
-
AuthInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
4747
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
5268
|
+
AuthInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: AuthInterceptor, deps: [{ token: DATA_AUTH_SERVICE }, { token: DATA_API_URL }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
5269
|
+
AuthInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: AuthInterceptor, providedIn: 'root' });
|
|
5270
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: AuthInterceptor, decorators: [{
|
|
4748
5271
|
type: Injectable,
|
|
4749
5272
|
args: [{
|
|
4750
5273
|
providedIn: 'root',
|
|
@@ -4937,9 +5460,9 @@ class BreadcrumbComponent {
|
|
|
4937
5460
|
return '';
|
|
4938
5461
|
}
|
|
4939
5462
|
}
|
|
4940
|
-
BreadcrumbComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
4941
|
-
BreadcrumbComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
4942
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
5463
|
+
BreadcrumbComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: BreadcrumbComponent, deps: [{ token: i1$2.Router }, { token: i1$2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
|
|
5464
|
+
BreadcrumbComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", 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"] }] });
|
|
5465
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: BreadcrumbComponent, decorators: [{
|
|
4943
5466
|
type: Component,
|
|
4944
5467
|
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>" }]
|
|
4945
5468
|
}], ctorParameters: function () { return [{ type: i1$2.Router }, { type: i1$2.ActivatedRoute }]; }, propDecorators: { data: [{
|
|
@@ -4955,9 +5478,11 @@ class NavDriver {
|
|
|
4955
5478
|
this.defaults = defaults;
|
|
4956
5479
|
this.save = save;
|
|
4957
5480
|
this._current = this.defaults;
|
|
4958
|
-
|
|
4959
|
-
|
|
4960
|
-
|
|
5481
|
+
if (this.save) {
|
|
5482
|
+
const value = this._parent.load(this.name);
|
|
5483
|
+
if (value !== null) {
|
|
5484
|
+
this._current = value;
|
|
5485
|
+
}
|
|
4961
5486
|
}
|
|
4962
5487
|
}
|
|
4963
5488
|
get current() {
|
|
@@ -4966,14 +5491,17 @@ class NavDriver {
|
|
|
4966
5491
|
set current(value) {
|
|
4967
5492
|
this._current = value;
|
|
4968
5493
|
this.lastActive = new Date();
|
|
4969
|
-
this.
|
|
5494
|
+
if (this.save) {
|
|
5495
|
+
this._parent.save();
|
|
5496
|
+
}
|
|
4970
5497
|
}
|
|
4971
5498
|
get value() {
|
|
4972
5499
|
return { name: this.name, value: this._current };
|
|
4973
5500
|
}
|
|
4974
5501
|
}
|
|
4975
5502
|
class TabMemoryService {
|
|
4976
|
-
constructor() {
|
|
5503
|
+
constructor(_route) {
|
|
5504
|
+
this._route = _route;
|
|
4977
5505
|
this.tabMem = {};
|
|
4978
5506
|
}
|
|
4979
5507
|
static targetToString(target) {
|
|
@@ -4983,11 +5511,14 @@ class TabMemoryService {
|
|
|
4983
5511
|
}
|
|
4984
5512
|
return out;
|
|
4985
5513
|
}
|
|
4986
|
-
memFor(target, defaults, save = true) {
|
|
5514
|
+
memFor(target, defaults, save = true, fragment) {
|
|
4987
5515
|
const tname = TabMemoryService.targetToString(target);
|
|
4988
5516
|
if (this.tabMem[tname] === undefined) {
|
|
4989
5517
|
this.tabMem[tname] = new NavDriver(this, tname, defaults, save);
|
|
4990
5518
|
}
|
|
5519
|
+
if (fragment) {
|
|
5520
|
+
this.tabMem[tname].current = fragment;
|
|
5521
|
+
}
|
|
4991
5522
|
return this.tabMem[tname];
|
|
4992
5523
|
}
|
|
4993
5524
|
save() {
|
|
@@ -5008,14 +5539,14 @@ class TabMemoryService {
|
|
|
5008
5539
|
return null;
|
|
5009
5540
|
}
|
|
5010
5541
|
}
|
|
5011
|
-
TabMemoryService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
5012
|
-
TabMemoryService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
5013
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
5542
|
+
TabMemoryService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: TabMemoryService, deps: [{ token: i1$2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
5543
|
+
TabMemoryService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: TabMemoryService, providedIn: 'root' });
|
|
5544
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: TabMemoryService, decorators: [{
|
|
5014
5545
|
type: Injectable,
|
|
5015
5546
|
args: [{
|
|
5016
5547
|
providedIn: 'root',
|
|
5017
5548
|
}]
|
|
5018
|
-
}], ctorParameters: function () { return []; } });
|
|
5549
|
+
}], ctorParameters: function () { return [{ type: i1$2.ActivatedRoute }]; } });
|
|
5019
5550
|
|
|
5020
5551
|
const slugify = (str) => {
|
|
5021
5552
|
str = str.replace(/^\s+|\s+$/g, ''); // trim
|
|
@@ -5033,6 +5564,71 @@ const slugify = (str) => {
|
|
|
5033
5564
|
return str;
|
|
5034
5565
|
};
|
|
5035
5566
|
|
|
5567
|
+
class UpdateService {
|
|
5568
|
+
constructor(appRef, swUpdate) {
|
|
5569
|
+
this.appRef = appRef;
|
|
5570
|
+
this.swUpdate = swUpdate;
|
|
5571
|
+
this.stable = false;
|
|
5572
|
+
this._available$ = new ReplaySubject(1);
|
|
5573
|
+
this._available$.next(false);
|
|
5574
|
+
const appIsStable$ = this.appRef.isStable
|
|
5575
|
+
.pipe(first((isStable) => isStable))
|
|
5576
|
+
.pipe(tap(() => console.log('App is stable')));
|
|
5577
|
+
const checkInterval$ = timer(10 * 1000, 5 * 60 * 1000);
|
|
5578
|
+
const checkWhenStable$ = merge(appIsStable$, checkInterval$);
|
|
5579
|
+
const updatesAvailable = swUpdate.versionUpdates.pipe(tap((evt) => console.log('Version updates event', evt)), filter((evt) => evt.type === 'VERSION_READY'), map((evt) => ({
|
|
5580
|
+
type: 'UPDATE_AVAILABLE',
|
|
5581
|
+
current: evt.currentVersion,
|
|
5582
|
+
available: evt.latestVersion,
|
|
5583
|
+
})));
|
|
5584
|
+
updatesAvailable.subscribe(async (evt) => {
|
|
5585
|
+
this._available$.next(true);
|
|
5586
|
+
});
|
|
5587
|
+
checkWhenStable$.subscribe(async () => {
|
|
5588
|
+
this.stable = true;
|
|
5589
|
+
try {
|
|
5590
|
+
console.log('Checking for update');
|
|
5591
|
+
const res = await swUpdate.checkForUpdate();
|
|
5592
|
+
console.log('Check for update result', res);
|
|
5593
|
+
}
|
|
5594
|
+
catch (e) {
|
|
5595
|
+
console.warn('No service worker');
|
|
5596
|
+
}
|
|
5597
|
+
});
|
|
5598
|
+
}
|
|
5599
|
+
get available$() {
|
|
5600
|
+
return this._available$.asObservable();
|
|
5601
|
+
}
|
|
5602
|
+
activate() {
|
|
5603
|
+
this._available$.next(false);
|
|
5604
|
+
console.log('RELOADING FULL PAGE');
|
|
5605
|
+
document.location.reload();
|
|
5606
|
+
}
|
|
5607
|
+
dismiss() {
|
|
5608
|
+
this._available$.next(false);
|
|
5609
|
+
}
|
|
5610
|
+
}
|
|
5611
|
+
UpdateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: UpdateService, deps: [{ token: i0.ApplicationRef }, { token: i1$3.SwUpdate }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
5612
|
+
UpdateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: UpdateService, providedIn: 'root' });
|
|
5613
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: UpdateService, decorators: [{
|
|
5614
|
+
type: Injectable,
|
|
5615
|
+
args: [{
|
|
5616
|
+
providedIn: 'root',
|
|
5617
|
+
}]
|
|
5618
|
+
}], ctorParameters: function () { return [{ type: i0.ApplicationRef }, { type: i1$3.SwUpdate }]; } });
|
|
5619
|
+
|
|
5620
|
+
class UpdateComponent {
|
|
5621
|
+
constructor(update) {
|
|
5622
|
+
this.update = update;
|
|
5623
|
+
}
|
|
5624
|
+
}
|
|
5625
|
+
UpdateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: UpdateComponent, deps: [{ token: UpdateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
5626
|
+
UpdateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", 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" }] });
|
|
5627
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: UpdateComponent, decorators: [{
|
|
5628
|
+
type: Component,
|
|
5629
|
+
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"] }]
|
|
5630
|
+
}], ctorParameters: function () { return [{ type: UpdateService }]; } });
|
|
5631
|
+
|
|
5036
5632
|
/*
|
|
5037
5633
|
* Public API Surface of data
|
|
5038
5634
|
*/
|
|
@@ -5041,5 +5637,5 @@ const slugify = (str) => {
|
|
|
5041
5637
|
* Generated bundle index. Do not edit.
|
|
5042
5638
|
*/
|
|
5043
5639
|
|
|
5044
|
-
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, 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 };
|
|
5640
|
+
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 };
|
|
5045
5641
|
//# sourceMappingURL=solidev-data.mjs.map
|