@openui5/sap.ui.mdc 1.99.0 → 1.100.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 (173) hide show
  1. package/THIRDPARTY.txt +2 -2
  2. package/package.json +4 -4
  3. package/src/sap/ui/mdc/.library +1 -1
  4. package/src/sap/ui/mdc/ActionToolbar.js +1 -1
  5. package/src/sap/ui/mdc/Chart.js +50 -32
  6. package/src/sap/ui/mdc/ChartDelegate.js +66 -21
  7. package/src/sap/ui/mdc/ChartRenderer.js +1 -1
  8. package/src/sap/ui/mdc/Control.js +11 -6
  9. package/src/sap/ui/mdc/Element.js +10 -6
  10. package/src/sap/ui/mdc/Field.js +19 -4
  11. package/src/sap/ui/mdc/FilterBar.js +1 -1
  12. package/src/sap/ui/mdc/FilterBarDelegate.js +26 -0
  13. package/src/sap/ui/mdc/FilterField.js +41 -3
  14. package/src/sap/ui/mdc/Link.js +3 -3
  15. package/src/sap/ui/mdc/MultiValueField.js +11 -1
  16. package/src/sap/ui/mdc/Table.js +73 -39
  17. package/src/sap/ui/mdc/TableDelegate.js +28 -1
  18. package/src/sap/ui/mdc/ValueHelp.js +8 -3
  19. package/src/sap/ui/mdc/ValueHelpDelegate.js +2 -1
  20. package/src/sap/ui/mdc/actiontoolbar/ActionToolbarAction.js +1 -1
  21. package/src/sap/ui/mdc/actiontoolbar/ActionToolbarActionRenderer.js +1 -1
  22. package/src/sap/ui/mdc/chart/ChartSelectionDetails.js +1 -1
  23. package/src/sap/ui/mdc/chart/ChartToolbar.js +13 -6
  24. package/src/sap/ui/mdc/chart/DrillBreadcrumbs.js +7 -7
  25. package/src/sap/ui/mdc/chart/DrillStackHandler.js +6 -6
  26. package/src/sap/ui/mdc/chart/PropertyHelper.js +1 -1
  27. package/src/sap/ui/mdc/condition/Condition.js +1 -1
  28. package/src/sap/ui/mdc/condition/ConditionConverter.js +1 -1
  29. package/src/sap/ui/mdc/condition/ConditionModel.js +1 -1
  30. package/src/sap/ui/mdc/condition/FilterConverter.js +4 -2
  31. package/src/sap/ui/mdc/condition/FilterOperatorUtil.js +133 -25
  32. package/src/sap/ui/mdc/condition/Operator.js +4 -2
  33. package/src/sap/ui/mdc/condition/OperatorDynamicDateOption.js +78 -24
  34. package/src/sap/ui/mdc/condition/RangeOperator.js +5 -5
  35. package/src/sap/ui/mdc/designtime/Util.js +63 -0
  36. package/src/sap/ui/mdc/designtime/actiontoolbar/ActionToolbar.designtime.js +23 -30
  37. package/src/sap/ui/mdc/designtime/chart/Chart.designtime.js +3 -0
  38. package/src/sap/ui/mdc/designtime/link/PanelItem.designtime.js +3 -1
  39. package/src/sap/ui/mdc/designtime/table/Table.designtime.js +39 -52
  40. package/src/sap/ui/mdc/field/BoolFieldHelp.js +1 -1
  41. package/src/sap/ui/mdc/field/ConditionFieldHelp.js +1 -1
  42. package/src/sap/ui/mdc/field/ConditionType.js +15 -4
  43. package/src/sap/ui/mdc/field/ConditionsType.js +2 -1
  44. package/src/sap/ui/mdc/field/CustomFieldHelp.js +1 -1
  45. package/src/sap/ui/mdc/field/CustomFieldInfo.js +1 -1
  46. package/src/sap/ui/mdc/field/DefineConditionPanel.js +16 -5
  47. package/src/sap/ui/mdc/field/DynamicDateRangeConditionsType.js +76 -19
  48. package/src/sap/ui/mdc/field/FieldBase.js +62 -11
  49. package/src/sap/ui/mdc/field/FieldBaseDelegate.js +1 -1
  50. package/src/sap/ui/mdc/field/FieldHelpBase.js +1 -1
  51. package/src/sap/ui/mdc/field/FieldInfoBase.js +2 -1
  52. package/src/sap/ui/mdc/field/FieldInput.js +1 -1
  53. package/src/sap/ui/mdc/field/FieldInputRenderUtil.js +1 -1
  54. package/src/sap/ui/mdc/field/FieldMultiInput.js +1 -1
  55. package/src/sap/ui/mdc/field/FieldValueHelp.js +4 -1
  56. package/src/sap/ui/mdc/field/FieldValueHelpContentWrapperBase.js +1 -1
  57. package/src/sap/ui/mdc/field/FieldValueHelpDelegate.js +1 -1
  58. package/src/sap/ui/mdc/field/FieldValueHelpMTableWrapper.js +5 -4
  59. package/src/sap/ui/mdc/field/FieldValueHelpMdcTableWrapper.js +5 -3
  60. package/src/sap/ui/mdc/field/FieldValueHelpTableWrapperBase.js +1 -1
  61. package/src/sap/ui/mdc/field/FieldValueHelpUITableWrapper.js +7 -7
  62. package/src/sap/ui/mdc/field/InParameter.js +1 -1
  63. package/src/sap/ui/mdc/field/ListFieldHelp.js +1 -1
  64. package/src/sap/ui/mdc/field/ListFieldHelpItem.js +1 -1
  65. package/src/sap/ui/mdc/field/MultiValueFieldItem.js +1 -1
  66. package/src/sap/ui/mdc/field/OutParameter.js +1 -1
  67. package/src/sap/ui/mdc/field/TokenDisplay.js +1 -1
  68. package/src/sap/ui/mdc/field/TokenizerDisplay.js +1 -1
  69. package/src/sap/ui/mdc/field/ValueHelpPanel.js +1 -1
  70. package/src/sap/ui/mdc/field/content/ContentFactory.js +5 -1
  71. package/src/sap/ui/mdc/field/content/DateContent.js +27 -19
  72. package/src/sap/ui/mdc/field/content/DateTimeContent.js +0 -6
  73. package/src/sap/ui/mdc/filterbar/FilterBarBase.js +76 -208
  74. package/src/sap/ui/mdc/filterbar/PropertyHelper.js +27 -2
  75. package/src/sap/ui/mdc/filterbar/p13n/AdaptationFilterBar.js +127 -57
  76. package/src/sap/ui/mdc/filterbar/p13n/FilterColumnLayout.js +2 -2
  77. package/src/sap/ui/mdc/filterbar/p13n/GroupContainer.js +7 -3
  78. package/src/sap/ui/mdc/filterbar/p13n/TableContainer.js +52 -14
  79. package/src/sap/ui/mdc/filterbar/vh/FilterBar.js +37 -19
  80. package/src/sap/ui/mdc/filterbar/vh/FilterContainer.js +1 -1
  81. package/src/sap/ui/mdc/flexibility/AggregationConfigFlex.js +48 -31
  82. package/src/sap/ui/mdc/flexibility/Chart.flexibility.js +1 -1
  83. package/src/sap/ui/mdc/flexibility/ChartItemFlex.js +36 -0
  84. package/src/sap/ui/mdc/flexibility/ConditionFlex.js +47 -10
  85. package/src/sap/ui/mdc/flexibility/FilterBar.flexibility.js +1 -1
  86. package/src/sap/ui/mdc/flexibility/FilterItemFlex.js +1 -1
  87. package/src/sap/ui/mdc/flexibility/ItemBaseFlex.js +0 -1
  88. package/src/sap/ui/mdc/flexibility/PropertyInfoFlex.js +2 -85
  89. package/src/sap/ui/mdc/library.js +11 -4
  90. package/src/sap/ui/mdc/link/ContactDetails.js +1 -1
  91. package/src/sap/ui/mdc/link/ContactDetailsAddressItem.js +1 -1
  92. package/src/sap/ui/mdc/link/ContactDetailsEmailItem.js +1 -1
  93. package/src/sap/ui/mdc/link/ContactDetailsItem.js +1 -1
  94. package/src/sap/ui/mdc/link/ContactDetailsPhoneItem.js +1 -1
  95. package/src/sap/ui/mdc/link/Factory.js +1 -1
  96. package/src/sap/ui/mdc/link/FakeFlpConnector.js +1 -1
  97. package/src/sap/ui/mdc/link/LinkItem.js +1 -1
  98. package/src/sap/ui/mdc/link/Panel.js +1 -1
  99. package/src/sap/ui/mdc/link/PanelItem.js +1 -1
  100. package/src/sap/ui/mdc/link/PanelListItem.js +1 -1
  101. package/src/sap/ui/mdc/link/SemanticObjectMapping.js +1 -1
  102. package/src/sap/ui/mdc/link/SemanticObjectMappingItem.js +1 -1
  103. package/src/sap/ui/mdc/link/SemanticObjectUnavailableAction.js +1 -1
  104. package/src/sap/ui/mdc/messagebundle.properties +2 -1
  105. package/src/sap/ui/mdc/mixin/AdaptationMixin.js +20 -19
  106. package/src/sap/ui/mdc/mixin/DelegateMixin.js +1 -141
  107. package/src/sap/ui/mdc/mixin/FilterIntegrationMixin.js +1 -9
  108. package/src/sap/ui/mdc/mixin/PromiseMixin.js +1 -1
  109. package/src/sap/ui/mdc/mixin/PropertyHelperMixin.js +348 -0
  110. package/src/sap/ui/mdc/odata/TypeUtil.js +1 -1
  111. package/src/sap/ui/mdc/odata/v4/ChartPropertyHelper.js +70 -3
  112. package/src/sap/ui/mdc/odata/v4/FilterBarDelegate.js +116 -20
  113. package/src/sap/ui/mdc/odata/v4/ODataMetaModelUtil.js +2 -2
  114. package/src/sap/ui/mdc/odata/v4/TableDelegate.js +11 -33
  115. package/src/sap/ui/mdc/odata/v4/TypeUtil.js +2 -4
  116. package/src/sap/ui/mdc/odata/v4/ValueHelpDelegate.js +1 -1
  117. package/src/sap/ui/mdc/odata/v4/vizChart/ChartDelegate.js +281 -263
  118. package/src/sap/ui/mdc/p13n/AdaptationProvider.js +1 -1
  119. package/src/sap/ui/mdc/p13n/Engine.js +21 -18
  120. package/src/sap/ui/mdc/p13n/FlexUtil.js +0 -5
  121. package/src/sap/ui/mdc/p13n/PropertyHelper.js +2 -2
  122. package/src/sap/ui/mdc/p13n/StateUtil.js +4 -0
  123. package/src/sap/ui/mdc/p13n/UIManager.js +16 -13
  124. package/src/sap/ui/mdc/p13n/modification/ModificationHandler.js +18 -14
  125. package/src/sap/ui/mdc/p13n/modules/DefaultProviderRegistry.js +1 -1
  126. package/src/sap/ui/mdc/p13n/panels/ActionToolbarPanel.js +6 -6
  127. package/src/sap/ui/mdc/p13n/panels/AdaptFiltersPanel.js +49 -27
  128. package/src/sap/ui/mdc/p13n/panels/ChartItemPanel.js +4 -3
  129. package/src/sap/ui/mdc/p13n/panels/FilterPanel.js +136 -0
  130. package/src/sap/ui/mdc/p13n/panels/GroupView.js +53 -28
  131. package/src/sap/ui/mdc/p13n/panels/LinkSelectionPanel.js +54 -18
  132. package/src/sap/ui/mdc/p13n/subcontroller/ActionToolbarController.js +4 -7
  133. package/src/sap/ui/mdc/p13n/subcontroller/AdaptFiltersController.js +1 -2
  134. package/src/sap/ui/mdc/p13n/subcontroller/BaseController.js +1 -1
  135. package/src/sap/ui/mdc/p13n/subcontroller/FilterController.js +8 -4
  136. package/src/sap/ui/mdc/p13n/subcontroller/LinkPanelController.js +1 -0
  137. package/src/sap/ui/mdc/p13n/subcontroller/SortController.js +2 -2
  138. package/src/sap/ui/mdc/table/CreationRow.js +1 -1
  139. package/src/sap/ui/mdc/table/GridTableType.js +75 -27
  140. package/src/sap/ui/mdc/table/PropertyHelper.js +20 -13
  141. package/src/sap/ui/mdc/table/ResponsiveTableType.js +86 -13
  142. package/src/sap/ui/mdc/table/RowActionItem.js +119 -0
  143. package/src/sap/ui/mdc/table/RowSettings.js +42 -1
  144. package/src/sap/ui/mdc/table/V4AnalyticsPropertyHelper.js +2 -2
  145. package/src/sap/ui/mdc/themes/base/Chart.less +2 -0
  146. package/src/sap/ui/mdc/themes/base/ValueHelpDialog.less +1 -0
  147. package/src/sap/ui/mdc/util/DateUtil.js +32 -7
  148. package/src/sap/ui/mdc/util/FilterUtil.js +1 -1
  149. package/src/sap/ui/mdc/util/PromiseCache.js +1 -1
  150. package/src/sap/ui/mdc/util/PropertyHelper.js +201 -76
  151. package/src/sap/ui/mdc/util/TypeUtil.js +1 -1
  152. package/src/sap/ui/mdc/valuehelp/Dialog.js +1 -1
  153. package/src/sap/ui/mdc/valuehelp/Popover.js +5 -3
  154. package/src/sap/ui/mdc/valuehelp/base/Container.js +1 -1
  155. package/src/sap/ui/mdc/valuehelp/base/Content.js +1 -1
  156. package/src/sap/ui/mdc/valuehelp/base/DialogTab.js +1 -1
  157. package/src/sap/ui/mdc/valuehelp/base/FilterableListContent.js +4 -4
  158. package/src/sap/ui/mdc/valuehelp/base/ListContent.js +1 -1
  159. package/src/sap/ui/mdc/valuehelp/content/Bool.js +1 -1
  160. package/src/sap/ui/mdc/valuehelp/content/Conditions.js +1 -1
  161. package/src/sap/ui/mdc/valuehelp/content/FixedList.js +13 -10
  162. package/src/sap/ui/mdc/valuehelp/content/MDCTable.js +4 -10
  163. package/src/sap/ui/mdc/valuehelp/content/MTable.js +6 -4
  164. package/test/sap/ui/mdc/testutils/opa/chart/TestObjects.js +2 -0
  165. package/test/sap/ui/mdc/testutils/opa/filterbar/TestObjects.js +0 -1
  166. package/test/sap/ui/mdc/testutils/opa/p13n/Actions.js +8 -6
  167. package/src/sap/ui/mdc/filterbar/vh/GenericFilterBarDelegate.js +0 -150
  168. package/src/sap/ui/mdc/p13n/panels/BasePanel.js +0 -721
  169. package/src/sap/ui/mdc/p13n/panels/ListView.js +0 -408
  170. package/src/sap/ui/mdc/p13n/panels/SelectionPanel.js +0 -92
  171. package/src/sap/ui/mdc/p13n/panels/SortPanel.js +0 -150
  172. package/src/sap/ui/mdc/ui/Container.js +0 -240
  173. package/src/sap/ui/mdc/ui/ContainerItem.js +0 -79
@@ -57,23 +57,33 @@ sap.ui.define([
57
57
  *
58
58
  * Metadata information:
59
59
  * - type
60
- * Can be any type that is also allowed for a control property, plus "PropertyReference" for references to simple properties.
60
+ * Can be any type that is also allowed for a control property, plus "PropertyReference" for references to simple properties.
61
61
  * Complex types can be specified with an object that describes sub-attributes.
62
62
  * Examples: "string", "string[]", "sap.ui.mdc.MyEnum", "any", "PropertyReference",
63
63
  * {
64
- * subAttribute: {type: "string", defaultValue: "myDefaultValue"}
64
+ * subAttribute: {
65
+ * type: "string",
66
+ * default: {
67
+ * value: "myDefaultValue"
68
+ * }
69
+ * }
65
70
  * ...
66
71
  * }
67
72
  * - mandatory (optional, default=false, only for top-level attribute)
68
73
  * Whether this attribute must be provided.
69
74
  * - allowedForComplexProperty (optional, default=false)
70
- * Whether it is allowed to provide this attribute for a complex property.
75
+ * Whether it is allowed to provide this attribute for a complex property.
71
76
  * - valueForComplexProperty (optional):
72
77
  * For a complex property, this defines the value of an attribute that is not allowed for complex properties.
73
- * - defaultValue (optional)
74
- * This can either be a value, or a reference to another attribute in the form "attribute:x", with x being the name of the other
75
- * attribute. The default value of this attribute is then the value of the other attribute. This works only one level deep.
76
- * Examples: "attribute:name", "attribute:attributeName.subAttributeName"
78
+ * - default: { (optional, type: Object) - specifies the default value property of the attribute
79
+ * - value
80
+ * This can either be a value, or a reference to another attribute in the form "attribute:x", with x being the name of the other
81
+ * attribute. The default value of this attribute is then the value of the other attribute. This works only one level deep.
82
+ * Examples: "attribute:name", "attribute:attributeName.subAttributeName"
83
+ * - ignoreIfNull (default=false)
84
+ * Prevents setting the default value for this attribute if set to <code>true</code>.
85
+ * Defines the entire attribute as <code>null</code> if the attribute value itself is from type <code>null</code>.
86
+ * }
77
87
  */
78
88
  var mAttributeMetadata = { // TODO: "allowedForComplexProperty" propagation to children + reserved reference attribute, e.g. unit -> unitProperty
79
89
  // Common
@@ -89,7 +99,9 @@ sap.ui.define([
89
99
  },
90
100
  visible: { // Whether the property is visible in the "Items" personalization.
91
101
  type: "boolean",
92
- defaultValue: true,
102
+ "default": {
103
+ value: true
104
+ },
93
105
  allowedForComplexProperty: true
94
106
  },
95
107
  path: { // The technical path for a data source property.
@@ -115,12 +127,16 @@ sap.ui.define([
115
127
  // TODO: What's the meaning? type = boolean? Is used only once in FilterBarBase: oProperty.maxConditions !== -1
116
128
  maxConditions: {
117
129
  type: "int",
118
- defaultValue: -1,
130
+ "default": {
131
+ value: -1
132
+ },
119
133
  valueForComplexProperty: null
120
134
  },
121
135
  caseSensitive: {
122
136
  type: "boolean",
123
- defaultValue: true
137
+ "default": {
138
+ value: true
139
+ }
124
140
  },
125
141
  group: { // Key of the group the property is inside. Used to visually group properties in personalization dialogs.
126
142
  type: "string",
@@ -134,12 +150,16 @@ sap.ui.define([
134
150
  // Table, Chart, P13N
135
151
  filterable: { // Whether it is possible to filter by this property.
136
152
  type: "boolean",
137
- defaultValue: true,
153
+ "default": {
154
+ value: true
155
+ },
138
156
  valueForComplexProperty: false
139
157
  },
140
158
  sortable: { // Whether it is possible to sort by this property.
141
159
  type: "boolean",
142
- defaultValue: true,
160
+ "default": {
161
+ value: true
162
+ },
143
163
  valueForComplexProperty: false
144
164
  },
145
165
 
@@ -167,7 +187,59 @@ sap.ui.define([
167
187
  allowedForComplexProperty: true
168
188
  },
169
189
  visualSettings: { // This object contains all relevant properties for visual adjustments
170
- type: "object"
190
+ type: {
191
+ widthCalculation: { // This object contains all properties and their default values for the column width calculation
192
+ type: {
193
+ minWidth: {
194
+ type: "int",
195
+ "default": {
196
+ value: 2
197
+ }
198
+ },
199
+ maxWidth: {
200
+ type: "int",
201
+ "default": {
202
+ value: 19
203
+ }
204
+ },
205
+ defaultWidth: {
206
+ type: "int",
207
+ "default": {
208
+ value: 8
209
+ }
210
+ },
211
+ gap: {
212
+ type: "float",
213
+ "default": {
214
+ value: 0
215
+ }
216
+ },
217
+ includeLabel: {
218
+ type: "boolean",
219
+ "default": {
220
+ value: true
221
+ }
222
+ },
223
+ verticalArrangement: {
224
+ type: "boolean",
225
+ "default": {
226
+ value: false
227
+ }
228
+ },
229
+ excludeProperties: {
230
+ type: "PropertyReference[]"
231
+ }
232
+ },
233
+ "default": {
234
+ value: {},
235
+ ignoreIfNull: true
236
+ }
237
+ }
238
+ },
239
+ "default": {
240
+ value: {}
241
+ },
242
+ allowedForComplexProperty: true
171
243
  },
172
244
 
173
245
  // Chart
@@ -382,7 +454,7 @@ sap.ui.define([
382
454
  }
383
455
 
384
456
  if (vValue == null) {
385
- setAttributeDefault(oPropertySection, mAttribute, sPath, sAttribute, aDependenciesForDefaults);
457
+ setAttributeDefault(oPropertySection, mAttribute, sPath, sAttribute, aDependenciesForDefaults, vValue);
386
458
  }
387
459
 
388
460
  if (typeof mAttribute.type === "object") {
@@ -415,21 +487,30 @@ sap.ui.define([
415
487
  });
416
488
  }
417
489
 
418
- function setAttributeDefault(oPropertySection, mAttributeSection, sSection, sAttribute, aDependenciesForDefaults) {
419
- if ("defaultValue" in mAttributeSection) {
420
- if (typeof mAttributeSection.defaultValue === "string" && mAttributeSection.defaultValue.startsWith("attribute:")) {
490
+ function setAttributeDefault(oPropertySection, mAttributeSection, sSection, sAttribute, aDependenciesForDefaults, vValue) {
491
+ if ("default" in mAttributeSection) {
492
+ var oDefault = mAttributeSection.default;
493
+
494
+ // ignoreIfNull will applies only if a default value for the attribute has been specified in its metadata
495
+ if (vValue === null && oDefault.ignoreIfNull && oDefault.value !== undefined) {
496
+ return;
497
+ }
498
+
499
+ if (oDefault.value === undefined) {
500
+ oPropertySection[sAttribute] = getTypeDefault(mAttributeSection.type);
501
+ } else if (typeof oDefault.value === "string" && oDefault.value.startsWith("attribute:")) {
421
502
  // Attributes that reference another attribute for the default value need to be processed in a second step.
422
503
  // This is only supported 1 level deep.
423
504
  aDependenciesForDefaults.push({
424
- source: mAttributeSection.defaultValue.substring(mAttributeSection.defaultValue.indexOf(":") + 1),
505
+ source: oDefault.value.substring(oDefault.value.indexOf(":") + 1),
425
506
  targetPath: sSection,
426
507
  targetAttribute: sAttribute,
427
508
  targetType: mAttributeSection.type
428
509
  });
429
- } else if (typeof mAttributeSection.defaultValue === "object" && mAttributeSection.defaultValue !== null) {
430
- oPropertySection[sAttribute] = merge({}, mAttributeSection.defaultValue);
510
+ } else if (typeof oDefault.value === "object") {
511
+ oPropertySection[sAttribute] = merge({}, oDefault.value);
431
512
  } else {
432
- oPropertySection[sAttribute] = mAttributeSection.defaultValue;
513
+ oPropertySection[sAttribute] = oDefault.value;
433
514
  }
434
515
  } else {
435
516
  oPropertySection[sAttribute] = getTypeDefault(mAttributeSection.type);
@@ -453,16 +534,33 @@ sap.ui.define([
453
534
  }
454
535
  }
455
536
 
537
+ function finalizeAttributeMetadata(mAttributeSection, sPath, bParentAllowedForComplexProperty) {
538
+ for (var sAttribute in mAttributeSection) {
539
+ var mAttribute = mAttributeSection[sAttribute];
540
+ var sAttributePath = sPath == null ? sAttribute : sPath + "." + sAttribute;
541
+
542
+ if (sPath === "extension") {
543
+ finalizeAttributeMetadata(mAttribute.type, sAttributePath);
544
+ continue;
545
+ }
546
+
547
+ if (bParentAllowedForComplexProperty && mAttribute.allowedForComplexProperty !== false) {
548
+ mAttribute.allowedForComplexProperty = true;
549
+ }
550
+
551
+ if (typeof mAttribute.type === "object") {
552
+ finalizeAttributeMetadata(mAttribute.type, sAttributePath, mAttribute.allowedForComplexProperty);
553
+ }
554
+ }
555
+ }
556
+
456
557
  function mergeExtensionsIntoProperties(aProperties, mExtensions) {
457
558
  var iMatchingExtensions = 0;
458
-
459
559
  mExtensions = mExtensions || {};
460
-
461
560
  for (var i = 0; i < aProperties.length; i++) {
462
561
  if ("extension" in aProperties[i]) {
463
562
  throwInvalidPropertyError("Property contains invalid attribute 'extension'.", aProperties[i]);
464
563
  }
465
-
466
564
  if (aProperties[i].name in mExtensions) {
467
565
  aProperties[i].extension = mExtensions[aProperties[i].name];
468
566
  iMatchingExtensions++;
@@ -470,18 +568,73 @@ sap.ui.define([
470
568
  aProperties[i].extension = {};
471
569
  }
472
570
  }
473
-
474
571
  if (iMatchingExtensions !== Object.keys(mExtensions).length) {
475
572
  throw new Error("At least one property extension does not point to an existing property.");
476
573
  }
477
574
  }
478
575
 
576
+ function _createPrivate(oInstance, oParent, aProperties, mExtensions, aAllowedAttributes, mExtensionAttributeMetadata) {
577
+ var mPrivate = {};
578
+ var mInstanceAttributeMetadata = aCommonAttributes.concat(aAllowedAttributes || []).reduce(function(mMetadata, sAttribute) {
579
+ if (sAttribute in mAttributeMetadata) {
580
+ mMetadata[sAttribute] = mAttributeMetadata[sAttribute];
581
+ }
582
+ return mMetadata;
583
+ }, Object.assign({}, oInstance._mExperimentalAdditionalAttributes));
584
+ if (mExtensionAttributeMetadata) {
585
+ mPrivate.mAttributeMetadata = Object.assign({
586
+ extension: {
587
+ type: mExtensionAttributeMetadata,
588
+ mandatory: true,
589
+ allowedForComplexProperty: true
590
+ }
591
+ }, mInstanceAttributeMetadata);
592
+ mPrivate.aMandatoryExtensionAttributes = Object.keys(mExtensionAttributeMetadata).filter(function(sAttribute) {
593
+ return mExtensionAttributeMetadata[sAttribute].mandatory;
594
+ });
595
+ } else {
596
+ mPrivate.mAttributeMetadata = mInstanceAttributeMetadata;
597
+ mPrivate.aMandatoryExtensionAttributes = [];
598
+ }
599
+
600
+ finalizeAttributeMetadata(mPrivate.mAttributeMetadata);
601
+
602
+ mPrivate.aMandatoryAttributes = Object.keys(mPrivate.mAttributeMetadata).filter(function(sAttribute) {
603
+ return mPrivate.mAttributeMetadata[sAttribute].mandatory;
604
+ });
605
+
606
+ var aClonedProperties = merge([], aProperties);
607
+ var mProperties = createPropertyMap(aClonedProperties);
608
+ if (mExtensionAttributeMetadata) {
609
+ mergeExtensionsIntoProperties(aClonedProperties, merge({}, mExtensions));
610
+ }
611
+
612
+ var oPreviousPrivate = _private.get(oInstance);
613
+ var aPreviousProperties = oPreviousPrivate && oPreviousPrivate.aRawProperties;
614
+ _private.set(oInstance, mPrivate);
615
+ oInstance.validateProperties(aClonedProperties, aPreviousProperties);
616
+
617
+
618
+ mPrivate.oParent = oParent || null;
619
+ mPrivate.aRawProperties = aProperties;
620
+ mPrivate.aProperties = aClonedProperties;
621
+ mPrivate.mProperties = mProperties;
622
+ mPrivate._ = {
623
+ mExtensions: mExtensions,
624
+ aAllowedAttributes: aAllowedAttributes,
625
+ mExtensionAttributeMetadata: mExtensionAttributeMetadata
626
+ };
627
+
628
+ enrichProperties(oInstance, aClonedProperties);
629
+ prepareProperties(oInstance, aClonedProperties);
630
+ }
631
+
479
632
  /**
480
633
  * Constructor for a new helper for the given properties.
481
634
  *
482
635
  * @param {object[]} aProperties
483
636
  * The properties to process in this helper
484
- * @param {object<string, object>} [mExtensions]
637
+ * @param {Object<string, object>} [mExtensions]
485
638
  * Key-value map, where the key is the name of the property and the value is the extension containing mode-specific information.
486
639
  * The extension of a property is stored in a reserved <code>extension</code> attribute and its attributes must be specified with
487
640
  * <code>mExtensionAttributeMetadata</code>.
@@ -502,7 +655,7 @@ sap.ui.define([
502
655
  * @extends sap.ui.base.Object
503
656
  *
504
657
  * @author SAP SE
505
- * @version 1.99.0
658
+ * @version 1.100.0
506
659
  *
507
660
  * @private
508
661
  * @experimental
@@ -525,7 +678,6 @@ sap.ui.define([
525
678
  throw new Error("Property extensions must be a plain object.");
526
679
  }
527
680
  }
528
-
529
681
  if (oParent && !BaseObject.isA(oParent, "sap.ui.base.ManagedObject")) {
530
682
  throw new Error("The type of the parent is invalid.");
531
683
  }
@@ -538,50 +690,7 @@ sap.ui.define([
538
690
  }.bind(this));
539
691
  }
540
692
 
541
- var mPrivate = {};
542
- var mInstanceAttributeMetadata = aCommonAttributes.concat(aAllowedAttributes || []).reduce(function(mMetadata, sAttribute) {
543
- if (sAttribute in mAttributeMetadata) {
544
- mMetadata[sAttribute] = mAttributeMetadata[sAttribute];
545
- }
546
- return mMetadata;
547
- }, Object.assign({}, this._mExperimentalAdditionalAttributes));
548
-
549
- if (mExtensionAttributeMetadata) {
550
- mPrivate.mAttributeMetadata = Object.assign({
551
- extension: {
552
- type: mExtensionAttributeMetadata,
553
- mandatory: true,
554
- allowedForComplexProperty: true
555
- }
556
- }, mInstanceAttributeMetadata);
557
- mPrivate.aMandatoryExtensionAttributes = Object.keys(mExtensionAttributeMetadata).filter(function(sAttribute) {
558
- return mExtensionAttributeMetadata[sAttribute].mandatory;
559
- });
560
- } else {
561
- mPrivate.mAttributeMetadata = mInstanceAttributeMetadata;
562
- mPrivate.aMandatoryExtensionAttributes = [];
563
- }
564
-
565
- mPrivate.aMandatoryAttributes = Object.keys(mPrivate.mAttributeMetadata).filter(function(sAttribute) {
566
- return mPrivate.mAttributeMetadata[sAttribute].mandatory;
567
- });
568
-
569
- var aClonedProperties = merge([], aProperties);
570
- var mProperties = createPropertyMap(aClonedProperties);
571
-
572
- if (mExtensionAttributeMetadata) {
573
- mergeExtensionsIntoProperties(aClonedProperties, merge({}, mExtensions));
574
- }
575
-
576
- _private.set(this, mPrivate);
577
- this.validateProperties(aClonedProperties);
578
-
579
- mPrivate.oParent = oParent || null;
580
- mPrivate.aProperties = aClonedProperties;
581
- mPrivate.mProperties = mProperties;
582
-
583
- enrichProperties(this, aClonedProperties);
584
- prepareProperties(this, aClonedProperties);
693
+ _createPrivate(this, oParent, aProperties, mExtensions, aAllowedAttributes, mExtensionAttributeMetadata);
585
694
  }
586
695
  });
587
696
 
@@ -593,14 +702,15 @@ sap.ui.define([
593
702
  * any method that tries to access them might not work as expected.
594
703
  *
595
704
  * @param {object[]} aProperties The properties to validate
705
+ * @param {object[]} [aPreviousProperties] The previous set of properties to validate against
596
706
  * @throws {Error} If the properties are invalid
597
707
  * @protected
598
708
  */
599
- PropertyHelper.prototype.validateProperties = function(aProperties) {
709
+ PropertyHelper.prototype.validateProperties = function(aProperties, aPreviousProperties) {
600
710
  var oUniquePropertiesSet = new Set();
601
711
 
602
712
  for (var i = 0; i < aProperties.length; i++) {
603
- this.validateProperty(aProperties[i], aProperties);
713
+ this.validateProperty(aProperties[i], aProperties, aPreviousProperties);
604
714
  oUniquePropertiesSet.add(aProperties[i].name);
605
715
  }
606
716
 
@@ -618,10 +728,11 @@ sap.ui.define([
618
728
  *
619
729
  * @param {object} oProperty The property to validate
620
730
  * @param {object[]} aProperties The entire array properties
731
+ * @param {object[]} [aPreviousProperties] The previous set of properties to validate against
621
732
  * @throws {Error} If the property is invalid
622
733
  * @protected
623
734
  */
624
- PropertyHelper.prototype.validateProperty = function(oProperty, aProperties) {
735
+ PropertyHelper.prototype.validateProperty = function(oProperty, aProperties, aPreviousProperties) {
625
736
  if (!isPlainObject(oProperty)) {
626
737
  throwInvalidPropertyError("Property info must be a plain object.", oProperty);
627
738
  }
@@ -641,7 +752,6 @@ sap.ui.define([
641
752
  throwInvalidPropertyError("Property does not contain mandatory attribute '" + sMandatoryAttribute + "'.", oProperty);
642
753
  }
643
754
  });
644
-
645
755
  _private.get(this).aMandatoryExtensionAttributes.forEach(function(sMandatoryAttribute) {
646
756
  if (!(sMandatoryAttribute in oProperty.extension)) {
647
757
  reportInvalidProperty("Property does not contain mandatory attribute 'extension." + sMandatoryAttribute + "'.", oProperty);
@@ -749,6 +859,21 @@ sap.ui.define([
749
859
  return oPrivate ? oPrivate.oParent : null;
750
860
  };
751
861
 
862
+
863
+ /**
864
+ * Sets all properties known to this helper.
865
+ *
866
+ * @param {object[]} aProperties The properties to process in this helper
867
+ * @returns {sap.ui.mdc.util.PropertyHelper} returns propertyhelper instance
868
+ * @public
869
+ * @since 1.100.0
870
+ */
871
+ PropertyHelper.prototype.setProperties = function (aProperties) {
872
+ var mPrivate = _private.get(this);
873
+ _createPrivate(this, mPrivate.oParent, aProperties, mPrivate._.mExtensions, mPrivate._.aAllowedAttributes, mPrivate._.mExtensionAttributeMetadata);
874
+ return this;
875
+ };
876
+
752
877
  /**
753
878
  * Gets all properties known to this helper.
754
879
  *
@@ -60,7 +60,7 @@ sap.ui.define([
60
60
  *
61
61
  * As default <code>string</code> is returned.
62
62
  *
63
- * @param {string} vType Given type string or sap.ui.model.SimpleType
63
+ * @param {string} sType Given type string or sap.ui.model.SimpleType
64
64
  * @param {object} oFormatOptions Used <code>FormatOptions</code>
65
65
  * @param {object} oConstraints Used <code>Constraints</code>
66
66
  * @returns {sap.ui.mdc.enum.BaseType} output <code>Date</code>, <code>DateTime</code> or <code>Time</code>...
@@ -37,7 +37,7 @@ sap.ui.define([
37
37
  * @param {object} [mSettings] Initial settings for the new control
38
38
  * @class Container for the <code>sap.ui.mdc.ValueHelp</code> element showing a dialog.
39
39
  * @extends sap.ui.mdc.valuehelp.base.Container
40
- * @version 1.99.0
40
+ * @version 1.100.0
41
41
  * @constructor
42
42
  * @abstract
43
43
  * @private
@@ -7,11 +7,13 @@
7
7
  sap.ui.define([
8
8
  'sap/ui/mdc/valuehelp/base/Container',
9
9
  'sap/ui/mdc/util/loadModules',
10
- "sap/ui/dom/units/Rem"
10
+ "sap/ui/dom/units/Rem",
11
+ "sap/ui/thirdparty/jquery"
11
12
  ], function(
12
13
  Container,
13
14
  loadModules,
14
- Rem
15
+ Rem,
16
+ jQuery
15
17
  ) {
16
18
  "use strict";
17
19
 
@@ -24,7 +26,7 @@ sap.ui.define([
24
26
  * @param {object} [mSettings] Initial settings for the new control
25
27
  * @class Container for the <code>sap.ui.mdc.ValueHelp</code> element showing a popover.
26
28
  * @extends sap.ui.mdc.valuehelp.base.Container
27
- * @version 1.99.0
29
+ * @version 1.100.0
28
30
  * @constructor
29
31
  * @abstract
30
32
  * @private
@@ -24,7 +24,7 @@ sap.ui.define([
24
24
  * @param {object} [mSettings] Initial settings for the new control
25
25
  * @class Container for the <code>ValueHelp</code> element.
26
26
  * @extends sap.ui.core.Element
27
- * @version 1.99.0
27
+ * @version 1.100.0
28
28
  * @constructor
29
29
  * @abstract
30
30
  * @private
@@ -32,7 +32,7 @@ sap.ui.define([
32
32
  * @param {object} [mSettings] Initial settings for the new control
33
33
  * @class Content for the <code>sap.ui.mdc.valuehelp.base.Container</code> element.
34
34
  * @extends sap.ui.core.Element
35
- * @version 1.99.0
35
+ * @version 1.100.0
36
36
  * @constructor
37
37
  * @abstract
38
38
  * @private
@@ -20,7 +20,7 @@ sap.ui.define([
20
20
  * @param {object} [mSettings] Initial settings for the new control
21
21
  * @class Content for the <code>sap.ui.mdc.valuehelp.content.Dialog</code> element.
22
22
  * @extends sap.ui.core.Control
23
- * @version 1.99.0
23
+ * @version 1.100.0
24
24
  * @constructor
25
25
  * @abstract
26
26
  * @private
@@ -34,7 +34,7 @@ sap.ui.define([
34
34
  * @param {object} [mSettings] Initial settings for the new control
35
35
  * @class Content for the <code>sap.ui.mdc.valuehelp.base.Container</code> element.
36
36
  * @extends sap.ui.mdc.valuehelp.base.ListContent
37
- * @version 1.99.0
37
+ * @version 1.100.0
38
38
  * @constructor
39
39
  * @abstract
40
40
  * @private
@@ -116,14 +116,14 @@ sap.ui.define([
116
116
  * FilterBar
117
117
  */
118
118
  filterBar: {
119
- type: "sap.ui.mdc.filterbar.FilterBarBase",
119
+ type: "sap.ui.mdc.filterbar.vh.FilterBar",
120
120
  multiple: false
121
121
  },
122
122
  /**
123
123
  * Default FilterBar, ceated internally if none given.
124
124
  */
125
125
  _defaultFilterBar: {
126
- type: "sap.ui.mdc.filterbar.FilterBarBase",
126
+ type: "sap.ui.mdc.filterbar.vh.FilterBar",
127
127
  multiple: false,
128
128
  visibility: "hidden"
129
129
  }
@@ -573,7 +573,7 @@ sap.ui.define([
573
573
  var oListBinding = this._getListBinding();
574
574
  var oDelegate = this._getValueHelpDelegate();
575
575
  var oDelegatePayload = this._getValueHelpDelegatePayload();
576
- bSearchSupported = oDelegate && oDelegate.isSearchSupported(oDelegatePayload, oListBinding);
576
+ bSearchSupported = oDelegate && oDelegate.isSearchSupported(oDelegatePayload, this, oListBinding);
577
577
  }
578
578
 
579
579
  return bSearchSupported;
@@ -20,7 +20,7 @@ sap.ui.define([
20
20
  * @param {object} [mSettings] Initial settings for the new control
21
21
  * @class Content for the <code>sap.ui.mdc.valuehelp.base.Container</code> element.
22
22
  * @extends sap.ui.mdc.valuehelp.base.Content
23
- * @version 1.99.0
23
+ * @version 1.100.0
24
24
  * @constructor
25
25
  * @abstract
26
26
  * @private
@@ -22,7 +22,7 @@ sap.ui.define([
22
22
  * @param {object} [mSettings] Initial settings for the new control
23
23
  * @class Content for the <code>sap.ui.mdc.valuehelp.base.Container</code> element to provide a value help for boolean fields.
24
24
  * @extends sap.ui.mdc.valuehelp.content.FixedList
25
- * @version 1.99.0
25
+ * @version 1.100.0
26
26
  * @constructor
27
27
  * @abstract
28
28
  * @private
@@ -25,7 +25,7 @@ sap.ui.define([
25
25
  * @param {object} [mSettings] Initial settings for the new control
26
26
  * @class Content for the <code>sap.ui.mdc.valuehelp.base.Container</code> element showing a condition panel.
27
27
  * @extends sap.ui.mdc.valuehelp.base.Content
28
- * @version 1.99.0
28
+ * @version 1.100.0
29
29
  * @constructor
30
30
  * @abstract
31
31
  * @private
@@ -8,14 +8,14 @@ sap.ui.define([
8
8
  "sap/ui/mdc/valuehelp/base/ListContent",
9
9
  "sap/ui/mdc/util/loadModules",
10
10
  "sap/ui/mdc/enum/ConditionValidated",
11
- "sap/ui/model/ParseException",
12
- "sap/ui/mdc/enum/SelectType"
11
+ "sap/ui/mdc/enum/SelectType",
12
+ "sap/ui/model/ParseException"
13
13
  ], function(
14
14
  ListContent,
15
15
  loadModules,
16
16
  ConditionValidated,
17
- ParseException,
18
- SelectType
17
+ SelectType,
18
+ ParseException
19
19
  ) {
20
20
  "use strict";
21
21
 
@@ -25,8 +25,8 @@ sap.ui.define([
25
25
  * @param {string} [sId] ID for the new control, generated automatically if no ID is given
26
26
  * @param {object} [mSettings] Initial settings for the new control
27
27
  * @class Content for the <code>sap.ui.mdc.valuehelp.base.Container</code> element showing a list with fix values.
28
- * @extends sap.ui.mdc.valuehelp.base.Content
29
- * @version 1.99.0
28
+ * @extends sap.ui.mdc.valuehelp.base.ListContent
29
+ * @version 1.100.0
30
30
  * @constructor
31
31
  * @abstract
32
32
  * @private
@@ -118,7 +118,8 @@ sap.ui.define([
118
118
  "sap/m/library",
119
119
  "sap/ui/model/Filter",
120
120
  "sap/ui/model/Sorter",
121
- "sap/ui/model/base/ManagedObjectModel"
121
+ "sap/ui/model/base/ManagedObjectModel",
122
+ "sap/base/strings/whitespaceReplacer"
122
123
  ]).then(function (aModules) {
123
124
  var List = aModules[0];
124
125
  var DisplayListItem = aModules[1];
@@ -126,13 +127,14 @@ sap.ui.define([
126
127
  var Filter = aModules[3];
127
128
  var Sorter = aModules[4];
128
129
  var ManagedObjectModel = aModules[5];
130
+ var whitespaceReplacer = aModules[6];
129
131
 
130
132
  this._oManagedObjectModel = new ManagedObjectModel(this);
131
133
 
132
134
  var oItemTemplate = new DisplayListItem(this.getId() + "-item", {
133
135
  type: mLibrary.ListType.Active,
134
- label: "{$help>text}",
135
- value: "{$help>additionalText}",
136
+ label: {path: "$help>text", formatter: whitespaceReplacer},
137
+ value: {path: "$help>additionalText", formatter: whitespaceReplacer},
136
138
  valueTextDirection: "{$help>textDirection}"
137
139
  }).addStyleClass("sapMComboBoxNonInteractiveItem"); // to add focus outline to selected items
138
140
 
@@ -445,6 +447,7 @@ sap.ui.define([
445
447
  if (oItem !== oSelectedItem || (bUseFirstMatch && !bLeaveFocus)) {
446
448
  var oOriginalItem = _getOriginalItem.call(this, oItem);
447
449
  var vKey = _getKey.call(this, oOriginalItem);
450
+ var sDescription = oOriginalItem.getText();
448
451
 
449
452
  if (this.getParent().isOpen()) {
450
453
  oList.scrollToIndex(iSelectedIndex); // only possible if open
@@ -453,7 +456,7 @@ sap.ui.define([
453
456
  }
454
457
 
455
458
  oItem.setSelected(true);
456
- var oCondition = _setConditions.call(this, vKey, oItem.getLabel());
459
+ var oCondition = _setConditions.call(this, vKey, sDescription);
457
460
  this.fireNavigated({condition: oCondition, itemId: oItem.getId(), leaveFocus: false});
458
461
  } else if (bLeaveFocus) {
459
462
  this.fireNavigated({condition: undefined, itemId: undefined, leaveFocus: bLeaveFocus});