@ecodev/natural 63.6.0 → 63.7.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/fesm2022/ecodev-natural-vanilla.mjs +24 -9
- package/fesm2022/ecodev-natural-vanilla.mjs.map +1 -1
- package/fesm2022/ecodev-natural.mjs +43 -22
- package/fesm2022/ecodev-natural.mjs.map +1 -1
- package/lib/classes/utility.d.ts +5 -0
- package/lib/modules/icon/icon.directive.d.ts +2 -2
- package/lib/modules/relations/relations.component.d.ts +8 -1
- package/package.json +2 -2
- package/vanilla/src/lib/classes/utility.d.ts +5 -0
|
@@ -3,7 +3,7 @@ import { inject, Component, Injectable, DestroyRef, HostListener, HostBinding, D
|
|
|
3
3
|
import * as i1$2 from '@angular/forms';
|
|
4
4
|
import { FormGroup, FormArray, Validators, UntypedFormGroup, UntypedFormArray, FormControl, FormsModule, ReactiveFormsModule, UntypedFormControl, NgControl, FormControlDirective, FormControlName } from '@angular/forms';
|
|
5
5
|
import { NavigationStart, NavigationEnd, ActivatedRoute, Router, RouteConfigLoadStart, RouteConfigLoadEnd, PRIMARY_OUTLET, RouterLink, NavigationError, DefaultUrlSerializer, UrlTree } from '@angular/router';
|
|
6
|
-
import { pickBy, cloneDeep, uniq, groupBy,
|
|
6
|
+
import { pickBy, cloneDeepWith, cloneDeep, uniq, groupBy, omit, isEqual, kebabCase, merge, clone, pick as pick$1, intersection, flatten, differenceWith } from 'es-toolkit';
|
|
7
7
|
import * as i1 from '@angular/material/dialog';
|
|
8
8
|
import { MAT_DIALOG_DATA, MatDialogModule, MatDialog, MatDialogRef } from '@angular/material/dialog';
|
|
9
9
|
import { MatSnackBar, MatSnackBarModule } from '@angular/material/snack-bar';
|
|
@@ -12,6 +12,7 @@ import { MatButtonModule } from '@angular/material/button';
|
|
|
12
12
|
import { Observable, switchMap, take, BehaviorSubject, of, timer, tap, endWith, last, EMPTY, finalize, Subject, merge as merge$1, first as first$1, takeUntil as takeUntil$1, map as map$1, ReplaySubject, debounceTime, raceWith, mergeMap, shareReplay, catchError, forkJoin, combineLatest, from, filter as filter$1, startWith as startWith$1, asyncScheduler, throwError } from 'rxjs';
|
|
13
13
|
import { takeUntilDestroyed, outputFromObservable } from '@angular/core/rxjs-interop';
|
|
14
14
|
import { filter, switchMap as switchMap$1, first, map, takeUntil, takeWhile, debounceTime as debounceTime$1, tap as tap$1, shareReplay as shareReplay$1, startWith, distinctUntilChanged, finalize as finalize$1, throttleTime } from 'rxjs/operators';
|
|
15
|
+
import { mergeWith, defaultsDeep, pick, defaults, isEmpty, isEqual as isEqual$1 } from 'es-toolkit/compat';
|
|
15
16
|
import * as i2$3 from '@angular/material/table';
|
|
16
17
|
import { MatTableDataSource, MatTableModule } from '@angular/material/table';
|
|
17
18
|
import { DataSource, SelectionModel } from '@angular/cdk/collections';
|
|
@@ -343,11 +344,22 @@ function rgbToHex(rgb) {
|
|
|
343
344
|
}
|
|
344
345
|
return '#' + [m[1], m[2], m[3]].map(x => parseInt(x).toString(16).toUpperCase().padStart(2, '0')).join('');
|
|
345
346
|
}
|
|
347
|
+
/**
|
|
348
|
+
* Deep clone given values except for `File` that will be referencing the original value
|
|
349
|
+
*/
|
|
350
|
+
function cloneDeepButSkipFile(value) {
|
|
351
|
+
return cloneDeepWith(value, v => (isFile(v) ? v : undefined));
|
|
352
|
+
}
|
|
353
|
+
function isFile(value) {
|
|
354
|
+
return ((typeof File !== 'undefined' && value instanceof File) ||
|
|
355
|
+
(typeof Blob !== 'undefined' && value instanceof Blob) ||
|
|
356
|
+
(typeof FileList !== 'undefined' && value instanceof FileList));
|
|
357
|
+
}
|
|
346
358
|
/**
|
|
347
359
|
* During lodash.mergeWith, overrides arrays
|
|
348
360
|
*/
|
|
349
361
|
function mergeOverrideArray(destValue, source) {
|
|
350
|
-
if (Array.isArray(source)) {
|
|
362
|
+
if (Array.isArray(source) || isFile(source)) {
|
|
351
363
|
return source;
|
|
352
364
|
}
|
|
353
365
|
}
|
|
@@ -456,7 +468,7 @@ function hasMixedGroupLogic(groups) {
|
|
|
456
468
|
}
|
|
457
469
|
return group;
|
|
458
470
|
});
|
|
459
|
-
const groupLogics = uniq(Object.keys(groupBy(completedGroups.slice(1),
|
|
471
|
+
const groupLogics = uniq(Object.keys(groupBy(completedGroups.slice(1), group => group.groupLogic)));
|
|
460
472
|
return groupLogics.length > 1;
|
|
461
473
|
}
|
|
462
474
|
|
|
@@ -469,8 +481,11 @@ var SortingOrder;
|
|
|
469
481
|
* During lodash merge, concat arrays
|
|
470
482
|
*/
|
|
471
483
|
function mergeConcatArray(destValue, source) {
|
|
484
|
+
if (isFile(source)) {
|
|
485
|
+
return source;
|
|
486
|
+
}
|
|
472
487
|
if (Array.isArray(source)) {
|
|
473
|
-
if (destValue) {
|
|
488
|
+
if (Array.isArray(destValue)) {
|
|
474
489
|
return destValue.concat(source);
|
|
475
490
|
}
|
|
476
491
|
else {
|
|
@@ -525,7 +540,7 @@ class NaturalQueryVariablesManager {
|
|
|
525
540
|
set(channelName, variables) {
|
|
526
541
|
// cloneDeep to change reference and prevent some interactions when merge
|
|
527
542
|
if (variables) {
|
|
528
|
-
this.channels.set(channelName,
|
|
543
|
+
this.channels.set(channelName, cloneDeepButSkipFile(variables));
|
|
529
544
|
}
|
|
530
545
|
else {
|
|
531
546
|
this.channels.delete(channelName);
|
|
@@ -539,7 +554,7 @@ class NaturalQueryVariablesManager {
|
|
|
539
554
|
* used this changed attribute without having explicitly asked QueryVariablesManager to update it.
|
|
540
555
|
*/
|
|
541
556
|
get(channelName) {
|
|
542
|
-
return
|
|
557
|
+
return cloneDeepButSkipFile(this.channels.get(channelName));
|
|
543
558
|
}
|
|
544
559
|
/**
|
|
545
560
|
* Merge variable into a channel, overriding arrays in same channel / key
|
|
@@ -596,7 +611,7 @@ class NaturalQueryVariablesManager {
|
|
|
596
611
|
}
|
|
597
612
|
}
|
|
598
613
|
// Merge other attributes than filter
|
|
599
|
-
mergeWith(merged, omit(channelVariables, 'filter'), mergeConcatArray);
|
|
614
|
+
mergeWith(merged, omit(channelVariables, ['filter']), mergeConcatArray);
|
|
600
615
|
});
|
|
601
616
|
this.variables.next(merged);
|
|
602
617
|
}
|
|
@@ -2288,7 +2303,7 @@ class CumulativeChanges {
|
|
|
2288
2303
|
* Initialize the original values, should be called exactly one time per instance
|
|
2289
2304
|
*/
|
|
2290
2305
|
initialize(originalValues) {
|
|
2291
|
-
this.original =
|
|
2306
|
+
this.original = cloneDeepButSkipFile(originalValues);
|
|
2292
2307
|
this.diff = {};
|
|
2293
2308
|
}
|
|
2294
2309
|
/**
|
|
@@ -2317,7 +2332,7 @@ class CumulativeChanges {
|
|
|
2317
2332
|
commit(newValues) {
|
|
2318
2333
|
this.original = {
|
|
2319
2334
|
...this.original,
|
|
2320
|
-
...
|
|
2335
|
+
...cloneDeepButSkipFile(newValues),
|
|
2321
2336
|
};
|
|
2322
2337
|
Object.keys(newValues).forEach(key => {
|
|
2323
2338
|
if (key in this.diff && isEqual(this.diff[key], newValues[key])) {
|
|
@@ -4220,18 +4235,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImpo
|
|
|
4220
4235
|
type: Input
|
|
4221
4236
|
}] } });
|
|
4222
4237
|
|
|
4223
|
-
function isFile(value) {
|
|
4224
|
-
return ((typeof File !== 'undefined' && value instanceof File) ||
|
|
4225
|
-
(typeof Blob !== 'undefined' && value instanceof Blob) ||
|
|
4226
|
-
(typeof FileList !== 'undefined' && value instanceof FileList));
|
|
4227
|
-
}
|
|
4228
4238
|
/**
|
|
4229
4239
|
* Detect if the given variables have a file to be uploaded or not, and
|
|
4230
4240
|
* also convert date to be serialized with their timezone.
|
|
4231
4241
|
*/
|
|
4232
4242
|
function hasFilesAndProcessDate(variables) {
|
|
4233
4243
|
let fileFound = false;
|
|
4234
|
-
if (!
|
|
4244
|
+
if (!variables || typeof variables !== 'object') {
|
|
4235
4245
|
return false;
|
|
4236
4246
|
}
|
|
4237
4247
|
Object.values(variables).forEach(value => {
|
|
@@ -4821,7 +4831,7 @@ class NaturalAbstractModelService {
|
|
|
4821
4831
|
create(object) {
|
|
4822
4832
|
this.throwIfObservable(object);
|
|
4823
4833
|
this.throwIfNotQuery(this.createMutation);
|
|
4824
|
-
const variables = merge({
|
|
4834
|
+
const variables = merge({ input: this.getInput(object, true) }, this.getPartialVariablesForCreation(object));
|
|
4825
4835
|
return this.apollo
|
|
4826
4836
|
.mutate({
|
|
4827
4837
|
mutation: this.createMutation,
|
|
@@ -4920,7 +4930,7 @@ class NaturalAbstractModelService {
|
|
|
4920
4930
|
// Pick only attributes that we can find in the empty object
|
|
4921
4931
|
// In other words, prevent to select data that has unwanted attributes
|
|
4922
4932
|
const emptyObject = this.getDefaultForServer();
|
|
4923
|
-
let input = pick(object, Object.keys(emptyObject));
|
|
4933
|
+
let input = pick$1(object, Object.keys(emptyObject));
|
|
4924
4934
|
// Complete a potentially uncompleted object with default values
|
|
4925
4935
|
if (forCreation) {
|
|
4926
4936
|
input = defaults(input, emptyObject);
|
|
@@ -5058,7 +5068,7 @@ class NaturalAbstractModelService {
|
|
|
5058
5068
|
* Merge given ID with additional partial variables if there is any
|
|
5059
5069
|
*/
|
|
5060
5070
|
getVariablesForOne(id) {
|
|
5061
|
-
return this.getPartialVariablesForOne().pipe(map(partialVariables => merge({
|
|
5071
|
+
return this.getPartialVariablesForOne().pipe(map(partialVariables => merge({ id: id }, partialVariables)));
|
|
5062
5072
|
}
|
|
5063
5073
|
/**
|
|
5064
5074
|
* Throw exception to prevent executing null queries
|
|
@@ -8648,7 +8658,7 @@ class TypeOptionsComponent {
|
|
|
8648
8658
|
}
|
|
8649
8659
|
this.formControl.setValidators([Validators.required]);
|
|
8650
8660
|
if (data.condition) {
|
|
8651
|
-
const option = this.configuration.options.find(option => isEqual(option.condition, data.condition));
|
|
8661
|
+
const option = this.configuration.options.find(option => isEqual$1(option.condition, data.condition));
|
|
8652
8662
|
if (option) {
|
|
8653
8663
|
this.formControl.setValue(option);
|
|
8654
8664
|
this.renderedValue.next(option.display);
|
|
@@ -9637,7 +9647,7 @@ function segmentsToString(segments) {
|
|
|
9637
9647
|
return segments.map(s => s.toString()).join('/');
|
|
9638
9648
|
}
|
|
9639
9649
|
function compareConfigs(a, b) {
|
|
9640
|
-
return a.route.path === b.route.path && a.rule === b.rule && isEqual(a.params, b.params);
|
|
9650
|
+
return a.route.path === b.route.path && a.rule === b.rule && isEqual$1(a.params, b.params);
|
|
9641
9651
|
}
|
|
9642
9652
|
/**
|
|
9643
9653
|
* TODO: implement route update when closing dialog with escape
|
|
@@ -10095,6 +10105,15 @@ class NaturalRelationsComponent {
|
|
|
10095
10105
|
set filter(filter) {
|
|
10096
10106
|
this.variablesManager.set('relations-filter', { filter: filter });
|
|
10097
10107
|
}
|
|
10108
|
+
/**
|
|
10109
|
+
* The sorting used to sort relations
|
|
10110
|
+
*
|
|
10111
|
+
* So if the relations are from one action -> to many objectives, then the sorting must sort
|
|
10112
|
+
* the objectives that have indeed a relation to the particular action.
|
|
10113
|
+
*/
|
|
10114
|
+
set sorting(sorting) {
|
|
10115
|
+
this.variablesManager.set('relations-sorting', { sorting: sorting });
|
|
10116
|
+
}
|
|
10098
10117
|
ngOnChanges() {
|
|
10099
10118
|
if (this.disabled && this.displayedColumns.includes('unlink')) {
|
|
10100
10119
|
this.displayedColumns.pop();
|
|
@@ -10183,7 +10202,7 @@ class NaturalRelationsComponent {
|
|
|
10183
10202
|
return this.hierarchicSelectorConfig.find(c => !!c.selectableAtKey)?.selectableAtKey;
|
|
10184
10203
|
}
|
|
10185
10204
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: NaturalRelationsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10186
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.13", type: NaturalRelationsComponent, isStandalone: true, selector: "natural-relations", inputs: { service: "service", placeholder: "placeholder", autocompleteSelectorFilter: "autocompleteSelectorFilter", displayWith: "displayWith", disabled: "disabled", main: "main", hierarchicSelectorFilters: "hierarchicSelectorFilters", hierarchicSelectorConfig: "hierarchicSelectorConfig", otherName: "otherName", filter: "filter" }, outputs: { selectionChange: "selectionChange" }, queries: [{ propertyName: "itemTemplate", first: true, predicate: TemplateRef, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "select", first: true, predicate: NaturalSelectComponent, descendants: true, isSignal: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"body\">\n <ng-template #defaultNameCell let-item=\"item\">\n {{ getDisplayFn()(item) }}\n </ng-template>\n\n <table class=\"natural-row-click\" mat-table [dataSource]=\"dataSource\">\n <tr *matHeaderRowDef=\"displayedColumns\" mat-header-row style=\"display: none\"></tr>\n <tr *matRowDef=\"let row; columns: displayedColumns\" mat-row></tr>\n\n <ng-container matColumnDef=\"name\">\n <th *matHeaderCellDef i18n mat-header-cell>Titre</th>\n <td *matCellDef=\"let item\" mat-cell>\n @let customTemplate = itemTemplate();\n <ng-template\n [ngTemplateOutletContext]=\"{item: item}\"\n [ngTemplateOutlet]=\"customTemplate ? customTemplate : defaultNameCell\"\n />\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"unlink\">\n <th *matHeaderCellDef mat-header-cell></th>\n <td *matCellDef=\"let element\" mat-cell>\n @if (!disabled) {\n <button\n color=\"warn\"\n mat-icon-button\n i18n-matTooltip\n matTooltip=\"Dissocier\"\n [disabled]=\"removing.has(element)\"\n (click)=\"removeRelation(element)\"\n >\n <mat-icon naturalIcon=\"link_off\" />\n </button>\n }\n </td>\n </ng-container>\n </table>\n\n @if (dataSource.data && (dataSource.data.length || 0) > (dataSource.data.pageSize || 0)) {\n <mat-paginator\n [length]=\"dataSource.data.length || 0\"\n [pageIndex]=\"dataSource.data.pageIndex || 0\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [pageSize]=\"dataSource.data.pageSize || 0\"\n (page)=\"pagination($event)\"\n />\n }\n\n @if (!loading && dataSource.data?.length === 0) {\n <div class=\"nat-margin-vertical mat-body\">\n <span i18n>Aucun r\u00E9sultat</span>\n </div>\n }\n\n @if (loading) {\n <mat-progress-spinner class=\"loading\" mode=\"indeterminate\" [diameter]=\"40\" />\n }\n</div>\n\n@if (!disabled) {\n @if (hierarchicSelectorConfig) {\n <div>\n <button color=\"primary\" mat-flat-button (click)=\"openNaturalHierarchicSelector()\">{{ placeholder }}</button>\n </div>\n } @else {\n <natural-select\n [displayWith]=\"$any(getDisplayFn())\"\n [filter]=\"autocompleteSelectorFilter\"\n [placeholder]=\"placeholder\"\n [service]=\"service\"\n [showIcon]=\"false\"\n (selectionChange)=\"addRelations([$event])\"\n />\n }\n}\n", styles: [":host{display:flex;flex-direction:column}:host>*:not(:last-child){margin-bottom:20px}:host .body{display:flex;flex-direction:column}:host .loading{margin:20px auto}:host .mat-column-unlink{width:2.5em}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i2$3.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i2$3.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i2$3.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i2$3.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i2$3.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i2$3.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i2$3.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i2$3.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i2$3.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i2$3.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i6$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NaturalIconDirective, selector: "mat-icon[naturalIcon]", inputs: ["naturalIcon", "size"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i6$2.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i8.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: NaturalSelectComponent, selector: "natural-select", inputs: ["service", "optionRequired", "searchField", "searchOperator", "filter", "pageSize", "disabled"] }] });
|
|
10205
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.13", type: NaturalRelationsComponent, isStandalone: true, selector: "natural-relations", inputs: { service: "service", placeholder: "placeholder", autocompleteSelectorFilter: "autocompleteSelectorFilter", displayWith: "displayWith", disabled: "disabled", main: "main", hierarchicSelectorFilters: "hierarchicSelectorFilters", hierarchicSelectorConfig: "hierarchicSelectorConfig", otherName: "otherName", filter: "filter", sorting: "sorting" }, outputs: { selectionChange: "selectionChange" }, queries: [{ propertyName: "itemTemplate", first: true, predicate: TemplateRef, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "select", first: true, predicate: NaturalSelectComponent, descendants: true, isSignal: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"body\">\n <ng-template #defaultNameCell let-item=\"item\">\n {{ getDisplayFn()(item) }}\n </ng-template>\n\n <table class=\"natural-row-click\" mat-table [dataSource]=\"dataSource\">\n <tr *matHeaderRowDef=\"displayedColumns\" mat-header-row style=\"display: none\"></tr>\n <tr *matRowDef=\"let row; columns: displayedColumns\" mat-row></tr>\n\n <ng-container matColumnDef=\"name\">\n <th *matHeaderCellDef i18n mat-header-cell>Titre</th>\n <td *matCellDef=\"let item\" mat-cell>\n @let customTemplate = itemTemplate();\n <ng-template\n [ngTemplateOutletContext]=\"{item: item}\"\n [ngTemplateOutlet]=\"customTemplate ? customTemplate : defaultNameCell\"\n />\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"unlink\">\n <th *matHeaderCellDef mat-header-cell></th>\n <td *matCellDef=\"let element\" mat-cell>\n @if (!disabled) {\n <button\n color=\"warn\"\n mat-icon-button\n i18n-matTooltip\n matTooltip=\"Dissocier\"\n [disabled]=\"removing.has(element)\"\n (click)=\"removeRelation(element)\"\n >\n <mat-icon naturalIcon=\"link_off\" />\n </button>\n }\n </td>\n </ng-container>\n </table>\n\n @if (dataSource.data && (dataSource.data.length || 0) > (dataSource.data.pageSize || 0)) {\n <mat-paginator\n [length]=\"dataSource.data.length || 0\"\n [pageIndex]=\"dataSource.data.pageIndex || 0\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [pageSize]=\"dataSource.data.pageSize || 0\"\n (page)=\"pagination($event)\"\n />\n }\n\n @if (!loading && dataSource.data?.length === 0) {\n <div class=\"nat-margin-vertical mat-body\">\n <span i18n>Aucun r\u00E9sultat</span>\n </div>\n }\n\n @if (loading) {\n <mat-progress-spinner class=\"loading\" mode=\"indeterminate\" [diameter]=\"40\" />\n }\n</div>\n\n@if (!disabled) {\n @if (hierarchicSelectorConfig) {\n <div>\n <button color=\"primary\" mat-flat-button (click)=\"openNaturalHierarchicSelector()\">{{ placeholder }}</button>\n </div>\n } @else {\n <natural-select\n [displayWith]=\"$any(getDisplayFn())\"\n [filter]=\"autocompleteSelectorFilter\"\n [placeholder]=\"placeholder\"\n [service]=\"service\"\n [showIcon]=\"false\"\n (selectionChange)=\"addRelations([$event])\"\n />\n }\n}\n", styles: [":host{display:flex;flex-direction:column}:host>*:not(:last-child){margin-bottom:20px}:host .body{display:flex;flex-direction:column}:host .loading{margin:20px auto}:host .mat-column-unlink{width:2.5em}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i2$3.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i2$3.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i2$3.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i2$3.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i2$3.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i2$3.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i2$3.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i2$3.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i2$3.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i2$3.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i6$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NaturalIconDirective, selector: "mat-icon[naturalIcon]", inputs: ["naturalIcon", "size"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i6$2.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i8.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: NaturalSelectComponent, selector: "natural-select", inputs: ["service", "optionRequired", "searchField", "searchOperator", "filter", "pageSize", "disabled"] }] });
|
|
10187
10206
|
}
|
|
10188
10207
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: NaturalRelationsComponent, decorators: [{
|
|
10189
10208
|
type: Component,
|
|
@@ -10220,6 +10239,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImpo
|
|
|
10220
10239
|
type: Input
|
|
10221
10240
|
}], filter: [{
|
|
10222
10241
|
type: Input
|
|
10242
|
+
}], sorting: [{
|
|
10243
|
+
type: Input
|
|
10223
10244
|
}] } });
|
|
10224
10245
|
|
|
10225
10246
|
/*
|
|
@@ -11454,5 +11475,5 @@ function graphqlQuerySigner(key) {
|
|
|
11454
11475
|
* Generated bundle index. Do not edit.
|
|
11455
11476
|
*/
|
|
11456
11477
|
|
|
11457
|
-
export { AvatarService, InvalidWithValueStateMatcher$1 as InvalidWithValueStateMatcher, LOCAL_STORAGE, NATURAL_DROPDOWN_DATA, NATURAL_ICONS_CONFIG, NATURAL_PERSISTENCE_VALIDATOR, NATURAL_SEO_CONFIG, NaturalAbstractDetail, NaturalAbstractEditableList, NaturalAbstractList, NaturalAbstractModelService, NaturalAbstractNavigableList, NaturalAbstractPanel, NaturalAlertService, NaturalAvatarComponent, NaturalBackgroundDensityDirective, NaturalCapitalizePipe, NaturalColumnsPickerComponent, NaturalConfirmComponent, NaturalDataSource, NaturalDebounceService, NaturalDetailHeaderComponent, NaturalDialogTriggerComponent, NaturalDropdownRef, NaturalEllipsisPipe, NaturalEnumPipe, NaturalEnumService, NaturalErrorHandler, NaturalFileComponent, NaturalFileDropDirective, NaturalFileSelectDirective, NaturalFileService, NaturalFixedButtonComponent, NaturalFixedButtonDetailComponent, NaturalHierarchicSelectorComponent, NaturalHierarchicSelectorDialogComponent, NaturalHierarchicSelectorDialogService, NaturalHierarchicSelectorService, NaturalHttpPrefixDirective, NaturalIconDirective, NaturalLinkMutationService, NaturalLinkableTabDirective, NaturalLoggerConfigExtra, NaturalLoggerConfigUrl, NaturalMatomoService, NaturalMemoryStorage, NaturalPanelsComponent, NaturalPanelsService, NaturalPersistenceService, NaturalQueryVariablesManager, NaturalRelationsComponent, NaturalSearchComponent, NaturalSelectComponent, NaturalSelectEnumComponent, NaturalSelectHierarchicComponent, NaturalSeoService, NaturalSidenavComponent, NaturalSidenavContainerComponent, NaturalSidenavContentComponent, NaturalSidenavService, NaturalSidenavStackService, NaturalSrcDensityDirective, NaturalStampComponent, NaturalSwissParsingDateAdapter, NaturalTableButtonComponent, NaturalTimeAgoPipe, NetworkActivityService, PanelsHooksConfig, SESSION_STORAGE, SortingOrder, TypeBooleanComponent, TypeDateComponent, TypeDateRangeComponent, TypeHierarchicSelectorComponent, TypeNaturalSelectComponent, TypeNumberComponent, TypeOptionsComponent, TypeSelectComponent, TypeTextComponent, activityInterceptor, available, cancellableTimeout, collectErrors, copyToClipboard, createHttpLink, debug, decimal, deepFreeze, deliverableEmail, ensureHttpPrefix, fallbackIfNoOpenedPanels, formatIsoDate, formatIsoDateTime, fromUrl, getForegroundColor, graphqlQuerySigner, ifValid, integer, localStorageFactory, localStorageProvider, makePlural, memoryLocalStorageProvider, memorySessionStorageProvider, mergeOverrideArray, money, naturalPanelsUrlMatcher, naturalProviders, onHistoryEvent, possibleComparableOperators, provideErrorHandler, provideIcons, providePanels, provideSeo, relationsToIds, replaceObjectKeepingReference, replaceOperatorByField, replaceOperatorByName, rgbToHex, sessionStorageFactory, sessionStorageProvider, toGraphQLDoctrineFilter, toNavigationParameters, toUrl, unique, upperCaseFirstLetter, urlValidator, validTlds, validateAllFormControls, validateColumns, validatePagination, validateSorting, wrapLike, wrapPrefix, wrapSuffix };
|
|
11478
|
+
export { AvatarService, InvalidWithValueStateMatcher$1 as InvalidWithValueStateMatcher, LOCAL_STORAGE, NATURAL_DROPDOWN_DATA, NATURAL_ICONS_CONFIG, NATURAL_PERSISTENCE_VALIDATOR, NATURAL_SEO_CONFIG, NaturalAbstractDetail, NaturalAbstractEditableList, NaturalAbstractList, NaturalAbstractModelService, NaturalAbstractNavigableList, NaturalAbstractPanel, NaturalAlertService, NaturalAvatarComponent, NaturalBackgroundDensityDirective, NaturalCapitalizePipe, NaturalColumnsPickerComponent, NaturalConfirmComponent, NaturalDataSource, NaturalDebounceService, NaturalDetailHeaderComponent, NaturalDialogTriggerComponent, NaturalDropdownRef, NaturalEllipsisPipe, NaturalEnumPipe, NaturalEnumService, NaturalErrorHandler, NaturalFileComponent, NaturalFileDropDirective, NaturalFileSelectDirective, NaturalFileService, NaturalFixedButtonComponent, NaturalFixedButtonDetailComponent, NaturalHierarchicSelectorComponent, NaturalHierarchicSelectorDialogComponent, NaturalHierarchicSelectorDialogService, NaturalHierarchicSelectorService, NaturalHttpPrefixDirective, NaturalIconDirective, NaturalLinkMutationService, NaturalLinkableTabDirective, NaturalLoggerConfigExtra, NaturalLoggerConfigUrl, NaturalMatomoService, NaturalMemoryStorage, NaturalPanelsComponent, NaturalPanelsService, NaturalPersistenceService, NaturalQueryVariablesManager, NaturalRelationsComponent, NaturalSearchComponent, NaturalSelectComponent, NaturalSelectEnumComponent, NaturalSelectHierarchicComponent, NaturalSeoService, NaturalSidenavComponent, NaturalSidenavContainerComponent, NaturalSidenavContentComponent, NaturalSidenavService, NaturalSidenavStackService, NaturalSrcDensityDirective, NaturalStampComponent, NaturalSwissParsingDateAdapter, NaturalTableButtonComponent, NaturalTimeAgoPipe, NetworkActivityService, PanelsHooksConfig, SESSION_STORAGE, SortingOrder, TypeBooleanComponent, TypeDateComponent, TypeDateRangeComponent, TypeHierarchicSelectorComponent, TypeNaturalSelectComponent, TypeNumberComponent, TypeOptionsComponent, TypeSelectComponent, TypeTextComponent, activityInterceptor, available, cancellableTimeout, cloneDeepButSkipFile, collectErrors, copyToClipboard, createHttpLink, debug, decimal, deepFreeze, deliverableEmail, ensureHttpPrefix, fallbackIfNoOpenedPanels, formatIsoDate, formatIsoDateTime, fromUrl, getForegroundColor, graphqlQuerySigner, ifValid, integer, isFile, localStorageFactory, localStorageProvider, makePlural, memoryLocalStorageProvider, memorySessionStorageProvider, mergeOverrideArray, money, naturalPanelsUrlMatcher, naturalProviders, onHistoryEvent, possibleComparableOperators, provideErrorHandler, provideIcons, providePanels, provideSeo, relationsToIds, replaceObjectKeepingReference, replaceOperatorByField, replaceOperatorByName, rgbToHex, sessionStorageFactory, sessionStorageProvider, toGraphQLDoctrineFilter, toNavigationParameters, toUrl, unique, upperCaseFirstLetter, urlValidator, validTlds, validateAllFormControls, validateColumns, validatePagination, validateSorting, wrapLike, wrapPrefix, wrapSuffix };
|
|
11458
11479
|
//# sourceMappingURL=ecodev-natural.mjs.map
|