@sapui5/sap.fe.core 1.95.0 → 1.98.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 (207) hide show
  1. package/package.json +5 -5
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AnnotationHelper.js +3 -3
  4. package/src/sap/fe/core/AppComponent.js +9 -44
  5. package/src/sap/fe/core/AppStateHandler.js +2 -2
  6. package/src/sap/fe/core/BaseController.js +1 -1
  7. package/src/sap/fe/core/BusyLocker.js +13 -1
  8. package/src/sap/fe/core/CommonUtils.js +129 -219
  9. package/src/sap/fe/core/ExtensionAPI.js +14 -6
  10. package/src/sap/fe/core/PageController.js +9 -35
  11. package/src/sap/fe/core/RouterProxy.js +79 -75
  12. package/src/sap/fe/core/Synchronization.js +1 -1
  13. package/src/sap/fe/core/TemplateComponent.js +16 -7
  14. package/src/sap/fe/core/TemplateModel.js +1 -1
  15. package/src/sap/fe/core/TransactionHelper.js +183 -65
  16. package/src/sap/fe/core/actions/draft.js +50 -23
  17. package/src/sap/fe/core/actions/messageHandling.js +86 -7
  18. package/src/sap/fe/core/actions/nonDraft.js +1 -1
  19. package/src/sap/fe/core/actions/operations.js +75 -33
  20. package/src/sap/fe/core/actions/sticky.js +1 -1
  21. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +1 -1
  22. package/src/sap/fe/core/controllerextensions/EditFlow.js +276 -122
  23. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +1 -1
  24. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +14 -6
  25. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +90 -46
  26. package/src/sap/fe/core/controllerextensions/InternalRouting.js +234 -232
  27. package/src/sap/fe/core/controllerextensions/KPIManagement.js +539 -209
  28. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +550 -213
  29. package/src/sap/fe/core/controllerextensions/MassEdit.js +79 -0
  30. package/src/sap/fe/core/controllerextensions/MessageHandler.js +227 -103
  31. package/src/sap/fe/core/controllerextensions/PageReady.js +2 -2
  32. package/src/sap/fe/core/controllerextensions/PageReady.ts +3 -7
  33. package/src/sap/fe/core/controllerextensions/Paginator.js +38 -12
  34. package/src/sap/fe/core/controllerextensions/Placeholder.js +16 -19
  35. package/src/sap/fe/core/controllerextensions/Routing.js +17 -2
  36. package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
  37. package/src/sap/fe/core/controllerextensions/Share.js +20 -7
  38. package/src/sap/fe/core/controllerextensions/SideEffects.js +8 -9
  39. package/src/sap/fe/core/controllerextensions/SideEffects.ts +19 -17
  40. package/src/sap/fe/core/controllerextensions/ViewState.js +54 -9
  41. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +40 -34
  42. package/src/sap/fe/core/controls/ActionParameterDialogValueHelp.fragment.xml +35 -0
  43. package/src/sap/fe/core/controls/CommandExecution.js +1 -1
  44. package/src/sap/fe/core/controls/ConditionalWrapper.js +1 -1
  45. package/src/sap/fe/core/controls/CustomQuickViewPage.js +110 -109
  46. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +7 -4
  47. package/src/sap/fe/core/controls/FieldWrapper.js +10 -4
  48. package/src/sap/fe/core/controls/FilterBar.js +1 -1
  49. package/src/sap/fe/core/controls/FormElementWrapper.js +1 -6
  50. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +45 -0
  51. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +1 -1
  52. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +1 -1
  53. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +1 -1
  54. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +1 -1
  55. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +1 -1
  56. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +106 -0
  57. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +78 -0
  58. package/src/sap/fe/core/converters/ConverterContext.js +13 -1
  59. package/src/sap/fe/core/converters/ConverterContext.ts +10 -0
  60. package/src/sap/fe/core/converters/ManifestSettings.js +2 -1
  61. package/src/sap/fe/core/converters/ManifestSettings.ts +7 -1
  62. package/src/sap/fe/core/converters/ManifestWrapper.js +18 -7
  63. package/src/sap/fe/core/converters/ManifestWrapper.ts +15 -6
  64. package/src/sap/fe/core/converters/MetaModelConverter.js +920 -882
  65. package/src/sap/fe/core/converters/MetaModelConverter.ts +829 -853
  66. package/src/sap/fe/core/converters/annotations/DataField.js +54 -4
  67. package/src/sap/fe/core/converters/annotations/DataField.ts +53 -3
  68. package/src/sap/fe/core/converters/common/AnnotationConverter.js +83 -48
  69. package/src/sap/fe/core/converters/controls/Common/Action.js +15 -3
  70. package/src/sap/fe/core/converters/controls/Common/Action.ts +12 -3
  71. package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -3
  72. package/src/sap/fe/core/converters/controls/Common/Chart.ts +0 -2
  73. package/src/sap/fe/core/converters/controls/Common/Form.js +68 -21
  74. package/src/sap/fe/core/converters/controls/Common/Form.ts +60 -16
  75. package/src/sap/fe/core/converters/controls/Common/KPI.js +331 -248
  76. package/src/sap/fe/core/converters/controls/Common/KPI.ts +355 -287
  77. package/src/sap/fe/core/converters/controls/Common/Table.js +426 -332
  78. package/src/sap/fe/core/converters/controls/Common/Table.ts +516 -383
  79. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +468 -0
  80. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +609 -0
  81. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +30 -13
  82. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +31 -12
  83. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +2 -2
  84. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +1 -1
  85. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +15 -7
  86. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +27 -6
  87. package/src/sap/fe/core/converters/helpers/Aggregation.js +8 -1
  88. package/src/sap/fe/core/converters/helpers/Aggregation.ts +9 -1
  89. package/src/sap/fe/core/converters/helpers/BindingHelper.js +3 -2
  90. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +2 -2
  91. package/src/sap/fe/core/converters/helpers/ID.js +9 -1
  92. package/src/sap/fe/core/converters/helpers/ID.ts +6 -2
  93. package/src/sap/fe/core/converters/helpers/IssueManager.js +7 -5
  94. package/src/sap/fe/core/converters/helpers/IssueManager.ts +6 -4
  95. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +2 -2
  96. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +1 -1
  97. package/src/sap/fe/core/converters/templates/ListReportConverter.js +34 -4
  98. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +36 -7
  99. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +2 -5
  100. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +1 -2
  101. package/src/sap/fe/core/designtime/AppComponent.designtime.js +11 -2
  102. package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
  103. package/src/sap/fe/core/formatters/FPMFormatter.ts +8 -3
  104. package/src/sap/fe/core/formatters/TableFormatter.js +27 -4
  105. package/src/sap/fe/core/formatters/TableFormatter.ts +20 -3
  106. package/src/sap/fe/core/formatters/ValueFormatter.js +30 -5
  107. package/src/sap/fe/core/formatters/ValueFormatter.ts +25 -3
  108. package/src/sap/fe/core/fpm/Component.js +2 -2
  109. package/src/sap/fe/core/helpers/AppStartupHelper.js +359 -0
  110. package/src/sap/fe/core/helpers/AppStartupHelper.ts +388 -0
  111. package/src/sap/fe/core/helpers/BindingExpression.js +199 -111
  112. package/src/sap/fe/core/helpers/BindingExpression.ts +193 -102
  113. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -1
  114. package/src/sap/fe/core/helpers/EditState.js +1 -1
  115. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +1 -3
  116. package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
  117. package/src/sap/fe/core/helpers/KeepAliveHelper.js +211 -0
  118. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +202 -0
  119. package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +32 -0
  120. package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.ts +36 -0
  121. package/src/sap/fe/core/helpers/MassEditHelper.js +678 -0
  122. package/src/sap/fe/core/helpers/ModelHelper.js +64 -1
  123. package/src/sap/fe/core/helpers/PasteHelper.js +7 -1
  124. package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  125. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
  126. package/src/sap/fe/core/helpers/StableIdHelper.js +2 -2
  127. package/src/sap/fe/core/helpers/StableIdHelper.ts +1 -1
  128. package/src/sap/fe/core/library.js +28 -2
  129. package/src/sap/fe/core/library.support.js +10 -4
  130. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +62 -0
  131. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +66 -0
  132. package/src/sap/fe/core/messagebundle.properties +67 -3
  133. package/src/sap/fe/core/messagebundle_ar.properties +40 -3
  134. package/src/sap/fe/core/messagebundle_bg.properties +40 -3
  135. package/src/sap/fe/core/messagebundle_ca.properties +41 -4
  136. package/src/sap/fe/core/messagebundle_cs.properties +41 -4
  137. package/src/sap/fe/core/messagebundle_cy.properties +40 -3
  138. package/src/sap/fe/core/messagebundle_da.properties +40 -3
  139. package/src/sap/fe/core/messagebundle_de.properties +40 -3
  140. package/src/sap/fe/core/messagebundle_el.properties +40 -3
  141. package/src/sap/fe/core/messagebundle_en.properties +37 -0
  142. package/src/sap/fe/core/messagebundle_en_GB.properties +37 -0
  143. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +37 -0
  144. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +46 -2
  145. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +44 -0
  146. package/src/sap/fe/core/messagebundle_es.properties +40 -3
  147. package/src/sap/fe/core/messagebundle_es_MX.properties +41 -4
  148. package/src/sap/fe/core/messagebundle_et.properties +40 -3
  149. package/src/sap/fe/core/messagebundle_fi.properties +40 -3
  150. package/src/sap/fe/core/messagebundle_fr.properties +41 -4
  151. package/src/sap/fe/core/messagebundle_fr_CA.properties +40 -3
  152. package/src/sap/fe/core/messagebundle_hi.properties +40 -3
  153. package/src/sap/fe/core/messagebundle_hr.properties +40 -3
  154. package/src/sap/fe/core/messagebundle_hu.properties +41 -4
  155. package/src/sap/fe/core/messagebundle_id.properties +42 -5
  156. package/src/sap/fe/core/messagebundle_it.properties +40 -3
  157. package/src/sap/fe/core/messagebundle_iw.properties +40 -3
  158. package/src/sap/fe/core/messagebundle_ja.properties +49 -12
  159. package/src/sap/fe/core/messagebundle_kk.properties +40 -3
  160. package/src/sap/fe/core/messagebundle_ko.properties +40 -3
  161. package/src/sap/fe/core/messagebundle_lt.properties +40 -3
  162. package/src/sap/fe/core/messagebundle_lv.properties +40 -3
  163. package/src/sap/fe/core/messagebundle_ms.properties +40 -3
  164. package/src/sap/fe/core/messagebundle_nl.properties +40 -3
  165. package/src/sap/fe/core/messagebundle_no.properties +40 -3
  166. package/src/sap/fe/core/messagebundle_pl.properties +40 -3
  167. package/src/sap/fe/core/messagebundle_pt.properties +42 -5
  168. package/src/sap/fe/core/messagebundle_pt_PT.properties +40 -3
  169. package/src/sap/fe/core/messagebundle_ro.properties +40 -3
  170. package/src/sap/fe/core/messagebundle_ru.properties +40 -3
  171. package/src/sap/fe/core/messagebundle_sh.properties +40 -3
  172. package/src/sap/fe/core/messagebundle_sk.properties +40 -3
  173. package/src/sap/fe/core/messagebundle_sl.properties +40 -3
  174. package/src/sap/fe/core/messagebundle_sv.properties +41 -4
  175. package/src/sap/fe/core/messagebundle_th.properties +40 -3
  176. package/src/sap/fe/core/messagebundle_tr.properties +40 -3
  177. package/src/sap/fe/core/messagebundle_uk.properties +40 -3
  178. package/src/sap/fe/core/messagebundle_vi.properties +40 -3
  179. package/src/sap/fe/core/messagebundle_zh_CN.properties +40 -3
  180. package/src/sap/fe/core/messagebundle_zh_TW.properties +40 -3
  181. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +1 -1
  182. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +1 -1
  183. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +4 -3
  184. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -0
  185. package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -1
  186. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +1 -1
  187. package/src/sap/fe/core/services/RoutingServiceFactory.js +98 -328
  188. package/src/sap/fe/core/services/ShellServicesFactory.js +31 -2
  189. package/src/sap/fe/core/services/ShellServicesFactory.ts +30 -1
  190. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +8 -5
  191. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +11 -6
  192. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +14 -5
  193. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +1 -1
  194. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +38 -0
  195. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.ts +18 -0
  196. package/src/sap/fe/core/templating/DataModelPathHelper.js +8 -37
  197. package/src/sap/fe/core/templating/DataModelPathHelper.ts +13 -33
  198. package/src/sap/fe/core/templating/DisplayModeFormatter.js +114 -0
  199. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +86 -0
  200. package/src/sap/fe/core/templating/EntitySetHelper.js +86 -3
  201. package/src/sap/fe/core/templating/EntitySetHelper.ts +44 -0
  202. package/src/sap/fe/core/templating/FilterHelper.js +10 -7
  203. package/src/sap/fe/core/templating/FilterHelper.ts +8 -6
  204. package/src/sap/fe/core/templating/PropertyHelper.js +2 -2
  205. package/src/sap/fe/core/templating/PropertyHelper.ts +1 -1
  206. package/src/sap/fe/core/templating/UIFormatters.js +47 -107
  207. package/src/sap/fe/core/templating/UIFormatters.ts +76 -72
@@ -0,0 +1,678 @@
1
+ /*!
2
+ * SAPUI5
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
+ */
5
+ sap.ui.define(
6
+ [
7
+ "sap/m/Dialog",
8
+ "sap/ui/core/XMLTemplateProcessor",
9
+ "sap/ui/model/json/JSONModel",
10
+ "sap/ui/core/Fragment",
11
+ "sap/ui/core/util/XMLPreprocessor",
12
+ "sap/fe/core/templating/UIFormatters",
13
+ "sap/fe/core/converters/MetaModelConverter",
14
+ "sap/fe/macros/field/FieldHelper",
15
+ "sap/fe/macros/field/FieldTemplating",
16
+ "sap/base/Log",
17
+ "sap/fe/core/CommonUtils",
18
+ "sap/fe/core/templating/FieldControlHelper"
19
+ ],
20
+ function(
21
+ Dialog,
22
+ XMLTemplateProcessor,
23
+ JSONModel,
24
+ Fragment,
25
+ XMLPreprocessor,
26
+ UIFormatters,
27
+ MetaModelConverter,
28
+ FieldHelper,
29
+ FieldTemplating,
30
+ Log,
31
+ CommonUtils,
32
+ FieldControlHelper
33
+ ) {
34
+ "use strict";
35
+
36
+ /* This class contains helpers to be used for mass edit functionality */
37
+
38
+ var MassEditHelper = {
39
+ /**
40
+ * Initializes the value at final or deepest level path with a blank array.
41
+ * Return an empty array pointing to the final or deepest level path.
42
+ *
43
+ * @param {string} sPath Property path
44
+ * @param {Array} aValues Array instance where the default data needs to be added
45
+ * @returns {Array}
46
+ */
47
+ initLastLevelOfPropertyPath: function(sPath, aValues) {
48
+ var aFinalPath,
49
+ index = 0,
50
+ aPaths = sPath.split("/"),
51
+ sFullPath = "";
52
+ aPaths.forEach(function(sPropertyPath) {
53
+ if (!aValues[sPropertyPath] && index === 0) {
54
+ aValues[sPropertyPath] = {};
55
+ aFinalPath = aValues[sPropertyPath];
56
+ sFullPath = sFullPath + sPropertyPath;
57
+ index++;
58
+ } else if (!aFinalPath[sPropertyPath]) {
59
+ sFullPath = sFullPath + "/" + sPropertyPath;
60
+ if (sFullPath !== sPath) {
61
+ aFinalPath[sPropertyPath] = {};
62
+ aFinalPath = aFinalPath[sPropertyPath];
63
+ } else {
64
+ aFinalPath[sPropertyPath] = [];
65
+ }
66
+ }
67
+ });
68
+ return aFinalPath;
69
+ },
70
+
71
+ /**
72
+ * Method to get unique values for given array values.
73
+ *
74
+ * @param {string} sValue Property value
75
+ * @param {number} index Index of the property value
76
+ * @param {Array} self Instance of the array
77
+ * @returns {boolean}
78
+ */
79
+ getUniqueValues: function(sValue, index, self) {
80
+ if (sValue) {
81
+ return self.indexOf(sValue) === index;
82
+ }
83
+ },
84
+
85
+ /**
86
+ * Gets the property value for a multi-level path (for example: _Materials/Material_Details gets the value of Material_Details under _Materials Object).
87
+ * Returns the propertyValue, which can be of any type (string, number, etc..).
88
+ *
89
+ * @param {string} sDataPropertyPath Property path
90
+ * @param {object} oValues Object of property values
91
+ * @returns {*}
92
+ */
93
+ getValueForMultiLevelPath: function(sDataPropertyPath, oValues) {
94
+ if (sDataPropertyPath && sDataPropertyPath.indexOf("/") > 0) {
95
+ var aPropertyPaths = sDataPropertyPath.split("/"),
96
+ Result;
97
+ aPropertyPaths.forEach(function(sPath) {
98
+ Result = oValues && oValues[sPath] ? oValues[sPath] : Result && Result[sPath];
99
+ });
100
+ return Result;
101
+ }
102
+ },
103
+
104
+ /**
105
+ * Gets the key path for the key of a combo box that must be selected initially when the dialog opens:
106
+ * => If propertyValue for all selected contexts is different, then < Keep Existing Values > is preselected.
107
+ * => If propertyValue for all selected contexts is the same, then the propertyValue is preselected.
108
+ * => If propertyValue for all selected contexts is empty, then < Leave Blank > is preselected.
109
+ *
110
+ *
111
+ * @param {Array} aContexts Contexts for mass edit
112
+ * @param {string} sDataPropertyPath Data property path
113
+ * @returns {string}
114
+ */
115
+ getDefaultSelectionPathComboBox: function(aContexts, sDataPropertyPath) {
116
+ if (sDataPropertyPath && aContexts.length > 0) {
117
+ var oSelectedContext = aContexts,
118
+ aPropertyValues = [];
119
+ oSelectedContext.forEach(function(oContext) {
120
+ var oDataObject = oContext.getObject();
121
+ var sMultiLevelPathCondition =
122
+ sDataPropertyPath.indexOf("/") > -1 && oDataObject.hasOwnProperty(sDataPropertyPath.split("/")[0]);
123
+ if (oContext && (oDataObject.hasOwnProperty(sDataPropertyPath) || sMultiLevelPathCondition)) {
124
+ aPropertyValues.push(oContext.getObject(sDataPropertyPath));
125
+ }
126
+ });
127
+ var aUniquePropertyValues = aPropertyValues.filter(MassEditHelper.getUniqueValues);
128
+ if (aUniquePropertyValues.length > 1) {
129
+ return "Default/" + sDataPropertyPath;
130
+ } else if (aUniquePropertyValues.length === 0) {
131
+ return "Empty/" + sDataPropertyPath;
132
+ } else if (aUniquePropertyValues.length === 1) {
133
+ return sDataPropertyPath;
134
+ }
135
+ }
136
+ },
137
+
138
+ /**
139
+ * Checks hidden annotation value [both static and path based] for table's selected context.
140
+ *
141
+ * @param {*} hiddenValue Hidden annotation value / path for field
142
+ * @param {Array} aContexts Contexts for mass edit
143
+ * @returns {boolean}
144
+ */
145
+ getHiddenValueForContexts: function(hiddenValue, aContexts) {
146
+ if (hiddenValue && hiddenValue.$Path) {
147
+ return !aContexts.some(function(oSelectedContext) {
148
+ return oSelectedContext.getObject(hiddenValue.$Path) === false;
149
+ });
150
+ }
151
+ return hiddenValue;
152
+ },
153
+
154
+ /**
155
+ * Initializes a JSON Model for properties of dialog fields [label, visiblity, dataproperty, etc.].
156
+ *
157
+ * @param {object} oTable Instance of Table
158
+ * @param {Array} aContexts Contexts for mass edit
159
+ * @param {Array} aDataArray Array containing data related to the dialog used by both the static and the runtime model
160
+ * @returns {object}
161
+ */
162
+ prepareDataForDialog: function(oTable, aContexts, aDataArray) {
163
+ var oMetaModel = oTable && oTable.getModel().getMetaModel(),
164
+ sCurrentEntitySetName = oTable.data("metaPath"),
165
+ aTableFields = MassEditHelper.getTableFields(oTable),
166
+ oEntityTypeContext = oMetaModel.getContext(sCurrentEntitySetName + "/@"),
167
+ oDataModelObjectPath = MetaModelConverter.getInvolvedDataModelObjects(oEntityTypeContext);
168
+
169
+ var oDataFieldModel = new JSONModel(),
170
+ oResult,
171
+ sLabelText,
172
+ bValueHelpEnabled,
173
+ sUnitPropertyPath,
174
+ bValueHelpEnabledForUnit,
175
+ bIsImmutable,
176
+ bIsComputed,
177
+ bChartProperty,
178
+ oTextBinding;
179
+
180
+ aTableFields.forEach(function(oColumnInfo) {
181
+ var sDataPropertyPath = oColumnInfo.dataProperty;
182
+ if (sDataPropertyPath) {
183
+ var oPropertyInfo =
184
+ sDataPropertyPath && oMetaModel.getObject(sCurrentEntitySetName + "/" + sDataPropertyPath + "@");
185
+ bValueHelpEnabled =
186
+ sDataPropertyPath &&
187
+ oMetaModel.getObject(sCurrentEntitySetName + "/" + sDataPropertyPath + "@") &&
188
+ oMetaModel.getObject(sCurrentEntitySetName + "/" + sDataPropertyPath + "@")[
189
+ "@com.sap.vocabularies.Common.v1.ValueList"
190
+ ];
191
+ sUnitPropertyPath =
192
+ (oPropertyInfo &&
193
+ oPropertyInfo["@Org.OData.Measures.V1.Unit"] &&
194
+ oPropertyInfo["@Org.OData.Measures.V1.Unit"].$Path) ||
195
+ (oPropertyInfo &&
196
+ oPropertyInfo["@Org.OData.Measures.V1.ISOCurrency"] &&
197
+ oPropertyInfo["@Org.OData.Measures.V1.ISOCurrency"].$Path);
198
+ sLabelText = oColumnInfo.label || (oPropertyInfo && oPropertyInfo["@com.sap.vocabularies.Common.v1.Label"]);
199
+ bValueHelpEnabledForUnit =
200
+ sUnitPropertyPath &&
201
+ oMetaModel.getObject(sCurrentEntitySetName + "/" + sUnitPropertyPath + "@") &&
202
+ oMetaModel.getObject(sCurrentEntitySetName + "/" + sUnitPropertyPath + "@")[
203
+ "@com.sap.vocabularies.Common.v1.ValueList"
204
+ ];
205
+ if (oDataModelObjectPath) {
206
+ oDataModelObjectPath.targetObject = oDataModelObjectPath.targetEntityType.entityProperties.filter(function(
207
+ oProperty
208
+ ) {
209
+ return oProperty.name === sDataPropertyPath;
210
+ });
211
+ }
212
+ oDataModelObjectPath.targetObject = oDataModelObjectPath.targetObject[0] || {};
213
+ oTextBinding = FieldTemplating.getTextBinding(oDataModelObjectPath, undefined, true) || {};
214
+ var oFieldContext = oMetaModel.getContext(oColumnInfo.annotationPath),
215
+ oDataFieldConverted = MetaModelConverter.convertMetaModelContext(oFieldContext),
216
+ oPropertyContext = oMetaModel.getContext(sCurrentEntitySetName + "/" + sDataPropertyPath + "@"),
217
+ oInterface = oPropertyContext && oPropertyContext.getInterface();
218
+ bIsImmutable =
219
+ oPropertyContext &&
220
+ oPropertyContext.getProperty() &&
221
+ oPropertyContext.getProperty()["@Org.OData.Core.V1.Immutable"];
222
+ bIsComputed =
223
+ oPropertyContext &&
224
+ oPropertyContext.getProperty() &&
225
+ oPropertyContext.getProperty()["@Org.OData.Core.V1.Computed"];
226
+ var bHiddenField =
227
+ MassEditHelper.getHiddenValueForContexts(
228
+ oFieldContext && oFieldContext.getObject()["@com.sap.vocabularies.UI.v1.Hidden"],
229
+ aContexts
230
+ ) || false;
231
+ oInterface.context = {
232
+ getModel: function() {
233
+ return oInterface.getModel();
234
+ },
235
+ getPath: function() {
236
+ return sCurrentEntitySetName + "/" + sDataPropertyPath;
237
+ }
238
+ };
239
+ var oFieldControl = FieldHelper.fieldControl(sDataPropertyPath, oInterface);
240
+ oPropertyInfo =
241
+ (oDataFieldConverted && oDataFieldConverted.Value && oDataFieldConverted.Value.$target) ||
242
+ (oDataFieldConverted && oDataFieldConverted.Target && oDataFieldConverted.Target.$target);
243
+ var isReadOnlyExpression = FieldControlHelper.isReadOnlyExpression(oPropertyInfo);
244
+ bChartProperty = oPropertyInfo && oPropertyInfo.term && oPropertyInfo.term === "com.sap.vocabularies.UI.v1.Chart";
245
+ if (
246
+ sDataPropertyPath &&
247
+ !bHiddenField &&
248
+ !bIsImmutable &&
249
+ !bIsComputed &&
250
+ !bChartProperty &&
251
+ UIFormatters.getEditableExpression(oPropertyInfo, oDataFieldConverted, oDataModelObjectPath) !== "false"
252
+ ) {
253
+ oResult = {
254
+ "label": sLabelText + ":",
255
+ "visible":
256
+ sDataPropertyPath &&
257
+ !bHiddenField &&
258
+ !bIsImmutable &&
259
+ !bIsComputed &&
260
+ UIFormatters.getEditableExpression(oPropertyInfo, oDataFieldConverted, oDataModelObjectPath),
261
+ "dataProperty": sDataPropertyPath,
262
+ "isValueHelpEnabled": bValueHelpEnabled ? bValueHelpEnabled : false,
263
+ "unitProperty": sUnitPropertyPath ? sUnitPropertyPath : false,
264
+ "isValueHelpEnabledForUnit": bValueHelpEnabledForUnit ? bValueHelpEnabledForUnit : false,
265
+ "propertyPathForValueHelp": sCurrentEntitySetName + "/" + sDataPropertyPath,
266
+ "propertyPathForValueHelpUnit": sCurrentEntitySetName + "/" + sUnitPropertyPath,
267
+ "isFieldRequired": FieldHelper.getRequiredForDataField(oFieldControl, "Editable"),
268
+ "defaultSelectionPath": sDataPropertyPath
269
+ ? MassEditHelper.getDefaultSelectionPathComboBox(aContexts, sDataPropertyPath)
270
+ : false,
271
+ "defaultSelectionUnitPath": sUnitPropertyPath
272
+ ? MassEditHelper.getDefaultSelectionPathComboBox(aContexts, sUnitPropertyPath)
273
+ : false,
274
+ "entitySet": sCurrentEntitySetName,
275
+ "textBinding": oTextBinding,
276
+ "nullable": oPropertyInfo.nullable !== undefined ? oPropertyInfo.nullable : true,
277
+ "isPropertyReadOnly": isReadOnlyExpression !== undefined ? isReadOnlyExpression : false
278
+ };
279
+ aDataArray.push(oResult);
280
+ }
281
+ }
282
+ });
283
+ oDataFieldModel.setData(aDataArray);
284
+ return oDataFieldModel;
285
+ },
286
+
287
+ getInputTypeForColumn: function(oColumn) {
288
+ return (
289
+ oColumn.getTemplate().getContent &&
290
+ oColumn.getTemplate().getContent().getContentEdit &&
291
+ oColumn
292
+ .getTemplate()
293
+ .getContent()
294
+ .getContentEdit() &&
295
+ oColumn
296
+ .getTemplate()
297
+ .getContent()
298
+ .getContentEdit()[0] &&
299
+ oColumn
300
+ .getTemplate()
301
+ .getContent()
302
+ .getContentEdit()[0]
303
+ .getMetadata()
304
+ .getName()
305
+ );
306
+ },
307
+
308
+ getTableFields: function(oTable) {
309
+ var aColumns = (oTable && oTable.getColumns()) || [];
310
+ return aColumns.map(function(oColumn) {
311
+ var sDataProperty = oColumn && oColumn.getDataProperty(),
312
+ aRealtedColumnInfo =
313
+ oTable.data("columns") &&
314
+ oTable.data("columns").customData.filter(function(oColumnInfo) {
315
+ return oColumnInfo.name === sDataProperty && oColumnInfo.type === "Annotation";
316
+ });
317
+ return {
318
+ "dataProperty": sDataProperty,
319
+ "label": oColumn.getHeader(),
320
+ "annotationPath": aRealtedColumnInfo && aRealtedColumnInfo[0] && aRealtedColumnInfo[0].annotationPath,
321
+ "inputType": MassEditHelper.getInputTypeForColumn(oColumn)
322
+ };
323
+ });
324
+ },
325
+
326
+ getDefaultTextsForDialog: function(oResourceBundle, iSelectedContexts, oController) {
327
+ // The confirm button text is "Save" for table in Display mode and "Apply" for table in edit mode. This can be later exposed if needed.
328
+ var oView = oController.getView(),
329
+ bEditableTable = oView && oView.getModel("ui") && (oView.getModel("ui").getProperty("/editMode") === "Editable");
330
+
331
+ return {
332
+ "keepExistingPrefix": "< Keep",
333
+ "leaveBlankValue": "< Leave Blank >",
334
+ "clearFieldValue": "< Clear Values >",
335
+ "massEditTitle": oResourceBundle.getText("C_MASS_EDIT_DIALOG_TITLE", iSelectedContexts),
336
+ "applyButtonText": bEditableTable
337
+ ? oResourceBundle.getText("C_MASS_EDIT_APPLY_BUTTON_TEXT")
338
+ : oResourceBundle.getText("C_MASS_EDIT_SAVE_BUTTON_TEXT"),
339
+ "cancelButtonText": oResourceBundle.getText("C_MASS_EDIT_CANCEL_BUTTON_TEXT")
340
+ };
341
+ },
342
+
343
+ /**
344
+ * Adds a suffix to the 'keep existing' property of the comboBox.
345
+ *
346
+ * @param {string} sInputType InputType of the field
347
+ * @returns {string}
348
+ */
349
+ getSuffixForKeepExisiting: function(sInputType) {
350
+ var sResult = "Values";
351
+
352
+ switch (sInputType) {
353
+ //TODO - Add for other control types as well (Radio Button, Email, Input, MDC Fields, Image etc.)
354
+ case "sap.m.DatePicker":
355
+ sResult = "Dates";
356
+ break;
357
+ case "sap.m.CheckBox":
358
+ sResult = "Settings";
359
+ break;
360
+ }
361
+ return sResult;
362
+ },
363
+
364
+ /**
365
+ * Adds default values to the model [Keep Existing Values, Leave Blank].
366
+ * @param {Array} aValues Array instance where the default data needs to be added
367
+ * @param {Array} aContexts Contexts for mass edit
368
+ * @param {object} oDefaultValues Default values from Application Manifest
369
+ * @param {object} oPropertyInfo Property information
370
+ * @param {boolean} bUOMField
371
+ */
372
+ setDefaultValuesToDialog: function(aValues, aContexts, oDefaultValues, oPropertyInfo, bUOMField) {
373
+ var sPropertyPath = oPropertyInfo.dataProperty,
374
+ sInputType = oPropertyInfo.inputType,
375
+ bPropertyRequired = oPropertyInfo.isFieldRequired;
376
+ var sSuffixForKeepExisting = MassEditHelper.getSuffixForKeepExisiting(sInputType);
377
+ //TODO - Add <<Use Value Help or control implmentation>> and related key by checking if value help is enabled for property or Unit.
378
+ //TODO - Add option Apply to Empty Fields only for Both Value Help and controls.
379
+ var bValueExistsForPropertyPath = aContexts.some(function(oSelectedContext) {
380
+ return oSelectedContext.getObject(sPropertyPath);
381
+ });
382
+ if (bValueExistsForPropertyPath) {
383
+ if (bPropertyRequired !== true && !bUOMField) {
384
+ aValues.unshift({ text: oDefaultValues.clearFieldValue, key: "ClearFieldValue/" + sPropertyPath });
385
+ }
386
+ } else {
387
+ aValues.unshift({ text: oDefaultValues.leaveBlankValue, key: "Empty/" + sPropertyPath });
388
+ }
389
+ aValues.unshift({
390
+ text: oDefaultValues.keepExistingPrefix + " " + sSuffixForKeepExisting + " >",
391
+ key: "Default/" + sPropertyPath
392
+ });
393
+ },
394
+
395
+ getTextArrangementInfo: function(sProperty, oTextBinding, sCurrentEntitySet, oSelectedContext) {
396
+ var oMetaModel = oSelectedContext.getModel().getMetaModel();
397
+ var sDisplayMode = CommonUtils.computeDisplayMode(oMetaModel.getObject(sCurrentEntitySet + "/" + sProperty + "@"));
398
+ var sDescriptionPath, sValue, sDescriptionValue, sFullText;
399
+ if (oTextBinding && (oTextBinding.path || (oTextBinding.parameters && oTextBinding.parameters.length)) && sProperty) {
400
+ if (oTextBinding.path) {
401
+ if (sDisplayMode === "Description") {
402
+ sValue = oSelectedContext.getObject(sProperty);
403
+ sDescriptionValue = oSelectedContext.getObject(oTextBinding.path);
404
+ sFullText = sDescriptionValue;
405
+ } else if (sDisplayMode === "Value") {
406
+ sValue = oSelectedContext.getObject(sProperty);
407
+ sFullText = sValue;
408
+ }
409
+ } else if (oTextBinding.parameters) {
410
+ oTextBinding.parameters.forEach(function(oProps) {
411
+ if (oProps.path && oProps.path !== sProperty) {
412
+ sDescriptionPath = oProps.path;
413
+ }
414
+ });
415
+ sValue = oSelectedContext.getObject(sProperty);
416
+ sDescriptionValue = oSelectedContext.getObject(sDescriptionPath);
417
+ if (sDisplayMode === "ValueDescription" && sValue && sDescriptionValue) {
418
+ sFullText = sValue + " (" + sDescriptionValue + ")";
419
+ } else if (sDisplayMode === "DescriptionValue" && sDescriptionValue && sValue) {
420
+ sFullText = sDescriptionValue + " (" + sValue + ")";
421
+ }
422
+ }
423
+ return {
424
+ "textArrangement": sDisplayMode,
425
+ "valuePath": sProperty,
426
+ "descriptionPath": sDescriptionPath,
427
+ "value": sValue,
428
+ "description": sDescriptionValue,
429
+ "fullText": sFullText
430
+ };
431
+ }
432
+ return false;
433
+ },
434
+
435
+ /**
436
+ * Initializes a runtime model:
437
+ * => The model consists of values shown in the comboBox of the dialog (Leave Blank, Keep Existing Values, or any property value for the selected context, etc.)
438
+ * => The model will capture runtime changes in the results property (the value entered in the comboBox).
439
+ *
440
+ * @param {Array} aContexts Contexts for mass edit
441
+ * @param {Array} aDataArray Array containing data related to the dialog used by both the static and the runtime model
442
+ * @param {object} oDefaultValues Default values from i18n
443
+ * @returns {object}
444
+ */
445
+ setRuntimeModelOnDialog: function(aContexts, aDataArray, oDefaultValues) {
446
+ var aValues = [],
447
+ aUnitData = [],
448
+ aResults = [],
449
+ aReadOnlyFieldInfo = [],
450
+ oDistinctValueMap = {},
451
+ sPropertyName;
452
+ aDataArray.forEach(function(oData) {
453
+ if (oData.dataProperty && oData.dataProperty.indexOf("/") > -1) {
454
+ var aFinalPath = MassEditHelper.initLastLevelOfPropertyPath(oData.dataProperty, aValues),
455
+ aPropertyPaths = oData.dataProperty.split("/"),
456
+ sPropertyKey;
457
+ for (var i = 0; i < aContexts.length; i++) {
458
+ var sMultiLevelPathValue = aContexts[i].getObject(oData.dataProperty);
459
+ sPropertyKey = oData.dataProperty + "/" + sMultiLevelPathValue;
460
+ if (!oDistinctValueMap[sPropertyKey] && aFinalPath[aPropertyPaths[aPropertyPaths.length - 1]]) {
461
+ var oTextInfo = MassEditHelper.getTextArrangementInfo(
462
+ oData.dataProperty,
463
+ oData.textBinding,
464
+ oData.entitySet,
465
+ aContexts[i]
466
+ );
467
+ aFinalPath[aPropertyPaths[aPropertyPaths.length - 1]].push({
468
+ "text": (oTextInfo && oTextInfo.fullText) || sMultiLevelPathValue,
469
+ "key": oData.dataProperty,
470
+ "textInfo": oTextInfo
471
+ });
472
+ oDistinctValueMap[sPropertyKey] = sMultiLevelPathValue;
473
+ }
474
+ }
475
+ } else {
476
+ aValues[oData.dataProperty] = aValues[oData.dataProperty] || [];
477
+ if (oData.unitProperty) {
478
+ aUnitData[oData.unitProperty] = aUnitData[oData.unitProperty] || [];
479
+ }
480
+ for (var i = 0; i < aContexts.length; i++) {
481
+ var oDataObject = aContexts[i].getObject();
482
+ sPropertyName = oData.dataProperty + "/" + oDataObject[oData.dataProperty];
483
+ if (oData.dataProperty && oDataObject[oData.dataProperty] && !oDistinctValueMap[sPropertyName]) {
484
+ var oTextInfo = MassEditHelper.getTextArrangementInfo(
485
+ oData.dataProperty,
486
+ oData.textBinding,
487
+ oData.entitySet,
488
+ aContexts[i]
489
+ );
490
+ aValues[oData.dataProperty].push({
491
+ "text": (oTextInfo && oTextInfo.fullText) || oDataObject[oData.dataProperty],
492
+ "key": oData.dataProperty,
493
+ "textInfo": oTextInfo
494
+ });
495
+ oDistinctValueMap[sPropertyName] = oDataObject[oData.dataProperty];
496
+ }
497
+ if (oData.unitProperty && oDataObject[oData.unitProperty]) {
498
+ sPropertyName = oData.unitProperty + "/" + oDataObject[oData.unitProperty];
499
+ if (!oDistinctValueMap[sPropertyName]) {
500
+ var oTextInfo = MassEditHelper.getTextArrangementInfo(
501
+ oData.unitProperty,
502
+ oData.textBinding,
503
+ oData.entitySet,
504
+ aContexts[i]
505
+ );
506
+ aUnitData[oData.unitProperty].push({
507
+ "text": (oTextInfo && oTextInfo.fullText) || oDataObject[oData.unitProperty],
508
+ "key": oData.unitProperty,
509
+ "textInfo": oTextInfo
510
+ });
511
+ oDistinctValueMap[sPropertyName] = oDataObject[oData.unitProperty];
512
+ }
513
+ }
514
+ }
515
+ }
516
+ });
517
+ aDataArray.forEach(function(oData) {
518
+ if (oData.dataProperty.indexOf("/") > -1) {
519
+ var sMultiLevelPropPathValue = MassEditHelper.getValueForMultiLevelPath(oData.dataProperty, aValues);
520
+ if (!sMultiLevelPropPathValue) {
521
+ sMultiLevelPropPathValue.push({ text: oDefaultValues.leaveBlankValue, key: "Empty/" + oData.dataProperty });
522
+ } else {
523
+ MassEditHelper.setDefaultValuesToDialog(sMultiLevelPropPathValue, aContexts, oDefaultValues, oData);
524
+ }
525
+ } else if (aValues[oData.dataProperty] && aValues[oData.dataProperty].length) {
526
+ MassEditHelper.setDefaultValuesToDialog(aValues[oData.dataProperty], aContexts, oDefaultValues, oData);
527
+ }
528
+ if (aUnitData[oData.unitProperty] && aUnitData[oData.unitProperty].length) {
529
+ MassEditHelper.setDefaultValuesToDialog(aUnitData[oData.unitProperty], aContexts, oDefaultValues, oData, true);
530
+ } else if (
531
+ (oData.dataProperty && aValues[oData.dataProperty] && !aValues[oData.dataProperty].length) ||
532
+ (oData.unitProperty && aUnitData[oData.unitProperty] && !aUnitData[oData.unitProperty].length)
533
+ ) {
534
+ var bClearFieldOrBlankValueExists =
535
+ aValues[oData.dataProperty] &&
536
+ aValues[oData.dataProperty].some(function(obj) {
537
+ return obj.text === "< Clear Values >" || obj.text === "< Leave Blank >";
538
+ });
539
+ if (oData.dataProperty && !bClearFieldOrBlankValueExists) {
540
+ aValues[oData.dataProperty].push({ text: oDefaultValues.leaveBlankValue, key: "Empty/" + oData.dataProperty });
541
+ }
542
+ var bClearFieldOrBlankUnitValueExists =
543
+ aUnitData[oData.unitProperty] &&
544
+ aUnitData[oData.unitProperty].some(function(obj) {
545
+ return obj.text === "< Clear Values >" || obj.text === "< Leave Blank >";
546
+ });
547
+ if (oData.unitProperty && !bClearFieldOrBlankUnitValueExists) {
548
+ aUnitData[oData.unitProperty].push({
549
+ text: oDefaultValues.leaveBlankValue,
550
+ key: "Empty/" + oData.unitProperty
551
+ });
552
+ }
553
+ }
554
+ if (oData.isPropertyReadOnly && typeof oData.isPropertyReadOnly === "boolean") {
555
+ aReadOnlyFieldInfo.push({ "property": oData.dataProperty, value: oData.isPropertyReadOnly, type: "Default" });
556
+ } else if (oData.isPropertyReadOnly && oData.isPropertyReadOnly.operand1 && oData.isPropertyReadOnly.operand2) {
557
+ aReadOnlyFieldInfo.push({
558
+ "property": oData.dataProperty,
559
+ propertyPath: oData.isPropertyReadOnly.operand1.path,
560
+ propertyValue: oData.isPropertyReadOnly.operand2.value,
561
+ type: "Path"
562
+ });
563
+ }
564
+ });
565
+ var oData = { "values": aValues, "unitData": aUnitData, "results": aResults, "readablePropertyData": aReadOnlyFieldInfo };
566
+ var oDialogDataModel = new JSONModel(oData);
567
+ return oDialogDataModel;
568
+ },
569
+
570
+ /**
571
+ * Create the mass edit dialog.
572
+ * @param {object} oTable Instance of Table
573
+ * @param {Array} aContexts Contexts for mass edit
574
+ * @param {object} oController Controller for the view
575
+ * @returns {object} Promise returning instance of dialog.
576
+ */
577
+ createDialog: function(oTable, aContexts, oController) {
578
+ var sFragmentName = "sap/fe/core/controls/massEdit/MassEditDialog",
579
+ aDataArray = [],
580
+ oResourceBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core"),
581
+ oDefaultValues = MassEditHelper.getDefaultTextsForDialog(oResourceBundle, aContexts.length, oController),
582
+ oExtensionAPI = oController && oController.getExtensionAPI(),
583
+ oDataFieldModel = MassEditHelper.prepareDataForDialog(oTable, aContexts, aDataArray),
584
+ oDialogDataModel = MassEditHelper.setRuntimeModelOnDialog(aContexts, aDataArray, oDefaultValues);
585
+
586
+ return new Promise(function(resolve, reject) {
587
+ var oFragment = XMLTemplateProcessor.loadTemplate(sFragmentName, "fragment");
588
+ return Promise.resolve(
589
+ XMLPreprocessor.process(
590
+ oFragment,
591
+ { name: sFragmentName },
592
+ {
593
+ bindingContexts: {
594
+ dataFieldModel: oDataFieldModel.createBindingContext("/")
595
+ },
596
+ models: {
597
+ dataFieldModel: oDataFieldModel
598
+ }
599
+ }
600
+ )
601
+ )
602
+ .then(function(oFragment) {
603
+ return Fragment.load({ definition: oFragment }).then(function(oDialogContent) {
604
+ var oDialog = new Dialog({
605
+ title: oDefaultValues.massEditTitle,
606
+ content: [oDialogContent],
607
+ beginButton: {
608
+ text: oDefaultValues.applyButtonText,
609
+ type: "Emphasized",
610
+ press: function(oEvent) {
611
+ var oDialog = oEvent.getSource().getParent(),
612
+ oModel = oDialog.getModel("fieldsInfo"),
613
+ aResults = oModel.getProperty("/results"),
614
+ aPropertyReadableInfo = oModel.getProperty("/readablePropertyData"),
615
+ changePromise = [],
616
+ bReadOnlyField = false;
617
+
618
+ aContexts.forEach(function(oSelectedContext) {
619
+ aResults.forEach(function(oResult) {
620
+ //TODO - Add save implementation for Value Help.
621
+ if (aPropertyReadableInfo) {
622
+ bReadOnlyField = aPropertyReadableInfo.some(function(oPropertyInfo) {
623
+ if (oResult.keyValue === oPropertyInfo.property) {
624
+ if (oPropertyInfo.type === "Default") {
625
+ return oPropertyInfo.value === true;
626
+ } else if (
627
+ oPropertyInfo.type === "Path" &&
628
+ oPropertyInfo.propertyValue &&
629
+ oPropertyInfo.propertyPath
630
+ ) {
631
+ return (
632
+ oSelectedContext.getObject(oPropertyInfo.propertyPath) ===
633
+ oPropertyInfo.propertyValue
634
+ );
635
+ }
636
+ }
637
+ });
638
+ }
639
+ if (oResult.keyValue && oResult.value !== "Default" && !bReadOnlyField) {
640
+ changePromise.push(oSelectedContext.setProperty(oResult.keyValue, oResult.value));
641
+ }
642
+ });
643
+ });
644
+ return Promise.all(changePromise)
645
+ .then(function(oRes) {
646
+ var oListBinding = oTable.getRowBinding();
647
+ return oExtensionAPI.refresh(oListBinding.getPath()).then(function() {
648
+ oDialog.close();
649
+ oDialog.destroy();
650
+ return oRes;
651
+ });
652
+ })
653
+ .catch(function(oError) {
654
+ //TODO - Add error handling part for the Dialog
655
+ Log.error("Mass Edit: Something went wrong in updating entries.", oError);
656
+ });
657
+ }
658
+ },
659
+ endButton: {
660
+ text: oDefaultValues.cancelButtonText,
661
+ press: function(oEvent) {
662
+ var oDialog = oEvent.getSource().getParent();
663
+ oDialog.close();
664
+ oDialog.destroy();
665
+ }
666
+ }
667
+ });
668
+ oDialog.setModel(oDialogDataModel, "fieldsInfo");
669
+ resolve(oDialog);
670
+ });
671
+ })
672
+ .catch(reject);
673
+ });
674
+ }
675
+ };
676
+ return MassEditHelper;
677
+ }
678
+ );