@smartsoft001/crud-shell-angular 1.1.748 → 1.1.752
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/+state/crud.facade.mjs +1 -1
- package/esm2020/lib/components/components.module.mjs +8 -4
- package/esm2020/lib/components/multiselect/multiselect.component.mjs +11 -8
- package/esm2020/lib/crud.config.mjs +1 -1
- package/esm2020/lib/pages/item/item.component.mjs +2 -2
- package/esm2020/lib/pages/list/list.component.mjs +21 -14
- package/fesm2015/smartsoft001-crud-shell-angular.mjs +34 -21
- package/fesm2015/smartsoft001-crud-shell-angular.mjs.map +1 -1
- package/fesm2020/smartsoft001-crud-shell-angular.mjs +35 -22
- package/fesm2020/smartsoft001-crud-shell-angular.mjs.map +1 -1
- package/lib/+state/crud.facade.d.ts +1 -1
- package/lib/+state/crud.facade.d.ts.map +1 -1
- package/lib/components/components.module.d.ts +2 -1
- package/lib/components/components.module.d.ts.map +1 -1
- package/lib/components/multiselect/multiselect.component.d.ts +4 -3
- package/lib/components/multiselect/multiselect.component.d.ts.map +1 -1
- package/lib/crud.config.d.ts +2 -1
- package/lib/crud.config.d.ts.map +1 -1
- package/lib/pages/list/list.component.d.ts +1 -0
- package/lib/pages/list/list.component.d.ts.map +1 -1
- package/package.json +6 -6
|
@@ -17,8 +17,10 @@ import { FormsModule, FormControl, FormGroup, FormArray } from '@angular/forms';
|
|
|
17
17
|
import * as i3$1 from '@angular/common';
|
|
18
18
|
import { CommonModule } from '@angular/common';
|
|
19
19
|
import * as i4 from '@ngx-translate/core';
|
|
20
|
-
import { Subscription, combineLatest, forkJoin, of, BehaviorSubject } from 'rxjs';
|
|
20
|
+
import { Subscription, combineLatest, forkJoin, of, BehaviorSubject, Subject } from 'rxjs';
|
|
21
21
|
import * as _ from 'lodash';
|
|
22
|
+
import * as i6 from 'ng-dynamic-component';
|
|
23
|
+
import { DynamicIoModule } from 'ng-dynamic-component';
|
|
22
24
|
import * as i2$1 from '@angular/common/http';
|
|
23
25
|
import 'reflect-metadata';
|
|
24
26
|
import * as i1$2 from '@angular/router';
|
|
@@ -885,11 +887,13 @@ class MultiselectComponent {
|
|
|
885
887
|
},
|
|
886
888
|
confirm: true
|
|
887
889
|
};
|
|
890
|
+
this.showForm = false;
|
|
888
891
|
this.list$ = this.facade.multiSelected$.pipe(tap(list => {
|
|
889
892
|
this.lock = true;
|
|
890
893
|
const model = new this.config.type();
|
|
891
894
|
const fieldsWithOptions = getModelFieldsWithOptions(model)
|
|
892
895
|
.filter(f => f.options.update?.multi);
|
|
896
|
+
this.showForm = !!fieldsWithOptions.length;
|
|
893
897
|
fieldsWithOptions.forEach(({ key }) => {
|
|
894
898
|
const uniques = _.uniq(list.map(i => i[key]));
|
|
895
899
|
if (uniques.length === 1) {
|
|
@@ -913,12 +917,12 @@ class MultiselectComponent {
|
|
|
913
917
|
ngOnInit() {
|
|
914
918
|
}
|
|
915
919
|
}
|
|
916
|
-
/** @nocollapse */ /** @nocollapse */ MultiselectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: MultiselectComponent, deps: [{ token: CrudFacade }, { token:
|
|
917
|
-
/** @nocollapse */ /** @nocollapse */ MultiselectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: MultiselectComponent, selector: "smart-crud-multiselect", ngImport: i0, template: "<ng-container *ngIf=\"list$ | async; let list\">\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"onClose()\">\n <ion-icon slot=\"icon-only\" name=\"close\"> </ion-icon>\n </ion-button>\n </ion-buttons>\n <ion-title>{{ 'selected' | translate }}: {{ list?.length }}</ion-title>\n </ion-toolbar>\n </ion-header>\n\n <div *ngIf=\"item\">\n <smart-form [options]=\"item | smartFormOptions : 'multiUpdate' : config.type\" (valuePartialChange)=\"onPartialChange($event, list)\" (validChange)=\"onValidChange($event)\"></smart-form>\n\n <smart-button style=\"float: right\" [disabled]=\"lock || !valid\" [options]=\"buttonOptions\">{{ 'change' | translate }}</smart-button>\n </div>\n</ng-container>", styles: [":host ion-toolbar{--background: linear-gradient(33deg, var(--ion-color-light), var(--ion-color-light-shade));--color: var(--ion-color-dark)}@media only screen and (max-width: 992px){:host ion-toolbar{--background: linear-gradient(33deg, var(--ion-color-primary), var(--ion-color-tertiary));--color: var(--ion-color-light)}}@media only screen and (max-width: 420px){:host ion-toolbar{--background: linear-gradient(33deg, var(--ion-color-primary), var(--ion-color-tertiary));--color: var(--ion-color-light)}}:host ion-toolbar.ios{height:4.6rem;--background: linear-gradient(33deg, var(--ion-color-light), var(--ion-color-light-shade));--color: var(--ion-color-dark)}@media only screen and (max-width: 992px){:host ion-toolbar.ios{--background: linear-gradient(33deg, var(--ion-color-primary), var(--ion-color-tertiary));--color: var(--ion-color-light)}:host ion-toolbar.ios ion-title{text-align:left;padding-left:5.2rem}:host ion-toolbar.ios ion-icon{color:var(--ion-color-light)}}@media only screen and (max-width: 420px){:host ion-toolbar.ios{--background: linear-gradient(33deg, var(--ion-color-primary), var(--ion-color-tertiary));--color: var(--ion-color-light)}:host ion-toolbar.ios ion-title{text-align:left;padding-left:5.2rem}:host ion-toolbar.ios ion-icon{color:var(--ion-color-light)}}.modal-wrapper :host ion-toolbar.ios{--background: linear-gradient(33deg, var(--ion-color-light), var(--ion-color-light-shade));--color: var(--ion-color-dark)}@media only screen and (max-width: 992px){.modal-wrapper :host ion-toolbar.ios{--background: linear-gradient(33deg, var(--ion-color-light), var(--ion-color-light-shade));color:var(--ion-color-dark)}.modal-wrapper :host ion-toolbar.ios ion-title{text-align:left;padding-left:1.2rem}.modal-wrapper :host ion-toolbar.ios ion-icon{color:var(--ion-color-dark)}.modal-wrapper :host ion-toolbar.ios ion-buttons{margin:0}}@media only screen and (max-width: 420px){.modal-wrapper :host ion-toolbar.ios{--background: linear-gradient(33deg, var(--ion-color-light), var(--ion-color-light-shade));color:var(--ion-color-dark)}.modal-wrapper :host ion-toolbar.ios ion-title{text-align:left;padding-left:1.2rem}.modal-wrapper :host ion-toolbar.ios ion-icon{color:var(--ion-color-dark)}.modal-wrapper :host ion-toolbar.ios ion-buttons{margin:0}}:host ion-toolbar ion-menu-button{color:var(--ion-color-light)}:host ion-toolbar ion-buttons.ios{height:var(--smart-button-height);margin:0}\n"], components: [{ type: i1$1.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { type: i1$1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { type: i1$1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { type: i1$1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { type: i1$1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { type: i1$1.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { type: i3.FormComponent, selector: "smart-form", inputs: ["options"], outputs: ["invokeSubmit", "valueChange", "valuePartialChange", "validChange"] }, { type: i3.ButtonComponent, selector: "smart-button", inputs: ["options", "disabled"] }], directives: [{ type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i3$1.AsyncPipe, "translate": i4.TranslatePipe, "smartFormOptions": FormOptionsPipe } });
|
|
920
|
+
/** @nocollapse */ /** @nocollapse */ MultiselectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: MultiselectComponent, deps: [{ token: CrudFacade }, { token: CrudFullConfig }, { token: i3.MenuService }], target: i0.ɵɵFactoryTarget.Component });
|
|
921
|
+
/** @nocollapse */ /** @nocollapse */ MultiselectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: MultiselectComponent, selector: "smart-crud-multiselect", ngImport: i0, template: "<ng-container *ngIf=\"list$ | async; let list\">\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"onClose()\">\n <ion-icon slot=\"icon-only\" name=\"close\"> </ion-icon>\n </ion-button>\n </ion-buttons>\n <ion-title>{{ 'selected' | translate }}: {{ list?.length }}</ion-title>\n </ion-toolbar>\n </ion-header>\n\n <div *ngIf=\"config?.list?.components?.multi\">\n <ng-template [ngComponentOutlet]=\"config?.list?.components?.multi\"\n [ndcDynamicInputs]=\"{ items: list }\"\n ></ng-template>\n </div>\n\n <div *ngIf=\"showForm && item\">\n <smart-form [options]=\"item | smartFormOptions : 'multiUpdate' : config.type\" (valuePartialChange)=\"onPartialChange($event, list)\" (validChange)=\"onValidChange($event)\"></smart-form>\n\n <smart-button style=\"float: right\" [disabled]=\"lock || !valid\" [options]=\"buttonOptions\">{{ 'change' | translate }}</smart-button>\n </div>\n</ng-container>", styles: [":host ion-toolbar{--background: linear-gradient(33deg, var(--ion-color-light), var(--ion-color-light-shade));--color: var(--ion-color-dark)}@media only screen and (max-width: 992px){:host ion-toolbar{--background: linear-gradient(33deg, var(--ion-color-primary), var(--ion-color-tertiary));--color: var(--ion-color-light)}}@media only screen and (max-width: 420px){:host ion-toolbar{--background: linear-gradient(33deg, var(--ion-color-primary), var(--ion-color-tertiary));--color: var(--ion-color-light)}}:host ion-toolbar.ios{height:4.6rem;--background: linear-gradient(33deg, var(--ion-color-light), var(--ion-color-light-shade));--color: var(--ion-color-dark)}@media only screen and (max-width: 992px){:host ion-toolbar.ios{--background: linear-gradient(33deg, var(--ion-color-primary), var(--ion-color-tertiary));--color: var(--ion-color-light)}:host ion-toolbar.ios ion-title{text-align:left;padding-left:5.2rem}:host ion-toolbar.ios ion-icon{color:var(--ion-color-light)}}@media only screen and (max-width: 420px){:host ion-toolbar.ios{--background: linear-gradient(33deg, var(--ion-color-primary), var(--ion-color-tertiary));--color: var(--ion-color-light)}:host ion-toolbar.ios ion-title{text-align:left;padding-left:5.2rem}:host ion-toolbar.ios ion-icon{color:var(--ion-color-light)}}.modal-wrapper :host ion-toolbar.ios{--background: linear-gradient(33deg, var(--ion-color-light), var(--ion-color-light-shade));--color: var(--ion-color-dark)}@media only screen and (max-width: 992px){.modal-wrapper :host ion-toolbar.ios{--background: linear-gradient(33deg, var(--ion-color-light), var(--ion-color-light-shade));color:var(--ion-color-dark)}.modal-wrapper :host ion-toolbar.ios ion-title{text-align:left;padding-left:1.2rem}.modal-wrapper :host ion-toolbar.ios ion-icon{color:var(--ion-color-dark)}.modal-wrapper :host ion-toolbar.ios ion-buttons{margin:0}}@media only screen and (max-width: 420px){.modal-wrapper :host ion-toolbar.ios{--background: linear-gradient(33deg, var(--ion-color-light), var(--ion-color-light-shade));color:var(--ion-color-dark)}.modal-wrapper :host ion-toolbar.ios ion-title{text-align:left;padding-left:1.2rem}.modal-wrapper :host ion-toolbar.ios ion-icon{color:var(--ion-color-dark)}.modal-wrapper :host ion-toolbar.ios ion-buttons{margin:0}}:host ion-toolbar ion-menu-button{color:var(--ion-color-light)}:host ion-toolbar ion-buttons.ios{height:var(--smart-button-height);margin:0}\n"], components: [{ type: i1$1.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { type: i1$1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { type: i1$1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { type: i1$1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { type: i1$1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { type: i1$1.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { type: i3.FormComponent, selector: "smart-form", inputs: ["options"], outputs: ["invokeSubmit", "valueChange", "valuePartialChange", "validChange"] }, { type: i3.ButtonComponent, selector: "smart-button", inputs: ["options", "disabled"] }], directives: [{ type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3$1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModuleFactory"] }, { type: i6.ComponentOutletInjectorDirective, selector: "[ngComponentOutlet]", exportAs: ["ndcComponentOutletInjector"] }, { type: i6.DynamicIoDirective, selector: "[ndcDynamicInputs],[ndcDynamicOutputs],[ngComponentOutletNdcDynamicInputs],[ngComponentOutletNdcDynamicOutputs]", inputs: ["ndcDynamicInputs", "ngComponentOutletNdcDynamicInputs", "ndcDynamicOutputs", "ngComponentOutletNdcDynamicOutputs"] }], pipes: { "async": i3$1.AsyncPipe, "translate": i4.TranslatePipe, "smartFormOptions": FormOptionsPipe } });
|
|
918
922
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: MultiselectComponent, decorators: [{
|
|
919
923
|
type: Component,
|
|
920
|
-
args: [{ selector: 'smart-crud-multiselect', template: "<ng-container *ngIf=\"list$ | async; let list\">\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"onClose()\">\n <ion-icon slot=\"icon-only\" name=\"close\"> </ion-icon>\n </ion-button>\n </ion-buttons>\n <ion-title>{{ 'selected' | translate }}: {{ list?.length }}</ion-title>\n </ion-toolbar>\n </ion-header>\n\n <div *ngIf=\"item\">\n <smart-form [options]=\"item | smartFormOptions : 'multiUpdate' : config.type\" (valuePartialChange)=\"onPartialChange($event, list)\" (validChange)=\"onValidChange($event)\"></smart-form>\n\n <smart-button style=\"float: right\" [disabled]=\"lock || !valid\" [options]=\"buttonOptions\">{{ 'change' | translate }}</smart-button>\n </div>\n</ng-container>", styles: [":host ion-toolbar{--background: linear-gradient(33deg, var(--ion-color-light), var(--ion-color-light-shade));--color: var(--ion-color-dark)}@media only screen and (max-width: 992px){:host ion-toolbar{--background: linear-gradient(33deg, var(--ion-color-primary), var(--ion-color-tertiary));--color: var(--ion-color-light)}}@media only screen and (max-width: 420px){:host ion-toolbar{--background: linear-gradient(33deg, var(--ion-color-primary), var(--ion-color-tertiary));--color: var(--ion-color-light)}}:host ion-toolbar.ios{height:4.6rem;--background: linear-gradient(33deg, var(--ion-color-light), var(--ion-color-light-shade));--color: var(--ion-color-dark)}@media only screen and (max-width: 992px){:host ion-toolbar.ios{--background: linear-gradient(33deg, var(--ion-color-primary), var(--ion-color-tertiary));--color: var(--ion-color-light)}:host ion-toolbar.ios ion-title{text-align:left;padding-left:5.2rem}:host ion-toolbar.ios ion-icon{color:var(--ion-color-light)}}@media only screen and (max-width: 420px){:host ion-toolbar.ios{--background: linear-gradient(33deg, var(--ion-color-primary), var(--ion-color-tertiary));--color: var(--ion-color-light)}:host ion-toolbar.ios ion-title{text-align:left;padding-left:5.2rem}:host ion-toolbar.ios ion-icon{color:var(--ion-color-light)}}.modal-wrapper :host ion-toolbar.ios{--background: linear-gradient(33deg, var(--ion-color-light), var(--ion-color-light-shade));--color: var(--ion-color-dark)}@media only screen and (max-width: 992px){.modal-wrapper :host ion-toolbar.ios{--background: linear-gradient(33deg, var(--ion-color-light), var(--ion-color-light-shade));color:var(--ion-color-dark)}.modal-wrapper :host ion-toolbar.ios ion-title{text-align:left;padding-left:1.2rem}.modal-wrapper :host ion-toolbar.ios ion-icon{color:var(--ion-color-dark)}.modal-wrapper :host ion-toolbar.ios ion-buttons{margin:0}}@media only screen and (max-width: 420px){.modal-wrapper :host ion-toolbar.ios{--background: linear-gradient(33deg, var(--ion-color-light), var(--ion-color-light-shade));color:var(--ion-color-dark)}.modal-wrapper :host ion-toolbar.ios ion-title{text-align:left;padding-left:1.2rem}.modal-wrapper :host ion-toolbar.ios ion-icon{color:var(--ion-color-dark)}.modal-wrapper :host ion-toolbar.ios ion-buttons{margin:0}}:host ion-toolbar ion-menu-button{color:var(--ion-color-light)}:host ion-toolbar ion-buttons.ios{height:var(--smart-button-height);margin:0}\n"] }]
|
|
921
|
-
}], ctorParameters: function () { return [{ type: CrudFacade }, { type:
|
|
924
|
+
args: [{ selector: 'smart-crud-multiselect', template: "<ng-container *ngIf=\"list$ | async; let list\">\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"onClose()\">\n <ion-icon slot=\"icon-only\" name=\"close\"> </ion-icon>\n </ion-button>\n </ion-buttons>\n <ion-title>{{ 'selected' | translate }}: {{ list?.length }}</ion-title>\n </ion-toolbar>\n </ion-header>\n\n <div *ngIf=\"config?.list?.components?.multi\">\n <ng-template [ngComponentOutlet]=\"config?.list?.components?.multi\"\n [ndcDynamicInputs]=\"{ items: list }\"\n ></ng-template>\n </div>\n\n <div *ngIf=\"showForm && item\">\n <smart-form [options]=\"item | smartFormOptions : 'multiUpdate' : config.type\" (valuePartialChange)=\"onPartialChange($event, list)\" (validChange)=\"onValidChange($event)\"></smart-form>\n\n <smart-button style=\"float: right\" [disabled]=\"lock || !valid\" [options]=\"buttonOptions\">{{ 'change' | translate }}</smart-button>\n </div>\n</ng-container>", styles: [":host ion-toolbar{--background: linear-gradient(33deg, var(--ion-color-light), var(--ion-color-light-shade));--color: var(--ion-color-dark)}@media only screen and (max-width: 992px){:host ion-toolbar{--background: linear-gradient(33deg, var(--ion-color-primary), var(--ion-color-tertiary));--color: var(--ion-color-light)}}@media only screen and (max-width: 420px){:host ion-toolbar{--background: linear-gradient(33deg, var(--ion-color-primary), var(--ion-color-tertiary));--color: var(--ion-color-light)}}:host ion-toolbar.ios{height:4.6rem;--background: linear-gradient(33deg, var(--ion-color-light), var(--ion-color-light-shade));--color: var(--ion-color-dark)}@media only screen and (max-width: 992px){:host ion-toolbar.ios{--background: linear-gradient(33deg, var(--ion-color-primary), var(--ion-color-tertiary));--color: var(--ion-color-light)}:host ion-toolbar.ios ion-title{text-align:left;padding-left:5.2rem}:host ion-toolbar.ios ion-icon{color:var(--ion-color-light)}}@media only screen and (max-width: 420px){:host ion-toolbar.ios{--background: linear-gradient(33deg, var(--ion-color-primary), var(--ion-color-tertiary));--color: var(--ion-color-light)}:host ion-toolbar.ios ion-title{text-align:left;padding-left:5.2rem}:host ion-toolbar.ios ion-icon{color:var(--ion-color-light)}}.modal-wrapper :host ion-toolbar.ios{--background: linear-gradient(33deg, var(--ion-color-light), var(--ion-color-light-shade));--color: var(--ion-color-dark)}@media only screen and (max-width: 992px){.modal-wrapper :host ion-toolbar.ios{--background: linear-gradient(33deg, var(--ion-color-light), var(--ion-color-light-shade));color:var(--ion-color-dark)}.modal-wrapper :host ion-toolbar.ios ion-title{text-align:left;padding-left:1.2rem}.modal-wrapper :host ion-toolbar.ios ion-icon{color:var(--ion-color-dark)}.modal-wrapper :host ion-toolbar.ios ion-buttons{margin:0}}@media only screen and (max-width: 420px){.modal-wrapper :host ion-toolbar.ios{--background: linear-gradient(33deg, var(--ion-color-light), var(--ion-color-light-shade));color:var(--ion-color-dark)}.modal-wrapper :host ion-toolbar.ios ion-title{text-align:left;padding-left:1.2rem}.modal-wrapper :host ion-toolbar.ios ion-icon{color:var(--ion-color-dark)}.modal-wrapper :host ion-toolbar.ios ion-buttons{margin:0}}:host ion-toolbar ion-menu-button{color:var(--ion-color-light)}:host ion-toolbar ion-buttons.ios{height:var(--smart-button-height);margin:0}\n"] }]
|
|
925
|
+
}], ctorParameters: function () { return [{ type: CrudFacade }, { type: CrudFullConfig }, { type: i3.MenuService }]; } });
|
|
922
926
|
|
|
923
927
|
class CrudListGroupService {
|
|
924
928
|
constructor(facade) {
|
|
@@ -1446,7 +1450,8 @@ class CrudComponentsModule {
|
|
|
1446
1450
|
SharedModule,
|
|
1447
1451
|
CrudPipesModule,
|
|
1448
1452
|
FormsModule,
|
|
1449
|
-
CommonModule
|
|
1453
|
+
CommonModule,
|
|
1454
|
+
DynamicIoModule], exports: [CrudPipesModule, ExportComponent,
|
|
1450
1455
|
FilterComponent,
|
|
1451
1456
|
FilterTextComponent,
|
|
1452
1457
|
FiltersConfigComponent,
|
|
@@ -1471,7 +1476,8 @@ class CrudComponentsModule {
|
|
|
1471
1476
|
SharedModule,
|
|
1472
1477
|
CrudPipesModule,
|
|
1473
1478
|
FormsModule,
|
|
1474
|
-
CommonModule
|
|
1479
|
+
CommonModule,
|
|
1480
|
+
DynamicIoModule
|
|
1475
1481
|
], CrudPipesModule] });
|
|
1476
1482
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: CrudComponentsModule, decorators: [{
|
|
1477
1483
|
type: NgModule,
|
|
@@ -1485,7 +1491,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
|
|
|
1485
1491
|
SharedModule,
|
|
1486
1492
|
CrudPipesModule,
|
|
1487
1493
|
FormsModule,
|
|
1488
|
-
CommonModule
|
|
1494
|
+
CommonModule,
|
|
1495
|
+
DynamicIoModule
|
|
1489
1496
|
],
|
|
1490
1497
|
exports: [
|
|
1491
1498
|
CrudPipesModule,
|
|
@@ -1840,6 +1847,7 @@ class ListComponent extends CreateDynamicComponent('crud-list-page') {
|
|
|
1840
1847
|
this.searchService = searchService;
|
|
1841
1848
|
this.moduleRef = moduleRef;
|
|
1842
1849
|
this.componentFactoryResolver = componentFactoryResolver;
|
|
1850
|
+
this._cleanMultiSelected$ = new Subject();
|
|
1843
1851
|
this.filter$ = this.facade.filter$.pipe(tap((filter) => {
|
|
1844
1852
|
this.filter = filter;
|
|
1845
1853
|
}));
|
|
@@ -1944,6 +1952,7 @@ class ListComponent extends CreateDynamicComponent('crud-list-page') {
|
|
|
1944
1952
|
},
|
|
1945
1953
|
list$: this.facade.list$,
|
|
1946
1954
|
loading$: this.facade.loaded$.pipe(map((l) => !l)),
|
|
1955
|
+
onCleanMultiSelected$: this._cleanMultiSelected$
|
|
1947
1956
|
},
|
|
1948
1957
|
cellPipe: this.config.list ? this.config.list.cellPipe : null,
|
|
1949
1958
|
mode: this.config.list?.mode,
|
|
@@ -2024,26 +2033,30 @@ class ListComponent extends CreateDynamicComponent('crud-list-page') {
|
|
|
2024
2033
|
const fieldsWithOptions = getModelFieldsWithOptions(new this.config.type());
|
|
2025
2034
|
const modelOptions = getModelOptions(this.config.type);
|
|
2026
2035
|
const showFilters = fieldsWithOptions.some((x) => x.options?.list?.filter) || modelOptions?.filters?.length;
|
|
2027
|
-
const showMultiEdit = this.config.
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
this.config?.list?.mode
|
|
2036
|
+
const showMultiEdit = this.config.list?.components?.multi ||
|
|
2037
|
+
(this.config.edit &&
|
|
2038
|
+
fieldsWithOptions.some((x) => x.options?.update?.multi) &&
|
|
2039
|
+
!this.hardwareService.isMobile &&
|
|
2040
|
+
(!this.config?.list?.mode ||
|
|
2041
|
+
this.config?.list?.mode === ListMode.desktop));
|
|
2032
2042
|
return [
|
|
2033
2043
|
...(showMultiEdit
|
|
2034
2044
|
? [
|
|
2035
2045
|
{
|
|
2036
2046
|
icon: "checkbox-outline",
|
|
2037
2047
|
text: "multi",
|
|
2038
|
-
handler:
|
|
2039
|
-
this.listOptions = {
|
|
2040
|
-
...this.listOptions,
|
|
2041
|
-
select: this.listOptions.select === "multi" ? null : "multi",
|
|
2042
|
-
};
|
|
2048
|
+
handler: () => {
|
|
2043
2049
|
this.facade.multiSelect([]);
|
|
2044
|
-
|
|
2045
|
-
|
|
2046
|
-
|
|
2050
|
+
this._cleanMultiSelected$.next();
|
|
2051
|
+
setTimeout(async () => {
|
|
2052
|
+
this.listOptions = {
|
|
2053
|
+
...this.listOptions,
|
|
2054
|
+
select: this.listOptions.select === "multi" ? null : "multi",
|
|
2055
|
+
};
|
|
2056
|
+
if (this.menuService.openedEnd)
|
|
2057
|
+
await this.menuService.closeEnd();
|
|
2058
|
+
this.cd.detectChanges();
|
|
2059
|
+
});
|
|
2047
2060
|
},
|
|
2048
2061
|
},
|
|
2049
2062
|
]
|
|
@@ -2237,7 +2250,7 @@ class ItemComponent extends CreateDynamicComponent('crud-item-page') {
|
|
|
2237
2250
|
this.detailsService.init();
|
|
2238
2251
|
this.styleService.init(this.elementRef);
|
|
2239
2252
|
this.pageService.checkPermissions();
|
|
2240
|
-
if (this.router.routerState.snapshot.url.endsWith("/add")) {
|
|
2253
|
+
if (this.router.routerState.snapshot.url.split('?')[0].endsWith("/add")) {
|
|
2241
2254
|
this.mode = "create";
|
|
2242
2255
|
await this.generateComponents('add');
|
|
2243
2256
|
}
|