@mediusinc/mng-commons 0.4.4 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/esm2020/lib/api/services/api.abstract.service.mjs +15 -4
  2. package/esm2020/lib/api/services/crud-api.abstract.service.mjs +3 -3
  3. package/esm2020/lib/components/action/action.component.mjs +52 -8
  4. package/esm2020/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +25 -1
  5. package/esm2020/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +12 -3
  6. package/esm2020/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +26 -1
  7. package/esm2020/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.mjs +17 -0
  8. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +8 -4
  9. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +3 -3
  10. package/esm2020/lib/components/form/formly/fields/index.mjs +2 -1
  11. package/esm2020/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +3 -3
  12. package/esm2020/lib/components/form/formly/wrappers/formly-table-wrapper/formly-table-wrapper.component.mjs +3 -3
  13. package/esm2020/lib/config/formly.config.mjs +7 -2
  14. package/esm2020/lib/config/models/mng-config.model.mjs +1 -1
  15. package/esm2020/lib/descriptors/action.descriptor.mjs +34 -6
  16. package/esm2020/lib/descriptors/field.descriptor.mjs +48 -10
  17. package/esm2020/lib/descriptors/table.descriptor.mjs +3 -13
  18. package/esm2020/lib/mng-commons.module.mjs +9 -4
  19. package/esm2020/lib/pipes/enum.pipe.mjs +2 -2
  20. package/esm2020/lib/services/action-executor.service.mjs +28 -5
  21. package/esm2020/lib/services/commons.service.mjs +9 -10
  22. package/esm2020/lib/services/configuration.service.mjs +53 -19
  23. package/esm2020/lib/services/internal/commons-init.provider.mjs +4 -0
  24. package/esm2020/lib/services/internal/commons-init.service.mjs +44 -0
  25. package/esm2020/lib/services/internal/index.mjs +3 -0
  26. package/esm2020/lib/services/providers/config-service.provider.mjs +13 -3
  27. package/esm2020/lib/services/providers/index.mjs +1 -2
  28. package/esm2020/lib/services/tokens/commons-init.token.mjs +3 -0
  29. package/esm2020/lib/services/tokens/index.mjs +2 -1
  30. package/esm2020/lib/utils/editor-formly.util.mjs +5 -5
  31. package/esm2020/public-api.mjs +3 -1
  32. package/fesm2015/mediusinc-mng-commons.mjs +395 -92
  33. package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
  34. package/fesm2020/mediusinc-mng-commons.mjs +381 -89
  35. package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
  36. package/lib/api/services/api.abstract.service.d.ts +1 -1
  37. package/lib/api/services/crud-api.abstract.service.d.ts +8 -8
  38. package/lib/components/action/action.component.d.ts +13 -2
  39. package/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +4 -2
  40. package/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +7 -1
  41. package/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.d.ts +4 -2
  42. package/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.d.ts +6 -0
  43. package/lib/components/form/formly/fields/index.d.ts +1 -0
  44. package/lib/config/models/mng-config.model.d.ts +1 -1
  45. package/lib/descriptors/action.descriptor.d.ts +28 -3
  46. package/lib/descriptors/field.descriptor.d.ts +26 -12
  47. package/lib/descriptors/table.descriptor.d.ts +0 -1
  48. package/lib/mng-commons.module.d.ts +58 -57
  49. package/lib/pipes/enum.pipe.d.ts +2 -1
  50. package/lib/services/commons.service.d.ts +4 -4
  51. package/lib/services/configuration.service.d.ts +3 -2
  52. package/lib/services/internal/commons-init.provider.d.ts +3 -0
  53. package/lib/services/internal/commons-init.service.d.ts +16 -0
  54. package/lib/services/internal/index.d.ts +2 -0
  55. package/lib/services/providers/config-service.provider.d.ts +2 -1
  56. package/lib/services/providers/index.d.ts +0 -1
  57. package/lib/services/tokens/commons-init.token.d.ts +3 -0
  58. package/lib/services/tokens/index.d.ts +1 -0
  59. package/package.json +1 -1
  60. package/public-api.d.ts +1 -0
  61. package/scss/mng-overrides/_layout_dialog.scss +44 -14
  62. package/scss/mng-overrides/_theme_dialog.scss +2 -3
  63. package/esm2020/lib/services/providers/commons-init.provider.mjs +0 -4
  64. package/lib/services/providers/commons-init.provider.d.ts +0 -2
@@ -72,7 +72,7 @@ import * as i4$3 from 'primeng/toolbar';
72
72
  import { ToolbarModule } from 'primeng/toolbar';
73
73
  import * as i9 from 'primeng/tooltip';
74
74
  import { TooltipModule } from 'primeng/tooltip';
75
- import { throwError, of, Subject, Observable, from, BehaviorSubject, ReplaySubject, switchMap, distinctUntilChanged, combineLatest } from 'rxjs';
75
+ import { throwError, of, Subject, Observable, from, combineLatest, tap, BehaviorSubject, ReplaySubject, distinctUntilChanged, switchMap, mergeMap as mergeMap$1 } from 'rxjs';
76
76
  import 'reflect-metadata';
77
77
  import { map, mergeMap, first, catchError, filter, finalize, startWith } from 'rxjs/operators';
78
78
  import * as i4$1 from '@angular/platform-browser';
@@ -526,6 +526,9 @@ class ActionDescriptor {
526
526
  get runConfirmationRejectTitle() {
527
527
  return this._runConfirmationRejectTitle;
528
528
  }
529
+ get runConfirmationConfigMapFn() {
530
+ return this._runConfirmationConfigMapFn;
531
+ }
529
532
  get hasRunNotificationSuccess() {
530
533
  return this._hasRunNotificationSuccess;
531
534
  }
@@ -617,13 +620,24 @@ class ActionDescriptor {
617
620
  this._position = position;
618
621
  return this;
619
622
  }
620
- withRunConfirmation(icon = 'pi pi-exclamation-triangle', title, message, acceptTitle, rejectTitle) {
623
+ /**
624
+ * Add a confirmation dialogue to the action
625
+ * @param icon the icon to display on the confirmation dialogue
626
+ * @param title the title of the confirmation dialogue
627
+ * @param message the message on the confirmation dialogue
628
+ * @param acceptTitle the title of the accepting button
629
+ * @param rejectTitle the title of the rejecting button
630
+ * @param runConfirmationConfigMapFn function used to generate the confirmation dialogue. **WARNING** changing the *accept* and *reject* methods of the *confirmConfig* parameter
631
+ * may lead to unexpected behaviour
632
+ */
633
+ withRunConfirmation(icon = 'pi pi-exclamation-triangle', title, message, acceptTitle, rejectTitle, runConfirmationConfigMapFn) {
621
634
  this._hasRunConfirmation = true;
622
635
  this._runConfirmationIcon = icon;
623
636
  this._runConfirmationTitle = title;
624
637
  this._runConfirmationMessage = message;
625
638
  this._runConfirmationAcceptTitle = acceptTitle;
626
639
  this._runConfirmationRejectTitle = rejectTitle;
640
+ this._runConfirmationConfigMapFn = runConfirmationConfigMapFn;
627
641
  return this;
628
642
  }
629
643
  withRunNotificationSuccess(title, message, hasNotification = true) {
@@ -659,7 +673,7 @@ class ActionEditorDescriptor extends ActionDescriptor {
659
673
  this._editorActions = [];
660
674
  this._editorTitle = undefined;
661
675
  this._hasFetchNotificationSuccess = false;
662
- this._dialogClassName = '';
676
+ this._dialogSize = ActionEditorDescriptor.DialogSizeEnum.Normal;
663
677
  this._type = ActionTypeEnum.Editor;
664
678
  this._editorDescriptor = editorDescriptor;
665
679
  this._editorActions.push(new ActionEditorSubmitDescriptor(this), new ActionEditorSubmitDescriptor(this, ActionEditorSubmitDescriptor.TypeEnum.Cancel));
@@ -670,6 +684,9 @@ class ActionEditorDescriptor extends ActionDescriptor {
670
684
  get editorDescriptor() {
671
685
  return this._editorDescriptor;
672
686
  }
687
+ get dialogSize() {
688
+ return this._dialogSize;
689
+ }
673
690
  get dialogClassName() {
674
691
  return this._dialogClassName;
675
692
  }
@@ -721,6 +738,10 @@ class ActionEditorDescriptor extends ActionDescriptor {
721
738
  this._dataProvider = new EditorDataProvider(this._model.type, serviceType);
722
739
  return this;
723
740
  }
741
+ withDialogSize(size = ActionEditorDescriptor.DialogSizeEnum.Normal) {
742
+ this._dialogSize = size;
743
+ return this;
744
+ }
724
745
  withDialogClassName(className) {
725
746
  this._dialogClassName = className;
726
747
  return this;
@@ -755,6 +776,16 @@ class ActionEditorDescriptor extends ActionDescriptor {
755
776
  return this;
756
777
  }
757
778
  }
779
+ (function (ActionEditorDescriptor) {
780
+ let DialogSizeEnum;
781
+ (function (DialogSizeEnum) {
782
+ DialogSizeEnum[DialogSizeEnum["ExtraSmall"] = 0] = "ExtraSmall";
783
+ DialogSizeEnum[DialogSizeEnum["Small"] = 1] = "Small";
784
+ DialogSizeEnum[DialogSizeEnum["Normal"] = 2] = "Normal";
785
+ DialogSizeEnum[DialogSizeEnum["Large"] = 3] = "Large";
786
+ DialogSizeEnum[DialogSizeEnum["ExtraLarge"] = 4] = "ExtraLarge";
787
+ })(DialogSizeEnum = ActionEditorDescriptor.DialogSizeEnum || (ActionEditorDescriptor.DialogSizeEnum = {}));
788
+ })(ActionEditorDescriptor || (ActionEditorDescriptor = {}));
758
789
  class ActionEditorSubmitDescriptor extends ActionDescriptor {
759
790
  constructor(editorAction, submitType = ActionEditorSubmitDescriptor.TypeEnum.Submit) {
760
791
  super(editorAction.model, submitType === ActionEditorSubmitDescriptor.TypeEnum.Submit ? 'submit' : 'cancel');
@@ -783,7 +814,6 @@ class ActionEditorDetailsDescriptor extends ActionEditorDescriptor {
783
814
  ? ctx.dataProvider.fetch(ctx.data?.itemId, ctx.serviceInstance)
784
815
  : throwError(new Error(`Data provider fetch function or item id ${ctx.data?.itemId} is missing.`)));
785
816
  this.withEditorActions([new ActionEditorSubmitDescriptor(this, ActionEditorSubmitDescriptor.TypeEnum.Cancel)]);
786
- this.withDialogClassName('mng-details-dynamic-dialog');
787
817
  }
788
818
  withServiceType(serviceType) {
789
819
  return this.withServiceFetchFunction(serviceType);
@@ -806,7 +836,6 @@ class ActionEditorAddDescriptor extends ActionEditorDescriptor {
806
836
  this.withSubmitFunction(ctx => ctx.dataProvider?.create ? ctx.dataProvider.create(ctx.data?.item, ctx.serviceInstance) : throwError(new Error(`Data provider create function is missing.`)));
807
837
  this.withLevel(ActionLevelEnum.Success);
808
838
  this.withIcon('pi pi-plus');
809
- this.withDialogClassName('mng-details-dynamic-dialog');
810
839
  }
811
840
  withServiceType(serviceType) {
812
841
  return this.withServiceSubmitFunction(serviceType);
@@ -837,7 +866,6 @@ class ActionEditorEditDescriptor extends ActionEditorDescriptor {
837
866
  ? ctx.dataProvider.update(ctx.data.itemId, ctx.data?.item, ctx.serviceInstance)
838
867
  : throwError(new Error(`Data provider update function or item id ${ctx.data?.itemId} is missing.`)));
839
868
  this.withIcon('pi pi-pencil');
840
- this.withDialogClassName('mng-details-dynamic-dialog');
841
869
  }
842
870
  withServiceType(serviceType) {
843
871
  return this.withServiceSubmitFunction(serviceType);
@@ -1663,6 +1691,9 @@ class AFieldDescriptor extends AGenericFieldDescriptor {
1663
1691
  get className() {
1664
1692
  return this._className;
1665
1693
  }
1694
+ get fieldClassName() {
1695
+ return this._fieldClassName;
1696
+ }
1666
1697
  get labelClassName() {
1667
1698
  return this._labelClassName;
1668
1699
  }
@@ -1724,10 +1755,11 @@ class AFieldDescriptor extends AGenericFieldDescriptor {
1724
1755
  this._validators.push(new FieldValidator(name, expression, message));
1725
1756
  return this;
1726
1757
  }
1727
- withClassName(className, labelClassName = '', inputClassName = '') {
1758
+ withClassName(className, labelClassName = '', inputClassName = '', fieldClassName) {
1728
1759
  this._className = className;
1729
1760
  this._labelClassName = labelClassName;
1730
1761
  this._inputClassName = inputClassName;
1762
+ this._fieldClassName = fieldClassName;
1731
1763
  return this;
1732
1764
  }
1733
1765
  withSize(size = FieldDescriptor.SizeEnum.Normal) {
@@ -1836,6 +1868,10 @@ class FieldInputDescriptor extends AFieldDescriptor {
1836
1868
  this._fieldType = FieldInputDescriptor.TypeEnum.Hidden;
1837
1869
  return this;
1838
1870
  }
1871
+ asLabel() {
1872
+ this._fieldType = FieldInputDescriptor.TypeEnum.Label;
1873
+ return this;
1874
+ }
1839
1875
  asText(minLength, maxLength, pattern, isEmail) {
1840
1876
  this._fieldType = FieldInputDescriptor.TypeEnum.Text;
1841
1877
  this._minLength = minLength;
@@ -1931,14 +1967,15 @@ class FieldInputDescriptor extends AFieldDescriptor {
1931
1967
  let TypeEnum;
1932
1968
  (function (TypeEnum) {
1933
1969
  TypeEnum[TypeEnum["Hidden"] = 0] = "Hidden";
1934
- TypeEnum[TypeEnum["Text"] = 1] = "Text";
1935
- TypeEnum[TypeEnum["Textarea"] = 2] = "Textarea";
1936
- TypeEnum[TypeEnum["Number"] = 3] = "Number";
1937
- TypeEnum[TypeEnum["Switch"] = 4] = "Switch";
1938
- TypeEnum[TypeEnum["Radio"] = 5] = "Radio";
1939
- TypeEnum[TypeEnum["Datepicker"] = 6] = "Datepicker";
1940
- TypeEnum[TypeEnum["Mask"] = 7] = "Mask";
1941
- TypeEnum[TypeEnum["Custom"] = 8] = "Custom";
1970
+ TypeEnum[TypeEnum["Label"] = 1] = "Label";
1971
+ TypeEnum[TypeEnum["Text"] = 2] = "Text";
1972
+ TypeEnum[TypeEnum["Textarea"] = 3] = "Textarea";
1973
+ TypeEnum[TypeEnum["Number"] = 4] = "Number";
1974
+ TypeEnum[TypeEnum["Switch"] = 5] = "Switch";
1975
+ TypeEnum[TypeEnum["Radio"] = 6] = "Radio";
1976
+ TypeEnum[TypeEnum["Datepicker"] = 7] = "Datepicker";
1977
+ TypeEnum[TypeEnum["Mask"] = 8] = "Mask";
1978
+ TypeEnum[TypeEnum["Custom"] = 9] = "Custom";
1942
1979
  })(TypeEnum = FieldInputDescriptor.TypeEnum || (FieldInputDescriptor.TypeEnum = {}));
1943
1980
  })(FieldInputDescriptor || (FieldInputDescriptor = {}));
1944
1981
  class FieldLookupDescriptor extends AFieldDescriptor {
@@ -2096,6 +2133,16 @@ class FieldLookupEnumDescriptor extends FieldLookupDescriptor {
2096
2133
  }
2097
2134
  return this;
2098
2135
  }
2136
+ withDefaultValueEnum(defaultValue) {
2137
+ const defaultOptionValue = this._nameAsValue ? EnumUtil.getConstantName(this._enumType, defaultValue) : defaultValue;
2138
+ if (defaultOptionValue) {
2139
+ const option = this._optionEnumValues.find(o => o.value === defaultOptionValue);
2140
+ if (option) {
2141
+ this.withDefaultValue(option);
2142
+ }
2143
+ }
2144
+ return this;
2145
+ }
2099
2146
  asAutocomplete(openOnFocus = true) {
2100
2147
  super.asAutocomplete(openOnFocus, true);
2101
2148
  return this;
@@ -2318,6 +2365,13 @@ class FieldTabGroupDescriptor extends AFieldGroupDescriptor {
2318
2365
  class FieldGroupDescriptor extends AFieldGroupDescriptor {
2319
2366
  constructor(editor, name) {
2320
2367
  super(editor, name);
2368
+ this._type = FieldGroupDescriptor.TypeEnum.Fieldset;
2369
+ if (this._default) {
2370
+ this.asLogical();
2371
+ }
2372
+ }
2373
+ get type() {
2374
+ return this._type;
2321
2375
  }
2322
2376
  get fields() {
2323
2377
  return this._fields;
@@ -2329,13 +2383,25 @@ class FieldGroupDescriptor extends AFieldGroupDescriptor {
2329
2383
  this._fields.push(field);
2330
2384
  return this;
2331
2385
  }
2386
+ asLogical() {
2387
+ this._type = FieldGroupDescriptor.TypeEnum.Logical;
2388
+ return this;
2389
+ }
2332
2390
  copy() {
2333
2391
  const group = new FieldGroupDescriptor(this._editor, this.name.substring(this.baseName.length));
2392
+ group._type = this._type;
2334
2393
  group._title = this._title;
2335
2394
  group._fields = this.fields.map(f => f.copy());
2336
2395
  return group;
2337
2396
  }
2338
2397
  }
2398
+ (function (FieldGroupDescriptor) {
2399
+ let TypeEnum;
2400
+ (function (TypeEnum) {
2401
+ TypeEnum[TypeEnum["Fieldset"] = 0] = "Fieldset";
2402
+ TypeEnum[TypeEnum["Logical"] = 1] = "Logical";
2403
+ })(TypeEnum = FieldGroupDescriptor.TypeEnum || (FieldGroupDescriptor.TypeEnum = {}));
2404
+ })(FieldGroupDescriptor || (FieldGroupDescriptor = {}));
2339
2405
 
2340
2406
  class FieldValidator {
2341
2407
  constructor(name, expression, message, options) {
@@ -2403,6 +2469,7 @@ class TableDescriptor {
2403
2469
  this._rowHeight = 45;
2404
2470
  this._tableFullHeightOffset = 315;
2405
2471
  this._model = new ModelDescriptor(modelType, idProperty, titleProperty);
2472
+ this._dataKeyProperty = idProperty ?? ModelUtil.findIdAttribute(modelType) ?? undefined;
2406
2473
  }
2407
2474
  get filterDisplay() {
2408
2475
  return this._filterDisplay;
@@ -2442,48 +2509,41 @@ class TableDescriptor {
2442
2509
  }
2443
2510
  addColumnDescriptor(column) {
2444
2511
  this._columns.push(column);
2445
- this.setDataKeyFromColumn();
2446
2512
  return this;
2447
2513
  }
2448
2514
  addColumn(property) {
2449
2515
  const column = new ColumnDescriptor(this, property);
2450
2516
  this._columns.push(column);
2451
- this.setDataKeyFromColumn();
2452
2517
  return column;
2453
2518
  }
2454
2519
  addColumnNumber(property, displayFormat) {
2455
2520
  const column = new ColumnDescriptor(this, property);
2456
2521
  column.asNumber(displayFormat);
2457
2522
  this._columns.push(column);
2458
- this.setDataKeyFromColumn();
2459
2523
  return column;
2460
2524
  }
2461
2525
  addColumnDate(property, displayFormat) {
2462
2526
  const column = new ColumnDescriptor(this, property);
2463
2527
  column.asDate(displayFormat);
2464
2528
  this._columns.push(column);
2465
- this.setDataKeyFromColumn();
2466
2529
  return column;
2467
2530
  }
2468
2531
  addColumnBoolean(property, yes, no, asIcon = false) {
2469
2532
  const column = new ColumnDescriptor(this, property);
2470
2533
  column.asBoolean(yes, no, asIcon);
2471
2534
  this._columns.push(column);
2472
- this.setDataKeyFromColumn();
2473
2535
  return column;
2474
2536
  }
2475
2537
  addColumnEnum(property, enumType, nameAsValue = false, titlePath) {
2476
2538
  const column = new ColumnDescriptor(this, property);
2477
2539
  column.asEnum(enumType, nameAsValue, titlePath);
2478
2540
  this._columns.push(column);
2479
- this.setDataKeyFromColumn();
2480
2541
  return column;
2481
2542
  }
2482
2543
  addColumnCustomComponent(property, customComponentType) {
2483
2544
  const column = new ColumnDescriptor(this, property);
2484
2545
  column.asCustomComponent(customComponentType);
2485
2546
  this._columns.push(column);
2486
- this.setDataKeyFromColumn();
2487
2547
  return column;
2488
2548
  }
2489
2549
  withFilterDisplay(filterDisplayType) {
@@ -2531,11 +2591,6 @@ class TableDescriptor {
2531
2591
  descriptor._filterDisplay = this._filterDisplay;
2532
2592
  return descriptor;
2533
2593
  }
2534
- setDataKeyFromColumn() {
2535
- if (!this._dataKeyProperty && this._columns.length === 1) {
2536
- this._dataKeyProperty = this._columns[0].property;
2537
- }
2538
- }
2539
2594
  }
2540
2595
  (function (TableDescriptor) {
2541
2596
  let PaginationModeEnum;
@@ -2770,16 +2825,16 @@ class EditorFormlyUtil {
2770
2825
  // assign default field width through entire row
2771
2826
  className = 'col-12';
2772
2827
  }
2773
- if (className.indexOf('col-') < 0) {
2774
- // class was provided, but does not contain col- definition
2775
- className = `col-12 ${descriptor.className}`;
2776
- }
2777
2828
  field.className = className;
2778
2829
  field.templateOptions['descriptor'] = descriptor;
2779
2830
  if (descriptor instanceof FieldInputDescriptor) {
2780
2831
  switch (descriptor.fieldType) {
2781
2832
  case FieldInputDescriptor.TypeEnum.Hidden:
2782
2833
  break;
2834
+ case FieldInputDescriptor.TypeEnum.Label:
2835
+ field.type = 'label';
2836
+ delete field.key;
2837
+ break;
2783
2838
  case FieldInputDescriptor.TypeEnum.Textarea:
2784
2839
  field.type = 'textarea';
2785
2840
  break;
@@ -3799,6 +3854,8 @@ const MNG_BROWSER_STORAGE_IT = new InjectionToken('Browser storage', {
3799
3854
  factory: () => localStorage
3800
3855
  });
3801
3856
 
3857
+ const MNG_COMMONS_INITIALIZER_IT = new InjectionToken('MNG Commons Initializer');
3858
+
3802
3859
  const ACTION_EDITOR_DIALOG_COMPONENT_SETTING = new InjectionToken('ACTION_EDITOR_DIALOG_COMPONENT_SETTING');
3803
3860
 
3804
3861
  const MNG_MODULE_CONFIG_IT = new InjectionToken('MngModuleConfig');
@@ -3887,7 +3944,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImpor
3887
3944
 
3888
3945
  class MngEnumPipe {
3889
3946
  transform(value, enumObj, i18nPath, nameAsValue = false) {
3890
- if (!value || !enumObj) {
3947
+ if (!value || (typeof value !== 'number' && typeof value !== 'string') || !enumObj) {
3891
3948
  return value;
3892
3949
  }
3893
3950
  const enumConstantName = nameAsValue ? value : EnumUtil.getConstantNameFromEnumObject(enumObj, value);
@@ -4064,7 +4121,7 @@ class MngActionExecutorService {
4064
4121
  throw Error(`Source component ${sourceComponent} should be implementing IConfirmationService interface to be able to provide confirmation functionality.`);
4065
4122
  }
4066
4123
  const srcConfirmComponent = sourceComponent;
4067
- const confirmParams = {
4124
+ let confirmParams = {
4068
4125
  key: srcConfirmComponent.getConfirmationServiceInstanceKey(action),
4069
4126
  acceptVisible: false,
4070
4127
  rejectVisible: false
@@ -4110,6 +4167,9 @@ class MngActionExecutorService {
4110
4167
  confirmParams.reject = () => {
4111
4168
  observer.error(new ActionRunResult(context, undefined, new ActionError(null, true)));
4112
4169
  };
4170
+ if (action.runConfirmationConfigMapFn) {
4171
+ confirmParams = action.runConfirmationConfigMapFn(context, confirmParams);
4172
+ }
4113
4173
  srcConfirmComponent.getConfirmationService().confirm(confirmParams);
4114
4174
  });
4115
4175
  return observable;
@@ -4230,13 +4290,33 @@ class MngActionExecutorService {
4230
4290
  let dialogComponent = this.defaultEditorDialogComponent;
4231
4291
  let dialogClassName = '';
4232
4292
  if (action instanceof ActionEditorDescriptor) {
4293
+ dialogClassName = action.dialogClassName ?? 'mng-action-editor-dialog';
4294
+ let dialogSizeClassName = '';
4295
+ switch (action.dialogSize) {
4296
+ case ActionEditorDescriptor.DialogSizeEnum.ExtraSmall:
4297
+ dialogSizeClassName = 'mng-action-editor-dialog-xs';
4298
+ break;
4299
+ case ActionEditorDescriptor.DialogSizeEnum.Small:
4300
+ dialogSizeClassName = 'mng-action-editor-dialog-sm';
4301
+ break;
4302
+ case ActionEditorDescriptor.DialogSizeEnum.Large:
4303
+ dialogSizeClassName = 'mng-action-editor-dialog-lg';
4304
+ break;
4305
+ case ActionEditorDescriptor.DialogSizeEnum.ExtraLarge:
4306
+ dialogSizeClassName = 'mng-action-editor-dialog-xl';
4307
+ break;
4308
+ case ActionEditorDescriptor.DialogSizeEnum.Normal:
4309
+ default:
4310
+ break;
4311
+ }
4312
+ if (dialogSizeClassName.length) {
4313
+ dialogClassName += ` ${dialogSizeClassName}`;
4314
+ }
4233
4315
  if (action.editorComponent) {
4234
4316
  dialogComponent = action.editorComponent;
4235
4317
  }
4236
- if (action.dialogClassName) {
4237
- dialogClassName = action.dialogClassName;
4238
- }
4239
4318
  }
4319
+ console.log(dialogClassName);
4240
4320
  const dialogConfig = {
4241
4321
  data: {
4242
4322
  action
@@ -4362,7 +4442,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImpor
4362
4442
  class MngConfigurationService {
4363
4443
  constructor(http) {
4364
4444
  this.http = http;
4365
- this.jsonEnvironments = [];
4445
+ this.jsonSources = [];
4366
4446
  this.configuration = { ...this.projectEnvironment };
4367
4447
  }
4368
4448
  static init(httpClient) {
@@ -4389,23 +4469,55 @@ class MngConfigurationService {
4389
4469
  * Adds new config source from JSON file.
4390
4470
  * @param url Url to JSON file.
4391
4471
  */
4392
- addJsonSource(url = this.projectEnvironment.configurationJsonSource) {
4472
+ addJsonSource(url = this.projectEnvironment.configurationJsonSource, load = false) {
4393
4473
  if (!url) {
4394
- console.warn('No path to configuration file specified. Setting default.');
4474
+ console.debug('No path to configuration file specified. Setting default.');
4395
4475
  url = 'assets/config/env{{environment}}.json';
4396
4476
  }
4397
- const envName = this.projectEnvironment.name || (this.projectEnvironment.production ? 'prod' : 'dev');
4398
- url = url.replace('{{environment}}', '.' + envName);
4399
- return this.http.get(url).pipe(catchError(err => {
4400
- console.warn('Error loading configuration file:' + err.message + '. Falling back to env.json');
4401
- const pathSegments = url.split('/');
4402
- pathSegments[pathSegments.length - 1] = 'env.json';
4403
- return this.http.get(pathSegments.join('/'));
4404
- }), map(res => {
4405
- this.jsonEnvironments.push(res);
4406
- this.mergeConfigs();
4407
- return true;
4408
- }));
4477
+ const sourceInfo = {
4478
+ url: url,
4479
+ isEnvironment: false,
4480
+ isLoaded: false
4481
+ };
4482
+ this.jsonSources.push(sourceInfo);
4483
+ console.debug(`Added JSON source: ${url}`);
4484
+ if (load) {
4485
+ return this.loadJsonSources();
4486
+ }
4487
+ else {
4488
+ return of(true);
4489
+ }
4490
+ }
4491
+ loadJsonSources() {
4492
+ return combineLatest(this.jsonSources
4493
+ .filter(source => !source.isLoaded)
4494
+ .map(sourceInfo => {
4495
+ let url = sourceInfo.url;
4496
+ if (url.indexOf('{{environment}}') >= 0) {
4497
+ sourceInfo.isEnvironment = true;
4498
+ sourceInfo.environment = this.projectEnvironment.name || (this.projectEnvironment.production ? 'prod' : 'dev');
4499
+ url = url.replace('{{environment}}', '.' + sourceInfo.environment);
4500
+ }
4501
+ console.debug(`Loading JSON source: ${sourceInfo.url} with env ${sourceInfo.environment ?? '/'}`);
4502
+ return this.http.get(url).pipe(catchError((err) => {
4503
+ if (sourceInfo.isEnvironment) {
4504
+ const noEnvUrl = sourceInfo.url.replace('{{environment}}', '');
4505
+ sourceInfo.environment = null;
4506
+ console.debug(`Reloading JSON source: ${sourceInfo.url} with env ${sourceInfo.environment ?? '/'}`);
4507
+ return this.http.get(noEnvUrl);
4508
+ }
4509
+ else {
4510
+ const message = `Configuration file ${url} not loaded (${err.status}): ${err.message}.`;
4511
+ console.error(message);
4512
+ return throwError(() => new Error(message));
4513
+ }
4514
+ }), map(configuration => {
4515
+ sourceInfo.configuration = configuration;
4516
+ sourceInfo.isLoaded = true;
4517
+ console.debug(`JSON source loaded: ${sourceInfo.url}`);
4518
+ return true;
4519
+ }));
4520
+ })).pipe(map(sourceResults => sourceResults.every(sr => sr)), tap(sourceResults => this.mergeConfigs()));
4409
4521
  }
4410
4522
  /**
4411
4523
  * Get configuration.
@@ -4425,9 +4537,10 @@ class MngConfigurationService {
4425
4537
  */
4426
4538
  mergeConfigs() {
4427
4539
  let config = { ...this.projectEnvironment };
4428
- if (this.jsonEnvironments.length) {
4429
- for (const je of this.jsonEnvironments) {
4430
- config = { ...config, ...je };
4540
+ const jsonConfigs = this.jsonSources.filter(source => source.isLoaded && typeof source.configuration === 'object').map(source => source.configuration);
4541
+ if (jsonConfigs.length) {
4542
+ for (const jsonConfig of jsonConfigs) {
4543
+ config = { ...config, ...jsonConfig };
4431
4544
  }
4432
4545
  }
4433
4546
  this.configuration = config;
@@ -4436,12 +4549,11 @@ class MngConfigurationService {
4436
4549
  MngConfigurationService._instance = null;
4437
4550
 
4438
4551
  class MngCommonsService {
4439
- constructor(router, primengConfig, translate, titleService, configurationService, moduleConfig, localStorage) {
4552
+ constructor(router, primengConfig, translate, titleService, moduleConfig, localStorage) {
4440
4553
  this.router = router;
4441
4554
  this.primengConfig = primengConfig;
4442
4555
  this.translate = translate;
4443
4556
  this.titleService = titleService;
4444
- this.configurationService = configurationService;
4445
4557
  this.moduleConfig = moduleConfig;
4446
4558
  this.localStorage = localStorage;
4447
4559
  // menu
@@ -4570,8 +4682,7 @@ class MngCommonsService {
4570
4682
  get user$() {
4571
4683
  return this.userSubject.asObservable();
4572
4684
  }
4573
- initialize() {
4574
- // menu
4685
+ reset() {
4575
4686
  this._menuMode = this.moduleConfig?.menu?.mode ?? 'sidebar';
4576
4687
  this._menuModeSubject.next(this._menuMode);
4577
4688
  this._menuItems = this.moduleConfig?.menu?.menuItems ?? [];
@@ -4605,7 +4716,8 @@ class MngCommonsService {
4605
4716
  this.translate.langs = this.appLanguages;
4606
4717
  this.translate.use(this.appLanguage);
4607
4718
  this.translate.get('mngPrime').subscribe(value => this.primengConfig.setTranslation(value));
4608
- this.router.events
4719
+ this.routerEventsSubscription?.unsubscribe();
4720
+ this.routerEventsSubscription = this.router.events
4609
4721
  .pipe(
4610
4722
  // Filter the NavigationEnd events as the breadcrumb is updated only when the route reaches its end
4611
4723
  filter(event => event instanceof NavigationEnd))
@@ -4613,7 +4725,8 @@ class MngCommonsService {
4613
4725
  this.updateBreadcrumbs();
4614
4726
  this.setPageTitle();
4615
4727
  });
4616
- this.translate.onLangChange.subscribe(() => {
4728
+ this.translateLangChangeSubscription?.unsubscribe();
4729
+ this.translateLangChangeSubscription = this.translate.onLangChange.subscribe(() => {
4617
4730
  this.updateBreadcrumbs();
4618
4731
  this.setPageTitle();
4619
4732
  });
@@ -4756,11 +4869,11 @@ class MngCommonsService {
4756
4869
  return titlePieces.join(' - ');
4757
4870
  }
4758
4871
  }
4759
- MngCommonsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngCommonsService, deps: [{ token: i1.Router }, { token: i2.PrimeNGConfig }, { token: i1$1.TranslateService }, { token: i4$1.Title }, { token: MngConfigurationService }, { token: MNG_MODULE_CONFIG_IT }, { token: MNG_BROWSER_STORAGE_IT }], target: i0.ɵɵFactoryTarget.Injectable });
4872
+ MngCommonsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngCommonsService, deps: [{ token: i1.Router }, { token: i2.PrimeNGConfig }, { token: i1$1.TranslateService }, { token: i4$1.Title }, { token: MNG_MODULE_CONFIG_IT }, { token: MNG_BROWSER_STORAGE_IT }], target: i0.ɵɵFactoryTarget.Injectable });
4760
4873
  MngCommonsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngCommonsService });
4761
4874
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngCommonsService, decorators: [{
4762
4875
  type: Injectable
4763
- }], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.PrimeNGConfig }, { type: i1$1.TranslateService }, { type: i4$1.Title }, { type: MngConfigurationService }, { type: undefined, decorators: [{
4876
+ }], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.PrimeNGConfig }, { type: i1$1.TranslateService }, { type: i4$1.Title }, { type: undefined, decorators: [{
4764
4877
  type: Inject,
4765
4878
  args: [MNG_MODULE_CONFIG_IT]
4766
4879
  }] }, { type: Storage, decorators: [{
@@ -4821,17 +4934,25 @@ class MngActionComponent {
4821
4934
  this.loadingSubject = new ReplaySubject(1);
4822
4935
  this.$loading = this.loadingSubject.asObservable();
4823
4936
  this.cmpId = Math.random().toString(36).substring(2);
4937
+ this.isVisibleSubject = new ReplaySubject(1);
4938
+ this.$isVisible = this.isVisibleSubject.asObservable().pipe(distinctUntilChanged());
4939
+ this.isEnabledSubject = new ReplaySubject(1);
4940
+ this.$isEnabled = this.isEnabledSubject.asObservable().pipe(distinctUntilChanged());
4941
+ this.labelSubject = new ReplaySubject(1);
4942
+ this.$label = this.labelSubject.asObservable().pipe(distinctUntilChanged());
4943
+ this.tooltipSubject = new ReplaySubject(1);
4944
+ this.$tooltip = this.tooltipSubject.asObservable().pipe(distinctUntilChanged());
4824
4945
  this.hasNoTitle = false;
4825
4946
  this.loadingSubject.next(false);
4826
4947
  }
4827
4948
  ngOnInit() {
4828
4949
  this.viewContainer = this.viewContainerInit ?? this.viewContainerService ?? undefined;
4829
4950
  this.hasNoTitle = this.action.title === null;
4830
- const context = this.actionExecutor.prepareActionExecContext(this.action, this.itemId, this.item, this.dataProvider, this.viewContainer ?? undefined, this, this.actionData);
4831
- this.$isVisible = typeof this.action.isVisibleFunction === 'function' ? this.action.isVisibleFunction(context) : of(true);
4832
- this.$isEnabled = typeof this.action.isEnabledFunction === 'function' ? this.action.isEnabledFunction(context) : of(true);
4833
- this.$label = this.hasNoTitle ? of(null) : I18nUtils.Action.getAsync(this.translate, this.action, 'title', this.action?.title ?? undefined, this.item);
4834
- this.$tooltip = I18nUtils.Action.getAsync(this.translate, this.action, 'tooltip', this.action?.tooltip ?? undefined, this.item);
4951
+ this.isEnabledSubject.next(true);
4952
+ this.isVisibleSubject.next(true);
4953
+ this.labelSubject.next(null);
4954
+ this.tooltipSubject.next(null);
4955
+ this.processSubscriptions();
4835
4956
  if (this.action instanceof ActionLinkDescriptor) {
4836
4957
  this.actionLink = this.action;
4837
4958
  }
@@ -4839,6 +4960,17 @@ class MngActionComponent {
4839
4960
  this.hostClass = this.action.className;
4840
4961
  }
4841
4962
  }
4963
+ ngOnChanges(changes) {
4964
+ if (!(changes['item']?.firstChange ?? true) || !(changes['itemId']?.firstChange ?? true) || !(changes['actionData']?.firstChange ?? true)) {
4965
+ this.processSubscriptions();
4966
+ }
4967
+ }
4968
+ ngOnDestroy() {
4969
+ this.isVisibleSubscription?.unsubscribe();
4970
+ this.isEnabledSubscription?.unsubscribe();
4971
+ this.labelSubscription?.unsubscribe();
4972
+ this.tooltipSubscription?.unsubscribe();
4973
+ }
4842
4974
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
4843
4975
  triggerAction(event) {
4844
4976
  this.loadingSubject.next(true);
@@ -4864,9 +4996,34 @@ class MngActionComponent {
4864
4996
  getConfirmationServiceInstanceKey(action) {
4865
4997
  return `${action.actionName}_${this.cmpId}`;
4866
4998
  }
4999
+ processSubscriptions() {
5000
+ const context = this.actionExecutor.prepareActionExecContext(this.action, this.itemId, this.item, this.dataProvider, this.viewContainer ?? undefined, this, this.actionData);
5001
+ if (typeof this.action.isVisibleFunction === 'function') {
5002
+ this.isVisibleSubscription?.unsubscribe();
5003
+ this.isVisibleSubscription = this.action.isVisibleFunction(context).subscribe({
5004
+ next: res => this.isVisibleSubject.next(res)
5005
+ });
5006
+ }
5007
+ if (typeof this.action.isEnabledFunction === 'function') {
5008
+ this.isEnabledSubscription?.unsubscribe();
5009
+ this.isEnabledSubscription = this.action.isEnabledFunction(context).subscribe({
5010
+ next: res => this.isEnabledSubject.next(res)
5011
+ });
5012
+ }
5013
+ if (!this.hasNoTitle) {
5014
+ this.labelSubscription?.unsubscribe();
5015
+ this.labelSubscription = I18nUtils.Action.getAsync(this.translate, this.action, 'title', this.action?.title ?? undefined, this.item).subscribe({
5016
+ next: i18n => this.labelSubject.next(i18n)
5017
+ });
5018
+ }
5019
+ this.tooltipSubscription?.unsubscribe();
5020
+ this.tooltipSubscription = I18nUtils.Action.getAsync(this.translate, this.action, 'tooltip', this.action?.tooltip ?? undefined, this.item).subscribe({
5021
+ next: i18n => this.tooltipSubject.next(i18n)
5022
+ });
5023
+ }
4867
5024
  }
4868
5025
  MngActionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngActionComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1$1.TranslateService }, { token: MngActionExecutorService }, { token: i2.ConfirmationService }, { token: MngViewContainerComponentService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
4869
- MngActionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: MngActionComponent, selector: "mng-action", inputs: { action: "action", item: "item", itemId: "itemId", actionData: "actionData", dataProvider: "dataProvider", inputDisabled: ["disabled", "inputDisabled"], inputLoading: ["loading", "inputLoading"], viewContainerInit: ["viewContainer", "viewContainerInit"] }, outputs: { triggerEventEmitter: "trigger" }, host: { properties: { "class": "this.hostClass" } }, providers: [ConfirmationService], ngImport: i0, template: "<ng-container *ngIf=\"$isVisible | async\">\n <a\n *ngIf=\"actionLink && actionLink.url !== ''; else routerLink\"\n pButton\n pRipple\n [icon]=\"$any(action.icon)\"\n [href]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false) ? null : actionLink.url\"\n [target]=\"actionLink.target\"\n [class.disabled]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false)\"\n [class.p-button-rounded]=\"hasNoTitle\"\n [class.mng-action-button-icon]=\"hasNoTitle\"\n [class.p-button-text]=\"action.isStyleText\"\n [class.p-button-link]=\"actionLink.isStyleLink\"\n [class.p-button-raised]=\"action.isStyleRaised\"\n [class.p-button-outlined]=\"action.isStyleOutlined\"\n [class.mng-button-xs]=\"action.isSizeExtraSmall\"\n [class.mng-button-sm]=\"action.isSizeSmall\"\n [class.mng-button-lg]=\"action.isSizeLarge\"\n [class.mng-button-xl]=\"action.isSizeExtraLarge\"\n [class.p-button-default]=\"action.level === levelDefault\"\n [class.p-button-primary]=\"action.level === levelPrimary\"\n [class.p-button-secondary]=\"action.level === levelSecondary\"\n [class.p-button-info]=\"action.level === levelInfo\"\n [class.p-button-help]=\"action.level === levelHelp\"\n [class.p-button-success]=\"action.level === levelSuccess\"\n [class.p-button-warning]=\"action.level === levelWarning\"\n [class.p-button-danger]=\"action.level === levelDanger\"\n >{{ ($label | async) ?? '' }}</a\n >\n <ng-template #routerLink>\n <a\n *ngIf=\"actionLink; else button\"\n pButton\n pRipple\n [icon]=\"$any(action.icon)\"\n [target]=\"actionLink.target\"\n [replaceUrl]=\"actionLink.replaceUrl\"\n [routerLink]=\"\n ($isEnabled | async) === false || ((inputDisabled | async) ?? false) ? null : (actionLink.pathSegments | linkFormatter: itemId:item:action.model:actionData)\n \"\n [queryParams]=\"actionLink.queryParams\"\n [queryParamsHandling]=\"actionLink.queryParamsHandling\"\n [class.disabled]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false)\"\n [class.p-button-rounded]=\"hasNoTitle\"\n [class.mng-action-button-icon]=\"hasNoTitle\"\n [class.p-button-text]=\"action.isStyleText\"\n [class.p-button-link]=\"actionLink.isStyleLink\"\n [class.p-button-raised]=\"action.isStyleRaised\"\n [class.p-button-outlined]=\"action.isStyleOutlined\"\n [class.mng-button-xs]=\"action.isSizeExtraSmall\"\n [class.mng-button-sm]=\"action.isSizeSmall\"\n [class.mng-button-lg]=\"action.isSizeLarge\"\n [class.mng-button-xl]=\"action.isSizeExtraLarge\"\n [class.p-button-default]=\"action.level === levelDefault\"\n [class.p-button-primary]=\"action.level === levelPrimary\"\n [class.p-button-secondary]=\"action.level === levelSecondary\"\n [class.p-button-info]=\"action.level === levelInfo\"\n [class.p-button-help]=\"action.level === levelHelp\"\n [class.p-button-success]=\"action.level === levelSuccess\"\n [class.p-button-warning]=\"action.level === levelWarning\"\n [class.p-button-danger]=\"action.level === levelDanger\"\n >{{ ($label | async) ?? '' }}</a\n >\n </ng-template>\n <ng-template #button>\n <button\n type=\"button\"\n pButton\n pRipple\n [icon]=\"$any(action.icon)\"\n [label]=\"($label | async) ?? ''\"\n [pTooltip]=\"$any($tooltip | async)\"\n [loading]=\"(($loading | async) ?? false) || ((inputLoading | async) ?? false)\"\n [disabled]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false)\"\n (click)=\"triggerAction($event)\"\n [class.p-button-rounded]=\"hasNoTitle\"\n [class.mng-action-button-icon]=\"hasNoTitle\"\n [class.p-button-text]=\"action.isStyleText\"\n [class.p-button-raised]=\"action.isStyleRaised\"\n [class.p-button-outlined]=\"action.isStyleOutlined\"\n [class.mng-button-xs]=\"action.isSizeExtraSmall\"\n [class.mng-button-sm]=\"action.isSizeSmall\"\n [class.mng-button-lg]=\"action.isSizeLarge\"\n [class.mng-button-xl]=\"action.isSizeExtraLarge\"\n [class.p-button-default]=\"action.level === levelDefault\"\n [class.p-button-primary]=\"action.level === levelPrimary\"\n [class.p-button-secondary]=\"action.level === levelSecondary\"\n [class.p-button-info]=\"action.level === levelInfo\"\n [class.p-button-help]=\"action.level === levelHelp\"\n [class.p-button-success]=\"action.level === levelSuccess\"\n [class.p-button-warning]=\"action.level === levelWarning\"\n [class.p-button-danger]=\"action.level === levelDanger\"></button>\n </ng-template>\n <p-confirmDialog *ngIf=\"action.hasRunConfirmation\" [key]=\"action.actionName + '_' + cmpId\" [baseZIndex]=\"50\" appendTo=\"body\"></p-confirmDialog>\n</ng-container>\n", styles: [":host{display:inline-block}\n"], components: [{ type: i5.ConfirmDialog, selector: "p-confirmDialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position"], outputs: ["onHide"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { type: i8.Ripple, selector: "[pRipple]" }, { type: i1.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i9.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "pTooltip", "tooltipDisabled", "tooltipOptions"] }], pipes: { "async": i4.AsyncPipe, "linkFormatter": MngLinkFormatterPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
5026
+ MngActionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: MngActionComponent, selector: "mng-action", inputs: { action: "action", item: "item", itemId: "itemId", actionData: "actionData", dataProvider: "dataProvider", inputDisabled: ["disabled", "inputDisabled"], inputLoading: ["loading", "inputLoading"], viewContainerInit: ["viewContainer", "viewContainerInit"] }, outputs: { triggerEventEmitter: "trigger" }, host: { properties: { "class": "this.hostClass" } }, providers: [ConfirmationService], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"$isVisible | async\">\n <a\n *ngIf=\"actionLink && actionLink.url !== ''; else routerLink\"\n pButton\n pRipple\n [icon]=\"$any(action.icon)\"\n [href]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false) ? null : actionLink.url\"\n [target]=\"actionLink.target\"\n [class.disabled]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false)\"\n [class.p-button-rounded]=\"hasNoTitle\"\n [class.mng-action-button-icon]=\"hasNoTitle\"\n [class.p-button-text]=\"action.isStyleText\"\n [class.p-button-link]=\"actionLink.isStyleLink\"\n [class.p-button-raised]=\"action.isStyleRaised\"\n [class.p-button-outlined]=\"action.isStyleOutlined\"\n [class.mng-button-xs]=\"action.isSizeExtraSmall\"\n [class.mng-button-sm]=\"action.isSizeSmall\"\n [class.mng-button-lg]=\"action.isSizeLarge\"\n [class.mng-button-xl]=\"action.isSizeExtraLarge\"\n [class.p-button-default]=\"action.level === levelDefault\"\n [class.p-button-primary]=\"action.level === levelPrimary\"\n [class.p-button-secondary]=\"action.level === levelSecondary\"\n [class.p-button-info]=\"action.level === levelInfo\"\n [class.p-button-help]=\"action.level === levelHelp\"\n [class.p-button-success]=\"action.level === levelSuccess\"\n [class.p-button-warning]=\"action.level === levelWarning\"\n [class.p-button-danger]=\"action.level === levelDanger\"\n >{{ ($label | async) ?? '' }}</a\n >\n <ng-template #routerLink>\n <a\n *ngIf=\"actionLink; else button\"\n pButton\n pRipple\n [icon]=\"$any(action.icon)\"\n [target]=\"actionLink.target\"\n [replaceUrl]=\"actionLink.replaceUrl\"\n [routerLink]=\"\n ($isEnabled | async) === false || ((inputDisabled | async) ?? false) ? null : (actionLink.pathSegments | linkFormatter: itemId:item:action.model:actionData)\n \"\n [queryParams]=\"actionLink.queryParams\"\n [queryParamsHandling]=\"actionLink.queryParamsHandling\"\n [class.disabled]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false)\"\n [class.p-button-rounded]=\"hasNoTitle\"\n [class.mng-action-button-icon]=\"hasNoTitle\"\n [class.p-button-text]=\"action.isStyleText\"\n [class.p-button-link]=\"actionLink.isStyleLink\"\n [class.p-button-raised]=\"action.isStyleRaised\"\n [class.p-button-outlined]=\"action.isStyleOutlined\"\n [class.mng-button-xs]=\"action.isSizeExtraSmall\"\n [class.mng-button-sm]=\"action.isSizeSmall\"\n [class.mng-button-lg]=\"action.isSizeLarge\"\n [class.mng-button-xl]=\"action.isSizeExtraLarge\"\n [class.p-button-default]=\"action.level === levelDefault\"\n [class.p-button-primary]=\"action.level === levelPrimary\"\n [class.p-button-secondary]=\"action.level === levelSecondary\"\n [class.p-button-info]=\"action.level === levelInfo\"\n [class.p-button-help]=\"action.level === levelHelp\"\n [class.p-button-success]=\"action.level === levelSuccess\"\n [class.p-button-warning]=\"action.level === levelWarning\"\n [class.p-button-danger]=\"action.level === levelDanger\"\n >{{ ($label | async) ?? '' }}</a\n >\n </ng-template>\n <ng-template #button>\n <button\n type=\"button\"\n pButton\n pRipple\n [icon]=\"$any(action.icon)\"\n [label]=\"($label | async) ?? ''\"\n [pTooltip]=\"$any($tooltip | async)\"\n [loading]=\"(($loading | async) ?? false) || ((inputLoading | async) ?? false)\"\n [disabled]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false)\"\n (click)=\"triggerAction($event)\"\n [class.p-button-rounded]=\"hasNoTitle\"\n [class.mng-action-button-icon]=\"hasNoTitle\"\n [class.p-button-text]=\"action.isStyleText\"\n [class.p-button-raised]=\"action.isStyleRaised\"\n [class.p-button-outlined]=\"action.isStyleOutlined\"\n [class.mng-button-xs]=\"action.isSizeExtraSmall\"\n [class.mng-button-sm]=\"action.isSizeSmall\"\n [class.mng-button-lg]=\"action.isSizeLarge\"\n [class.mng-button-xl]=\"action.isSizeExtraLarge\"\n [class.p-button-default]=\"action.level === levelDefault\"\n [class.p-button-primary]=\"action.level === levelPrimary\"\n [class.p-button-secondary]=\"action.level === levelSecondary\"\n [class.p-button-info]=\"action.level === levelInfo\"\n [class.p-button-help]=\"action.level === levelHelp\"\n [class.p-button-success]=\"action.level === levelSuccess\"\n [class.p-button-warning]=\"action.level === levelWarning\"\n [class.p-button-danger]=\"action.level === levelDanger\"></button>\n </ng-template>\n <p-confirmDialog *ngIf=\"action.hasRunConfirmation\" [key]=\"action.actionName + '_' + cmpId\" [baseZIndex]=\"50\" appendTo=\"body\"></p-confirmDialog>\n</ng-container>\n", styles: [":host{display:inline-block}\n"], components: [{ type: i5.ConfirmDialog, selector: "p-confirmDialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position"], outputs: ["onHide"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { type: i8.Ripple, selector: "[pRipple]" }, { type: i1.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i9.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "pTooltip", "tooltipDisabled", "tooltipOptions"] }], pipes: { "async": i4.AsyncPipe, "linkFormatter": MngLinkFormatterPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
4870
5027
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngActionComponent, decorators: [{
4871
5028
  type: Component,
4872
5029
  args: [{ selector: 'mng-action', changeDetection: ChangeDetectionStrategy.OnPush, providers: [ConfirmationService], template: "<ng-container *ngIf=\"$isVisible | async\">\n <a\n *ngIf=\"actionLink && actionLink.url !== ''; else routerLink\"\n pButton\n pRipple\n [icon]=\"$any(action.icon)\"\n [href]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false) ? null : actionLink.url\"\n [target]=\"actionLink.target\"\n [class.disabled]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false)\"\n [class.p-button-rounded]=\"hasNoTitle\"\n [class.mng-action-button-icon]=\"hasNoTitle\"\n [class.p-button-text]=\"action.isStyleText\"\n [class.p-button-link]=\"actionLink.isStyleLink\"\n [class.p-button-raised]=\"action.isStyleRaised\"\n [class.p-button-outlined]=\"action.isStyleOutlined\"\n [class.mng-button-xs]=\"action.isSizeExtraSmall\"\n [class.mng-button-sm]=\"action.isSizeSmall\"\n [class.mng-button-lg]=\"action.isSizeLarge\"\n [class.mng-button-xl]=\"action.isSizeExtraLarge\"\n [class.p-button-default]=\"action.level === levelDefault\"\n [class.p-button-primary]=\"action.level === levelPrimary\"\n [class.p-button-secondary]=\"action.level === levelSecondary\"\n [class.p-button-info]=\"action.level === levelInfo\"\n [class.p-button-help]=\"action.level === levelHelp\"\n [class.p-button-success]=\"action.level === levelSuccess\"\n [class.p-button-warning]=\"action.level === levelWarning\"\n [class.p-button-danger]=\"action.level === levelDanger\"\n >{{ ($label | async) ?? '' }}</a\n >\n <ng-template #routerLink>\n <a\n *ngIf=\"actionLink; else button\"\n pButton\n pRipple\n [icon]=\"$any(action.icon)\"\n [target]=\"actionLink.target\"\n [replaceUrl]=\"actionLink.replaceUrl\"\n [routerLink]=\"\n ($isEnabled | async) === false || ((inputDisabled | async) ?? false) ? null : (actionLink.pathSegments | linkFormatter: itemId:item:action.model:actionData)\n \"\n [queryParams]=\"actionLink.queryParams\"\n [queryParamsHandling]=\"actionLink.queryParamsHandling\"\n [class.disabled]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false)\"\n [class.p-button-rounded]=\"hasNoTitle\"\n [class.mng-action-button-icon]=\"hasNoTitle\"\n [class.p-button-text]=\"action.isStyleText\"\n [class.p-button-link]=\"actionLink.isStyleLink\"\n [class.p-button-raised]=\"action.isStyleRaised\"\n [class.p-button-outlined]=\"action.isStyleOutlined\"\n [class.mng-button-xs]=\"action.isSizeExtraSmall\"\n [class.mng-button-sm]=\"action.isSizeSmall\"\n [class.mng-button-lg]=\"action.isSizeLarge\"\n [class.mng-button-xl]=\"action.isSizeExtraLarge\"\n [class.p-button-default]=\"action.level === levelDefault\"\n [class.p-button-primary]=\"action.level === levelPrimary\"\n [class.p-button-secondary]=\"action.level === levelSecondary\"\n [class.p-button-info]=\"action.level === levelInfo\"\n [class.p-button-help]=\"action.level === levelHelp\"\n [class.p-button-success]=\"action.level === levelSuccess\"\n [class.p-button-warning]=\"action.level === levelWarning\"\n [class.p-button-danger]=\"action.level === levelDanger\"\n >{{ ($label | async) ?? '' }}</a\n >\n </ng-template>\n <ng-template #button>\n <button\n type=\"button\"\n pButton\n pRipple\n [icon]=\"$any(action.icon)\"\n [label]=\"($label | async) ?? ''\"\n [pTooltip]=\"$any($tooltip | async)\"\n [loading]=\"(($loading | async) ?? false) || ((inputLoading | async) ?? false)\"\n [disabled]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false)\"\n (click)=\"triggerAction($event)\"\n [class.p-button-rounded]=\"hasNoTitle\"\n [class.mng-action-button-icon]=\"hasNoTitle\"\n [class.p-button-text]=\"action.isStyleText\"\n [class.p-button-raised]=\"action.isStyleRaised\"\n [class.p-button-outlined]=\"action.isStyleOutlined\"\n [class.mng-button-xs]=\"action.isSizeExtraSmall\"\n [class.mng-button-sm]=\"action.isSizeSmall\"\n [class.mng-button-lg]=\"action.isSizeLarge\"\n [class.mng-button-xl]=\"action.isSizeExtraLarge\"\n [class.p-button-default]=\"action.level === levelDefault\"\n [class.p-button-primary]=\"action.level === levelPrimary\"\n [class.p-button-secondary]=\"action.level === levelSecondary\"\n [class.p-button-info]=\"action.level === levelInfo\"\n [class.p-button-help]=\"action.level === levelHelp\"\n [class.p-button-success]=\"action.level === levelSuccess\"\n [class.p-button-warning]=\"action.level === levelWarning\"\n [class.p-button-danger]=\"action.level === levelDanger\"></button>\n </ng-template>\n <p-confirmDialog *ngIf=\"action.hasRunConfirmation\" [key]=\"action.actionName + '_' + cmpId\" [baseZIndex]=\"50\" appendTo=\"body\"></p-confirmDialog>\n</ng-container>\n", styles: [":host{display:inline-block}\n"] }]
@@ -5901,13 +6058,35 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImpor
5901
6058
  }] });
5902
6059
 
5903
6060
  class MngFormlyFieldInputComponent extends FieldType {
6061
+ constructor() {
6062
+ super(...arguments);
6063
+ this.subscriptions = [];
6064
+ }
5904
6065
  ngOnInit() {
5905
6066
  this.iFormControl = this.formControl;
5906
6067
  this.descriptor = this.to['descriptor'];
6068
+ // emit lifecycle event
6069
+ this.descriptor.nextEvent(MngFormFieldEventTypeEnum.Component, MngFormlyFieldInputComponent, this, {
6070
+ eventSubtype: MngFormFieldEventComponentSubtype.ON_INIT
6071
+ });
6072
+ // init values
5907
6073
  if (this.to.type === 'datepicker' && typeof this.iFormControl.value === 'string') {
5908
6074
  const dateObject = new Date(this.iFormControl.value);
5909
6075
  this.iFormControl.setValue(dateObject);
5910
6076
  }
6077
+ const subscription = this.formControl.valueChanges.pipe(startWith(this.formControl.value), distinctUntilChanged()).subscribe(v => {
6078
+ this.descriptor.nextEvent(MngFormFieldEventTypeEnum.ValueChange, MngFormlyFieldInputComponent, this, {
6079
+ value: v
6080
+ });
6081
+ });
6082
+ this.subscriptions.push(subscription);
6083
+ }
6084
+ ngOnDestroy() {
6085
+ this.subscriptions.forEach(s => s.unsubscribe());
6086
+ // emit lifecycle event
6087
+ this.descriptor?.nextEvent(MngFormFieldEventTypeEnum.Component, MngFormlyFieldInputComponent, this, {
6088
+ eventSubtype: MngFormFieldEventComponentSubtype.ON_DESTROY
6089
+ });
5911
6090
  }
5912
6091
  }
5913
6092
  MngFormlyFieldInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngFormlyFieldInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
@@ -5917,10 +6096,46 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImpor
5917
6096
  args: [{ selector: 'mng-formly-field-input', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container [ngSwitch]=\"to.type\">\n <p-inputNumber\n *ngSwitchCase=\"'number'\"\n [id]=\"$any(key)\"\n [formControl]=\"iFormControl\"\n [formlyAttributes]=\"field\"\n [min]=\"$any(descriptor.numberMin)\"\n [max]=\"$any(descriptor.numberMax)\"\n [step]=\"$any(descriptor.numberStep)\"\n [useGrouping]=\"$any(descriptor.numberUseGrouping)\"\n [minFractionDigits]=\"descriptor.numberMinFractionDigits || 0\"\n [maxFractionDigits]=\"descriptor.numberMaxFractionDigits || 0\"\n [inputStyleClass]=\"descriptor.inputClassName\">\n </p-inputNumber>\n\n <div *ngSwitchCase=\"'switch'\" class=\"flex flex-column\">\n <label [for]=\"key\" [class]=\"descriptor.labelClassName\">{{ to?.label! | translate }} <span *ngIf=\"to.required && to['hideRequiredMarker'] !== true\">*</span></label>\n <p-inputSwitch [id]=\"$any(key)\" [formControl]=\"iFormControl\" [formlyAttributes]=\"field\" [styleClass]=\"descriptor.inputClassName\"></p-inputSwitch>\n <small *ngIf=\"showError\" class=\"p-error\">\n <formly-validation-message [field]=\"field\"></formly-validation-message>\n </small>\n </div>\n\n <ng-container *ngSwitchCase=\"'radio'\">\n <div *ngFor=\"let option of descriptor.radioOptions\" [id]=\"$any(key)\" class=\"field-radiobutton\">\n <p-radioButton\n [name]=\"$any(key)\"\n [value]=\"option.value\"\n [formControl]=\"iFormControl\"\n [formlyAttributes]=\"field\"\n [styleClass]=\"descriptor.inputClassName\"></p-radioButton>\n <label [for]=\"option.value\" [class]=\"'mng-radio-button-label ' + descriptor.labelClassName\">{{ option.title | translate }}</label>\n </div>\n </ng-container>\n\n <textarea\n *ngSwitchCase=\"'textarea'\"\n [id]=\"$any(key)\"\n [formControl]=\"iFormControl\"\n [formlyAttributes]=\"field\"\n [rows]=\"descriptor.rows ?? 3\"\n pInputTextarea\n [class]=\"descriptor.inputClassName\">\n </textarea>\n\n <p-calendar\n *ngSwitchCase=\"'datepicker'\"\n appendTo=\"body\"\n [formControl]=\"iFormControl\"\n [formlyAttributes]=\"field\"\n [dateFormat]=\"$any(descriptor.datePickerFormat)\"\n [minDate]=\"$any(descriptor.datePickerMin)\"\n [maxDate]=\"$any(descriptor.datePickerMax)\"\n [showTime]=\"descriptor.datePickerShowTime\"\n [showIcon]=\"true\"\n [inputStyleClass]=\"descriptor.inputClassName\">\n </p-calendar>\n\n <p-inputMask\n *ngSwitchCase=\"'mask'\"\n [formControl]=\"iFormControl\"\n [formlyAttributes]=\"field\"\n [mask]=\"$any(descriptor.mask)\"\n [placeholder]=\"$any(descriptor.placeholder)\"\n [slotChar]=\"$any(descriptor.slotChar)\"\n [styleClass]=\"descriptor.inputClassName\">\n </p-inputMask>\n\n <input *ngSwitchDefault pInputText [id]=\"$any(key)\" [type]=\"to.type || 'text'\" [formControl]=\"iFormControl\" [formlyAttributes]=\"field\" />\n</ng-container>\n" }]
5918
6097
  }] });
5919
6098
 
6099
+ class MngFormlyFieldLabelComponent {
6100
+ constructor() {
6101
+ this.className = 'hidden';
6102
+ }
6103
+ }
6104
+ MngFormlyFieldLabelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngFormlyFieldLabelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6105
+ MngFormlyFieldLabelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: MngFormlyFieldLabelComponent, selector: "mng-formly-field-label", host: { properties: { "class": "this.className" } }, ngImport: i0, template: "", changeDetection: i0.ChangeDetectionStrategy.OnPush });
6106
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngFormlyFieldLabelComponent, decorators: [{
6107
+ type: Component,
6108
+ args: [{ selector: 'mng-formly-field-label', changeDetection: ChangeDetectionStrategy.OnPush, template: "" }]
6109
+ }], propDecorators: { className: [{
6110
+ type: HostBinding,
6111
+ args: ['class']
6112
+ }] } });
6113
+
5920
6114
  class MngFormlyFieldDropdownComponent extends FieldType {
6115
+ constructor() {
6116
+ super(...arguments);
6117
+ this.subscriptions = [];
6118
+ }
5921
6119
  ngOnInit() {
5922
6120
  this.dFormControl = this.formControl;
5923
6121
  this.descriptor = this.to['descriptor'];
6122
+ // emit lifecycle event
6123
+ this.descriptor.nextEvent(MngFormFieldEventTypeEnum.Component, MngFormlyFieldDropdownComponent, this, {
6124
+ eventSubtype: MngFormFieldEventComponentSubtype.ON_INIT
6125
+ });
6126
+ const subscription = this.formControl.valueChanges.pipe(startWith(this.formControl.value), distinctUntilChanged()).subscribe(v => {
6127
+ this.descriptor.nextEvent(MngFormFieldEventTypeEnum.ValueChange, MngFormlyFieldDropdownComponent, this, {
6128
+ value: v
6129
+ });
6130
+ });
6131
+ this.subscriptions.push(subscription);
6132
+ }
6133
+ ngOnDestroy() {
6134
+ this.subscriptions.forEach(s => s.unsubscribe());
6135
+ // emit lifecycle event
6136
+ this.descriptor?.nextEvent(MngFormFieldEventTypeEnum.Component, MngFormlyFieldDropdownComponent, this, {
6137
+ eventSubtype: MngFormFieldEventComponentSubtype.ON_DESTROY
6138
+ });
5924
6139
  }
5925
6140
  }
5926
6141
  MngFormlyFieldDropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngFormlyFieldDropdownComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
@@ -6693,6 +6908,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImpor
6693
6908
  }] } });
6694
6909
 
6695
6910
  var SizeEnum = ActionDescriptor.SizeEnum;
6911
+ var DialogSizeEnum = ActionEditorDescriptor.DialogSizeEnum;
6696
6912
  class MngFormlyFieldTableDialogFormComponent extends FieldType {
6697
6913
  constructor(actionExecutor) {
6698
6914
  super();
@@ -6716,7 +6932,8 @@ class MngFormlyFieldTableDialogFormComponent extends FieldType {
6716
6932
  const viewAction = new ActionEditorDescriptor(this.descriptor.tableviewDescriptor.viewEditor, 'details', this.descriptor.editor.model.type, this.descriptor.property)
6717
6933
  .withPosition(ActionPositionEnum.RowClick)
6718
6934
  .withTitle(null)
6719
- .withDialogClassName('mng-formly-field-table-form-dialog');
6935
+ .withDialogClassName('mng-field-dialog mng-action-editor-dialog')
6936
+ .withDialogSize(DialogSizeEnum.Small);
6720
6937
  viewAction.withEditorActions([new ActionEditorSubmitDescriptor(viewAction, ActionEditorSubmitDescriptor.TypeEnum.Cancel)]);
6721
6938
  this.rowClickActions.push(viewAction);
6722
6939
  }
@@ -6725,7 +6942,8 @@ class MngFormlyFieldTableDialogFormComponent extends FieldType {
6725
6942
  .withPosition(ActionPositionEnum.ToolbarRight)
6726
6943
  .withTitle(null)
6727
6944
  .withIcon('pi pi-plus')
6728
- .withDialogClassName('mng-formly-field-table-form-dialog')
6945
+ .withDialogClassName('mng-field-dialog mng-action-editor-dialog')
6946
+ .withDialogSize(DialogSizeEnum.Small)
6729
6947
  .withSize(SizeEnum.ExtraSmall)
6730
6948
  .withSubmitFunction(ctx => {
6731
6949
  if (!ctx.data?.item) {
@@ -6745,7 +6963,8 @@ class MngFormlyFieldTableDialogFormComponent extends FieldType {
6745
6963
  const editAction = new ActionEditorDescriptor(this.descriptor.tableviewDescriptor.editEditor, 'edit', this.descriptor.editor.model.type, this.descriptor.property)
6746
6964
  .withTitle(null)
6747
6965
  .withIcon('pi pi-pencil')
6748
- .withDialogClassName('mng-formly-field-table-form-dialog')
6966
+ .withDialogClassName('mng-field-dialog mng-action-editor-dialog')
6967
+ .withDialogSize(DialogSizeEnum.Small)
6749
6968
  .withSize(SizeEnum.ExtraSmall)
6750
6969
  .withSubmitFunction(ctx => {
6751
6970
  if (!ctx.data?.item) {
@@ -6946,10 +7165,10 @@ class MngFormlyFieldTableDialogMultiselectComponent extends FieldType {
6946
7165
  }
6947
7166
  }
6948
7167
  MngFormlyFieldTableDialogMultiselectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngFormlyFieldTableDialogMultiselectComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
6949
- MngFormlyFieldTableDialogMultiselectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: MngFormlyFieldTableDialogMultiselectComponent, selector: "mng-formly-table-multiselect-add-field", usesInheritance: true, ngImport: i0, template: "<mng-table [descriptor]=\"descriptor.mainTableDescriptor\" [items]=\"itemsAsync\">\n <ng-template mngTemplate=\"caption\">\n <div class=\"flex flex-column md:flex-row md:justify-content-end align-items-center table-header pt-0\">\n <label class=\"mng-datatable-form-label p-0 m-0\" [for]=\"key\">{{ to?.label! | translate }} <span *ngIf=\"to.required && to['hideRequiredMarker'] !== true\">*</span></label>\n <button\n *ngIf=\"hasAddAction && !options?.formState?.disabled\"\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-plus\"\n class=\"p-button-rounded p-button-success mng-button-xs\"\n (click)=\"openAddDialog()\"\n [disabled]=\"formControl!.disabled\"></button>\n </div>\n </ng-template>\n <ng-template mngTemplate=\"columnAction\" let-item=\"rowItem\">\n <button\n *ngIf=\"hasDeleteAction && !options?.formState?.disabled\"\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-trash\"\n class=\"p-button-rounded p-button-danger mng-button-xs\"\n (click)=\"removeItem(item)\"\n [disabled]=\"formControl!.disabled\"></button>\n </ng-template>\n</mng-table>\n\n<p-dialog\n *ngIf=\"hasAddAction\"\n [(visible)]=\"isDialogVisible\"\n [draggable]=\"false\"\n [header]=\"'general.addItem' | translate: {item: to?.label!}\"\n [modal]=\"true\"\n appendTo=\"body\"\n styleClass=\"p-fluid mng-formly-field-table-multiselect-dialog\">\n <ng-template pTemplate=\"content\">\n <mng-table\n [descriptor]=\"descriptor.mainTableDescriptor\"\n [queryResult]=\"addItemsAsync\"\n [selectionEnabled]=\"true\"\n [loading]=\"dialogIsLoading$\"\n (selectionChange)=\"onSelectionChange($event)\">\n </mng-table>\n <p-messages [value]=\"dialogMessages\"></p-messages>\n </ng-template>\n\n <ng-template pTemplate=\"footer\">\n <button pButton pRipple type=\"button\" [label]=\"'general.cancel' | translate\" icon=\"pi pi-times\" class=\"p-button-text\" (click)=\"hideDialog()\"></button>\n <button\n pButton\n pRipple\n type=\"button\"\n [label]=\"'general.add' | translate\"\n icon=\"pi pi-check\"\n class=\"p-button-text\"\n (click)=\"addItems()\"\n [loading]=\"(dialogIsLoading$ | async) ?? false\"\n [disabled]=\"form.disabled\"></button>\n </ng-template>\n</p-dialog>\n", components: [{ type: MngTableComponent, selector: "mng-table", inputs: ["descriptor", "items", "queryResult", "loading", "dataProvider", "useQueryParams", "selectionMode", "selectionEnabled", "isColumnClickable", "viewContainer", "captionComponent", "columnActionComponent"], outputs: ["tableLoad", "cellClick", "selectionChange", "captionComponentInstance", "columnActionComponentInstance"] }, { type: i1$3.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "visible", "style", "position"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { type: i3$2.Messages, selector: "p-messages", inputs: ["value", "closable", "style", "styleClass", "enableService", "key", "escape", "severity", "showTransitionOptions", "hideTransitionOptions"], outputs: ["valueChange"] }], directives: [{ type: MngTemplateDirective, selector: "[mngTemplate]", inputs: ["type", "mngTemplate"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { type: i8.Ripple, selector: "[pRipple]" }, { type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }], pipes: { "translate": i1$1.TranslatePipe, "async": i4.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
7168
+ MngFormlyFieldTableDialogMultiselectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: MngFormlyFieldTableDialogMultiselectComponent, selector: "mng-formly-table-multiselect-add-field", usesInheritance: true, ngImport: i0, template: "<mng-table [descriptor]=\"descriptor.mainTableDescriptor\" [items]=\"itemsAsync\">\n <ng-template mngTemplate=\"caption\">\n <div class=\"flex flex-column md:flex-row md:justify-content-end align-items-center table-header pt-0\">\n <label class=\"mng-datatable-form-label p-0 m-0\" [for]=\"key\">{{ to?.label! | translate }} <span *ngIf=\"to.required && to['hideRequiredMarker'] !== true\">*</span></label>\n <button\n *ngIf=\"hasAddAction && !options?.formState?.disabled\"\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-plus\"\n class=\"p-button-rounded p-button-success mng-button-xs\"\n (click)=\"openAddDialog()\"\n [disabled]=\"formControl!.disabled\"></button>\n </div>\n </ng-template>\n <ng-template mngTemplate=\"columnAction\" let-item=\"rowItem\">\n <button\n *ngIf=\"hasDeleteAction && !options?.formState?.disabled\"\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-trash\"\n class=\"p-button-rounded p-button-danger mng-button-xs\"\n (click)=\"removeItem(item)\"\n [disabled]=\"formControl!.disabled\"></button>\n </ng-template>\n</mng-table>\n\n<p-dialog\n *ngIf=\"hasAddAction\"\n [(visible)]=\"isDialogVisible\"\n [draggable]=\"false\"\n [header]=\"'general.addItem' | translate: {item: to?.label!}\"\n [modal]=\"true\"\n appendTo=\"body\"\n styleClass=\"p-fluid mng-field-dialog mng-action-editor-dialog mng-action-editor-dialog-sm\">\n <ng-template pTemplate=\"content\">\n <mng-table\n [descriptor]=\"descriptor.mainTableDescriptor\"\n [queryResult]=\"addItemsAsync\"\n [selectionEnabled]=\"true\"\n [loading]=\"dialogIsLoading$\"\n (selectionChange)=\"onSelectionChange($event)\">\n </mng-table>\n <p-messages [value]=\"dialogMessages\"></p-messages>\n </ng-template>\n\n <ng-template pTemplate=\"footer\">\n <button pButton pRipple type=\"button\" [label]=\"'general.cancel' | translate\" icon=\"pi pi-times\" class=\"p-button-text\" (click)=\"hideDialog()\"></button>\n <button\n pButton\n pRipple\n type=\"button\"\n [label]=\"'general.add' | translate\"\n icon=\"pi pi-check\"\n class=\"p-button-text\"\n (click)=\"addItems()\"\n [loading]=\"(dialogIsLoading$ | async) ?? false\"\n [disabled]=\"form.disabled\"></button>\n </ng-template>\n</p-dialog>\n", components: [{ type: MngTableComponent, selector: "mng-table", inputs: ["descriptor", "items", "queryResult", "loading", "dataProvider", "useQueryParams", "selectionMode", "selectionEnabled", "isColumnClickable", "viewContainer", "captionComponent", "columnActionComponent"], outputs: ["tableLoad", "cellClick", "selectionChange", "captionComponentInstance", "columnActionComponentInstance"] }, { type: i1$3.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "visible", "style", "position"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { type: i3$2.Messages, selector: "p-messages", inputs: ["value", "closable", "style", "styleClass", "enableService", "key", "escape", "severity", "showTransitionOptions", "hideTransitionOptions"], outputs: ["valueChange"] }], directives: [{ type: MngTemplateDirective, selector: "[mngTemplate]", inputs: ["type", "mngTemplate"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { type: i8.Ripple, selector: "[pRipple]" }, { type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }], pipes: { "translate": i1$1.TranslatePipe, "async": i4.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
6950
7169
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngFormlyFieldTableDialogMultiselectComponent, decorators: [{
6951
7170
  type: Component,
6952
- args: [{ selector: 'mng-formly-table-multiselect-add-field', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mng-table [descriptor]=\"descriptor.mainTableDescriptor\" [items]=\"itemsAsync\">\n <ng-template mngTemplate=\"caption\">\n <div class=\"flex flex-column md:flex-row md:justify-content-end align-items-center table-header pt-0\">\n <label class=\"mng-datatable-form-label p-0 m-0\" [for]=\"key\">{{ to?.label! | translate }} <span *ngIf=\"to.required && to['hideRequiredMarker'] !== true\">*</span></label>\n <button\n *ngIf=\"hasAddAction && !options?.formState?.disabled\"\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-plus\"\n class=\"p-button-rounded p-button-success mng-button-xs\"\n (click)=\"openAddDialog()\"\n [disabled]=\"formControl!.disabled\"></button>\n </div>\n </ng-template>\n <ng-template mngTemplate=\"columnAction\" let-item=\"rowItem\">\n <button\n *ngIf=\"hasDeleteAction && !options?.formState?.disabled\"\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-trash\"\n class=\"p-button-rounded p-button-danger mng-button-xs\"\n (click)=\"removeItem(item)\"\n [disabled]=\"formControl!.disabled\"></button>\n </ng-template>\n</mng-table>\n\n<p-dialog\n *ngIf=\"hasAddAction\"\n [(visible)]=\"isDialogVisible\"\n [draggable]=\"false\"\n [header]=\"'general.addItem' | translate: {item: to?.label!}\"\n [modal]=\"true\"\n appendTo=\"body\"\n styleClass=\"p-fluid mng-formly-field-table-multiselect-dialog\">\n <ng-template pTemplate=\"content\">\n <mng-table\n [descriptor]=\"descriptor.mainTableDescriptor\"\n [queryResult]=\"addItemsAsync\"\n [selectionEnabled]=\"true\"\n [loading]=\"dialogIsLoading$\"\n (selectionChange)=\"onSelectionChange($event)\">\n </mng-table>\n <p-messages [value]=\"dialogMessages\"></p-messages>\n </ng-template>\n\n <ng-template pTemplate=\"footer\">\n <button pButton pRipple type=\"button\" [label]=\"'general.cancel' | translate\" icon=\"pi pi-times\" class=\"p-button-text\" (click)=\"hideDialog()\"></button>\n <button\n pButton\n pRipple\n type=\"button\"\n [label]=\"'general.add' | translate\"\n icon=\"pi pi-check\"\n class=\"p-button-text\"\n (click)=\"addItems()\"\n [loading]=\"(dialogIsLoading$ | async) ?? false\"\n [disabled]=\"form.disabled\"></button>\n </ng-template>\n</p-dialog>\n" }]
7171
+ args: [{ selector: 'mng-formly-table-multiselect-add-field', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mng-table [descriptor]=\"descriptor.mainTableDescriptor\" [items]=\"itemsAsync\">\n <ng-template mngTemplate=\"caption\">\n <div class=\"flex flex-column md:flex-row md:justify-content-end align-items-center table-header pt-0\">\n <label class=\"mng-datatable-form-label p-0 m-0\" [for]=\"key\">{{ to?.label! | translate }} <span *ngIf=\"to.required && to['hideRequiredMarker'] !== true\">*</span></label>\n <button\n *ngIf=\"hasAddAction && !options?.formState?.disabled\"\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-plus\"\n class=\"p-button-rounded p-button-success mng-button-xs\"\n (click)=\"openAddDialog()\"\n [disabled]=\"formControl!.disabled\"></button>\n </div>\n </ng-template>\n <ng-template mngTemplate=\"columnAction\" let-item=\"rowItem\">\n <button\n *ngIf=\"hasDeleteAction && !options?.formState?.disabled\"\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-trash\"\n class=\"p-button-rounded p-button-danger mng-button-xs\"\n (click)=\"removeItem(item)\"\n [disabled]=\"formControl!.disabled\"></button>\n </ng-template>\n</mng-table>\n\n<p-dialog\n *ngIf=\"hasAddAction\"\n [(visible)]=\"isDialogVisible\"\n [draggable]=\"false\"\n [header]=\"'general.addItem' | translate: {item: to?.label!}\"\n [modal]=\"true\"\n appendTo=\"body\"\n styleClass=\"p-fluid mng-field-dialog mng-action-editor-dialog mng-action-editor-dialog-sm\">\n <ng-template pTemplate=\"content\">\n <mng-table\n [descriptor]=\"descriptor.mainTableDescriptor\"\n [queryResult]=\"addItemsAsync\"\n [selectionEnabled]=\"true\"\n [loading]=\"dialogIsLoading$\"\n (selectionChange)=\"onSelectionChange($event)\">\n </mng-table>\n <p-messages [value]=\"dialogMessages\"></p-messages>\n </ng-template>\n\n <ng-template pTemplate=\"footer\">\n <button pButton pRipple type=\"button\" [label]=\"'general.cancel' | translate\" icon=\"pi pi-times\" class=\"p-button-text\" (click)=\"hideDialog()\"></button>\n <button\n pButton\n pRipple\n type=\"button\"\n [label]=\"'general.add' | translate\"\n icon=\"pi pi-check\"\n class=\"p-button-text\"\n (click)=\"addItems()\"\n [loading]=\"(dialogIsLoading$ | async) ?? false\"\n [disabled]=\"form.disabled\"></button>\n </ng-template>\n</p-dialog>\n" }]
6953
7172
  }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
6954
7173
 
6955
7174
  class MngFormlyFieldTabsComponent extends FieldType {
@@ -6962,30 +7181,38 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImpor
6962
7181
  }] });
6963
7182
 
6964
7183
  class MngFormlyFieldFieldsetComponent extends FieldType {
7184
+ constructor() {
7185
+ super(...arguments);
7186
+ this.typeFieldset = FieldGroupDescriptor.TypeEnum.Fieldset;
7187
+ this.typeLogical = FieldGroupDescriptor.TypeEnum.Logical;
7188
+ }
7189
+ ngOnInit() {
7190
+ this.descriptor = this.to['descriptor'];
7191
+ }
6965
7192
  }
6966
7193
  MngFormlyFieldFieldsetComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngFormlyFieldFieldsetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
6967
- MngFormlyFieldFieldsetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: MngFormlyFieldFieldsetComponent, selector: "mng-formly-field-fieldset", usesInheritance: true, ngImport: i0, template: "<ng-container *ngFor=\"let group of field.fieldGroup; let i = index; let last = last\">\n <p-fieldset *ngIf=\"!group.templateOptions?.['descriptor']?.default; else defaultSet\" [legend]=\"group.templateOptions?.label! | translate\">\n <formly-field [field]=\"group\"></formly-field>\n </p-fieldset>\n <ng-template #defaultSet>\n <formly-field [field]=\"group\"></formly-field>\n </ng-template>\n</ng-container>\n", components: [{ type: i1$5.Fieldset, selector: "p-fieldset", inputs: ["legend", "toggleable", "collapsed", "style", "styleClass", "transitionOptions"], outputs: ["collapsedChange", "onBeforeToggle", "onAfterToggle"] }, { type: i3$1.FormlyField, selector: "formly-field", inputs: ["field"] }], directives: [{ type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "translate": i1$1.TranslatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
7194
+ MngFormlyFieldFieldsetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: MngFormlyFieldFieldsetComponent, selector: "mng-formly-field-fieldset", usesInheritance: true, ngImport: i0, template: "<ng-container *ngFor=\"let group of field.fieldGroup; let i = index; let last = last\">\n <ng-container [ngSwitch]=\"descriptor?.type\">\n <p-fieldset *ngSwitchCase=\"typeFieldset\" [legend]=\"group.templateOptions?.label! | translate\">\n <formly-field [field]=\"group\"></formly-field>\n </p-fieldset>\n <formly-field *ngSwitchDefault [field]=\"group\"></formly-field>\n </ng-container>\n</ng-container>\n", components: [{ type: i1$5.Fieldset, selector: "p-fieldset", inputs: ["legend", "toggleable", "collapsed", "style", "styleClass", "transitionOptions"], outputs: ["collapsedChange", "onBeforeToggle", "onAfterToggle"] }, { type: i3$1.FormlyField, selector: "formly-field", inputs: ["field"] }], directives: [{ type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }], pipes: { "translate": i1$1.TranslatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
6968
7195
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngFormlyFieldFieldsetComponent, decorators: [{
6969
7196
  type: Component,
6970
- args: [{ selector: 'mng-formly-field-fieldset', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngFor=\"let group of field.fieldGroup; let i = index; let last = last\">\n <p-fieldset *ngIf=\"!group.templateOptions?.['descriptor']?.default; else defaultSet\" [legend]=\"group.templateOptions?.label! | translate\">\n <formly-field [field]=\"group\"></formly-field>\n </p-fieldset>\n <ng-template #defaultSet>\n <formly-field [field]=\"group\"></formly-field>\n </ng-template>\n</ng-container>\n" }]
7197
+ args: [{ selector: 'mng-formly-field-fieldset', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngFor=\"let group of field.fieldGroup; let i = index; let last = last\">\n <ng-container [ngSwitch]=\"descriptor?.type\">\n <p-fieldset *ngSwitchCase=\"typeFieldset\" [legend]=\"group.templateOptions?.label! | translate\">\n <formly-field [field]=\"group\"></formly-field>\n </p-fieldset>\n <formly-field *ngSwitchDefault [field]=\"group\"></formly-field>\n </ng-container>\n</ng-container>\n" }]
6971
7198
  }] });
6972
7199
 
6973
7200
  class MngFormlyFieldWrapperComponent extends FieldWrapper {
6974
7201
  }
6975
7202
  MngFormlyFieldWrapperComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngFormlyFieldWrapperComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
6976
- MngFormlyFieldWrapperComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: MngFormlyFieldWrapperComponent, selector: "mng-formly-field-wrapper", usesInheritance: true, ngImport: i0, template: "<div class=\"field\">\n <label [for]=\"key\" [class]=\"to?.['descriptor']?.['labelClassName'] ?? ''\"\n >{{ $any(to?.label) | translate }} <span *ngIf=\"to.required && to['hideRequiredMarker'] !== true\">*</span></label\n >\n <ng-container #fieldComponent></ng-container>\n <small *ngIf=\"to?.['descriptor']?.['helpText']\">{{ to?.['descriptor']?.['helpText'] | translate }}</small>\n <small *ngIf=\"showError\" class=\"p-error\">\n <formly-validation-message [field]=\"field\"></formly-validation-message>\n </small>\n</div>\n", components: [{ type: i3$1.ɵFormlyValidationMessage, selector: "formly-validation-message", inputs: ["field"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "translate": i1$1.TranslatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
7203
+ MngFormlyFieldWrapperComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: MngFormlyFieldWrapperComponent, selector: "mng-formly-field-wrapper", usesInheritance: true, ngImport: i0, template: "<div [class]=\"to?.['descriptor']?.['fieldClassName'] ?? 'field'\">\n <label [for]=\"key\" [class]=\"to?.['descriptor']?.['labelClassName'] ?? ''\"\n >{{ $any(to?.label) | translate }} <span *ngIf=\"to.required && to['hideRequiredMarker'] !== true\">*</span></label\n >\n <ng-container #fieldComponent></ng-container>\n <small *ngIf=\"to?.['descriptor']?.['helpText']\">{{ to?.['descriptor']?.['helpText'] | translate }}</small>\n <small *ngIf=\"showError\" class=\"p-error\">\n <formly-validation-message [field]=\"field\"></formly-validation-message>\n </small>\n</div>\n", components: [{ type: i3$1.ɵFormlyValidationMessage, selector: "formly-validation-message", inputs: ["field"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "translate": i1$1.TranslatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
6977
7204
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngFormlyFieldWrapperComponent, decorators: [{
6978
7205
  type: Component,
6979
- args: [{ selector: 'mng-formly-field-wrapper', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"field\">\n <label [for]=\"key\" [class]=\"to?.['descriptor']?.['labelClassName'] ?? ''\"\n >{{ $any(to?.label) | translate }} <span *ngIf=\"to.required && to['hideRequiredMarker'] !== true\">*</span></label\n >\n <ng-container #fieldComponent></ng-container>\n <small *ngIf=\"to?.['descriptor']?.['helpText']\">{{ to?.['descriptor']?.['helpText'] | translate }}</small>\n <small *ngIf=\"showError\" class=\"p-error\">\n <formly-validation-message [field]=\"field\"></formly-validation-message>\n </small>\n</div>\n" }]
7206
+ args: [{ selector: 'mng-formly-field-wrapper', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [class]=\"to?.['descriptor']?.['fieldClassName'] ?? 'field'\">\n <label [for]=\"key\" [class]=\"to?.['descriptor']?.['labelClassName'] ?? ''\"\n >{{ $any(to?.label) | translate }} <span *ngIf=\"to.required && to['hideRequiredMarker'] !== true\">*</span></label\n >\n <ng-container #fieldComponent></ng-container>\n <small *ngIf=\"to?.['descriptor']?.['helpText']\">{{ to?.['descriptor']?.['helpText'] | translate }}</small>\n <small *ngIf=\"showError\" class=\"p-error\">\n <formly-validation-message [field]=\"field\"></formly-validation-message>\n </small>\n</div>\n" }]
6980
7207
  }] });
6981
7208
 
6982
7209
  class MngFormlyTableWrapperComponent extends FieldWrapper {
6983
7210
  }
6984
7211
  MngFormlyTableWrapperComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngFormlyTableWrapperComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
6985
- MngFormlyTableWrapperComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: MngFormlyTableWrapperComponent, selector: "mng-formly-table-wrapper", usesInheritance: true, ngImport: i0, template: "<div class=\"field table\">\n <ng-container #fieldComponent></ng-container>\n <small *ngIf=\"to?.['descriptor']?.['helpText']\">{{ to?.['descriptor']?.['helpText'] | translate }}</small>\n <small *ngIf=\"showError\" class=\"p-error\">\n <formly-validation-message [field]=\"field\"></formly-validation-message>\n </small>\n</div>\n", components: [{ type: i3$1.ɵFormlyValidationMessage, selector: "formly-validation-message", inputs: ["field"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "translate": i1$1.TranslatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
7212
+ MngFormlyTableWrapperComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: MngFormlyTableWrapperComponent, selector: "mng-formly-table-wrapper", usesInheritance: true, ngImport: i0, template: "<div [class]=\"to?.['descriptor']?.['fieldClassName'] ?? 'field table'\">\n <ng-container #fieldComponent></ng-container>\n <small *ngIf=\"to?.['descriptor']?.['helpText']\">{{ to?.['descriptor']?.['helpText'] | translate }}</small>\n <small *ngIf=\"showError\" class=\"p-error\">\n <formly-validation-message [field]=\"field\"></formly-validation-message>\n </small>\n</div>\n", components: [{ type: i3$1.ɵFormlyValidationMessage, selector: "formly-validation-message", inputs: ["field"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "translate": i1$1.TranslatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
6986
7213
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngFormlyTableWrapperComponent, decorators: [{
6987
7214
  type: Component,
6988
- args: [{ selector: 'mng-formly-table-wrapper', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"field table\">\n <ng-container #fieldComponent></ng-container>\n <small *ngIf=\"to?.['descriptor']?.['helpText']\">{{ to?.['descriptor']?.['helpText'] | translate }}</small>\n <small *ngIf=\"showError\" class=\"p-error\">\n <formly-validation-message [field]=\"field\"></formly-validation-message>\n </small>\n</div>\n" }]
7215
+ args: [{ selector: 'mng-formly-table-wrapper', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [class]=\"to?.['descriptor']?.['fieldClassName'] ?? 'field table'\">\n <ng-container #fieldComponent></ng-container>\n <small *ngIf=\"to?.['descriptor']?.['helpText']\">{{ to?.['descriptor']?.['helpText'] | translate }}</small>\n <small *ngIf=\"showError\" class=\"p-error\">\n <formly-validation-message [field]=\"field\"></formly-validation-message>\n </small>\n</div>\n" }]
6989
7216
  }] });
6990
7217
 
6991
7218
  class MngBreadcrumbComponent {
@@ -7504,10 +7731,46 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImpor
7504
7731
  args: ['window:resize', ['$event']]
7505
7732
  }] } });
7506
7733
 
7507
- function mngCommonsInitializerProvider(mngCommons) {
7508
- return () => mngCommons.initialize();
7734
+ function mngCommonsInitializerProvider(mngCommonsInit) {
7735
+ return () => mngCommonsInit.initialize();
7509
7736
  }
7510
7737
 
7738
+ class MngCommonsInitService {
7739
+ constructor(translate, configurationService, mngCommons, commonsInitializers) {
7740
+ this.translate = translate;
7741
+ this.configurationService = configurationService;
7742
+ this.mngCommons = mngCommons;
7743
+ this.commonsInitializers = commonsInitializers;
7744
+ this.isInitialized = false;
7745
+ }
7746
+ initialize() {
7747
+ if (this.isInitialized) {
7748
+ return of(void 0);
7749
+ }
7750
+ console.debug(`Initializing @mediusinc/mng-commons.`);
7751
+ return this.configurationService.loadJsonSources().pipe(mergeMap$1(() => {
7752
+ if (this.commonsInitializers) {
7753
+ console.debug(`Module initializers for @mediusinc/mng-commons.`);
7754
+ return combineLatest(this.commonsInitializers.map(ci => ci())).pipe(map(res => res));
7755
+ }
7756
+ else {
7757
+ return of(true);
7758
+ }
7759
+ }), map(() => this.mngCommons.reset()));
7760
+ this.isInitialized = true;
7761
+ }
7762
+ }
7763
+ MngCommonsInitService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngCommonsInitService, deps: [{ token: i1$1.TranslateService }, { token: MngConfigurationService }, { token: MngCommonsService }, { token: MNG_COMMONS_INITIALIZER_IT, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
7764
+ MngCommonsInitService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngCommonsInitService });
7765
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngCommonsInitService, decorators: [{
7766
+ type: Injectable
7767
+ }], ctorParameters: function () { return [{ type: i1$1.TranslateService }, { type: MngConfigurationService }, { type: MngCommonsService }, { type: undefined, decorators: [{
7768
+ type: Inject,
7769
+ args: [MNG_COMMONS_INITIALIZER_IT]
7770
+ }, {
7771
+ type: Optional
7772
+ }] }]; } });
7773
+
7511
7774
  const mngConfigurationServiceProvider = (httpClient, moduleConfig) => {
7512
7775
  const service = MngConfigurationService.init(httpClient);
7513
7776
  if (moduleConfig?.configuration?.projectEnvironment) {
@@ -7521,7 +7784,16 @@ function mngConfigJsonAppInitializerProvider(configService, moduleConfig) {
7521
7784
  return of(false);
7522
7785
  }
7523
7786
  else {
7524
- return configService.addJsonSource(moduleConfig?.configuration?.jsonSource ?? undefined);
7787
+ const jsonSource = moduleConfig?.configuration?.jsonSource;
7788
+ if (!jsonSource) {
7789
+ return configService.addJsonSource();
7790
+ }
7791
+ else if (Array.isArray(jsonSource)) {
7792
+ return combineLatest(jsonSource.map(source => configService.addJsonSource(source))).pipe(map(sourcesRes => sourcesRes.every(s => s)));
7793
+ }
7794
+ else {
7795
+ return configService.addJsonSource(jsonSource);
7796
+ }
7525
7797
  }
7526
7798
  };
7527
7799
  }
@@ -7531,6 +7803,11 @@ const formlyWrappersConfig = [
7531
7803
  { name: 'field-table', component: MngFormlyTableWrapperComponent }
7532
7804
  ];
7533
7805
  const formlyTypesConfig = [
7806
+ {
7807
+ name: 'label',
7808
+ component: MngFormlyFieldLabelComponent,
7809
+ wrappers: ['field']
7810
+ },
7534
7811
  {
7535
7812
  name: 'input',
7536
7813
  component: MngFormlyFieldInputComponent,
@@ -7774,6 +8051,7 @@ const declarations = [
7774
8051
  MngFormlyTableWrapperComponent,
7775
8052
  // formly fields
7776
8053
  MngFormlyFieldInputComponent,
8054
+ MngFormlyFieldLabelComponent,
7777
8055
  MngFormlyFieldDropdownComponent,
7778
8056
  MngFormlyFieldAutocompleteComponent,
7779
8057
  MngFormlyFieldLookupDialogComponent,
@@ -7802,6 +8080,7 @@ class MngCommonsModule {
7802
8080
  DialogService,
7803
8081
  MessageService,
7804
8082
  ConfirmationService,
8083
+ MngCommonsInitService,
7805
8084
  MngActionExecutorService,
7806
8085
  MngNavigationService,
7807
8086
  MngCommonsService,
@@ -7831,7 +8110,7 @@ class MngCommonsModule {
7831
8110
  {
7832
8111
  provide: APP_INITIALIZER,
7833
8112
  useFactory: mngCommonsInitializerProvider,
7834
- deps: [MngCommonsService],
8113
+ deps: [MngCommonsInitService],
7835
8114
  multi: true
7836
8115
  },
7837
8116
  {
@@ -7878,6 +8157,7 @@ MngCommonsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", versio
7878
8157
  MngFormlyTableWrapperComponent,
7879
8158
  // formly fields
7880
8159
  MngFormlyFieldInputComponent,
8160
+ MngFormlyFieldLabelComponent,
7881
8161
  MngFormlyFieldDropdownComponent,
7882
8162
  MngFormlyFieldAutocompleteComponent,
7883
8163
  MngFormlyFieldLookupDialogComponent,
@@ -7991,6 +8271,7 @@ MngCommonsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", versio
7991
8271
  MngFormlyTableWrapperComponent,
7992
8272
  // formly fields
7993
8273
  MngFormlyFieldInputComponent,
8274
+ MngFormlyFieldLabelComponent,
7994
8275
  MngFormlyFieldDropdownComponent,
7995
8276
  MngFormlyFieldAutocompleteComponent,
7996
8277
  MngFormlyFieldLookupDialogComponent,
@@ -8082,11 +8363,22 @@ class AMngBaseApiService {
8082
8363
  this.objectSerializer = ObjectSerializer.get();
8083
8364
  }
8084
8365
  getUrl(...pathSegments) {
8085
- let path = pathSegments.join('/');
8086
- if (!path.startsWith('/')) {
8366
+ let baseUrl = this.getBasePath();
8367
+ if (baseUrl.endsWith('/')) {
8368
+ baseUrl = baseUrl.substring(0, baseUrl.length - 1);
8369
+ }
8370
+ const serviceBasePath = this.getServiceBasePath();
8371
+ let path = [serviceBasePath, ...pathSegments].filter(s => s && s.length).join('/');
8372
+ // omit first and last '/'
8373
+ if (path.startsWith('/')) {
8087
8374
  path = path.substring(1);
8088
8375
  }
8089
- return `${this.getBasePath()}${this.getServiceBasePath()}${path}`;
8376
+ if (path.endsWith('/')) {
8377
+ path = path.substring(0, path.length - 1);
8378
+ }
8379
+ // replace any double '//' from path that could come from joining paths
8380
+ path = path.replace('//', '/');
8381
+ return `${baseUrl}/${path}`;
8090
8382
  }
8091
8383
  serializeQueryParam(queryParam, type = 'QueryParam') {
8092
8384
  return this.objectSerializer.serialize(queryParam, type);
@@ -8146,7 +8438,7 @@ class AMngCrudApiService extends AMngGetAllApiService {
8146
8438
  super(type, queryResultType, http);
8147
8439
  }
8148
8440
  createPost(item, params) {
8149
- const url = this.getUrl(this.getCreatePostPath());
8441
+ const url = this.getUrl(this.getCreatePostPath(item));
8150
8442
  return this.http
8151
8443
  .post(url, this.serialize(item), {
8152
8444
  withCredentials: true,
@@ -8190,7 +8482,7 @@ class AMngCrudApiService extends AMngGetAllApiService {
8190
8482
  })
8191
8483
  .pipe(map(res => this.deserialize(res)));
8192
8484
  }
8193
- getCreatePostPath() {
8485
+ getCreatePostPath(item) {
8194
8486
  return '';
8195
8487
  }
8196
8488
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -8666,5 +8958,5 @@ class RouteDataBuilder {
8666
8958
  * Generated bundle index. Do not edit.
8667
8959
  */
8668
8960
 
8669
- export { AFieldDescriptor, AFieldGroupDescriptor, AGenericFieldDescriptor, AMngApiService, AMngBaseApiService, AMngCrudApiService, AMngGetAllApiService, AMngTableviewRouteComponent, ActionActivationResult, ActionActivationTriggerEnum, ActionDeleteDescriptor, ActionDescriptor, ActionEditorAddDescriptor, ActionEditorDescriptor, ActionEditorDetailsDescriptor, ActionEditorEditDescriptor, ActionEditorSubmitDescriptor, ActionError, ActionExecContext, ActionLevelEnum, ActionLinkDescriptor, ActionPositionEnum, ActionRunResult, ActionSimpleDescriptor, ActionTriggerResult, ActionTypeEnum, ColumnDescriptor, DataProvider, DefaultMngErrorMapperService, EditorDataProvider, EditorDescriptor, EditorFormlyUtil, EnumName, EnumUtil, FieldDescriptor, FieldGroupDescriptor, FieldInputDescriptor, FieldLookupDescriptor, FieldLookupEnumDescriptor, FieldManyEditorDescriptor, FieldManyToManyEditorDescriptor, FieldTabGroupDescriptor, FieldValidator, FilterDescriptor, FilterLookupDescriptor, FilterLookupEnumDescriptor, I18nUtils, JsonPathPipe, LookupDataProvider, MNG_AUTOCOMPLETE_VALUE_ACCESSOR, MNG_DROPDOWN_VALUE_ACCESSOR, MediusFilterMatchType, MediusFilterParam, MediusQueryMode, MediusQueryParam, MediusQueryParamBuilder, MediusQueryResult, MediusRestUtil, MngActionComponent, MngActionEditorComponent, MngActionExecutorService, MngActionRouteComponent, MngAutocompleteComponent, MngBooleanPipe, MngBreadcrumbComponent, MngCommonsModule, MngCommonsService, MngComponentDirective, MngConfigurationService, MngDropdownComponent, MngEnumPipe, MngErrorMapperService, MngFooterComponent, MngFormEditorComponent, MngFormEditorSubmitEvent, MngFormFieldEvent, MngFormFieldEventComponentSubtype, MngFormFieldEventDialogSubtype, MngFormFieldEventTypeEnum, MngFormlyFieldAutocompleteComponent, MngFormlyFieldDropdownComponent, MngFormlyFieldFieldsetComponent, MngFormlyFieldInputComponent, MngFormlyFieldLookupDialogComponent, MngFormlyFieldTableDialogFormComponent, MngFormlyFieldTableDialogMultiselectComponent, MngFormlyFieldTabsComponent, MngFormlyFieldWrapperComponent, MngFormlyTableWrapperComponent, MngI18nPropertyPipe, MngLinkFormatterPipe, MngMainLayoutComponent, MngMainLayoutComponentService, MngMenuComponent, MngMenuItemComponent, MngNavigationService, MngTableCellClickEvent, MngTableColumnFilterComponent, MngTableColumnValueComponent, MngTableComponent, MngTableLoadEvent, MngTableReloadEvent, MngTableviewComponent, MngTableviewRouteComponent, MngTemplateDirective, MngTopbarComponent, MngViewContainerComponentService, ModelDescriptor, ModelUtil, NotificationUtil, ObjectSerializer, RouteBuilder, RouteDataBuilder, RoutesBuilder, TableDataProvider, TableDescriptor, TableviewDataProvider, TableviewDescriptor, TypeName, TypeUtil, enumNameDecoratorPropertyName, enumsMapBase, formlyTypesConfig, formlyWrappersConfig, getEmailValidationMessage, getFormlyValidationMessages, getMaxLengthValidationMessage, getMinLengthValidationMessage, getRequiredValidationMessage, getTextPatternValidationMessage, mngCommonsInitializerProvider, mngConfigJsonAppInitializerProvider, mngConfigurationServiceProvider, mngFormlyConfigProvider, primeNgModules, typeMapBase, typeNameDecoratorPropertyName };
8961
+ export { ACTION_EDITOR_DIALOG_COMPONENT_SETTING, AFieldDescriptor, AFieldGroupDescriptor, AGenericFieldDescriptor, AMngApiService, AMngBaseApiService, AMngCrudApiService, AMngGetAllApiService, AMngTableviewRouteComponent, ActionActivationResult, ActionActivationTriggerEnum, ActionDeleteDescriptor, ActionDescriptor, ActionEditorAddDescriptor, ActionEditorDescriptor, ActionEditorDetailsDescriptor, ActionEditorEditDescriptor, ActionEditorSubmitDescriptor, ActionError, ActionExecContext, ActionLevelEnum, ActionLinkDescriptor, ActionPositionEnum, ActionRunResult, ActionSimpleDescriptor, ActionTriggerResult, ActionTypeEnum, ColumnDescriptor, DataProvider, DefaultMngErrorMapperService, EditorDataProvider, EditorDescriptor, EditorFormlyUtil, EnumName, EnumUtil, FieldDescriptor, FieldGroupDescriptor, FieldInputDescriptor, FieldLookupDescriptor, FieldLookupEnumDescriptor, FieldManyEditorDescriptor, FieldManyToManyEditorDescriptor, FieldTabGroupDescriptor, FieldValidator, FilterDescriptor, FilterLookupDescriptor, FilterLookupEnumDescriptor, I18nUtils, JsonPathPipe, LookupDataProvider, MNG_AUTOCOMPLETE_VALUE_ACCESSOR, MNG_BROWSER_STORAGE_IT, MNG_COMMONS_INITIALIZER_IT, MNG_DROPDOWN_VALUE_ACCESSOR, MNG_MODULE_CONFIG_IT, MediusFilterMatchType, MediusFilterParam, MediusQueryMode, MediusQueryParam, MediusQueryParamBuilder, MediusQueryResult, MediusRestUtil, MngActionComponent, MngActionEditorComponent, MngActionExecutorService, MngActionRouteComponent, MngAutocompleteComponent, MngBooleanPipe, MngBreadcrumbComponent, MngCommonsModule, MngCommonsService, MngComponentDirective, MngConfigurationService, MngDropdownComponent, MngEnumPipe, MngErrorMapperService, MngFooterComponent, MngFormEditorComponent, MngFormEditorSubmitEvent, MngFormFieldEvent, MngFormFieldEventComponentSubtype, MngFormFieldEventDialogSubtype, MngFormFieldEventTypeEnum, MngFormlyFieldAutocompleteComponent, MngFormlyFieldDropdownComponent, MngFormlyFieldFieldsetComponent, MngFormlyFieldInputComponent, MngFormlyFieldLabelComponent, MngFormlyFieldLookupDialogComponent, MngFormlyFieldTableDialogFormComponent, MngFormlyFieldTableDialogMultiselectComponent, MngFormlyFieldTabsComponent, MngFormlyFieldWrapperComponent, MngFormlyTableWrapperComponent, MngI18nPropertyPipe, MngLinkFormatterPipe, MngMainLayoutComponent, MngMainLayoutComponentService, MngMenuComponent, MngMenuItemComponent, MngNavigationService, MngTableCellClickEvent, MngTableColumnFilterComponent, MngTableColumnValueComponent, MngTableComponent, MngTableLoadEvent, MngTableReloadEvent, MngTableviewComponent, MngTableviewRouteComponent, MngTemplateDirective, MngTopbarComponent, MngViewContainerComponentService, ModelDescriptor, ModelUtil, NotificationUtil, ObjectSerializer, RouteBuilder, RouteDataBuilder, RoutesBuilder, TableDataProvider, TableDescriptor, TableviewDataProvider, TableviewDescriptor, TypeName, TypeUtil, enumNameDecoratorPropertyName, enumsMapBase, formlyTypesConfig, formlyWrappersConfig, getEmailValidationMessage, getFormlyValidationMessages, getMaxLengthValidationMessage, getMinLengthValidationMessage, getRequiredValidationMessage, getTextPatternValidationMessage, mngConfigJsonAppInitializerProvider, mngConfigurationServiceProvider, mngFormlyConfigProvider, primeNgModules, typeMapBase, typeNameDecoratorPropertyName };
8670
8962
  //# sourceMappingURL=mediusinc-mng-commons.mjs.map