@mediusinc/mng-commons 0.12.2 → 0.13.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 (56) hide show
  1. package/esm2020/lib/components/action/action.component.mjs +8 -8
  2. package/esm2020/lib/components/action/editor/action-editor.component.mjs +5 -5
  3. package/esm2020/lib/components/button/button.component.mjs +46 -0
  4. package/esm2020/lib/components/button/index.mjs +2 -0
  5. package/esm2020/lib/components/form/dropdown/dropdown.component.mjs +8 -3
  6. package/esm2020/lib/components/form/editor/form-editor.component.mjs +3 -2
  7. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +10 -13
  8. package/esm2020/lib/components/tableview/route/tableview-route.abstract.component.mjs +27 -11
  9. package/esm2020/lib/components/tableview/table/column-value/column-value.component.mjs +5 -3
  10. package/esm2020/lib/data-providers/index.mjs +2 -1
  11. package/esm2020/lib/data-providers/tableview-crud.data-provider.mjs +24 -0
  12. package/esm2020/lib/descriptors/action/action-confirmation.descriptor.mjs +106 -0
  13. package/esm2020/lib/descriptors/action.descriptor.mjs +53 -154
  14. package/esm2020/lib/descriptors/button.descriptor.mjs +111 -0
  15. package/esm2020/lib/descriptors/column.descriptor.mjs +17 -1
  16. package/esm2020/lib/descriptors/field.descriptor.mjs +1 -1
  17. package/esm2020/lib/descriptors/index.mjs +3 -1
  18. package/esm2020/lib/mng-commons.module.mjs +24 -9
  19. package/esm2020/lib/pipes/getter.pipe.mjs +20 -0
  20. package/esm2020/lib/pipes/index.mjs +4 -2
  21. package/esm2020/lib/pipes/json-path.pipe.mjs +1 -2
  22. package/esm2020/lib/pipes/parametrize.pipe.mjs +85 -0
  23. package/esm2020/lib/pipes/template.pipe.mjs +24 -0
  24. package/esm2020/lib/services/action-executor.service.mjs +34 -23
  25. package/esm2020/lib/styles/button-style.builder.mjs +59 -8
  26. package/esm2020/lib/styles/styles.util.mjs +2 -2
  27. package/esm2020/lib/utils/string.util.mjs +4 -1
  28. package/esm2020/public-api.mjs +2 -1
  29. package/fesm2015/mediusinc-mng-commons.mjs +627 -266
  30. package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
  31. package/fesm2020/mediusinc-mng-commons.mjs +628 -262
  32. package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
  33. package/lib/components/button/button.component.d.ts +16 -0
  34. package/lib/components/button/index.d.ts +1 -0
  35. package/lib/components/form/dropdown/dropdown.component.d.ts +2 -0
  36. package/lib/components/tableview/route/tableview-route.abstract.component.d.ts +1 -0
  37. package/lib/data-providers/index.d.ts +1 -0
  38. package/lib/data-providers/tableview-crud.data-provider.d.ts +8 -0
  39. package/lib/descriptors/action/action-confirmation.descriptor.d.ts +48 -0
  40. package/lib/descriptors/action.descriptor.d.ts +26 -83
  41. package/lib/descriptors/button.descriptor.d.ts +40 -0
  42. package/lib/descriptors/column.descriptor.d.ts +6 -0
  43. package/lib/descriptors/field.descriptor.d.ts +9 -9
  44. package/lib/descriptors/index.d.ts +2 -0
  45. package/lib/mng-commons.module.d.ts +74 -71
  46. package/lib/pipes/getter.pipe.d.ts +7 -0
  47. package/lib/pipes/index.d.ts +3 -1
  48. package/lib/pipes/parametrize.pipe.d.ts +13 -0
  49. package/lib/pipes/template.pipe.d.ts +10 -0
  50. package/lib/services/action-executor.service.d.ts +3 -3
  51. package/lib/styles/button-style.builder.d.ts +43 -2
  52. package/package.json +3 -3
  53. package/public-api.d.ts +1 -0
  54. package/version-info.json +5 -5
  55. package/esm2020/lib/pipes/link-formatter.pipe.mjs +0 -39
  56. package/lib/pipes/link-formatter.pipe.d.ts +0 -11
@@ -558,6 +558,27 @@ class TableviewDataProvider extends EditorDataProvider {
558
558
  }
559
559
  }
560
560
 
561
+ class TableviewCrudDataProvider extends TableviewDataProvider {
562
+ constructor(modelType, serviceType, idPropertyName, useGetAllForFetch = false) {
563
+ var _a;
564
+ super(modelType, serviceType);
565
+ this.withGetAll((queryParam, service) => service.getAllPost(queryParam));
566
+ if (useGetAllForFetch) {
567
+ const selectedIdPropertyName = (_a = idPropertyName !== null && idPropertyName !== void 0 ? idPropertyName : ModelUtil.findIdAttribute(modelType)) !== null && _a !== void 0 ? _a : 'id';
568
+ this.withFetch((id, service) => {
569
+ const qp = MediusQueryParamBuilder.create(10, 0).withFilter(selectedIdPropertyName, id, id, MediusFilterMatchType.Equals, true).build();
570
+ return service.getAllPost(qp).pipe(map(res => res.pageData[0]));
571
+ });
572
+ }
573
+ else {
574
+ this.withFetch((id, service) => service.getByIdGet(id));
575
+ }
576
+ this.withCreate((item, service) => service.createPost(item));
577
+ this.withUpdate((id, item, service) => service.updatePut(id, item));
578
+ this.withDelete((id, item, service) => service.removeDelete(id, item));
579
+ }
580
+ }
581
+
561
582
  var AuthorizationTypeEnum;
562
583
  (function (AuthorizationTypeEnum) {
563
584
  AuthorizationTypeEnum["All"] = "ALL";
@@ -850,7 +871,7 @@ class StylesUtil {
850
871
  }
851
872
  }
852
873
  static getActionButtonRoundedWidth(action) {
853
- switch (action.size) {
874
+ switch (action.buttonDescriptor.styleClass.size) {
854
875
  case ActionSizeEnum.ExtraSmall:
855
876
  return StylesUtil.BUTTON_ROUNDED_WIDTH_XS;
856
877
  case ActionSizeEnum.Small:
@@ -874,17 +895,18 @@ StylesUtil.TABLE_CELL_PADDING_X_SM = 4;
874
895
  StylesUtil.TABLE_CELL_PADDING_X_LG = 12;
875
896
 
876
897
  class ButtonStyleBuilder {
877
- constructor(level, customClass) {
898
+ constructor(level = ActionLevelEnum.Default, customClass) {
878
899
  this._size = ActionSizeEnum.Normal;
879
900
  this._textButton = false;
880
901
  this._outlineButton = false;
881
902
  this._raisedButton = false;
903
+ this._roundedStyle = ButtonStyleRoundedEnum.DEFAULT;
882
904
  this._actionLevel = level;
883
905
  this._customClass = customClass;
884
906
  }
885
907
  getButtonClass(hasNoTitle = false) {
886
908
  const styles = [this.convertActionLevelToStyleClass(), this.convertSizeToStyleClass(), this._customClass];
887
- if (hasNoTitle) {
909
+ if (hasNoTitle && this._roundedStyle === ButtonStyleRoundedEnum.DEFAULT) {
888
910
  styles.push(`p-button-rounded mng-action-button-icon`);
889
911
  }
890
912
  if (this._textButton) {
@@ -896,37 +918,78 @@ class ButtonStyleBuilder {
896
918
  if (this._raisedButton) {
897
919
  styles.push(`p-button-raised`);
898
920
  }
921
+ if (this._roundedStyle === ButtonStyleRoundedEnum.ROUNDED) {
922
+ styles.push('p-button-rounded');
923
+ }
899
924
  return styles.join(' ');
900
925
  }
901
- create(actionLevel, size, textButton, outlineButton, raisedButton, customClass) {
926
+ /**
927
+ * creates instance of style builder with custom properties
928
+ * @param actionLevel ActionLevelEnum
929
+ * @param size ActionSizeEnum
930
+ * @param textButton if true, text button will be applied
931
+ * @param outlineButton if true, outlined button will be applied
932
+ * @param raisedButton if true, raised button will be applied
933
+ * @param customClass additional custom classes (will be added at generating)
934
+ */
935
+ create(actionLevel, size, textButton, outlineButton, raisedButton, roundedButton, customClass) {
902
936
  this._actionLevel = actionLevel !== null && actionLevel !== void 0 ? actionLevel : this._actionLevel;
903
937
  this._size = size !== null && size !== void 0 ? size : this._size;
904
938
  this._textButton = textButton !== null && textButton !== void 0 ? textButton : this._textButton;
905
939
  this._outlineButton = outlineButton !== null && outlineButton !== void 0 ? outlineButton : this._outlineButton;
906
940
  this._raisedButton = raisedButton !== null && raisedButton !== void 0 ? raisedButton : this._raisedButton;
941
+ this._roundedStyle = roundedButton !== null && roundedButton !== void 0 ? roundedButton : this._roundedStyle;
907
942
  this._customClass = customClass;
908
943
  return this;
909
944
  }
945
+ /**
946
+ * sets custom action level and returns this object
947
+ * @param actionLevel
948
+ */
910
949
  withActionLevel(actionLevel) {
911
950
  this._actionLevel = actionLevel;
912
951
  return this;
913
952
  }
953
+ /**
954
+ * sets custom size and return this object
955
+ * @param size
956
+ */
914
957
  withSize(size) {
915
958
  this._size = size;
916
959
  return this;
917
960
  }
961
+ /**
962
+ * sets text button property
963
+ * @param withText default true
964
+ */
918
965
  withTextButton(withText = true) {
919
966
  this._textButton = withText;
920
967
  return this;
921
968
  }
969
+ /**
970
+ * sets outline button property
971
+ * @param withOutline default true
972
+ */
922
973
  withOutlineButton(withOutline = true) {
923
974
  this._outlineButton = withOutline;
924
975
  return this;
925
976
  }
977
+ /**
978
+ * sets raised button property
979
+ * @param withRaised default true
980
+ */
926
981
  withRaisedButton(withRaised = true) {
927
982
  this._raisedButton = withRaised;
928
983
  return this;
929
984
  }
985
+ withRoundedButton(roundedStyle = ButtonStyleRoundedEnum.ROUNDED) {
986
+ this._roundedStyle = roundedStyle;
987
+ return this;
988
+ }
989
+ /**
990
+ * sets custom style class
991
+ * @param customClass
992
+ */
930
993
  withCustomClass(customClass) {
931
994
  this._customClass = customClass;
932
995
  return this;
@@ -953,15 +1016,15 @@ class ButtonStyleBuilder {
953
1016
  convertSizeToStyleClass() {
954
1017
  switch (this._size) {
955
1018
  case ActionSizeEnum.ExtraSmall:
956
- return 'mng-button-xs';
1019
+ return 'p-button-sm mng-button-xs';
957
1020
  case ActionSizeEnum.Small:
958
- return 'mng-button-sm';
1021
+ return 'p-button-sm mng-button-sm';
959
1022
  case ActionSizeEnum.Normal:
960
1023
  return '';
961
1024
  case ActionSizeEnum.Large:
962
- return 'mng-button-lg';
1025
+ return 'p-button-lg mng-button-lg';
963
1026
  case ActionSizeEnum.ExtraLarge:
964
- return 'mng-button-xl';
1027
+ return 'p-button-lg mng-button-xl';
965
1028
  }
966
1029
  }
967
1030
  get actionLevel() {
@@ -979,10 +1042,123 @@ class ButtonStyleBuilder {
979
1042
  get raisedButton() {
980
1043
  return this._raisedButton;
981
1044
  }
1045
+ get roundedStyle() {
1046
+ return this._roundedStyle;
1047
+ }
982
1048
  get customClass() {
983
1049
  return this._customClass;
984
1050
  }
985
1051
  }
1052
+ var ButtonStyleRoundedEnum;
1053
+ (function (ButtonStyleRoundedEnum) {
1054
+ ButtonStyleRoundedEnum[ButtonStyleRoundedEnum["DEFAULT"] = 0] = "DEFAULT";
1055
+ ButtonStyleRoundedEnum[ButtonStyleRoundedEnum["ROUNDED"] = 1] = "ROUNDED";
1056
+ ButtonStyleRoundedEnum[ButtonStyleRoundedEnum["SQUARE"] = 2] = "SQUARE";
1057
+ })(ButtonStyleRoundedEnum || (ButtonStyleRoundedEnum = {}));
1058
+
1059
+ class ActionConfirmationDialogDescriptor {
1060
+ constructor() {
1061
+ this._closeOnEscape = true; // Defines if dialog closes when esc key is pressed.
1062
+ this._closable = true; // Defines if dialog is closable.
1063
+ this._acceptButtonStyle = new ButtonStyleBuilder(ActionLevelEnum.Default);
1064
+ this._rejectButtonStyle = new ButtonStyleBuilder(ActionLevelEnum.Default).withTextButton();
1065
+ this._icon = 'pi pi-exclamation-triangle';
1066
+ this._acceptIcon = 'pi pi-check';
1067
+ this._rejectIcon = 'pi pi-times';
1068
+ }
1069
+ withIcon(icon) {
1070
+ this._icon = icon;
1071
+ return this;
1072
+ }
1073
+ withTitle(title) {
1074
+ this._title = title;
1075
+ return this;
1076
+ }
1077
+ withMessage(message) {
1078
+ this._message = message;
1079
+ return this;
1080
+ }
1081
+ withAcceptLabel(acceptLabel) {
1082
+ this._acceptLabel = acceptLabel;
1083
+ return this;
1084
+ }
1085
+ withAcceptIcon(acceptIcon) {
1086
+ this._acceptIcon = acceptIcon;
1087
+ return this;
1088
+ }
1089
+ withAcceptButtonStyle(buttonStyle) {
1090
+ this._acceptButtonStyle = buttonStyle;
1091
+ return this;
1092
+ }
1093
+ withRejectLabel(rejectLabel) {
1094
+ this._rejectLabel = rejectLabel;
1095
+ return this;
1096
+ }
1097
+ withRejectIcon(rejectIcon) {
1098
+ this._rejectIcon = rejectIcon;
1099
+ return this;
1100
+ }
1101
+ withRejectButtonStyle(buttonStyle) {
1102
+ this._rejectButtonStyle = buttonStyle;
1103
+ return this;
1104
+ }
1105
+ /**
1106
+ * set if dialog can be closed on escaped pressed
1107
+ * if true, then closable is also set to true
1108
+ * @param closeOnEscape
1109
+ */
1110
+ withCloseOnEscape(closeOnEscape) {
1111
+ if (closeOnEscape) {
1112
+ this._closable = true;
1113
+ }
1114
+ this._closeOnEscape = closeOnEscape;
1115
+ return this;
1116
+ }
1117
+ withClosable(closable) {
1118
+ this._closable = closable;
1119
+ return this;
1120
+ }
1121
+ withRunConfirmationConfigMapFn(runConfirmationConfigMapFn) {
1122
+ this._runConfirmationConfigMapFn = runConfirmationConfigMapFn;
1123
+ return this;
1124
+ }
1125
+ get icon() {
1126
+ return this._icon;
1127
+ }
1128
+ get title() {
1129
+ return this._title;
1130
+ }
1131
+ get message() {
1132
+ return this._message;
1133
+ }
1134
+ get acceptLabel() {
1135
+ return this._acceptLabel;
1136
+ }
1137
+ get acceptIcon() {
1138
+ return this._acceptIcon;
1139
+ }
1140
+ get acceptButtonStyle() {
1141
+ return this._acceptButtonStyle;
1142
+ }
1143
+ get rejectLabel() {
1144
+ return this._rejectLabel;
1145
+ }
1146
+ get rejectIcon() {
1147
+ return this._rejectIcon;
1148
+ }
1149
+ get rejectButtonStyle() {
1150
+ return this._rejectButtonStyle;
1151
+ }
1152
+ get closeOnEscape() {
1153
+ return this._closeOnEscape;
1154
+ }
1155
+ get closable() {
1156
+ return this._closable;
1157
+ }
1158
+ get runConfirmationConfigMapFn() {
1159
+ return this._runConfirmationConfigMapFn;
1160
+ }
1161
+ }
986
1162
 
987
1163
  class ActionDescriptor {
988
1164
  constructor(model, actionName, parentType, parentProperty) {
@@ -991,10 +1167,10 @@ class ActionDescriptor {
991
1167
  this._position = ActionPositionEnum.ToolbarRight;
992
1168
  this._level = ActionLevelEnum.Default;
993
1169
  this._routeUrl = null;
994
- this._buttonStyle = new ButtonStyleBuilder(this._level);
995
- this._hasRunConfirmation = false;
996
1170
  this._hasRunNotificationSuccess = true;
997
1171
  this._hasRunNotificationError = true;
1172
+ //button
1173
+ this._buttonDescriptor = new ButtonDescriptor();
998
1174
  this._model = model;
999
1175
  this._actionName = actionName;
1000
1176
  if ((parentType && !parentProperty) || (!parentProperty && parentProperty)) {
@@ -1043,15 +1219,6 @@ class ActionDescriptor {
1043
1219
  get routeUrl() {
1044
1220
  return this._routeUrl;
1045
1221
  }
1046
- get title() {
1047
- return this._title;
1048
- }
1049
- get icon() {
1050
- return this._icon;
1051
- }
1052
- get tooltip() {
1053
- return this._tooltip;
1054
- }
1055
1222
  get dataProvider() {
1056
1223
  return this._dataProvider;
1057
1224
  }
@@ -1076,83 +1243,14 @@ class ActionDescriptor {
1076
1243
  get actionNameLong() {
1077
1244
  return this._actionNameLong;
1078
1245
  }
1079
- get buttonStyle() {
1080
- return this._buttonStyle;
1081
- }
1082
- /**
1083
- * @deprecated use _buttonStyle instead
1084
- */
1085
1246
  get className() {
1086
- return this._buttonStyle.customClass;
1087
- }
1088
- /**
1089
- * @deprecated use _buttonStyle instead
1090
- */
1091
- get isStyleText() {
1092
- return this._buttonStyle.textButton;
1093
- }
1094
- /**
1095
- * @deprecated use _buttonStyle instead
1096
- */
1097
- get isStyleOutlined() {
1098
- return this._buttonStyle.outlineButton;
1247
+ return this.buttonDescriptor.styleClass.customClass;
1099
1248
  }
1100
- /**
1101
- * @deprecated use _buttonStyle instead
1102
- */
1103
- get isStyleRaised() {
1104
- return this._buttonStyle.raisedButton;
1105
- }
1106
- /**
1107
- * @deprecated use _buttonStyle instead
1108
- */
1109
- get size() {
1110
- return this._buttonStyle.size;
1111
- }
1112
- /**
1113
- * @deprecated use _buttonStyle instead
1114
- */
1115
- get isSizeExtraSmall() {
1116
- return this._buttonStyle.size === ActionSizeEnum.ExtraSmall;
1117
- }
1118
- /**
1119
- * @deprecated use _buttonStyle instead
1120
- */
1121
- get isSizeSmall() {
1122
- return this._buttonStyle.size === ActionSizeEnum.Small;
1123
- }
1124
- /**
1125
- * @deprecated use _buttonStyle instead
1126
- */
1127
- get isSizeLarge() {
1128
- return this._buttonStyle.size === ActionSizeEnum.Large;
1129
- }
1130
- /**
1131
- * @deprecated use _buttonStyle instead
1132
- */
1133
- get isSizeExtraLarge() {
1134
- return this._buttonStyle.size === ActionSizeEnum.ExtraLarge;
1249
+ get runConfirmationDialogDescriptor() {
1250
+ return this._runConfirmationDialogDescriptor;
1135
1251
  }
1136
1252
  get hasRunConfirmation() {
1137
- return this._hasRunConfirmation;
1138
- }
1139
- get runConfirmationIcon() {
1140
- return this._runConfirmationIcon;
1141
- }
1142
- get runConfirmationTitle() {
1143
- return this._runConfirmationTitle;
1144
- }
1145
- get runConfirmationMessage() {
1146
- return this._runConfirmationMessage;
1147
- }
1148
- get runConfirmationAcceptTitle() {
1149
- return this._runConfirmationAcceptTitle;
1150
- }
1151
- get runConfirmationRejectTitle() {
1152
- return this._runConfirmationRejectTitle;
1153
- }
1154
- get runConfirmationConfigMapFn() {
1155
- return this._runConfirmationConfigMapFn;
1253
+ return this._runConfirmationDialogDescriptor !== null && this._runConfirmationDialogDescriptor !== undefined;
1156
1254
  }
1157
1255
  get hasRunNotificationSuccess() {
1158
1256
  return this._hasRunNotificationSuccess;
@@ -1184,6 +1282,9 @@ class ActionDescriptor {
1184
1282
  get permissionsRouteType() {
1185
1283
  return this._permissionsRouteType;
1186
1284
  }
1285
+ get buttonDescriptor() {
1286
+ return this._buttonDescriptor;
1287
+ }
1187
1288
  withDataProvider(dataProvider) {
1188
1289
  this._dataProvider = dataProvider;
1189
1290
  return this;
@@ -1212,70 +1313,25 @@ class ActionDescriptor {
1212
1313
  this._routeUrl = routeUrl;
1213
1314
  return this;
1214
1315
  }
1215
- withLevel(level) {
1216
- this._level = level;
1217
- this._buttonStyle = this._buttonStyle.withActionLevel(level);
1316
+ withPosition(position) {
1317
+ this._position = position;
1218
1318
  return this;
1219
1319
  }
1220
1320
  /**
1221
- * Overrides default title key with model action key (${model.typeName}.actions.${actionName}). Not relevant if parentType name is provided.
1321
+ * creates confirmation action with default style based on action descriptor
1222
1322
  */
1223
- withModelTitle() {
1224
- this._title = `${this._i18nModelActionBaseKey}.title`;
1225
- return this;
1323
+ withRunConfirmation() {
1324
+ this._runConfirmationDialogDescriptor = new ActionConfirmationDialogDescriptor();
1325
+ this._runConfirmationDialogDescriptor.acceptButtonStyle.withActionLevel(this._level);
1326
+ this._runConfirmationDialogDescriptor.rejectButtonStyle.withActionLevel(this._level);
1327
+ return this._runConfirmationDialogDescriptor;
1226
1328
  }
1227
1329
  /**
1228
- * Overrides default title key (${actionName}.title). If null, no title will be shown.
1229
- * @param title Title i18n key or title.
1330
+ * Add a configuration dialogue to action using ActionConfigurationDescriptor
1331
+ * @param confirmationDescriptor descriptor with customizable information for dialog
1230
1332
  */
1231
- withTitle(title) {
1232
- this._title = title;
1233
- return this;
1234
- }
1235
- withIcon(icon) {
1236
- this._icon = icon;
1237
- return this;
1238
- }
1239
- withTooltip(tooltip) {
1240
- this._tooltip = tooltip;
1241
- return this;
1242
- }
1243
- withClassName(className) {
1244
- this._buttonStyle = this._buttonStyle.withCustomClass(className);
1245
- return this;
1246
- }
1247
- withSize(size = ActionSizeEnum.Normal) {
1248
- this._buttonStyle = this._buttonStyle.withSize(size);
1249
- return this;
1250
- }
1251
- withStyle(styleText = false, styleOutlined = false, styleRaised = false) {
1252
- this._buttonStyle = this._buttonStyle.withOutlineButton(styleOutlined);
1253
- this._buttonStyle = this._buttonStyle.withRaisedButton(styleRaised);
1254
- this._buttonStyle = this._buttonStyle.withTextButton(styleText);
1255
- return this;
1256
- }
1257
- withPosition(position) {
1258
- this._position = position;
1259
- return this;
1260
- }
1261
- /**
1262
- * Add a confirmation dialogue to the action
1263
- * @param icon the icon to display on the confirmation dialogue
1264
- * @param title the title of the confirmation dialogue
1265
- * @param message the message on the confirmation dialogue
1266
- * @param acceptTitle the title of the accepting button
1267
- * @param rejectTitle the title of the rejecting button
1268
- * @param runConfirmationConfigMapFn function used to generate the confirmation dialogue. **WARNING** changing the *accept* and *reject* methods of the *confirmConfig* parameter
1269
- * may lead to unexpected behaviour
1270
- */
1271
- withRunConfirmation(icon = 'pi pi-exclamation-triangle', title, message, acceptTitle, rejectTitle, runConfirmationConfigMapFn) {
1272
- this._hasRunConfirmation = true;
1273
- this._runConfirmationIcon = icon;
1274
- this._runConfirmationTitle = title;
1275
- this._runConfirmationMessage = message;
1276
- this._runConfirmationAcceptTitle = acceptTitle;
1277
- this._runConfirmationRejectTitle = rejectTitle;
1278
- this._runConfirmationConfigMapFn = runConfirmationConfigMapFn;
1333
+ withRunConfirmationDescriptor(runConfirmationDialogDescriptor) {
1334
+ this._runConfirmationDialogDescriptor = runConfirmationDialogDescriptor;
1279
1335
  return this;
1280
1336
  }
1281
1337
  withRunNotificationSuccess(title, message, hasNotification = true) {
@@ -1309,6 +1365,10 @@ class ActionDescriptor {
1309
1365
  this._permissionsRouteType = permissionsRouteType;
1310
1366
  return this;
1311
1367
  }
1368
+ withButtonDescriptor(buttonDescriptor) {
1369
+ this._buttonDescriptor = buttonDescriptor;
1370
+ return this;
1371
+ }
1312
1372
  }
1313
1373
  class ActionSimpleDescriptor extends ActionDescriptor {
1314
1374
  constructor(actionName, modelType, idProperty, titleProperty) {
@@ -1325,7 +1385,7 @@ class ActionEditorDescriptor extends ActionDescriptor {
1325
1385
  this._dialogSize = ActionEditorDialogSizeEnum.Normal;
1326
1386
  this._type = ActionTypeEnum.Editor;
1327
1387
  this._editorDescriptor = editorDescriptor;
1328
- this._editorActions.push(new ActionEditorSubmitDescriptor(this), new ActionEditorSubmitDescriptor(this, ActionEditorSubmitTypeEnum.Cancel));
1388
+ this._editorActions.push(ActionEditorSubmitDescriptor.forPrimary(this), ActionEditorSubmitDescriptor.forSecondary(this));
1329
1389
  }
1330
1390
  get editorTitle() {
1331
1391
  return this._editorTitle;
@@ -1432,7 +1492,23 @@ class ActionEditorSubmitDescriptor extends ActionDescriptor {
1432
1492
  this._editorAction = editorAction;
1433
1493
  this._submitType = submitType;
1434
1494
  this._position = ActionPositionEnum.FooterRight;
1435
- this._buttonStyle = this._buttonStyle.withActionLevel(editorAction.level).withTextButton();
1495
+ this.buttonDescriptor.styleClass.withActionLevel(editorAction.level).withTextButton();
1496
+ }
1497
+ /**
1498
+ * creates primary action with primary button style
1499
+ * @param editorAction
1500
+ * @param submitType
1501
+ */
1502
+ static forPrimary(editorAction, submitType = ActionEditorSubmitTypeEnum.Submit) {
1503
+ return new ActionEditorSubmitDescriptor(editorAction, submitType).withButtonDescriptor(new ButtonDescriptor().withStyleClass(new ButtonStyleBuilder()));
1504
+ }
1505
+ /**
1506
+ * creates secondary button with text button style
1507
+ * @param editorAction
1508
+ * @param submitType
1509
+ */
1510
+ static forSecondary(editorAction, submitType = ActionEditorSubmitTypeEnum.Cancel) {
1511
+ return new ActionEditorSubmitDescriptor(editorAction, submitType).withButtonDescriptor(new ButtonDescriptor().withStyleClass(new ButtonStyleBuilder().withTextButton()));
1436
1512
  }
1437
1513
  get submitType() {
1438
1514
  return this._submitType;
@@ -1466,8 +1542,8 @@ class ActionEditorAddDescriptor extends ActionEditorDescriptor {
1466
1542
  this.withPosition(ActionPositionEnum.ToolbarLeft);
1467
1543
  this.withRouteTrigger('add');
1468
1544
  this.withSubmitFunction(ActionDataProviderUtil.runCreateOrFail);
1469
- this.withLevel(ActionLevelEnum.Success);
1470
- this.withIcon('pi pi-plus');
1545
+ this.buttonDescriptor.styleClass.withActionLevel(ActionLevelEnum.Success);
1546
+ this.buttonDescriptor.withIcon('pi pi-plus');
1471
1547
  this.withPermissionsRouteType(Permissions.ActionTypes.ADD);
1472
1548
  }
1473
1549
  withServiceType(serviceType) {
@@ -1490,12 +1566,11 @@ class ActionEditorEditDescriptor extends ActionEditorDescriptor {
1490
1566
  constructor(editorDescriptor) {
1491
1567
  super(editorDescriptor, ActionEditorEditDescriptor.ACTION_NAME);
1492
1568
  this.withPosition(ActionPositionEnum.RowInline);
1493
- this.withTitle(null);
1494
1569
  this.withRouteTrigger(':itemId/edit');
1495
1570
  this.withFetchFunction(ActionDataProviderUtil.runFetchOrFail);
1496
1571
  this.withSubmitFunction(ActionDataProviderUtil.runUpdateOrFail);
1497
- this.withIcon('pi pi-pencil');
1498
1572
  this.withPermissionsRouteType(Permissions.ActionTypes.EDIT);
1573
+ this.buttonDescriptor.withLabel(null).withIcon('pi pi-pencil');
1499
1574
  }
1500
1575
  withServiceType(serviceType) {
1501
1576
  return this.withServiceSubmitFunction(serviceType);
@@ -1517,12 +1592,11 @@ class ActionDeleteDescriptor extends ActionDescriptor {
1517
1592
  constructor(model) {
1518
1593
  super(model, ActionDeleteDescriptor.ACTION_NAME);
1519
1594
  this.withPosition(ActionPositionEnum.RowInline);
1520
- this.withTitle(null);
1521
1595
  this.withRunFunction(ActionDataProviderUtil.runDeleteOrFail);
1522
- this.withLevel(ActionLevelEnum.Danger);
1523
- this.withIcon('pi pi-trash');
1524
- this.withRunConfirmation(undefined);
1596
+ this.buttonDescriptor.styleClass.withActionLevel(ActionLevelEnum.Danger);
1597
+ this.withRunConfirmation();
1525
1598
  this.withPermissionsRouteType(Permissions.ActionTypes.DELETE);
1599
+ this.buttonDescriptor.withLabel(null).withIcon('pi pi-trash');
1526
1600
  }
1527
1601
  withServiceType(serviceType) {
1528
1602
  return this.withServiceDeleteFunction(serviceType);
@@ -1980,6 +2054,12 @@ class ColumnDescriptor {
1980
2054
  get hasCopyToClipboard() {
1981
2055
  return this._hasCopyToClipboard;
1982
2056
  }
2057
+ get template() {
2058
+ return this._template;
2059
+ }
2060
+ get getter() {
2061
+ return this._getter;
2062
+ }
1983
2063
  asType(type = ColumnTypeEnum.String) {
1984
2064
  this._columnType = type;
1985
2065
  return this;
@@ -2115,6 +2195,14 @@ class ColumnDescriptor {
2115
2195
  this._hasCopyToClipboard = hasCopyToCliboard;
2116
2196
  return this;
2117
2197
  }
2198
+ withTemplate(template) {
2199
+ this._template = template;
2200
+ return this;
2201
+ }
2202
+ withGetter(getter) {
2203
+ this._getter = getter;
2204
+ return this;
2205
+ }
2118
2206
  copy() {
2119
2207
  var _a;
2120
2208
  const descriptor = new ColumnDescriptor(this._table, this._property);
@@ -2142,6 +2230,8 @@ class ColumnDescriptor {
2142
2230
  descriptor._minWidth = this._minWidth;
2143
2231
  descriptor._maxWidth = this._maxWidth;
2144
2232
  descriptor._hasCopyToClipboard = this._hasCopyToClipboard;
2233
+ descriptor._template = this._template;
2234
+ descriptor._getter = this._getter;
2145
2235
  return descriptor;
2146
2236
  }
2147
2237
  }
@@ -3525,6 +3615,116 @@ class TableviewDescriptor {
3525
3615
  }
3526
3616
  }
3527
3617
 
3618
+ class ButtonDescriptor {
3619
+ constructor() {
3620
+ this._disabled = false;
3621
+ this._iconPosition = 'left';
3622
+ this._styleClass = new ButtonStyleBuilder();
3623
+ this._loading = false;
3624
+ this._loadingIcon = 'pi pi-spinner pi-spin';
3625
+ }
3626
+ withLabel(label) {
3627
+ this._label = label;
3628
+ return this;
3629
+ }
3630
+ withDisabled(disabled = true) {
3631
+ this._disabled = disabled;
3632
+ return this;
3633
+ }
3634
+ withIcon(icon) {
3635
+ this._icon = icon;
3636
+ return this;
3637
+ }
3638
+ withIconPosition(iconPosition) {
3639
+ this._iconPosition = iconPosition;
3640
+ return this;
3641
+ }
3642
+ withStyleClass(style) {
3643
+ this._styleClass = style;
3644
+ return this;
3645
+ }
3646
+ withOnClick(onClick) {
3647
+ this._onClick = onClick;
3648
+ return this;
3649
+ }
3650
+ withOnFocus(onFocus) {
3651
+ this._onFocus = onFocus;
3652
+ return this;
3653
+ }
3654
+ withOnBlur(onBlur) {
3655
+ this._onBlur = onBlur;
3656
+ return this;
3657
+ }
3658
+ withLoading(loading = true) {
3659
+ this._loading = loading;
3660
+ return this;
3661
+ }
3662
+ withLoadingIcon(loadingIcon) {
3663
+ this._loadingIcon = loadingIcon;
3664
+ return this;
3665
+ }
3666
+ withBadge(badge) {
3667
+ this._badge = badge;
3668
+ return this;
3669
+ }
3670
+ withTooltip(tooltip) {
3671
+ this._tooltip = tooltip;
3672
+ return this;
3673
+ }
3674
+ get label() {
3675
+ return this._label;
3676
+ }
3677
+ get disabled() {
3678
+ return this._disabled;
3679
+ }
3680
+ get icon() {
3681
+ return this._icon;
3682
+ }
3683
+ get iconPosition() {
3684
+ return this._iconPosition;
3685
+ }
3686
+ get styleClass() {
3687
+ return this._styleClass;
3688
+ }
3689
+ get onClick() {
3690
+ return this._onClick;
3691
+ }
3692
+ get onFocus() {
3693
+ return this._onFocus;
3694
+ }
3695
+ get onBlur() {
3696
+ return this._onBlur;
3697
+ }
3698
+ get loading() {
3699
+ return this._loading;
3700
+ }
3701
+ get loadingIcon() {
3702
+ return this._loadingIcon;
3703
+ }
3704
+ get badge() {
3705
+ return this._badge;
3706
+ }
3707
+ get tooltip() {
3708
+ return this._tooltip;
3709
+ }
3710
+ copy() {
3711
+ const descriptor = new ButtonDescriptor();
3712
+ descriptor._label = this._label;
3713
+ descriptor._disabled = this._disabled;
3714
+ descriptor._icon = this._icon;
3715
+ descriptor._iconPosition = this._iconPosition;
3716
+ descriptor._styleClass = this._styleClass;
3717
+ descriptor._onClick = this._onClick;
3718
+ descriptor._onFocus = this._onFocus;
3719
+ descriptor._onBlur = this._onBlur;
3720
+ descriptor._loading = this._loading;
3721
+ descriptor._loadingIcon = this._loadingIcon;
3722
+ descriptor._badge = this._badge;
3723
+ descriptor._tooltip = this._tooltip;
3724
+ return descriptor;
3725
+ }
3726
+ }
3727
+
3528
3728
  class EditorFormlyUtil {
3529
3729
  static createFormlyConfigFromDescriptor(descriptor) {
3530
3730
  const fields = [];
@@ -4305,6 +4505,9 @@ class StringUtil {
4305
4505
  else if (typeof value[key] === 'object') {
4306
4506
  escapedValue[key] = StringUtil.escapeHtmlAny(value[key]);
4307
4507
  }
4508
+ else {
4509
+ escapedValue[key] = value[key];
4510
+ }
4308
4511
  }
4309
4512
  return escapedValue;
4310
4513
  }
@@ -5205,44 +5408,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
5205
5408
  }]
5206
5409
  }] });
5207
5410
 
5208
- class MngLinkFormatterPipe {
5209
- parseUrl(s, itemId, itemAny, model, actionData) {
5210
- var _a, _b;
5211
- if (s === ':itemId') {
5212
- return itemId;
5213
- }
5214
- else if (model && s.startsWith(`:${model.typeName}.`)) {
5215
- return (_a = itemAny[s.substring(model.typeName.length + 2)]) !== null && _a !== void 0 ? _a : '';
5216
- }
5217
- else if (s.startsWith(':')) {
5218
- return (_b = actionData === null || actionData === void 0 ? void 0 : actionData[s.substring(1)]) !== null && _b !== void 0 ? _b : '';
5219
- }
5220
- else {
5221
- return s;
5222
- }
5223
- }
5224
- transform(value, itemId, item, model, actionData) {
5225
- const itemAny = (item !== null && item !== void 0 ? item : {});
5226
- if (typeof value === 'string') {
5227
- return value.split('/').map(s => this.parseUrl(s, itemId, itemAny, model, actionData));
5228
- }
5229
- else {
5230
- const transformedItems = [];
5231
- value.forEach(val => transformedItems.push(...val.split('/').map(s => this.parseUrl(s, itemId, itemAny, model, actionData))));
5232
- return transformedItems;
5233
- }
5234
- }
5235
- }
5236
- MngLinkFormatterPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MngLinkFormatterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
5237
- MngLinkFormatterPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.1.0", ngImport: i0, type: MngLinkFormatterPipe, name: "linkFormatter" });
5238
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MngLinkFormatterPipe, decorators: [{
5239
- type: Pipe,
5240
- args: [{
5241
- name: 'linkFormatter',
5242
- pure: true
5243
- }]
5244
- }] });
5245
-
5246
5411
  /**
5247
5412
  * Imitation of JSONPath Syntax. Supports:
5248
5413
  * - Root object notation with '$'
@@ -5280,7 +5445,6 @@ class JsonPathPipe {
5280
5445
  const arrayPath = p.substring(0, leftBracketIdx);
5281
5446
  const arrayIdx = +p.substring(leftBracketIdx + 1, p.length - 1);
5282
5447
  const array = currValue[arrayPath];
5283
- console.log(arrayPath, arrayIdx, array);
5284
5448
  if (Array.isArray(array)) {
5285
5449
  if (arrayIdx >= 0 && arrayIdx < array.length) {
5286
5450
  // valid index, continue on the path
@@ -5321,8 +5485,120 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
5321
5485
  }]
5322
5486
  }] });
5323
5487
 
5488
+ class MngParametrizePipe {
5489
+ constructor() {
5490
+ this.jsonPath = new JsonPathPipe();
5491
+ }
5492
+ transform(value, itemId, item, actionData) {
5493
+ let params = {};
5494
+ if (actionData) {
5495
+ params = Object.assign(Object.assign({}, params), actionData);
5496
+ }
5497
+ if (item) {
5498
+ params = Object.assign(Object.assign({}, params), { item: StringUtil.escapeHtmlAny(item) });
5499
+ }
5500
+ if (itemId) {
5501
+ params = Object.assign(Object.assign({}, params), { itemId: itemId });
5502
+ }
5503
+ if (typeof value === 'string') {
5504
+ return this.transformString(value, params);
5505
+ }
5506
+ else if (Array.isArray(value) && value.length > 0 && typeof value[0] === 'string') {
5507
+ return value.map((s) => this.transformString(s, params));
5508
+ }
5509
+ else if (typeof value === 'object') {
5510
+ // process only first level citizens
5511
+ const obj = Object.assign({}, value);
5512
+ for (const key in obj) {
5513
+ const objProp = obj[key];
5514
+ if (typeof objProp === 'string') {
5515
+ obj[key] = this.transformString(objProp, params);
5516
+ }
5517
+ }
5518
+ return obj;
5519
+ }
5520
+ else {
5521
+ return value;
5522
+ }
5523
+ }
5524
+ transformString(s, params) {
5525
+ if ((s.indexOf('/') >= 0 && s.indexOf(':') >= 0) || s.startsWith(':')) {
5526
+ // this is url
5527
+ return s
5528
+ .split('/')
5529
+ .map(s => this.parametrizeStringAsUrl(s, params))
5530
+ .join('/');
5531
+ }
5532
+ else {
5533
+ // parametrize normally
5534
+ return this.parametrizeString(s, params);
5535
+ }
5536
+ }
5537
+ parametrizeStringAsUrl(s, params) {
5538
+ var _a;
5539
+ if (s.startsWith(':')) {
5540
+ const itemProperty = s.substring(1);
5541
+ return (_a = this.jsonPath.transform(params, itemProperty)) !== null && _a !== void 0 ? _a : '';
5542
+ }
5543
+ else {
5544
+ return s;
5545
+ }
5546
+ }
5547
+ parametrizeString(s, params) {
5548
+ return s.replace(/{{\s?([^{}\s]*)\s?}}/g, (subs, key) => { var _a; return (_a = this.jsonPath.transform(params, key)) !== null && _a !== void 0 ? _a : subs; });
5549
+ }
5550
+ }
5551
+ MngParametrizePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MngParametrizePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
5552
+ MngParametrizePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.1.0", ngImport: i0, type: MngParametrizePipe, name: "parametrize" });
5553
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MngParametrizePipe, decorators: [{
5554
+ type: Pipe,
5555
+ args: [{
5556
+ name: 'parametrize',
5557
+ pure: true
5558
+ }]
5559
+ }] });
5560
+
5561
+ class MngGetterPipe {
5562
+ transform(value, getterFunction) {
5563
+ if (typeof getterFunction === 'function') {
5564
+ return getterFunction(value);
5565
+ }
5566
+ return value;
5567
+ }
5568
+ }
5569
+ MngGetterPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MngGetterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
5570
+ MngGetterPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.1.0", ngImport: i0, type: MngGetterPipe, name: "getter" });
5571
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MngGetterPipe, decorators: [{
5572
+ type: Pipe,
5573
+ args: [{
5574
+ name: 'getter',
5575
+ pure: true
5576
+ }]
5577
+ }] });
5578
+
5579
+ class MngTemplatePipe {
5580
+ constructor(parametrizePipe) {
5581
+ this.parametrizePipe = parametrizePipe;
5582
+ }
5583
+ transform(value, template) {
5584
+ if (typeof template === 'string') {
5585
+ return this.parametrizePipe.transform(template, undefined, value);
5586
+ }
5587
+ return value;
5588
+ }
5589
+ }
5590
+ MngTemplatePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MngTemplatePipe, deps: [{ token: MngParametrizePipe }], target: i0.ɵɵFactoryTarget.Pipe });
5591
+ MngTemplatePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.1.0", ngImport: i0, type: MngTemplatePipe, name: "template" });
5592
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MngTemplatePipe, decorators: [{
5593
+ type: Pipe,
5594
+ args: [{
5595
+ name: 'template',
5596
+ pure: true
5597
+ }]
5598
+ }], ctorParameters: function () { return [{ type: MngParametrizePipe }]; } });
5599
+
5324
5600
  class MngActionExecutorService {
5325
- constructor(injector, router, dialogService, confirmationService, translate, configurationService, navigationService, errorMapper, linkFormatter, defaultEditorDialogComponent) {
5601
+ constructor(injector, router, dialogService, confirmationService, translate, configurationService, navigationService, errorMapper, parametrize, defaultEditorDialogComponent) {
5326
5602
  this.injector = injector;
5327
5603
  this.router = router;
5328
5604
  this.dialogService = dialogService;
@@ -5331,7 +5607,7 @@ class MngActionExecutorService {
5331
5607
  this.configurationService = configurationService;
5332
5608
  this.navigationService = navigationService;
5333
5609
  this.errorMapper = errorMapper;
5334
- this.linkFormatter = linkFormatter;
5610
+ this.parametrize = parametrize;
5335
5611
  this.defaultEditorDialogComponent = defaultEditorDialogComponent;
5336
5612
  this.debug = false;
5337
5613
  // this.debug = true;
@@ -5576,7 +5852,7 @@ class MngActionExecutorService {
5576
5852
  * @return Action context for run function.
5577
5853
  */
5578
5854
  runAction(action, parameters, dataProvider, instance, previousActionInstance) {
5579
- var _a, _b, _c, _d;
5855
+ var _a, _b, _c, _d, _e, _f;
5580
5856
  if (!instance) {
5581
5857
  // create new instance if non provided
5582
5858
  instance = new ActionInstance(action, ActionInstanceStateEnum.ActivationEnd, this.debug);
@@ -5584,33 +5860,44 @@ class MngActionExecutorService {
5584
5860
  const context = this.prepareActionContext(instance, parameters, dataProvider, previousActionInstance);
5585
5861
  if (action.hasRunConfirmation) {
5586
5862
  const sourceComponent = parameters === null || parameters === void 0 ? void 0 : parameters.sourceComponent;
5863
+ const confirmationDescriptor = action.runConfirmationDialogDescriptor;
5587
5864
  if (typeof (sourceComponent === null || sourceComponent === void 0 ? void 0 : sourceComponent.getConfirmationService) !== 'function' || typeof (sourceComponent === null || sourceComponent === void 0 ? void 0 : sourceComponent.getConfirmationServiceInstanceKey) !== 'function') {
5588
5865
  throw new Error(`Source component ${sourceComponent} should be implementing IConfirmationService interface to be able to provide confirmation functionality.`);
5589
5866
  }
5867
+ const item = parameters.item;
5590
5868
  const srcConfirmComponent = sourceComponent;
5591
5869
  let confirmParams = {
5592
5870
  key: srcConfirmComponent.getConfirmationServiceInstanceKey(action),
5593
- acceptVisible: false,
5594
- rejectVisible: false
5871
+ icon: confirmationDescriptor.icon,
5872
+ acceptVisible: true,
5873
+ acceptIcon: (_a = confirmationDescriptor.acceptIcon) !== null && _a !== void 0 ? _a : undefined,
5874
+ acceptButtonStyleClass: confirmationDescriptor.acceptButtonStyle.getButtonClass(),
5875
+ rejectVisible: true,
5876
+ rejectIcon: (_b = confirmationDescriptor.rejectIcon) !== null && _b !== void 0 ? _b : undefined,
5877
+ rejectButtonStyleClass: confirmationDescriptor.rejectButtonStyle.getButtonClass(),
5878
+ closeOnEscape: confirmationDescriptor.closeOnEscape
5595
5879
  };
5596
- const item = parameters.item;
5597
- if (action.runConfirmationTitle !== null) {
5598
- confirmParams.header = (_a = I18nUtils.Action.get(this.translate, action, 'confirm.title', action.runConfirmationTitle, item, 'general.confirmation')) !== null && _a !== void 0 ? _a : undefined;
5880
+ if (confirmationDescriptor.title !== null) {
5881
+ confirmParams.header = (_c = I18nUtils.Action.get(this.translate, action, 'confirm.title', confirmationDescriptor.title, item, 'general.confirmation')) !== null && _c !== void 0 ? _c : undefined;
5599
5882
  }
5600
- if (action.runConfirmationMessage !== null) {
5883
+ if (confirmationDescriptor.message !== null) {
5601
5884
  confirmParams.message =
5602
- (_b = I18nUtils.Action.get(this.translate, action, 'confirm.message', action.runConfirmationMessage, StringUtil.escapeHtmlAny(item), 'general.confirmation')) !== null && _b !== void 0 ? _b : undefined;
5885
+ (_d = I18nUtils.Action.get(this.translate, action, 'confirm.message', confirmationDescriptor.message, StringUtil.escapeHtmlAny(item), 'general.confirmation')) !== null && _d !== void 0 ? _d : undefined;
5603
5886
  }
5604
- if (action.runConfirmationIcon !== null) {
5605
- confirmParams.icon = action.runConfirmationIcon === undefined ? 'pi pi-exclamation-triangle' : action.runConfirmationIcon;
5887
+ if (confirmationDescriptor.acceptLabel !== null) {
5888
+ confirmParams.acceptLabel = (_e = I18nUtils.Action.get(this.translate, action, 'confirm.accept', confirmationDescriptor.acceptLabel, item, 'general.yes')) !== null && _e !== void 0 ? _e : undefined;
5606
5889
  }
5607
- if (action.runConfirmationAcceptTitle !== null) {
5608
- confirmParams.acceptLabel = (_c = I18nUtils.Action.get(this.translate, action, 'confirm.accept', action.runConfirmationAcceptTitle, item, 'general.yes')) !== null && _c !== void 0 ? _c : undefined;
5609
- confirmParams.acceptVisible = true;
5890
+ if (confirmationDescriptor.acceptIcon !== null) {
5891
+ confirmParams.acceptIcon = confirmationDescriptor.acceptIcon;
5610
5892
  }
5611
- if (action.runConfirmationRejectTitle !== null) {
5612
- confirmParams.rejectLabel = (_d = I18nUtils.Action.get(this.translate, action, 'confirm.reject', action.runConfirmationRejectTitle, item, 'general.no')) !== null && _d !== void 0 ? _d : undefined;
5613
- confirmParams.rejectVisible = true;
5893
+ if (confirmationDescriptor.rejectIcon !== null) {
5894
+ confirmParams.rejectIcon = confirmationDescriptor.rejectIcon;
5895
+ }
5896
+ if (confirmationDescriptor.rejectLabel !== null) {
5897
+ confirmParams.rejectLabel = (_f = I18nUtils.Action.get(this.translate, action, 'confirm.reject', confirmationDescriptor.rejectLabel, item, 'general.no')) !== null && _f !== void 0 ? _f : undefined;
5898
+ }
5899
+ if (confirmationDescriptor.rejectLabel === null && confirmationDescriptor.rejectIcon === null) {
5900
+ confirmParams.rejectVisible = false;
5614
5901
  }
5615
5902
  confirmParams.accept = () => {
5616
5903
  instance.state = ActionInstanceStateEnum.RunConfirmationEndAccept;
@@ -5620,8 +5907,8 @@ class MngActionExecutorService {
5620
5907
  instance.state = ActionInstanceStateEnum.RunConfirmationEndReject;
5621
5908
  this.deactivateAction(instance);
5622
5909
  };
5623
- if (action.runConfirmationConfigMapFn) {
5624
- confirmParams = action.runConfirmationConfigMapFn(context, confirmParams);
5910
+ if (confirmationDescriptor.runConfirmationConfigMapFn) {
5911
+ confirmParams = confirmationDescriptor.runConfirmationConfigMapFn(context, confirmParams);
5625
5912
  }
5626
5913
  context.confirmation = confirmParams;
5627
5914
  instance.state = ActionInstanceStateEnum.RunConfirmationStart;
@@ -5778,7 +6065,7 @@ class MngActionExecutorService {
5778
6065
  if (actionUrl.startsWith('/')) {
5779
6066
  actionUrl = actionUrl.substring(1);
5780
6067
  }
5781
- const actionUrlSegments = this.linkFormatter.transform(actionUrl, parameters.itemId, parameters.item, action.model, parameters.actionData);
6068
+ const actionUrlSegments = this.parametrize.transform(actionUrl, parameters.itemId, parameters.item, parameters.actionData).split('/');
5782
6069
  instance.triggerRouteNavigation = from(this.router.navigate([baseUrl, ...actionUrlSegments], { relativeTo: parameters.route, queryParams: parsedUrl.queryParams }));
5783
6070
  return instance;
5784
6071
  }
@@ -5842,12 +6129,12 @@ class MngActionExecutorService {
5842
6129
  return this.errorMapper.toMngError(error, actionError);
5843
6130
  }
5844
6131
  }
5845
- MngActionExecutorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MngActionExecutorService, deps: [{ token: i0.Injector }, { token: i1.Router }, { token: i3.DialogService }, { token: i2.ConfirmationService }, { token: i1$2.TranslateService }, { token: MngConfigurationService }, { token: MngNavigationService }, { token: MngErrorMapperService }, { token: MngLinkFormatterPipe }, { token: ACTION_EDITOR_DIALOG_COMPONENT_SETTING }], target: i0.ɵɵFactoryTarget.Injectable });
6132
+ MngActionExecutorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MngActionExecutorService, deps: [{ token: i0.Injector }, { token: i1.Router }, { token: i3.DialogService }, { token: i2.ConfirmationService }, { token: i1$2.TranslateService }, { token: MngConfigurationService }, { token: MngNavigationService }, { token: MngErrorMapperService }, { token: MngParametrizePipe }, { token: ACTION_EDITOR_DIALOG_COMPONENT_SETTING }], target: i0.ɵɵFactoryTarget.Injectable });
5846
6133
  MngActionExecutorService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MngActionExecutorService });
5847
6134
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MngActionExecutorService, decorators: [{
5848
6135
  type: Injectable
5849
6136
  }], ctorParameters: function () {
5850
- return [{ type: i0.Injector }, { type: i1.Router }, { type: i3.DialogService }, { type: i2.ConfirmationService }, { type: i1$2.TranslateService }, { type: MngConfigurationService }, { type: MngNavigationService }, { type: MngErrorMapperService }, { type: MngLinkFormatterPipe }, { type: i0.Type, decorators: [{
6137
+ return [{ type: i0.Injector }, { type: i1.Router }, { type: i3.DialogService }, { type: i2.ConfirmationService }, { type: i1$2.TranslateService }, { type: MngConfigurationService }, { type: MngNavigationService }, { type: MngErrorMapperService }, { type: MngParametrizePipe }, { type: i0.Type, decorators: [{
5851
6138
  type: Inject,
5852
6139
  args: [ACTION_EDITOR_DIALOG_COMPONENT_SETTING]
5853
6140
  }] }];
@@ -6322,7 +6609,7 @@ class MngActionComponent {
6322
6609
  ngOnInit() {
6323
6610
  var _a, _b;
6324
6611
  this.viewContainer = (_b = (_a = this.viewContainerInit) !== null && _a !== void 0 ? _a : this.viewContainerService) !== null && _b !== void 0 ? _b : undefined;
6325
- this.hasNoTitle = this.action.title === null;
6612
+ this.hasNoTitle = this.action.buttonDescriptor.label === null;
6326
6613
  this.isEnabledSubject.next(true);
6327
6614
  this.isVisibleSubject.next(true);
6328
6615
  this.isPermittedSubject.next(true);
@@ -6345,7 +6632,7 @@ class MngActionComponent {
6345
6632
  this.isHostHidden = !isVisible || !isPermitted;
6346
6633
  });
6347
6634
  this.subscriptions.push(hostVisibilitySubscription);
6348
- this.buttonClass = this.action.buttonStyle.getButtonClass(this.hasNoTitle);
6635
+ this.buttonClass = this.action.buttonDescriptor.styleClass.getButtonClass(this.hasNoTitle);
6349
6636
  }
6350
6637
  ngOnChanges(changes) {
6351
6638
  var _a, _b, _c, _d, _e, _f;
@@ -6396,7 +6683,7 @@ class MngActionComponent {
6396
6683
  return `${action.actionName}_${this.cmpId}`;
6397
6684
  }
6398
6685
  processSubscriptions() {
6399
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
6686
+ var _a, _b, _c, _d, _e, _f, _g, _h;
6400
6687
  const parameters = new ActionParameters(this.itemId, this.item)
6401
6688
  .withActionData(this.actionData)
6402
6689
  .withViewContainer((_a = this.viewContainer) !== null && _a !== void 0 ? _a : undefined)
@@ -6425,21 +6712,21 @@ class MngActionComponent {
6425
6712
  }
6426
6713
  if (!this.hasNoTitle) {
6427
6714
  (_f = this.labelSubscription) === null || _f === void 0 ? void 0 : _f.unsubscribe();
6428
- this.labelSubscription = I18nUtils.Action.getAsync(this.translate, this.action, 'title', (_h = (_g = this.action) === null || _g === void 0 ? void 0 : _g.title) !== null && _h !== void 0 ? _h : undefined, this.item).subscribe({
6715
+ this.labelSubscription = I18nUtils.Action.getAsync(this.translate, this.action, 'title', (_g = this.action.buttonDescriptor.label) !== null && _g !== void 0 ? _g : undefined, this.item).subscribe({
6429
6716
  next: i18n => this.labelSubject.next(i18n)
6430
6717
  });
6431
6718
  }
6432
- (_j = this.tooltipSubscription) === null || _j === void 0 ? void 0 : _j.unsubscribe();
6433
- this.tooltipSubscription = I18nUtils.Action.getAsync(this.translate, this.action, 'tooltip', (_l = (_k = this.action) === null || _k === void 0 ? void 0 : _k.tooltip) !== null && _l !== void 0 ? _l : undefined, this.item).subscribe({
6719
+ (_h = this.tooltipSubscription) === null || _h === void 0 ? void 0 : _h.unsubscribe();
6720
+ this.tooltipSubscription = I18nUtils.Action.getAsync(this.translate, this.action, 'tooltip', this.action.buttonDescriptor.tooltip, this.item).subscribe({
6434
6721
  next: i18n => this.tooltipSubject.next(i18n)
6435
6722
  });
6436
6723
  }
6437
6724
  }
6438
6725
  MngActionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MngActionComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1$2.TranslateService }, { token: MngAuthorizationService }, { token: MngActionExecutorService }, { token: i2.ConfirmationService }, { token: MngViewContainerComponentService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
6439
- MngActionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: MngActionComponent, selector: "mng-action", inputs: { action: "action", item: "item", itemId: "itemId", actionData: "actionData", queryParam: "queryParam", dataProvider: "dataProvider", inputDisabled: ["disabled", "inputDisabled"], inputLoading: ["loading", "inputLoading"], viewContainerInit: ["viewContainer", "viewContainerInit"] }, outputs: { finishEventEmitter: "finish" }, host: { properties: { "class": "this.hostClass", "class.m-0": "this.isHostHidden" } }, providers: [ConfirmationService], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"($isVisible | async) && ($isPermitted | 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]=\"buttonClass\"\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]=\"buttonClass\"\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]=\"buttonClass\"></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"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { kind: "directive", type: i7.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "fitContent", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i4$1.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "component", type: i9.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"] }, { kind: "directive", type: i6.Ripple, selector: "[pRipple]" }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: MngLinkFormatterPipe, name: "linkFormatter" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6726
+ MngActionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: MngActionComponent, selector: "mng-action", inputs: { action: "action", item: "item", itemId: "itemId", actionData: "actionData", queryParam: "queryParam", dataProvider: "dataProvider", inputDisabled: ["disabled", "inputDisabled"], inputLoading: ["loading", "inputLoading"], viewContainerInit: ["viewContainer", "viewContainerInit"] }, outputs: { finishEventEmitter: "finish" }, host: { properties: { "class": "this.hostClass", "class.m-0": "this.isHostHidden" } }, providers: [ConfirmationService], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"($isVisible | async) && ($isPermitted | async)\">\n <a\n *ngIf=\"actionLink && actionLink.url !== ''; else routerLink\"\n pButton\n pRipple\n [icon]=\"$any(action.buttonDescriptor.icon)\"\n [href]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false) ? null : (actionLink.url | parametrize: itemId:item:actionData)\"\n [target]=\"actionLink.target\"\n [class.disabled]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false)\"\n [class]=\"buttonClass\"\n >{{ ($label | async) ?? '' }}</a\n >\n <ng-template #routerLink>\n <a\n *ngIf=\"actionLink; else button\"\n pButton\n pRipple\n [icon]=\"$any(action.buttonDescriptor.icon)\"\n [target]=\"actionLink.target\"\n [replaceUrl]=\"actionLink.replaceUrl\"\n [routerLink]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false) ? null : (actionLink.pathSegments | parametrize: itemId:item:actionData)\"\n [queryParams]=\"actionLink.queryParams | parametrize: itemId:item:actionData\"\n [queryParamsHandling]=\"actionLink.queryParamsHandling\"\n [class.disabled]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false)\"\n [class]=\"buttonClass\"\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.buttonDescriptor.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]=\"buttonClass\"></button>\n </ng-template>\n <p-confirmDialog\n *ngIf=\"action.runConfirmationDialogDescriptor\"\n [key]=\"action.actionName + '_' + cmpId\"\n [baseZIndex]=\"50\"\n appendTo=\"body\"\n [closable]=\"action.runConfirmationDialogDescriptor.closable\"></p-confirmDialog>\n</ng-container>\n", styles: [":host{display:inline-block}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { kind: "directive", type: i7.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "fitContent", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i4$1.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "component", type: i9.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"] }, { kind: "directive", type: i6.Ripple, selector: "[pRipple]" }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: MngParametrizePipe, name: "parametrize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6440
6727
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MngActionComponent, decorators: [{
6441
6728
  type: Component,
6442
- args: [{ selector: 'mng-action', changeDetection: ChangeDetectionStrategy.OnPush, providers: [ConfirmationService], template: "<ng-container *ngIf=\"($isVisible | async) && ($isPermitted | 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]=\"buttonClass\"\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]=\"buttonClass\"\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]=\"buttonClass\"></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"] }]
6729
+ args: [{ selector: 'mng-action', changeDetection: ChangeDetectionStrategy.OnPush, providers: [ConfirmationService], template: "<ng-container *ngIf=\"($isVisible | async) && ($isPermitted | async)\">\n <a\n *ngIf=\"actionLink && actionLink.url !== ''; else routerLink\"\n pButton\n pRipple\n [icon]=\"$any(action.buttonDescriptor.icon)\"\n [href]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false) ? null : (actionLink.url | parametrize: itemId:item:actionData)\"\n [target]=\"actionLink.target\"\n [class.disabled]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false)\"\n [class]=\"buttonClass\"\n >{{ ($label | async) ?? '' }}</a\n >\n <ng-template #routerLink>\n <a\n *ngIf=\"actionLink; else button\"\n pButton\n pRipple\n [icon]=\"$any(action.buttonDescriptor.icon)\"\n [target]=\"actionLink.target\"\n [replaceUrl]=\"actionLink.replaceUrl\"\n [routerLink]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false) ? null : (actionLink.pathSegments | parametrize: itemId:item:actionData)\"\n [queryParams]=\"actionLink.queryParams | parametrize: itemId:item:actionData\"\n [queryParamsHandling]=\"actionLink.queryParamsHandling\"\n [class.disabled]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false)\"\n [class]=\"buttonClass\"\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.buttonDescriptor.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]=\"buttonClass\"></button>\n </ng-template>\n <p-confirmDialog\n *ngIf=\"action.runConfirmationDialogDescriptor\"\n [key]=\"action.actionName + '_' + cmpId\"\n [baseZIndex]=\"50\"\n appendTo=\"body\"\n [closable]=\"action.runConfirmationDialogDescriptor.closable\"></p-confirmDialog>\n</ng-container>\n", styles: [":host{display:inline-block}\n"] }]
6443
6730
  }], ctorParameters: function () {
6444
6731
  return [{ type: i1.ActivatedRoute }, { type: i1$2.TranslateService }, { type: MngAuthorizationService }, { type: MngActionExecutorService }, { type: i2.ConfirmationService }, { type: MngViewContainerComponentService, decorators: [{
6445
6732
  type: Optional
@@ -6729,13 +7016,14 @@ class MngFormEditorComponent {
6729
7016
  if (field && field.setter) {
6730
7017
  const splitPath = field.property.split('.');
6731
7018
  let fieldValue = formValue;
6732
- for (let i = 0; i < splitPath.length; i++) {
7019
+ for (let i = 0; i < splitPath.length - 1; i++) {
6733
7020
  const currentSubPath = splitPath[i];
6734
7021
  if (typeof fieldValue[currentSubPath] !== 'object') {
6735
7022
  fieldValue[currentSubPath] = {};
6736
7023
  }
6737
7024
  fieldValue = fieldValue[currentSubPath];
6738
7025
  }
7026
+ fieldValue = fieldValue[splitPath[splitPath.length - 1]];
6739
7027
  field.setter(formValue, fieldValue);
6740
7028
  }
6741
7029
  });
@@ -7179,6 +7467,8 @@ class MngDropdownComponent {
7179
7467
  this.className = null;
7180
7468
  this.dropdownClassName = null;
7181
7469
  this.changeValueOnBlur = false;
7470
+ this.loadingSubject = new ReplaySubject(1);
7471
+ this.$loading = this.loadingSubject.asObservable();
7182
7472
  this.valueChangeEventEmitter = new EventEmitter();
7183
7473
  this.itemsSubject = new ReplaySubject(1);
7184
7474
  this.dataProviderService = null;
@@ -7188,6 +7478,7 @@ class MngDropdownComponent {
7188
7478
  this.onTouchedFn = () => { };
7189
7479
  this.dropdownFormControl = new FormControl();
7190
7480
  this.items$ = this.itemsSubject.asObservable();
7481
+ this.loadingSubject.next(false);
7191
7482
  }
7192
7483
  ngOnInit() {
7193
7484
  var _a;
@@ -7199,6 +7490,7 @@ class MngDropdownComponent {
7199
7490
  }
7200
7491
  });
7201
7492
  if (this.dataProvider) {
7493
+ this.loadingSubject.next(true);
7202
7494
  this.dataProviderService = this.dataProvider.serviceType ? this.injector.get(this.dataProvider.serviceType) : null;
7203
7495
  const queryParamBuilder = MediusQueryParamBuilder.create();
7204
7496
  if (this.itemsLabelTranslate) {
@@ -7246,6 +7538,7 @@ class MngDropdownComponent {
7246
7538
  }))
7247
7539
  .subscribe(res => {
7248
7540
  this.itemsSubject.next(res);
7541
+ this.loadingSubject.next(false);
7249
7542
  });
7250
7543
  if (this.selectFirstItem && !((_a = this.dropdownFormControl) === null || _a === void 0 ? void 0 : _a.value)) {
7251
7544
  this.items$.pipe(first()).subscribe(res => {
@@ -7300,10 +7593,10 @@ class MngDropdownComponent {
7300
7593
  }
7301
7594
  }
7302
7595
  MngDropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MngDropdownComponent, deps: [{ token: i0.Injector }, { token: i1$2.TranslateService }, { token: MngFormlyFieldWrapperComponent, optional: true }], target: i0.ɵɵFactoryTarget.Component });
7303
- MngDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: MngDropdownComponent, selector: "mng-dropdown", inputs: { dataProvider: "dataProvider", dataKeyProperty: "dataKeyProperty", itemsLabelPropertyInit: ["itemsLabelProperty", "itemsLabelPropertyInit"], itemsLabelTranslate: "itemsLabelTranslate", itemsValuePropertyInit: ["itemsValueProperty", "itemsValuePropertyInit"], itemsDisabledProperty: "itemsDisabledProperty", multiselect: "multiselect", placeholder: "placeholder", showClear: "showClear", selectFirstItem: "selectFirstItem", className: "className", dropdownClassName: "dropdownClassName", changeValueOnBlur: "changeValueOnBlur" }, outputs: { valueChangeEventEmitter: "valueChange" }, providers: [MNG_DROPDOWN_VALUE_ACCESSOR], viewQueries: [{ propertyName: "primeDropdown", first: true, predicate: Dropdown, descendants: true }], ngImport: i0, template: "<p-dropdown\n *ngIf=\"!multiselect; else pMultiselect\"\n [formControl]=\"dropdownFormControl\"\n [placeholder]=\"$any(placeholder)\"\n [dataKey]=\"$any(dataKeyProperty)\"\n [optionLabel]=\"$any(itemsLabelProperty)\"\n [optionValue]=\"$any(itemsValueProperty)\"\n [optionDisabled]=\"$any(itemsDisabledProperty)\"\n [options]=\"$any(items$ | async)\"\n [showClear]=\"showClear\"\n [autoDisplayFirst]=\"false\"\n [styleClass]=\"$any(className)\"\n [panelStyleClass]=\"$any(dropdownClassName)\"\n (onBlur)=\"onDropdownBlur($event)\"\n appendTo=\"body\">\n</p-dropdown>\n<ng-template #pMultiselect>\n <p-multiSelect\n [maxSelectedLabels]=\"1\"\n [selectedItemsLabel]=\"'mngDropdown.multiselectOverMaxDisplayLimit' | translate\"\n [formControl]=\"dropdownFormControl\"\n [defaultLabel]=\"$any(placeholder)\"\n [dataKey]=\"$any(dataKeyProperty)\"\n [optionLabel]=\"$any(itemsLabelProperty)\"\n [optionValue]=\"$any(itemsValueProperty)\"\n [optionDisabled]=\"$any(itemsDisabledProperty)\"\n [options]=\"(items$ | async) ?? []\"\n [styleClass]=\"$any(className)\"\n [panelStyleClass]=\"$any(dropdownClassName)\"\n [filter]=\"true\"\n [showToggleAll]=\"false\"\n (onPanelHide)=\"onPanelHide($event)\"\n appendTo=\"body\">\n </p-multiSelect>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i5$1.Dropdown, selector: "p-dropdown", inputs: ["scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "filterPlaceholder", "filterLocale", "inputId", "selectId", "dataKey", "filterBy", "autofocus", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "disabled", "itemSize", "options", "filterValue"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "component", type: i6$1.MultiSelect, selector: "p-multiSelect", inputs: ["style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "appendTo", "dataKey", "name", "label", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "autoZIndex", "baseZIndex", "filterBy", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "showTransitionOptions", "hideTransitionOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "defaultLabel", "placeholder", "options", "filterValue", "itemSize"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
7596
+ MngDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: MngDropdownComponent, selector: "mng-dropdown", inputs: { dataProvider: "dataProvider", dataKeyProperty: "dataKeyProperty", itemsLabelPropertyInit: ["itemsLabelProperty", "itemsLabelPropertyInit"], itemsLabelTranslate: "itemsLabelTranslate", itemsValuePropertyInit: ["itemsValueProperty", "itemsValuePropertyInit"], itemsDisabledProperty: "itemsDisabledProperty", multiselect: "multiselect", placeholder: "placeholder", showClear: "showClear", selectFirstItem: "selectFirstItem", className: "className", dropdownClassName: "dropdownClassName", changeValueOnBlur: "changeValueOnBlur" }, outputs: { valueChangeEventEmitter: "valueChange" }, providers: [MNG_DROPDOWN_VALUE_ACCESSOR], viewQueries: [{ propertyName: "primeDropdown", first: true, predicate: Dropdown, descendants: true }], ngImport: i0, template: "<p-dropdown\n *ngIf=\"!multiselect; else pMultiselect\"\n [formControl]=\"dropdownFormControl\"\n [placeholder]=\"$any(placeholder)\"\n [dataKey]=\"$any(dataKeyProperty)\"\n [optionLabel]=\"$any(itemsLabelProperty)\"\n [optionValue]=\"$any(itemsValueProperty)\"\n [optionDisabled]=\"$any(itemsDisabledProperty)\"\n [options]=\"$any(items$ | async)\"\n [showClear]=\"showClear\"\n [autoDisplayFirst]=\"false\"\n [styleClass]=\"$any(className)\"\n [panelStyleClass]=\"$any(dropdownClassName)\"\n (onBlur)=\"onDropdownBlur($event)\"\n [dropdownIcon]=\"($loading | async) ?? false ? 'pi pi-spinner pi-spin' : 'pi pi-chevron-down'\"\n appendTo=\"body\">\n</p-dropdown>\n<ng-template #pMultiselect>\n <p-multiSelect\n [maxSelectedLabels]=\"1\"\n [selectedItemsLabel]=\"'mngDropdown.multiselectOverMaxDisplayLimit' | translate\"\n [formControl]=\"dropdownFormControl\"\n [defaultLabel]=\"$any(placeholder)\"\n [dataKey]=\"$any(dataKeyProperty)\"\n [optionLabel]=\"$any(itemsLabelProperty)\"\n [optionValue]=\"$any(itemsValueProperty)\"\n [optionDisabled]=\"$any(itemsDisabledProperty)\"\n [options]=\"(items$ | async) ?? []\"\n [styleClass]=\"$any(className)\"\n [panelStyleClass]=\"$any(dropdownClassName)\"\n [filter]=\"true\"\n [showToggleAll]=\"false\"\n (onPanelHide)=\"onPanelHide($event)\"\n appendTo=\"body\">\n </p-multiSelect>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i5$1.Dropdown, selector: "p-dropdown", inputs: ["scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "filterPlaceholder", "filterLocale", "inputId", "selectId", "dataKey", "filterBy", "autofocus", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "disabled", "itemSize", "options", "filterValue"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "component", type: i6$1.MultiSelect, selector: "p-multiSelect", inputs: ["style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "appendTo", "dataKey", "name", "label", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "autoZIndex", "baseZIndex", "filterBy", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "showTransitionOptions", "hideTransitionOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "defaultLabel", "placeholder", "options", "filterValue", "itemSize"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
7304
7597
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MngDropdownComponent, decorators: [{
7305
7598
  type: Component,
7306
- args: [{ selector: 'mng-dropdown', providers: [MNG_DROPDOWN_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, template: "<p-dropdown\n *ngIf=\"!multiselect; else pMultiselect\"\n [formControl]=\"dropdownFormControl\"\n [placeholder]=\"$any(placeholder)\"\n [dataKey]=\"$any(dataKeyProperty)\"\n [optionLabel]=\"$any(itemsLabelProperty)\"\n [optionValue]=\"$any(itemsValueProperty)\"\n [optionDisabled]=\"$any(itemsDisabledProperty)\"\n [options]=\"$any(items$ | async)\"\n [showClear]=\"showClear\"\n [autoDisplayFirst]=\"false\"\n [styleClass]=\"$any(className)\"\n [panelStyleClass]=\"$any(dropdownClassName)\"\n (onBlur)=\"onDropdownBlur($event)\"\n appendTo=\"body\">\n</p-dropdown>\n<ng-template #pMultiselect>\n <p-multiSelect\n [maxSelectedLabels]=\"1\"\n [selectedItemsLabel]=\"'mngDropdown.multiselectOverMaxDisplayLimit' | translate\"\n [formControl]=\"dropdownFormControl\"\n [defaultLabel]=\"$any(placeholder)\"\n [dataKey]=\"$any(dataKeyProperty)\"\n [optionLabel]=\"$any(itemsLabelProperty)\"\n [optionValue]=\"$any(itemsValueProperty)\"\n [optionDisabled]=\"$any(itemsDisabledProperty)\"\n [options]=\"(items$ | async) ?? []\"\n [styleClass]=\"$any(className)\"\n [panelStyleClass]=\"$any(dropdownClassName)\"\n [filter]=\"true\"\n [showToggleAll]=\"false\"\n (onPanelHide)=\"onPanelHide($event)\"\n appendTo=\"body\">\n </p-multiSelect>\n</ng-template>\n" }]
7599
+ args: [{ selector: 'mng-dropdown', providers: [MNG_DROPDOWN_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, template: "<p-dropdown\n *ngIf=\"!multiselect; else pMultiselect\"\n [formControl]=\"dropdownFormControl\"\n [placeholder]=\"$any(placeholder)\"\n [dataKey]=\"$any(dataKeyProperty)\"\n [optionLabel]=\"$any(itemsLabelProperty)\"\n [optionValue]=\"$any(itemsValueProperty)\"\n [optionDisabled]=\"$any(itemsDisabledProperty)\"\n [options]=\"$any(items$ | async)\"\n [showClear]=\"showClear\"\n [autoDisplayFirst]=\"false\"\n [styleClass]=\"$any(className)\"\n [panelStyleClass]=\"$any(dropdownClassName)\"\n (onBlur)=\"onDropdownBlur($event)\"\n [dropdownIcon]=\"($loading | async) ?? false ? 'pi pi-spinner pi-spin' : 'pi pi-chevron-down'\"\n appendTo=\"body\">\n</p-dropdown>\n<ng-template #pMultiselect>\n <p-multiSelect\n [maxSelectedLabels]=\"1\"\n [selectedItemsLabel]=\"'mngDropdown.multiselectOverMaxDisplayLimit' | translate\"\n [formControl]=\"dropdownFormControl\"\n [defaultLabel]=\"$any(placeholder)\"\n [dataKey]=\"$any(dataKeyProperty)\"\n [optionLabel]=\"$any(itemsLabelProperty)\"\n [optionValue]=\"$any(itemsValueProperty)\"\n [optionDisabled]=\"$any(itemsDisabledProperty)\"\n [options]=\"(items$ | async) ?? []\"\n [styleClass]=\"$any(className)\"\n [panelStyleClass]=\"$any(dropdownClassName)\"\n [filter]=\"true\"\n [showToggleAll]=\"false\"\n (onPanelHide)=\"onPanelHide($event)\"\n appendTo=\"body\">\n </p-multiSelect>\n</ng-template>\n" }]
7307
7600
  }], ctorParameters: function () {
7308
7601
  return [{ type: i0.Injector }, { type: i1$2.TranslateService }, { type: MngFormlyFieldWrapperComponent, decorators: [{
7309
7602
  type: Optional
@@ -7403,11 +7696,11 @@ class MngActionEditorComponent {
7403
7696
  this.setTitle();
7404
7697
  for (const action of this.action.editorActions) {
7405
7698
  if (action instanceof ActionEditorSubmitDescriptor) {
7406
- if (typeof action.icon === 'undefined') {
7407
- action.withIcon(action.submitType === ActionEditorSubmitTypeEnum.Submit ? 'pi pi-check' : 'pi pi-times');
7699
+ if (typeof action.buttonDescriptor.icon === 'undefined') {
7700
+ action.buttonDescriptor.withIcon(action.submitType === ActionEditorSubmitTypeEnum.Submit ? 'pi pi-check' : 'pi pi-times');
7408
7701
  }
7409
- if (typeof action.title === 'undefined') {
7410
- action.withTitle(action.submitType === ActionEditorSubmitTypeEnum.Submit ? 'general.save' : this.isDialog ? 'general.close' : 'general.cancel');
7702
+ if (typeof action.buttonDescriptor.label === 'undefined') {
7703
+ action.buttonDescriptor.withLabel(action.submitType === ActionEditorSubmitTypeEnum.Submit ? 'general.save' : this.isDialog ? 'general.close' : 'general.cancel');
7411
7704
  }
7412
7705
  // assign run operations
7413
7706
  action.withRunNotificationSuccess(undefined, undefined, false);
@@ -7577,6 +7870,50 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
7577
7870
  args: [MngFormEditorComponent]
7578
7871
  }] } });
7579
7872
 
7873
+ class MngButtonComponent {
7874
+ constructor() {
7875
+ this.clickEmitter = new EventEmitter();
7876
+ this.focusEmitter = new EventEmitter();
7877
+ this.blurEmitter = new EventEmitter();
7878
+ this.buttonClass = 'p-button';
7879
+ }
7880
+ ngOnInit() {
7881
+ this.buttonClass = `${this.descriptor.styleClass.getButtonClass(this.descriptor.label == null)}`;
7882
+ }
7883
+ onClick(event) {
7884
+ var _a, _b;
7885
+ this.clickEmitter.next(event);
7886
+ (_b = (_a = this.descriptor).onClick) === null || _b === void 0 ? void 0 : _b.call(_a, event);
7887
+ }
7888
+ onFocus(event) {
7889
+ var _a, _b;
7890
+ this.focusEmitter.next(event);
7891
+ (_b = (_a = this.descriptor).onFocus) === null || _b === void 0 ? void 0 : _b.call(_a, event);
7892
+ }
7893
+ onBlur(event) {
7894
+ var _a, _b;
7895
+ this.blurEmitter.next(event);
7896
+ (_b = (_a = this.descriptor).onBlur) === null || _b === void 0 ? void 0 : _b.call(_a, event);
7897
+ }
7898
+ }
7899
+ MngButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MngButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7900
+ MngButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: MngButtonComponent, selector: "mng-button", inputs: { descriptor: "descriptor" }, outputs: { clickEmitter: "buttonClick", focusEmitter: "buttonFocus", blurEmitter: "buttonBlur" }, ngImport: i0, template: "<p-button\n #button\n type=\"button\"\n [label]=\"$any(descriptor.label) | translate\"\n [icon]=\"$any(descriptor.icon)\"\n [iconPos]=\"$any(descriptor.iconPosition)\"\n [loading]=\"$any(descriptor.loading)\"\n [loadingIcon]=\"$any(descriptor.loadingIcon)\"\n [disabled]=\"$any(descriptor.disabled)\"\n [styleClass]=\"buttonClass\"\n [pTooltip]=\"$any(descriptor.tooltip) | translate\"\n [badge]=\"$any(descriptor.badge)\"\n (onClick)=\"onClick($event)\"\n (onBlur)=\"onBlur($event)\"\n (onFocus)=\"onFocus($event)\"></p-button>\n", dependencies: [{ kind: "directive", type: i7.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "fitContent", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i4$1.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "style", "styleClass", "badgeClass", "ariaLabel"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
7901
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MngButtonComponent, decorators: [{
7902
+ type: Component,
7903
+ args: [{ selector: 'mng-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<p-button\n #button\n type=\"button\"\n [label]=\"$any(descriptor.label) | translate\"\n [icon]=\"$any(descriptor.icon)\"\n [iconPos]=\"$any(descriptor.iconPosition)\"\n [loading]=\"$any(descriptor.loading)\"\n [loadingIcon]=\"$any(descriptor.loadingIcon)\"\n [disabled]=\"$any(descriptor.disabled)\"\n [styleClass]=\"buttonClass\"\n [pTooltip]=\"$any(descriptor.tooltip) | translate\"\n [badge]=\"$any(descriptor.badge)\"\n (onClick)=\"onClick($event)\"\n (onBlur)=\"onBlur($event)\"\n (onFocus)=\"onFocus($event)\"></p-button>\n" }]
7904
+ }], propDecorators: { descriptor: [{
7905
+ type: Input
7906
+ }], clickEmitter: [{
7907
+ type: Output,
7908
+ args: ['buttonClick']
7909
+ }], focusEmitter: [{
7910
+ type: Output,
7911
+ args: ['buttonFocus']
7912
+ }], blurEmitter: [{
7913
+ type: Output,
7914
+ args: ['buttonBlur']
7915
+ }] } });
7916
+
7580
7917
  class MngFormlyFieldAutocompleteComponent extends FieldType {
7581
7918
  constructor() {
7582
7919
  super(...arguments);
@@ -7822,10 +8159,10 @@ class MngTableColumnValueComponent {
7822
8159
  }
7823
8160
  }
7824
8161
  MngTableColumnValueComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MngTableColumnValueComponent, deps: [{ token: i0.ElementRef }, { token: i2.MessageService }, { token: i1$2.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
7825
- MngTableColumnValueComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: MngTableColumnValueComponent, selector: "mng-table-column-value", inputs: { descriptor: "descriptor", item: "item" }, host: { properties: { "style.max-width.px": "this.styleMaxWidth", "class": "this.className" } }, ngImport: i0, template: "<ng-container [ngSwitch]=\"descriptor.columnType\">\n <ng-container *ngSwitchCase=\"columnTypeString\">\n {{ item | jsonPath: jsonPath }}\n </ng-container>\n <ng-container *ngSwitchCase=\"columnTypeNumber\">\n {{ item | jsonPath: jsonPath | number: descriptor.displayFormat:descriptor.locale }}\n </ng-container>\n <ng-container *ngSwitchCase=\"columnTypeCurrency\">\n {{ item | jsonPath: jsonPath | currency: currency:descriptor.currencyDisplay:descriptor.displayFormat:descriptor.locale }}\n </ng-container>\n <ng-container *ngSwitchCase=\"columnTypeDate\">\n {{ item | jsonPath: jsonPath | date: descriptor.displayFormat }}\n </ng-container>\n <ng-container *ngSwitchCase=\"columnTypeBoolean\">\n <ng-container *ngIf=\"descriptor.booleanAsIcon; else booleanText\"></ng-container>\n <i [class]=\"item | jsonPath: jsonPath | boolean: descriptor.booleanYes:descriptor.booleanNo:true\"></i>\n <ng-template #booleanText>\n {{ item | jsonPath: jsonPath | boolean: descriptor.booleanYes:descriptor.booleanNo | translate }}\n </ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"columnTypeEnum\">\n {{ item | jsonPath: jsonPath | enum: descriptor.enumType:descriptor.enumTitlePath:descriptor.enumNameAsValue | translate }}\n </ng-container>\n <ng-container *ngSwitchCase=\"columnTypeCustom\">\n <ng-container\n [mngComponent]=\"descriptor.customComponentType!\"\n [inputs]=\"{\n value: item | jsonPath: jsonPath,\n item: item,\n descriptor: descriptor\n }\"></ng-container>\n </ng-container>\n</ng-container>\n<div class=\"help-buttons\" *ngIf=\"descriptor.hasCopyToClipboard\">\n <button pButton pRipple type=\"button\" icon=\"pi pi-copy\" class=\"p-button-rounded p-button-info p-button-sm\" (click)=\"copyToClipboard($event)\"></button>\n</div>\n", styles: [":host{display:inline-block;overflow:hidden}:host.nowrap{white-space:nowrap;text-overflow:ellipsis}:host:hover .help-buttons{display:block}.help-buttons{display:none;position:absolute;right:0;top:50%;transform:translateY(-50%)}.help-buttons .p-button{height:1.9rem;width:1.9rem;padding:0}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4$1.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "directive", type: i6.Ripple, selector: "[pRipple]" }, { kind: "directive", type: MngComponentDirective, selector: "[mngComponent]", inputs: ["mngComponent", "inputs"], outputs: ["instanceCreated"] }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }, { kind: "pipe", type: i1$1.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i1$1.DatePipe, name: "date" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }, { kind: "pipe", type: JsonPathPipe, name: "jsonPath" }, { kind: "pipe", type: MngEnumPipe, name: "enum" }, { kind: "pipe", type: MngBooleanPipe, name: "boolean" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
8162
+ MngTableColumnValueComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: MngTableColumnValueComponent, selector: "mng-table-column-value", inputs: { descriptor: "descriptor", item: "item" }, host: { properties: { "style.max-width.px": "this.styleMaxWidth", "class": "this.className" } }, ngImport: i0, template: "<ng-container [ngSwitch]=\"descriptor.columnType\">\n <ng-container *ngSwitchCase=\"columnTypeString\">\n {{ item | jsonPath: jsonPath | getter: descriptor.getter | template: descriptor.template }}\n </ng-container>\n <ng-container *ngSwitchCase=\"columnTypeNumber\">\n {{ item | jsonPath: jsonPath | number: descriptor.displayFormat:descriptor.locale }}\n </ng-container>\n <ng-container *ngSwitchCase=\"columnTypeCurrency\">\n {{ item | jsonPath: jsonPath | currency: currency:descriptor.currencyDisplay:descriptor.displayFormat:descriptor.locale }}\n </ng-container>\n <ng-container *ngSwitchCase=\"columnTypeDate\">\n {{ item | jsonPath: jsonPath | date: descriptor.displayFormat }}\n </ng-container>\n <ng-container *ngSwitchCase=\"columnTypeBoolean\">\n <ng-container *ngIf=\"descriptor.booleanAsIcon; else booleanText\"></ng-container>\n <i [class]=\"item | jsonPath: jsonPath | boolean: descriptor.booleanYes:descriptor.booleanNo:true\"></i>\n <ng-template #booleanText>\n {{ item | jsonPath: jsonPath | boolean: descriptor.booleanYes:descriptor.booleanNo | translate }}\n </ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"columnTypeEnum\">\n {{ item | jsonPath: jsonPath | enum: descriptor.enumType:descriptor.enumTitlePath:descriptor.enumNameAsValue | translate }}\n </ng-container>\n <ng-container *ngSwitchCase=\"columnTypeCustom\">\n <ng-container\n [mngComponent]=\"descriptor.customComponentType!\"\n [inputs]=\"{\n value: item | jsonPath: jsonPath,\n item: item,\n descriptor: descriptor\n }\"></ng-container>\n </ng-container>\n</ng-container>\n<div class=\"help-buttons\" *ngIf=\"descriptor.hasCopyToClipboard\">\n <button pButton pRipple type=\"button\" icon=\"pi pi-copy\" class=\"p-button-rounded p-button-info p-button-sm\" (click)=\"copyToClipboard($event)\"></button>\n</div>\n", styles: [":host{display:inline-block;overflow:hidden}:host.nowrap{white-space:nowrap;text-overflow:ellipsis}:host:hover .help-buttons{display:block}.help-buttons{display:none;position:absolute;right:0;top:50%;transform:translateY(-50%)}.help-buttons .p-button{height:1.9rem;width:1.9rem;padding:0}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4$1.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "directive", type: i6.Ripple, selector: "[pRipple]" }, { kind: "directive", type: MngComponentDirective, selector: "[mngComponent]", inputs: ["mngComponent", "inputs"], outputs: ["instanceCreated"] }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }, { kind: "pipe", type: i1$1.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i1$1.DatePipe, name: "date" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }, { kind: "pipe", type: JsonPathPipe, name: "jsonPath" }, { kind: "pipe", type: MngEnumPipe, name: "enum" }, { kind: "pipe", type: MngBooleanPipe, name: "boolean" }, { kind: "pipe", type: MngGetterPipe, name: "getter" }, { kind: "pipe", type: MngTemplatePipe, name: "template" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
7826
8163
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MngTableColumnValueComponent, decorators: [{
7827
8164
  type: Component,
7828
- args: [{ selector: 'mng-table-column-value', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container [ngSwitch]=\"descriptor.columnType\">\n <ng-container *ngSwitchCase=\"columnTypeString\">\n {{ item | jsonPath: jsonPath }}\n </ng-container>\n <ng-container *ngSwitchCase=\"columnTypeNumber\">\n {{ item | jsonPath: jsonPath | number: descriptor.displayFormat:descriptor.locale }}\n </ng-container>\n <ng-container *ngSwitchCase=\"columnTypeCurrency\">\n {{ item | jsonPath: jsonPath | currency: currency:descriptor.currencyDisplay:descriptor.displayFormat:descriptor.locale }}\n </ng-container>\n <ng-container *ngSwitchCase=\"columnTypeDate\">\n {{ item | jsonPath: jsonPath | date: descriptor.displayFormat }}\n </ng-container>\n <ng-container *ngSwitchCase=\"columnTypeBoolean\">\n <ng-container *ngIf=\"descriptor.booleanAsIcon; else booleanText\"></ng-container>\n <i [class]=\"item | jsonPath: jsonPath | boolean: descriptor.booleanYes:descriptor.booleanNo:true\"></i>\n <ng-template #booleanText>\n {{ item | jsonPath: jsonPath | boolean: descriptor.booleanYes:descriptor.booleanNo | translate }}\n </ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"columnTypeEnum\">\n {{ item | jsonPath: jsonPath | enum: descriptor.enumType:descriptor.enumTitlePath:descriptor.enumNameAsValue | translate }}\n </ng-container>\n <ng-container *ngSwitchCase=\"columnTypeCustom\">\n <ng-container\n [mngComponent]=\"descriptor.customComponentType!\"\n [inputs]=\"{\n value: item | jsonPath: jsonPath,\n item: item,\n descriptor: descriptor\n }\"></ng-container>\n </ng-container>\n</ng-container>\n<div class=\"help-buttons\" *ngIf=\"descriptor.hasCopyToClipboard\">\n <button pButton pRipple type=\"button\" icon=\"pi pi-copy\" class=\"p-button-rounded p-button-info p-button-sm\" (click)=\"copyToClipboard($event)\"></button>\n</div>\n", styles: [":host{display:inline-block;overflow:hidden}:host.nowrap{white-space:nowrap;text-overflow:ellipsis}:host:hover .help-buttons{display:block}.help-buttons{display:none;position:absolute;right:0;top:50%;transform:translateY(-50%)}.help-buttons .p-button{height:1.9rem;width:1.9rem;padding:0}\n"] }]
8165
+ args: [{ selector: 'mng-table-column-value', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container [ngSwitch]=\"descriptor.columnType\">\n <ng-container *ngSwitchCase=\"columnTypeString\">\n {{ item | jsonPath: jsonPath | getter: descriptor.getter | template: descriptor.template }}\n </ng-container>\n <ng-container *ngSwitchCase=\"columnTypeNumber\">\n {{ item | jsonPath: jsonPath | number: descriptor.displayFormat:descriptor.locale }}\n </ng-container>\n <ng-container *ngSwitchCase=\"columnTypeCurrency\">\n {{ item | jsonPath: jsonPath | currency: currency:descriptor.currencyDisplay:descriptor.displayFormat:descriptor.locale }}\n </ng-container>\n <ng-container *ngSwitchCase=\"columnTypeDate\">\n {{ item | jsonPath: jsonPath | date: descriptor.displayFormat }}\n </ng-container>\n <ng-container *ngSwitchCase=\"columnTypeBoolean\">\n <ng-container *ngIf=\"descriptor.booleanAsIcon; else booleanText\"></ng-container>\n <i [class]=\"item | jsonPath: jsonPath | boolean: descriptor.booleanYes:descriptor.booleanNo:true\"></i>\n <ng-template #booleanText>\n {{ item | jsonPath: jsonPath | boolean: descriptor.booleanYes:descriptor.booleanNo | translate }}\n </ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"columnTypeEnum\">\n {{ item | jsonPath: jsonPath | enum: descriptor.enumType:descriptor.enumTitlePath:descriptor.enumNameAsValue | translate }}\n </ng-container>\n <ng-container *ngSwitchCase=\"columnTypeCustom\">\n <ng-container\n [mngComponent]=\"descriptor.customComponentType!\"\n [inputs]=\"{\n value: item | jsonPath: jsonPath,\n item: item,\n descriptor: descriptor\n }\"></ng-container>\n </ng-container>\n</ng-container>\n<div class=\"help-buttons\" *ngIf=\"descriptor.hasCopyToClipboard\">\n <button pButton pRipple type=\"button\" icon=\"pi pi-copy\" class=\"p-button-rounded p-button-info p-button-sm\" (click)=\"copyToClipboard($event)\"></button>\n</div>\n", styles: [":host{display:inline-block;overflow:hidden}:host.nowrap{white-space:nowrap;text-overflow:ellipsis}:host:hover .help-buttons{display:block}.help-buttons{display:none;position:absolute;right:0;top:50%;transform:translateY(-50%)}.help-buttons .p-button{height:1.9rem;width:1.9rem;padding:0}\n"] }]
7829
8166
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i2.MessageService }, { type: i1$2.TranslateService }]; }, propDecorators: { descriptor: [{
7830
8167
  type: Input
7831
8168
  }], item: [{
@@ -8511,13 +8848,14 @@ class AMngTableviewRouteComponent {
8511
8848
  this.actions = this.createActionDescriptors();
8512
8849
  }
8513
8850
  createActionDescriptors() {
8514
- const actions = [];
8515
- actions.push(this.createActionDescriptorForDetails());
8516
- actions.push(this.createActionDescriptorForAdd());
8517
- actions.push(this.createActionDescriptorForEdit());
8518
- actions.push(this.createActionDescriptorForDelete());
8519
- actions.push(this.createActionDescriptorForExport());
8520
- return actions;
8851
+ return [
8852
+ this.createActionDescriptorForDetails(),
8853
+ this.createActionDescriptorForAdd(),
8854
+ this.createActionDescriptorForEdit(),
8855
+ this.createActionDescriptorForDelete(),
8856
+ this.createActionDescriptorForRefresh(),
8857
+ this.createActionDescriptorForExport()
8858
+ ];
8521
8859
  }
8522
8860
  createActionDescriptorForDetails(descriptor = this.descriptor.viewEditor) {
8523
8861
  return new ActionEditorDetailsDescriptor(descriptor);
@@ -8532,7 +8870,7 @@ class AMngTableviewRouteComponent {
8532
8870
  return new ActionDeleteDescriptor(descriptor);
8533
8871
  }
8534
8872
  createActionDescriptorForExport(descriptor = this.descriptor.model) {
8535
- return new ActionDescriptor(descriptor, 'export')
8873
+ const action = new ActionDescriptor(descriptor, 'export')
8536
8874
  .withRunFunction(ctx => {
8537
8875
  const queryParamBuilder = ctx.parameters.queryParam ? MediusQueryParamBuilder.createFromExisting(ctx.parameters.queryParam) : MediusQueryParamBuilder.create();
8538
8876
  queryParamBuilder.withItemsOffset(0).withItemsPerPage(1000);
@@ -8545,8 +8883,21 @@ class AMngTableviewRouteComponent {
8545
8883
  return undefined;
8546
8884
  }));
8547
8885
  })
8886
+ .withPosition(ActionPositionEnum.ToolbarRight);
8887
+ action.buttonDescriptor.withIcon('pi pi-upload');
8888
+ return action;
8889
+ }
8890
+ createActionDescriptorForRefresh(descriptor = this.descriptor.model) {
8891
+ const action = new ActionDescriptor(descriptor, 'refresh')
8548
8892
  .withPosition(ActionPositionEnum.ToolbarRight)
8549
- .withIcon('pi pi-upload');
8893
+ .withPermissionsRouteType(Permissions.ActionTypes.READ)
8894
+ .withRunNotificationSuccess(undefined, undefined, false)
8895
+ .withRunFunction(ctx => {
8896
+ ctx.parameters.viewContainer.triggerTableReload({});
8897
+ return of(null);
8898
+ });
8899
+ action.buttonDescriptor.withIcon('pi pi-refresh').styleClass.withActionLevel(ActionLevelEnum.Secondary);
8900
+ return action;
8550
8901
  }
8551
8902
  }
8552
8903
  AMngTableviewRouteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: AMngTableviewRouteComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
@@ -8800,20 +9151,18 @@ class MngFormlyFieldTableDialogFormComponent extends FieldType {
8800
9151
  if (hasViewAction) {
8801
9152
  const viewAction = new ActionEditorDescriptor(this.descriptor.tableviewDescriptor.viewEditor, 'details', this.descriptor.editor.model.type, this.descriptor.property)
8802
9153
  .withPosition(ActionPositionEnum.RowClick)
8803
- .withTitle(null)
8804
9154
  .withDialogClassName('mng-field-dialog mng-action-editor-dialog')
8805
9155
  .withDialogSize(ActionEditorDialogSizeEnum.Small);
8806
9156
  viewAction.withEditorActions([new ActionEditorSubmitDescriptor(viewAction, ActionEditorSubmitTypeEnum.Cancel)]);
9157
+ viewAction.buttonDescriptor.withLabel(null);
8807
9158
  this.actions.push(viewAction);
8808
9159
  }
8809
9160
  if (hasAddAction) {
8810
9161
  const addAction = new ActionEditorDescriptor(this.descriptor.tableviewDescriptor.addEditor, 'add', this.descriptor.editor.model.type, this.descriptor.property)
8811
9162
  .withPosition(ActionPositionEnum.ToolbarRight)
8812
- .withTitle(null)
8813
- .withIcon('pi pi-plus')
8814
9163
  .withDialogClassName('mng-field-dialog mng-action-editor-dialog')
8815
9164
  .withDialogSize(ActionEditorDialogSizeEnum.Small)
8816
- .withSize(ActionSizeEnum.ExtraSmall)
9165
+ .withButtonDescriptor(new ButtonDescriptor().withStyleClass(new ButtonStyleBuilder().withSize(ActionSizeEnum.ExtraSmall)))
8817
9166
  .withSubmitFunction(ctx => {
8818
9167
  if (!ctx.parameters.item) {
8819
9168
  return throwError(() => new Error(`No item was provided in context, edit cannot be done.`));
@@ -8826,16 +9175,15 @@ class MngFormlyFieldTableDialogFormComponent extends FieldType {
8826
9175
  })
8827
9176
  .withIsVisibleFunction(() => { var _a; return of(!((_a = this.options) === null || _a === void 0 ? void 0 : _a.formState.disabled)); })
8828
9177
  .withIsEnabledFunction(() => this.isEnabled$);
9178
+ addAction.buttonDescriptor.withLabel(null).withIcon('pi pi-plus');
8829
9179
  this.actions.push(addAction);
8830
9180
  }
8831
9181
  if (hasEditAction) {
8832
9182
  const editAction = new ActionEditorDescriptor(this.descriptor.tableviewDescriptor.editEditor, 'edit', this.descriptor.editor.model.type, this.descriptor.property)
8833
9183
  .withPosition(ActionPositionEnum.RowInline)
8834
- .withTitle(null)
8835
- .withIcon('pi pi-pencil')
8836
9184
  .withDialogClassName('mng-field-dialog mng-action-editor-dialog')
8837
9185
  .withDialogSize(ActionEditorDialogSizeEnum.Small)
8838
- .withSize(ActionSizeEnum.ExtraSmall)
9186
+ .withButtonDescriptor(new ButtonDescriptor().withStyleClass(new ButtonStyleBuilder().withSize(ActionSizeEnum.ExtraSmall)))
8839
9187
  .withSubmitFunction(ctx => {
8840
9188
  var _a;
8841
9189
  if (!ctx.parameters.item) {
@@ -8849,15 +9197,13 @@ class MngFormlyFieldTableDialogFormComponent extends FieldType {
8849
9197
  })
8850
9198
  .withIsVisibleFunction(() => { var _a; return of(!((_a = this.formControl) === null || _a === void 0 ? void 0 : _a.disabled)); })
8851
9199
  .withIsEnabledFunction(() => this.isEnabled$);
9200
+ editAction.buttonDescriptor.withLabel(null).withIcon('pi pi-pencil');
8852
9201
  this.actions.push(editAction);
8853
9202
  }
8854
9203
  if (hasDeleteAction) {
8855
9204
  const deleteAction = new ActionDescriptor(this.descriptor.tableviewDescriptor.model, 'delete', this.descriptor.editor.model.type, this.descriptor.property)
8856
9205
  .withPosition(ActionPositionEnum.RowInline)
8857
- .withLevel(ActionLevelEnum.Danger)
8858
- .withTitle(null)
8859
- .withIcon('pi pi-trash')
8860
- .withSize(ActionSizeEnum.ExtraSmall)
9206
+ .withButtonDescriptor(new ButtonDescriptor().withStyleClass(new ButtonStyleBuilder(ActionLevelEnum.Danger).withSize(ActionSizeEnum.ExtraSmall)))
8861
9207
  .withRunFunction(ctx => {
8862
9208
  var _a;
8863
9209
  if (!ctx.parameters.item) {
@@ -8883,6 +9229,7 @@ class MngFormlyFieldTableDialogFormComponent extends FieldType {
8883
9229
  })
8884
9230
  .withIsVisibleFunction(() => { var _a; return of(!((_a = this.options) === null || _a === void 0 ? void 0 : _a.formState.disabled)); })
8885
9231
  .withIsEnabledFunction(() => this.isEnabled$);
9232
+ deleteAction.buttonDescriptor.withLabel(null).withIcon('pi pi-trash');
8886
9233
  this.actions.push(deleteAction);
8887
9234
  }
8888
9235
  this.actions.push(...this.descriptor.actions);
@@ -10062,7 +10409,9 @@ const declarations = [
10062
10409
  MngEnumPipe,
10063
10410
  MngBooleanPipe,
10064
10411
  MngI18nPropertyPipe,
10065
- MngLinkFormatterPipe,
10412
+ MngParametrizePipe,
10413
+ MngGetterPipe,
10414
+ MngTemplatePipe,
10066
10415
  // layout components
10067
10416
  MngBreadcrumbComponent,
10068
10417
  MngFooterComponent,
@@ -10097,7 +10446,9 @@ const declarations = [
10097
10446
  MngFormEditorComponent,
10098
10447
  MngActionComponent,
10099
10448
  MngActionEditorComponent,
10100
- MngActionRouteComponent
10449
+ MngActionRouteComponent,
10450
+ //button
10451
+ MngButtonComponent
10101
10452
  ];
10102
10453
  class MngCommonsModule {
10103
10454
  static forRoot(config) {
@@ -10122,7 +10473,9 @@ class MngCommonsModule {
10122
10473
  MngEnumPipe,
10123
10474
  MngBooleanPipe,
10124
10475
  MngI18nPropertyPipe,
10125
- MngLinkFormatterPipe,
10476
+ MngParametrizePipe,
10477
+ MngGetterPipe,
10478
+ MngTemplatePipe,
10126
10479
  // component service
10127
10480
  MngMainLayoutComponentService,
10128
10481
  MngViewContainerComponentService,
@@ -10179,7 +10532,9 @@ MngCommonsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versio
10179
10532
  MngEnumPipe,
10180
10533
  MngBooleanPipe,
10181
10534
  MngI18nPropertyPipe,
10182
- MngLinkFormatterPipe,
10535
+ MngParametrizePipe,
10536
+ MngGetterPipe,
10537
+ MngTemplatePipe,
10183
10538
  // layout components
10184
10539
  MngBreadcrumbComponent,
10185
10540
  MngFooterComponent,
@@ -10214,7 +10569,9 @@ MngCommonsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versio
10214
10569
  MngFormEditorComponent,
10215
10570
  MngActionComponent,
10216
10571
  MngActionEditorComponent,
10217
- MngActionRouteComponent
10572
+ MngActionRouteComponent,
10573
+ //button
10574
+ MngButtonComponent
10218
10575
  ], imports: [
10219
10576
  // angular modules
10220
10577
  CommonModule,
@@ -10296,7 +10653,9 @@ MngCommonsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versio
10296
10653
  MngEnumPipe,
10297
10654
  MngBooleanPipe,
10298
10655
  MngI18nPropertyPipe,
10299
- MngLinkFormatterPipe,
10656
+ MngParametrizePipe,
10657
+ MngGetterPipe,
10658
+ MngTemplatePipe,
10300
10659
  // layout components
10301
10660
  MngBreadcrumbComponent,
10302
10661
  MngFooterComponent,
@@ -10331,7 +10690,9 @@ MngCommonsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versio
10331
10690
  MngFormEditorComponent,
10332
10691
  MngActionComponent,
10333
10692
  MngActionEditorComponent,
10334
- MngActionRouteComponent] });
10693
+ MngActionRouteComponent,
10694
+ //button
10695
+ MngButtonComponent] });
10335
10696
  MngCommonsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MngCommonsModule, imports: [
10336
10697
  // angular modules
10337
10698
  CommonModule,
@@ -11148,5 +11509,5 @@ class TableviewRouteBuilder {
11148
11509
  * Generated bundle index. Do not edit.
11149
11510
  */
11150
11511
 
11151
- export { ACTION_EDITOR_DIALOG_COMPONENT_SETTING, AFieldDescriptor, AFieldGroupDescriptor, AGenericFieldDescriptor, AMngApiService, AMngBaseApiService, AMngCrudApiService, AMngGetAllApiService, AMngTableviewRouteComponent, APermissions, ActionActivationTriggerEnum, ActionContext, ActionContextValidation, ActionDataProviderUtil, ActionDeleteDescriptor, ActionDescriptor, ActionEditorAddDescriptor, ActionEditorDescriptor, ActionEditorDetailsDescriptor, ActionEditorDialogSizeEnum, ActionEditorEditDescriptor, ActionEditorSubmitDescriptor, ActionEditorSubmitTypeEnum, ActionError, ActionInstance, ActionInstanceStateEnum, ActionLevelEnum, ActionLinkDescriptor, ActionParameters, ActionPositionEnum, ActionSimpleDescriptor, ActionSizeEnum, ActionTypeEnum, AuthorizationTypeEnum, AuthorizationUtil, ButtonStyleBuilder, ColumnDescriptor, ColumnTypeEnum, DataProvider, DefaultMngErrorMapperService, EditorDataProvider, EditorDescriptor, EditorFormlyUtil, EnumName, EnumUtil, FieldGroupDescriptor, FieldGroupTypeEnum, FieldInputDescriptor, FieldInputTypeEnum, FieldLookupDescriptor, FieldLookupEnumDescriptor, FieldLookupTypeEnum, FieldManyEditorActionEnum, FieldManyEditorDescriptor, FieldManyEditorTypeEnum, FieldManyToManyEditorActionEnum, FieldManyToManyEditorDescriptor, FieldManyToManyEditorTypeEnum, FieldSizeEnum, FieldTabGroupDescriptor, FieldValidationDescriptor, FilterDescriptor, FilterLookupDescriptor, FilterLookupEnumDescriptor, FilterLookupTypeEnum, FilterMatchModeEnum, FilterTypeEnum, 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, MngAuthorizationGuard, MngAuthorizationService, 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, MngVersionComponent, MngViewContainerComponentService, ModelDescriptor, ModelUtil, NotificationUtil, ObjectSerializer, Permissions, RouteBuilder, RoutesBuilder, StringUtil, StylesUtil, TableDataProvider, TableDescriptor, TableFilterDisplayEnum, TablePaginationModeEnum, TableSizeEnum, TableviewDataProvider, TableviewDescriptor, TableviewRouteBuilder, TableviewTypeEnum, TypeName, TypeUtil, enumNameDecoratorPropertyName, enumsMapBase, formlyTypesConfig, formlyWrappersConfig, getEmailValidationMessage, getFormlyValidationMessages, getMaxLengthValidationMessage, getMinLengthValidationMessage, getRequiredValidationMessage, getTextPatternValidationMessage, mngConfigJsonAppInitializerProvider, mngConfigurationServiceProvider, mngFormlyConfigProvider, primeNgModules, typeMapBase, typeNameDecoratorPropertyName };
11512
+ export { ACTION_EDITOR_DIALOG_COMPONENT_SETTING, AFieldDescriptor, AFieldGroupDescriptor, AGenericFieldDescriptor, AMngApiService, AMngBaseApiService, AMngCrudApiService, AMngGetAllApiService, AMngTableviewRouteComponent, APermissions, ActionActivationTriggerEnum, ActionConfirmationDialogDescriptor, ActionContext, ActionContextValidation, ActionDataProviderUtil, ActionDeleteDescriptor, ActionDescriptor, ActionEditorAddDescriptor, ActionEditorDescriptor, ActionEditorDetailsDescriptor, ActionEditorDialogSizeEnum, ActionEditorEditDescriptor, ActionEditorSubmitDescriptor, ActionEditorSubmitTypeEnum, ActionError, ActionInstance, ActionInstanceStateEnum, ActionLevelEnum, ActionLinkDescriptor, ActionParameters, ActionPositionEnum, ActionSimpleDescriptor, ActionSizeEnum, ActionTypeEnum, AuthorizationTypeEnum, AuthorizationUtil, ButtonDescriptor, ButtonStyleBuilder, ButtonStyleRoundedEnum, ColumnDescriptor, ColumnTypeEnum, DataProvider, DefaultMngErrorMapperService, EditorDataProvider, EditorDescriptor, EditorFormlyUtil, EnumName, EnumUtil, FieldGroupDescriptor, FieldGroupTypeEnum, FieldInputDescriptor, FieldInputTypeEnum, FieldLookupDescriptor, FieldLookupEnumDescriptor, FieldLookupTypeEnum, FieldManyEditorActionEnum, FieldManyEditorDescriptor, FieldManyEditorTypeEnum, FieldManyToManyEditorActionEnum, FieldManyToManyEditorDescriptor, FieldManyToManyEditorTypeEnum, FieldSizeEnum, FieldTabGroupDescriptor, FieldValidationDescriptor, FilterDescriptor, FilterLookupDescriptor, FilterLookupEnumDescriptor, FilterLookupTypeEnum, FilterMatchModeEnum, FilterTypeEnum, 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, MngAuthorizationGuard, MngAuthorizationService, MngAutocompleteComponent, MngBooleanPipe, MngBreadcrumbComponent, MngButtonComponent, 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, MngGetterPipe, MngI18nPropertyPipe, MngMainLayoutComponent, MngMainLayoutComponentService, MngMenuComponent, MngMenuItemComponent, MngNavigationService, MngParametrizePipe, MngTableCellClickEvent, MngTableColumnFilterComponent, MngTableColumnValueComponent, MngTableComponent, MngTableLoadEvent, MngTableReloadEvent, MngTableviewComponent, MngTableviewRouteComponent, MngTemplateDirective, MngTemplatePipe, MngTopbarComponent, MngVersionComponent, MngViewContainerComponentService, ModelDescriptor, ModelUtil, NotificationUtil, ObjectSerializer, Permissions, RouteBuilder, RoutesBuilder, StringUtil, StylesUtil, TableDataProvider, TableDescriptor, TableFilterDisplayEnum, TablePaginationModeEnum, TableSizeEnum, TableviewCrudDataProvider, TableviewDataProvider, TableviewDescriptor, TableviewRouteBuilder, TableviewTypeEnum, TypeName, TypeUtil, enumNameDecoratorPropertyName, enumsMapBase, formlyTypesConfig, formlyWrappersConfig, getEmailValidationMessage, getFormlyValidationMessages, getMaxLengthValidationMessage, getMinLengthValidationMessage, getRequiredValidationMessage, getTextPatternValidationMessage, mngConfigJsonAppInitializerProvider, mngConfigurationServiceProvider, mngFormlyConfigProvider, primeNgModules, typeMapBase, typeNameDecoratorPropertyName };
11152
11513
  //# sourceMappingURL=mediusinc-mng-commons.mjs.map