@sapui5/sap.fe.core 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 (246) hide show
  1. package/package.json +4 -2
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AnnotationHelper.js +1 -69
  4. package/src/sap/fe/core/AnnotationHelper.ts +0 -70
  5. package/src/sap/fe/core/AppComponent.js +388 -399
  6. package/src/sap/fe/core/AppComponent.ts +403 -0
  7. package/src/sap/fe/core/AppStateHandler.js +127 -158
  8. package/src/sap/fe/core/BaseController.js +82 -58
  9. package/src/sap/fe/core/BaseController.ts +68 -0
  10. package/src/sap/fe/core/CommonUtils.js +111 -20
  11. package/src/sap/fe/core/CommonUtils.ts +131 -32
  12. package/src/sap/fe/core/ExtensionAPI.js +278 -274
  13. package/src/sap/fe/core/ExtensionAPI.ts +250 -0
  14. package/src/sap/fe/core/PageController.js +157 -29
  15. package/src/sap/fe/core/PageController.ts +60 -32
  16. package/src/sap/fe/core/RouterProxy.js +694 -756
  17. package/src/sap/fe/core/RouterProxy.ts +11 -9
  18. package/src/sap/fe/core/Synchronization.js +21 -31
  19. package/src/sap/fe/core/TemplateComponent.js +1 -1
  20. package/src/sap/fe/core/TemplateComponent.ts +10 -3
  21. package/src/sap/fe/core/TemplateModel.js +20 -38
  22. package/src/sap/fe/core/TemplateModel.ts +1 -1
  23. package/src/sap/fe/core/TransactionHelper.js +1354 -1370
  24. package/src/sap/fe/core/TransactionHelper.ts +33 -22
  25. package/src/sap/fe/core/actions/collaboration/ActivitySync.js +392 -0
  26. package/src/sap/fe/core/actions/collaboration/ActivitySync.ts +355 -0
  27. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +136 -0
  28. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.ts +119 -0
  29. package/src/sap/fe/core/actions/collaboration/Manage.js +262 -0
  30. package/src/sap/fe/core/actions/collaboration/Manage.ts +244 -0
  31. package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +103 -0
  32. package/src/sap/fe/core/actions/collaboration/UserDetails.fragment.xml +13 -0
  33. package/src/sap/fe/core/actions/draft.js +30 -68
  34. package/src/sap/fe/core/actions/draft.ts +44 -71
  35. package/src/sap/fe/core/actions/messageHandling.js +55 -36
  36. package/src/sap/fe/core/actions/messageHandling.ts +66 -46
  37. package/src/sap/fe/core/actions/operations.js +34 -15
  38. package/src/sap/fe/core/actions/operations.ts +48 -18
  39. package/src/sap/fe/core/actions/sticky.js +17 -4
  40. package/src/sap/fe/core/actions/sticky.ts +21 -4
  41. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +69 -66
  42. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +65 -0
  43. package/src/sap/fe/core/controllerextensions/EditFlow.js +1593 -1669
  44. package/src/sap/fe/core/controllerextensions/EditFlow.ts +1672 -0
  45. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +79 -54
  46. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +61 -0
  47. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +718 -779
  48. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +783 -0
  49. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +796 -816
  50. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +803 -0
  51. package/src/sap/fe/core/controllerextensions/InternalRouting.js +1004 -1005
  52. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +978 -0
  53. package/src/sap/fe/core/controllerextensions/KPIManagement.js +487 -521
  54. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +2 -2
  55. package/src/sap/fe/core/controllerextensions/MassEdit.js +141 -169
  56. package/src/sap/fe/core/controllerextensions/MassEdit.ts +156 -0
  57. package/src/sap/fe/core/controllerextensions/MessageHandler.js +233 -244
  58. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +225 -0
  59. package/src/sap/fe/core/controllerextensions/PageReady.js +301 -336
  60. package/src/sap/fe/core/controllerextensions/PageReady.ts +12 -10
  61. package/src/sap/fe/core/controllerextensions/Paginator.js +188 -175
  62. package/src/sap/fe/core/controllerextensions/Paginator.ts +163 -0
  63. package/src/sap/fe/core/controllerextensions/Placeholder.js +157 -149
  64. package/src/sap/fe/core/controllerextensions/Placeholder.ts +151 -0
  65. package/src/sap/fe/core/controllerextensions/Routing.js +144 -125
  66. package/src/sap/fe/core/controllerextensions/Routing.ts +132 -0
  67. package/src/sap/fe/core/controllerextensions/RoutingListener.js +7 -6
  68. package/src/sap/fe/core/controllerextensions/RoutingListener.ts +3 -0
  69. package/src/sap/fe/core/controllerextensions/Share.js +230 -268
  70. package/src/sap/fe/core/controllerextensions/Share.ts +231 -0
  71. package/src/sap/fe/core/controllerextensions/SideEffects.js +592 -633
  72. package/src/sap/fe/core/controllerextensions/SideEffects.ts +8 -7
  73. package/src/sap/fe/core/controllerextensions/ViewState.js +788 -806
  74. package/src/sap/fe/core/controllerextensions/ViewState.ts +805 -0
  75. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -2
  76. package/src/sap/fe/core/controls/ActionPartial.fragment.xml +2 -2
  77. package/src/sap/fe/core/controls/CommandExecution.js +67 -66
  78. package/src/sap/fe/core/controls/CommandExecution.ts +72 -0
  79. package/src/sap/fe/core/controls/ConditionalWrapper.js +90 -75
  80. package/src/sap/fe/core/controls/ConditionalWrapper.ts +83 -0
  81. package/src/sap/fe/core/controls/CustomQuickViewPage.js +130 -125
  82. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +126 -0
  83. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +103 -112
  84. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +101 -0
  85. package/src/sap/fe/core/controls/FieldWrapper.js +122 -135
  86. package/src/sap/fe/core/controls/FieldWrapper.ts +115 -0
  87. package/src/sap/fe/core/controls/FilterBar.js +162 -159
  88. package/src/sap/fe/core/controls/FilterBar.ts +143 -0
  89. package/src/sap/fe/core/controls/FormElementWrapper.js +45 -39
  90. package/src/sap/fe/core/controls/FormElementWrapper.ts +40 -0
  91. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +37 -42
  92. package/src/sap/fe/core/controls/MultiValueParameterDelegate.ts +31 -0
  93. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +126 -116
  94. package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +98 -0
  95. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +241 -255
  96. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +245 -0
  97. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +150 -141
  98. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +125 -0
  99. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +335 -322
  100. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +337 -0
  101. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +74 -74
  102. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +70 -0
  103. package/src/sap/fe/core/converters/ConverterContext.js +348 -379
  104. package/src/sap/fe/core/converters/ConverterContext.ts +19 -16
  105. package/src/sap/fe/core/converters/ManifestSettings.js +12 -1
  106. package/src/sap/fe/core/converters/ManifestSettings.ts +12 -1
  107. package/src/sap/fe/core/converters/ManifestWrapper.js +354 -378
  108. package/src/sap/fe/core/converters/ManifestWrapper.ts +10 -0
  109. package/src/sap/fe/core/converters/MetaModelConverter.js +6 -4
  110. package/src/sap/fe/core/converters/MetaModelConverter.ts +5 -2
  111. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  112. package/src/sap/fe/core/converters/TemplateConverter.ts +2 -1
  113. package/src/sap/fe/core/converters/annotations/DataField.js +26 -12
  114. package/src/sap/fe/core/converters/annotations/DataField.ts +37 -13
  115. package/src/sap/fe/core/converters/controls/Common/Form.js +2 -2
  116. package/src/sap/fe/core/converters/controls/Common/Form.ts +4 -2
  117. package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
  118. package/src/sap/fe/core/converters/controls/Common/KPI.ts +3 -2
  119. package/src/sap/fe/core/converters/controls/Common/Table.js +130 -23
  120. package/src/sap/fe/core/converters/controls/Common/Table.ts +134 -29
  121. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +118 -53
  122. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +156 -93
  123. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +161 -207
  124. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +148 -206
  125. package/src/sap/fe/core/converters/helpers/Aggregation.js +115 -133
  126. package/src/sap/fe/core/converters/helpers/BindingHelper.js +20 -6
  127. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +16 -4
  128. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +12 -1
  129. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +11 -0
  130. package/src/sap/fe/core/converters/helpers/Key.js +42 -57
  131. package/src/sap/fe/core/converters/helpers/Key.ts +1 -1
  132. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +25 -4
  133. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +20 -3
  134. package/src/sap/fe/core/converters/templates/ListReportConverter.js +10 -4
  135. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +15 -4
  136. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +7 -5
  137. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +5 -1
  138. package/src/sap/fe/core/designtime/AppComponent.designtime.js +92 -98
  139. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +91 -0
  140. package/src/sap/fe/core/formatters/CollaborationFormatter.js +104 -0
  141. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +60 -0
  142. package/src/sap/fe/core/formatters/TableFormatter.js +53 -2
  143. package/src/sap/fe/core/formatters/TableFormatter.ts +51 -0
  144. package/src/sap/fe/core/fpm/Component.js +50 -54
  145. package/src/sap/fe/core/fpm/Component.ts +48 -0
  146. package/src/sap/fe/core/helpers/AppStartupHelper.js +323 -309
  147. package/src/sap/fe/core/helpers/AppStartupHelper.ts +363 -337
  148. package/src/sap/fe/core/helpers/BindingExpression.js +7 -7
  149. package/src/sap/fe/core/helpers/BindingExpression.ts +7 -7
  150. package/src/sap/fe/core/helpers/ClassSupport.js +186 -62
  151. package/src/sap/fe/core/helpers/ClassSupport.ts +168 -52
  152. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +5 -4
  153. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -5
  154. package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
  155. package/src/sap/fe/core/helpers/FPMHelper.ts +1 -1
  156. package/src/sap/fe/core/helpers/MassEditHelper.js +601 -684
  157. package/src/sap/fe/core/helpers/MassEditHelper.ts +699 -0
  158. package/src/sap/fe/core/helpers/ModelHelper.js +25 -1
  159. package/src/sap/fe/core/helpers/ModelHelper.ts +23 -0
  160. package/src/sap/fe/core/helpers/SemanticDateOperators.js +5 -1
  161. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +4 -0
  162. package/src/sap/fe/core/library.js +426 -451
  163. package/src/sap/fe/core/library.support.js +22 -33
  164. package/src/sap/fe/core/library.support.ts +23 -0
  165. package/src/sap/fe/core/library.ts +420 -0
  166. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +5 -3
  167. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +4 -1
  168. package/src/sap/fe/core/messagebundle.properties +22 -5
  169. package/src/sap/fe/core/messagebundle_ar.properties +27 -7
  170. package/src/sap/fe/core/messagebundle_bg.properties +27 -7
  171. package/src/sap/fe/core/messagebundle_ca.properties +27 -7
  172. package/src/sap/fe/core/messagebundle_cs.properties +27 -7
  173. package/src/sap/fe/core/messagebundle_cy.properties +27 -7
  174. package/src/sap/fe/core/messagebundle_da.properties +27 -7
  175. package/src/sap/fe/core/messagebundle_de.properties +27 -7
  176. package/src/sap/fe/core/messagebundle_el.properties +27 -7
  177. package/src/sap/fe/core/messagebundle_en.properties +27 -7
  178. package/src/sap/fe/core/messagebundle_en_GB.properties +27 -7
  179. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +27 -7
  180. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +27 -7
  181. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +27 -7
  182. package/src/sap/fe/core/messagebundle_es.properties +27 -7
  183. package/src/sap/fe/core/messagebundle_es_MX.properties +27 -7
  184. package/src/sap/fe/core/messagebundle_et.properties +27 -7
  185. package/src/sap/fe/core/messagebundle_fi.properties +28 -8
  186. package/src/sap/fe/core/messagebundle_fr.properties +28 -8
  187. package/src/sap/fe/core/messagebundle_fr_CA.properties +29 -9
  188. package/src/sap/fe/core/messagebundle_hi.properties +27 -7
  189. package/src/sap/fe/core/messagebundle_hr.properties +27 -7
  190. package/src/sap/fe/core/messagebundle_hu.properties +27 -7
  191. package/src/sap/fe/core/messagebundle_id.properties +27 -7
  192. package/src/sap/fe/core/messagebundle_it.properties +27 -7
  193. package/src/sap/fe/core/messagebundle_iw.properties +27 -7
  194. package/src/sap/fe/core/messagebundle_ja.properties +26 -6
  195. package/src/sap/fe/core/messagebundle_kk.properties +27 -7
  196. package/src/sap/fe/core/messagebundle_ko.properties +27 -7
  197. package/src/sap/fe/core/messagebundle_lt.properties +27 -7
  198. package/src/sap/fe/core/messagebundle_lv.properties +28 -8
  199. package/src/sap/fe/core/messagebundle_ms.properties +27 -7
  200. package/src/sap/fe/core/messagebundle_nl.properties +27 -7
  201. package/src/sap/fe/core/messagebundle_no.properties +27 -7
  202. package/src/sap/fe/core/messagebundle_pl.properties +27 -7
  203. package/src/sap/fe/core/messagebundle_pt.properties +28 -8
  204. package/src/sap/fe/core/messagebundle_pt_PT.properties +27 -7
  205. package/src/sap/fe/core/messagebundle_ro.properties +27 -7
  206. package/src/sap/fe/core/messagebundle_ru.properties +27 -7
  207. package/src/sap/fe/core/messagebundle_sh.properties +27 -7
  208. package/src/sap/fe/core/messagebundle_sk.properties +27 -7
  209. package/src/sap/fe/core/messagebundle_sl.properties +27 -7
  210. package/src/sap/fe/core/messagebundle_sv.properties +27 -7
  211. package/src/sap/fe/core/messagebundle_th.properties +26 -6
  212. package/src/sap/fe/core/messagebundle_tr.properties +30 -10
  213. package/src/sap/fe/core/messagebundle_uk.properties +27 -7
  214. package/src/sap/fe/core/messagebundle_vi.properties +27 -7
  215. package/src/sap/fe/core/messagebundle_zh_CN.properties +27 -7
  216. package/src/sap/fe/core/messagebundle_zh_TW.properties +27 -7
  217. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +45 -71
  218. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +154 -192
  219. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +4 -4
  220. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +66 -92
  221. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +1 -1
  222. package/src/sap/fe/core/services/NavigationServiceFactory.js +284 -339
  223. package/src/sap/fe/core/services/NavigationServiceFactory.ts +10 -13
  224. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +67 -102
  225. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +5 -2
  226. package/src/sap/fe/core/services/RoutingServiceFactory.js +754 -814
  227. package/src/sap/fe/core/services/RoutingServiceFactory.ts +13 -13
  228. package/src/sap/fe/core/services/ShellServicesFactory.js +649 -736
  229. package/src/sap/fe/core/services/ShellServicesFactory.ts +7 -4
  230. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +567 -592
  231. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +22 -3
  232. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +354 -386
  233. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +21 -14
  234. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +1 -1
  235. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +1 -1
  236. package/src/sap/fe/core/support/CommonHelper.js +1 -1
  237. package/src/sap/fe/core/support/CommonHelper.ts +1 -1
  238. package/src/sap/fe/core/support/Diagnostics.js +36 -48
  239. package/src/sap/fe/core/templating/DataModelPathHelper.js +93 -85
  240. package/src/sap/fe/core/templating/DataModelPathHelper.ts +104 -95
  241. package/src/sap/fe/core/templating/FilterHelper.js +25 -32
  242. package/src/sap/fe/core/templating/FilterHelper.ts +36 -35
  243. package/src/sap/fe/core/templating/PropertyHelper.js +2 -2
  244. package/src/sap/fe/core/templating/PropertyHelper.ts +1 -1
  245. package/src/sap/fe/core/templating/UIFormatters.js +32 -26
  246. package/src/sap/fe/core/templating/UIFormatters.ts +37 -24
@@ -0,0 +1,115 @@
1
+ import Control from "sap/ui/core/Control";
2
+
3
+ export type FieldWrapperType = Control & {
4
+ getEditMode(): string;
5
+ getContentDisplay(): Control;
6
+ getContentEdit(): Control[];
7
+ getAriaLabelledBy(): Control[];
8
+ _setAriaLabelledBy(oControl: Control): void;
9
+ };
10
+ const FieldWrapper = Control.extend("sap.fe.core.controls.FieldWrapper", {
11
+ metadata: {
12
+ interfaces: ["sap.ui.core.IFormContent"],
13
+ properties: {
14
+ textAlign: {
15
+ type: "sap.ui.core.TextAlign"
16
+ },
17
+ width: {
18
+ type: "sap.ui.core.CSSSize",
19
+ defaultValue: null
20
+ },
21
+ formDoNotAdjustWidth: {
22
+ type: "boolean",
23
+ defaultValue: false
24
+ },
25
+ editMode: {
26
+ type: "string",
27
+ defaultValue: "Display"
28
+ },
29
+ required: {
30
+ type: "boolean",
31
+ defaultValue: false
32
+ }
33
+ },
34
+ associations: {
35
+ /**
36
+ * Association to controls / IDs that label this control (see WAI-ARIA attribute aria-labelledby).
37
+ */
38
+ ariaLabelledBy: { type: "sap.ui.core.Control", multiple: true, singularName: "ariaLabelledBy" }
39
+ },
40
+ defaultAggregation: "contentDisplay",
41
+ aggregations: {
42
+ contentDisplay: { type: "sap.ui.core.Control", multiple: false },
43
+ contentEdit: { type: "sap.ui.core.Control", multiple: true }
44
+ }
45
+ },
46
+ enhanceAccessibilityState: function(oElement: any, mAriaProps: any) {
47
+ const oParent = this.getParent() as any;
48
+
49
+ if (oParent && oParent.enhanceAccessibilityState) {
50
+ // use FieldWrapper as control, but aria properties of rendered inner control.
51
+ oParent.enhanceAccessibilityState(this, mAriaProps);
52
+ }
53
+
54
+ return mAriaProps;
55
+ },
56
+ getAccessibilityInfo: function(this: FieldWrapperType) {
57
+ let oContent;
58
+ if (this.getEditMode() === "Display") {
59
+ oContent = this.getContentDisplay();
60
+ } else {
61
+ oContent = this.getContentEdit().length ? this.getContentEdit()[0] : null;
62
+ }
63
+ return oContent && oContent.getAccessibilityInfo ? oContent.getAccessibilityInfo() : {};
64
+ },
65
+
66
+ _setAriaLabelledBy: function(this: FieldWrapperType, oContent: any) {
67
+ if (oContent && oContent.addAriaLabelledBy) {
68
+ const aAriaLabelledBy = this.getAriaLabelledBy();
69
+
70
+ for (let i = 0; i < aAriaLabelledBy.length; i++) {
71
+ const sId = aAriaLabelledBy[i];
72
+ const aAriaLabelledBys = oContent.getAriaLabelledBy() || [];
73
+ if (aAriaLabelledBys.indexOf(sId) === -1) {
74
+ oContent.addAriaLabelledBy(sId);
75
+ }
76
+ }
77
+ }
78
+ },
79
+ onBeforeRendering: function(this: FieldWrapperType) {
80
+ // before calling the renderer of the FieldWrapper parent control may have set ariaLabelledBy
81
+ // we ensure it is passed to its inner controls
82
+ this._setAriaLabelledBy(this.getContentDisplay());
83
+ const aContentEdit = this.getContentEdit();
84
+ for (let i = 0; i < aContentEdit.length; i++) {
85
+ this._setAriaLabelledBy(aContentEdit[i]);
86
+ }
87
+ },
88
+ renderer: {
89
+ apiVersion: 2,
90
+ render: function(oRm: any, oControl: any) {
91
+ oRm.openStart("div", oControl);
92
+ oRm.style("text-align", oControl.getTextAlign());
93
+ if (oControl.getEditMode() === "Display") {
94
+ oRm.style("width", oControl.getWidth());
95
+ oRm.openEnd();
96
+ oRm.renderControl(oControl.getContentDisplay()); // render the child Control for display
97
+ } else {
98
+ const aContentEdit = oControl.getContentEdit();
99
+
100
+ // if (aContentEdit.length > 1) {
101
+ // oRm.class("sapUiMdcFieldBaseMoreFields");
102
+ // }
103
+ oRm.style("width", oControl.getWidth());
104
+ oRm.openEnd();
105
+ for (let i = 0; i < aContentEdit.length; i++) {
106
+ const oContent = aContentEdit[i]; // render the child Control for edit
107
+ oRm.renderControl(oContent);
108
+ }
109
+ }
110
+ oRm.close("div"); // end of the complete Control
111
+ }
112
+ }
113
+ });
114
+
115
+ export default FieldWrapper;
@@ -1,162 +1,165 @@
1
1
  /*!
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
- (c) Copyright 2009-2021 SAP SE. All rights reserved
4
-
3
+ * (c) Copyright 2009-2021 SAP SE. All rights reserved
5
4
  */
6
- sap.ui.define(
7
- [
8
- "sap/ui/mdc/FilterBar",
9
- "sap/ui/mdc/filterbar/FilterBarBaseRenderer",
10
- "sap/ui/mdc/filterbar/aligned/FilterItemLayout",
11
- "sap/fe/core/controls/filterbar/VisualFilterContainer",
12
- "sap/fe/core/controls/filterbar/FilterContainer"
13
- ],
14
- function(MdcFilterBar, FilterBarBaseRenderer, FilterItemLayout, VisualFilterContainer, FilterContainer) {
15
- "use strict";
16
- var FilterBar = MdcFilterBar.extend("sap.fe.core.controls.FilterBar", {
17
- metadata: {
18
- properties: {
19
- initialLayout: {
20
- type: "string",
21
- defaultValue: "compact"
22
- }
23
- },
24
- associations: {
25
- /**
26
- * Control which allows for switching between visual and normal filter layouts
27
- */
28
- toggleControl: {
29
- type: "sap.m.SegmentedButton",
30
- multiple: false
31
- }
32
- }
33
- },
34
- renderer: FilterBarBaseRenderer
35
- });
36
-
37
- FilterBar.prototype.setToggleControl = function(vToggle) {
38
- if (typeof vToggle === "string") {
39
- this._oSegmentedButton = sap.ui.getCore().byId(vToggle);
40
- } else {
41
- this._oSegmentedButton = vToggle;
42
- }
43
-
44
- if (this.getToggleControl() && this._oSegmentedButton) {
45
- this._oSegmentedButton.detachEvent("select", this._toggleLayout.bind(this));
46
- }
47
- if (this._oSegmentedButton) {
48
- this._oSegmentedButton.attachEvent("select", this._toggleLayout.bind(this));
49
- }
50
- this.setAssociation("toggleControl", vToggle, true);
51
- };
52
-
53
- FilterBar.prototype._toggleLayout = function() {
54
- // Since primary layout is always compact
55
- // hence set the secondary layout as visual filter only for the first time only
56
- if (!this._oSecondaryFilterBarLayout) {
57
- this._oSecondaryFilterBarLayout = new VisualFilterContainer();
58
- }
59
-
60
- // do not show Adapt Filters Button for visual layout
61
- if (this._oSecondaryFilterBarLayout.isA("sap.fe.core.controls.filterbar.VisualFilterContainer")) {
62
- this.setShowAdaptFiltersButton(false);
63
- } else {
64
- this.setShowAdaptFiltersButton(true);
65
- }
66
-
67
- // get all filter fields and button of the current layout
68
- var oCurrentFilterBarLayout = this._oFilterBarLayout;
69
- var oFilterItems = this.getFilterItems();
70
- var aFilterFields = oCurrentFilterBarLayout.getAllFilterFields();
71
- var aSortedFilterFields = this.getSortedFilterFields(oFilterItems, aFilterFields);
72
- var aButtons = oCurrentFilterBarLayout.getAllButtons();
73
- var aVisualFilterFields =
74
- oCurrentFilterBarLayout.getAllVisualFilterFields && oCurrentFilterBarLayout.getAllVisualFilterFields();
75
- if (this._oSecondaryFilterBarLayout.isA("sap.fe.core.controls.filterbar.VisualFilterContainer")) {
76
- this._oSecondaryFilterBarLayout.setAllFilterFields(aSortedFilterFields, aVisualFilterFields);
77
- }
78
- // use secondary filter bar layout as new layout
79
- this._oFilterBarLayout = this._oSecondaryFilterBarLayout;
80
-
81
- // insert all filter fields from current layout to new layout
82
- var that = this;
83
- aFilterFields.forEach(function(oFilterField, iIndex) {
84
- oCurrentFilterBarLayout.removeFilterField(oFilterField);
85
- that._oFilterBarLayout.insertFilterField(oFilterField, iIndex);
86
- });
87
- // insert all buttons from the current layout to the new layout
88
- aButtons.forEach(function(oButton) {
89
- oCurrentFilterBarLayout.removeButton(oButton);
90
- that._oFilterBarLayout.addButton(oButton);
91
- });
92
-
93
- // set the current filter bar layout to the secondary one
94
- this._oSecondaryFilterBarLayout = oCurrentFilterBarLayout;
95
-
96
- // update the layout aggregation of the filter bar and rerender the same.
97
- this.setAggregation("layout", that._oFilterBarLayout, true);
98
- this._oFilterBarLayout.rerender();
99
- };
100
-
101
- FilterBar.prototype.getSortedFilterFields = function(aFilterItems, aFilterFields) {
102
- var aFilterIds = [];
103
- aFilterItems.forEach(function(oFilterItem) {
104
- aFilterIds.push(oFilterItem.getId());
105
- });
106
- aFilterFields.sort(function(aFirstItem, aSecondItem) {
107
- var sFirstItemVFId, sSecondItemVFId;
108
- aFirstItem.getContent().forEach(function(oInnerControl) {
109
- if (oInnerControl.isA("sap.ui.mdc.FilterField")) {
110
- sFirstItemVFId = oInnerControl.getId();
111
- }
112
- });
113
- aSecondItem.getContent().forEach(function(oInnerControl) {
114
- if (oInnerControl.isA("sap.ui.mdc.FilterField")) {
115
- sSecondItemVFId = oInnerControl.getId();
116
- }
117
- });
118
- return aFilterIds.indexOf(sFirstItemVFId) - aFilterIds.indexOf(sSecondItemVFId);
119
- });
120
- return aFilterFields;
121
- };
122
-
123
- FilterBar.prototype._createInnerLayout = function() {
124
- this._oFilterBarLayout = new FilterContainer();
125
- this._cLayoutItem = FilterItemLayout;
126
- this._oFilterBarLayout.getInner().addStyleClass("sapUiMdcFilterBarBaseAFLayout");
127
- this._addButtons();
128
-
129
- // TODO: Check with MDC if there is a better way to load visual filter on the basis of control property
130
- // _createInnerLayout is called on Init by the filter bar base.
131
- // This mean that we do not have access to the control properties yet
132
- // and hence we cannot decide on the basis of control properties whether initial layout should be compact or visual
133
- // As a result we have to do this workaround to always load the compact layout by default
134
- // And toogle the same in case the initialLayout was supposed to be visual filters.
135
- var oInnerLayout = this._oFilterBarLayout.getInner(),
136
- that = this;
137
- var oFilterContainerInnerLayoutEventDelegate = {
138
- onBeforeRendering: function() {
139
- if (that.getInitialLayout() === "visual") {
140
- that._toggleLayout();
141
- }
142
- oInnerLayout.removeEventDelegate(oFilterContainerInnerLayoutEventDelegate);
143
- }
144
- };
145
- oInnerLayout.addEventDelegate(oFilterContainerInnerLayoutEventDelegate);
146
-
147
- this.setAggregation("layout", this._oFilterBarLayout, true);
148
- };
149
-
150
- FilterBar.prototype.exit = function() {
151
- MdcFilterBar.prototype.exit.apply(this, arguments);
152
- // Sometimes upon external navigation this._SegmentedButton is already destroyed
153
- // so check if it exists and then only remove stuff
154
- if (this._oSegmentedButton) {
155
- this._oSegmentedButton.detachEvent("select", this._toggleLayout);
156
- delete this._oSegmentedButton;
157
- }
158
- };
159
-
160
- return FilterBar;
161
- }
162
- );
5
+ sap.ui.define(["sap/ui/mdc/FilterBar", "sap/ui/mdc/filterbar/aligned/FilterItemLayout", "sap/fe/core/controls/filterbar/VisualFilterContainer", "sap/fe/core/controls/filterbar/FilterContainer"], function (MdcFilterBar, FilterItemLayout, VisualFilterContainer, FilterContainer) {
6
+ "use strict";
7
+
8
+ var FilterBar = MdcFilterBar.extend("sap.fe.core.controls.FilterBar", {
9
+ metadata: {
10
+ properties: {
11
+ initialLayout: {
12
+ type: "string",
13
+ defaultValue: "compact"
14
+ }
15
+ },
16
+ associations: {
17
+ /**
18
+ * Control which allows for switching between visual and normal filter layouts
19
+ */
20
+ toggleControl: {
21
+ type: "sap.m.SegmentedButton",
22
+ multiple: false
23
+ }
24
+ }
25
+ },
26
+ renderer: {
27
+ apiVersion: 2
28
+ }
29
+ });
30
+
31
+ FilterBar.prototype.setToggleControl = function (vToggle) {
32
+ if (typeof vToggle === "string") {
33
+ this._oSegmentedButton = sap.ui.getCore().byId(vToggle);
34
+ } else {
35
+ this._oSegmentedButton = vToggle;
36
+ }
37
+
38
+ if (this.getToggleControl() && this._oSegmentedButton) {
39
+ this._oSegmentedButton.detachEvent("select", this._toggleLayout.bind(this));
40
+ }
41
+
42
+ if (this._oSegmentedButton) {
43
+ this._oSegmentedButton.attachEvent("select", this._toggleLayout.bind(this));
44
+ }
45
+
46
+ this.setAssociation("toggleControl", vToggle, true);
47
+ };
48
+
49
+ FilterBar.prototype._toggleLayout = function () {
50
+ var _this = this;
51
+
52
+ // Since primary layout is always compact
53
+ // hence set the secondary layout as visual filter only for the first time only
54
+ if (!this._oSecondaryFilterBarLayout) {
55
+ this._oSecondaryFilterBarLayout = new VisualFilterContainer();
56
+ } // do not show Adapt Filters Button for visual layout
57
+
58
+
59
+ if (this._oSecondaryFilterBarLayout.isA("sap.fe.core.controls.filterbar.VisualFilterContainer")) {
60
+ this.setShowAdaptFiltersButton(false);
61
+ } else {
62
+ this.setShowAdaptFiltersButton(true);
63
+ } // get all filter fields and button of the current layout
64
+
65
+
66
+ var oCurrentFilterBarLayout = this._oFilterBarLayout;
67
+ var oFilterItems = this.getFilterItems();
68
+ var aFilterFields = oCurrentFilterBarLayout.getAllFilterFields();
69
+ var aSortedFilterFields = this.getSortedFilterFields(oFilterItems, aFilterFields);
70
+ var aButtons = oCurrentFilterBarLayout.getAllButtons();
71
+ var aVisualFilterFields = oCurrentFilterBarLayout.getAllVisualFilterFields && oCurrentFilterBarLayout.getAllVisualFilterFields();
72
+
73
+ if (this._oSecondaryFilterBarLayout.isA("sap.fe.core.controls.filterbar.VisualFilterContainer")) {
74
+ this._oSecondaryFilterBarLayout.setAllFilterFields(aSortedFilterFields, aVisualFilterFields);
75
+ } // use secondary filter bar layout as new layout
76
+
77
+
78
+ this._oFilterBarLayout = this._oSecondaryFilterBarLayout; // insert all filter fields from current layout to new layout
79
+
80
+ aFilterFields.forEach(function (oFilterField, iIndex) {
81
+ oCurrentFilterBarLayout.removeFilterField(oFilterField);
82
+
83
+ _this._oFilterBarLayout.insertFilterField(oFilterField, iIndex);
84
+ }); // insert all buttons from the current layout to the new layout
85
+
86
+ aButtons.forEach(function (oButton) {
87
+ oCurrentFilterBarLayout.removeButton(oButton);
88
+
89
+ _this._oFilterBarLayout.addButton(oButton);
90
+ }); // set the current filter bar layout to the secondary one
91
+
92
+ this._oSecondaryFilterBarLayout = oCurrentFilterBarLayout; // update the layout aggregation of the filter bar and rerender the same.
93
+
94
+ this.setAggregation("layout", this._oFilterBarLayout, true);
95
+
96
+ this._oFilterBarLayout.rerender();
97
+ };
98
+
99
+ FilterBar.prototype.getSortedFilterFields = function (aFilterItems, aFilterFields) {
100
+ var aFilterIds = [];
101
+ aFilterItems.forEach(function (oFilterItem) {
102
+ aFilterIds.push(oFilterItem.getId());
103
+ });
104
+ aFilterFields.sort(function (aFirstItem, aSecondItem) {
105
+ var sFirstItemVFId, sSecondItemVFId;
106
+ aFirstItem.getContent().forEach(function (oInnerControl) {
107
+ if (oInnerControl.isA("sap.ui.mdc.FilterField")) {
108
+ sFirstItemVFId = oInnerControl.getId();
109
+ }
110
+ });
111
+ aSecondItem.getContent().forEach(function (oInnerControl) {
112
+ if (oInnerControl.isA("sap.ui.mdc.FilterField")) {
113
+ sSecondItemVFId = oInnerControl.getId();
114
+ }
115
+ });
116
+ return aFilterIds.indexOf(sFirstItemVFId) - aFilterIds.indexOf(sSecondItemVFId);
117
+ });
118
+ return aFilterFields;
119
+ };
120
+
121
+ FilterBar.prototype._createInnerLayout = function () {
122
+ var _this2 = this;
123
+
124
+ this._oFilterBarLayout = new FilterContainer();
125
+ this._cLayoutItem = FilterItemLayout;
126
+
127
+ this._oFilterBarLayout.getInner().addStyleClass("sapUiMdcFilterBarBaseAFLayout");
128
+
129
+ this._addButtons(); // TODO: Check with MDC if there is a better way to load visual filter on the basis of control property
130
+ // _createInnerLayout is called on Init by the filter bar base.
131
+ // This mean that we do not have access to the control properties yet
132
+ // and hence we cannot decide on the basis of control properties whether initial layout should be compact or visual
133
+ // As a result we have to do this workaround to always load the compact layout by default
134
+ // And toogle the same in case the initialLayout was supposed to be visual filters.
135
+
136
+
137
+ var oInnerLayout = this._oFilterBarLayout.getInner();
138
+
139
+ var oFilterContainerInnerLayoutEventDelegate = {
140
+ onBeforeRendering: function () {
141
+ if (_this2.getInitialLayout() === "visual") {
142
+ _this2._toggleLayout();
143
+ }
144
+
145
+ oInnerLayout.removeEventDelegate(oFilterContainerInnerLayoutEventDelegate);
146
+ }
147
+ };
148
+ oInnerLayout.addEventDelegate(oFilterContainerInnerLayoutEventDelegate);
149
+ this.setAggregation("layout", this._oFilterBarLayout, true);
150
+ };
151
+
152
+ FilterBar.prototype.exit = function () {
153
+ MdcFilterBar.prototype.exit.apply(this, []); // Sometimes upon external navigation this._SegmentedButton is already destroyed
154
+ // so check if it exists and then only remove stuff
155
+
156
+ if (this._oSegmentedButton) {
157
+ this._oSegmentedButton.detachEvent("select", this._toggleLayout);
158
+
159
+ delete this._oSegmentedButton;
160
+ }
161
+ };
162
+
163
+ return FilterBar;
164
+ }, false);
165
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkZpbHRlckJhci50cyJdLCJuYW1lcyI6WyJGaWx0ZXJCYXIiLCJNZGNGaWx0ZXJCYXIiLCJleHRlbmQiLCJtZXRhZGF0YSIsInByb3BlcnRpZXMiLCJpbml0aWFsTGF5b3V0IiwidHlwZSIsImRlZmF1bHRWYWx1ZSIsImFzc29jaWF0aW9ucyIsInRvZ2dsZUNvbnRyb2wiLCJtdWx0aXBsZSIsInJlbmRlcmVyIiwiYXBpVmVyc2lvbiIsInByb3RvdHlwZSIsInNldFRvZ2dsZUNvbnRyb2wiLCJ2VG9nZ2xlIiwiX29TZWdtZW50ZWRCdXR0b24iLCJzYXAiLCJ1aSIsImdldENvcmUiLCJieUlkIiwiZ2V0VG9nZ2xlQ29udHJvbCIsImRldGFjaEV2ZW50IiwiX3RvZ2dsZUxheW91dCIsImJpbmQiLCJhdHRhY2hFdmVudCIsInNldEFzc29jaWF0aW9uIiwiX29TZWNvbmRhcnlGaWx0ZXJCYXJMYXlvdXQiLCJWaXN1YWxGaWx0ZXJDb250YWluZXIiLCJpc0EiLCJzZXRTaG93QWRhcHRGaWx0ZXJzQnV0dG9uIiwib0N1cnJlbnRGaWx0ZXJCYXJMYXlvdXQiLCJfb0ZpbHRlckJhckxheW91dCIsIm9GaWx0ZXJJdGVtcyIsImdldEZpbHRlckl0ZW1zIiwiYUZpbHRlckZpZWxkcyIsImdldEFsbEZpbHRlckZpZWxkcyIsImFTb3J0ZWRGaWx0ZXJGaWVsZHMiLCJnZXRTb3J0ZWRGaWx0ZXJGaWVsZHMiLCJhQnV0dG9ucyIsImdldEFsbEJ1dHRvbnMiLCJhVmlzdWFsRmlsdGVyRmllbGRzIiwiZ2V0QWxsVmlzdWFsRmlsdGVyRmllbGRzIiwic2V0QWxsRmlsdGVyRmllbGRzIiwiZm9yRWFjaCIsIm9GaWx0ZXJGaWVsZCIsImlJbmRleCIsInJlbW92ZUZpbHRlckZpZWxkIiwiaW5zZXJ0RmlsdGVyRmllbGQiLCJvQnV0dG9uIiwicmVtb3ZlQnV0dG9uIiwiYWRkQnV0dG9uIiwic2V0QWdncmVnYXRpb24iLCJyZXJlbmRlciIsImFGaWx0ZXJJdGVtcyIsImFGaWx0ZXJJZHMiLCJvRmlsdGVySXRlbSIsInB1c2giLCJnZXRJZCIsInNvcnQiLCJhRmlyc3RJdGVtIiwiYVNlY29uZEl0ZW0iLCJzRmlyc3RJdGVtVkZJZCIsInNTZWNvbmRJdGVtVkZJZCIsImdldENvbnRlbnQiLCJvSW5uZXJDb250cm9sIiwiaW5kZXhPZiIsIl9jcmVhdGVJbm5lckxheW91dCIsIkZpbHRlckNvbnRhaW5lciIsIl9jTGF5b3V0SXRlbSIsIkZpbHRlckl0ZW1MYXlvdXQiLCJnZXRJbm5lciIsImFkZFN0eWxlQ2xhc3MiLCJfYWRkQnV0dG9ucyIsIm9Jbm5lckxheW91dCIsIm9GaWx0ZXJDb250YWluZXJJbm5lckxheW91dEV2ZW50RGVsZWdhdGUiLCJvbkJlZm9yZVJlbmRlcmluZyIsImdldEluaXRpYWxMYXlvdXQiLCJyZW1vdmVFdmVudERlbGVnYXRlIiwiYWRkRXZlbnREZWxlZ2F0ZSIsImV4aXQiLCJhcHBseSJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7OztBQUVBLE1BQU1BLFNBQVMsR0FBR0MsWUFBWSxDQUFDQyxNQUFiLENBQW9CLGdDQUFwQixFQUFzRDtBQUN2RUMsSUFBQUEsUUFBUSxFQUFFO0FBQ1RDLE1BQUFBLFVBQVUsRUFBRTtBQUNYQyxRQUFBQSxhQUFhLEVBQUU7QUFDZEMsVUFBQUEsSUFBSSxFQUFFLFFBRFE7QUFFZEMsVUFBQUEsWUFBWSxFQUFFO0FBRkE7QUFESixPQURIO0FBT1RDLE1BQUFBLFlBQVksRUFBRTtBQUNiO0FBQ0g7QUFDQTtBQUNHQyxRQUFBQSxhQUFhLEVBQUU7QUFDZEgsVUFBQUEsSUFBSSxFQUFFLHVCQURRO0FBRWRJLFVBQUFBLFFBQVEsRUFBRTtBQUZJO0FBSkY7QUFQTCxLQUQ2RDtBQWtCdkVDLElBQUFBLFFBQVEsRUFBRTtBQUNUQyxNQUFBQSxVQUFVLEVBQUU7QUFESDtBQWxCNkQsR0FBdEQsQ0FBbEI7O0FBc0JBWixFQUFBQSxTQUFTLENBQUNhLFNBQVYsQ0FBb0JDLGdCQUFwQixHQUF1QyxVQUFTQyxPQUFULEVBQXVCO0FBQzdELFFB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c0NvbnRlbnQiOlsiaW1wb3J0IE1kY0ZpbHRlckJhciBmcm9tIFwic2FwL3VpL21kYy9GaWx0ZXJCYXJcIjtcbmltcG9ydCBGaWx0ZXJJdGVtTGF5b3V0IGZyb20gXCJzYXAvdWkvbWRjL2ZpbHRlcmJhci9hbGlnbmVkL0ZpbHRlckl0ZW1MYXlvdXRcIjtcbmltcG9ydCBWaXN1YWxGaWx0ZXJDb250YWluZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL2ZpbHRlcmJhci9WaXN1YWxGaWx0ZXJDb250YWluZXJcIjtcbmltcG9ydCBGaWx0ZXJDb250YWluZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL2ZpbHRlcmJhci9GaWx0ZXJDb250YWluZXJcIjtcbmNvbnN0IEZpbHRlckJhciA9IE1kY0ZpbHRlckJhci5leHRlbmQoXCJzYXAuZmUuY29yZS5jb250cm9scy5GaWx0ZXJCYXJcIiwge1xuXHRtZXRhZGF0YToge1xuXHRcdHByb3BlcnRpZXM6IHtcblx0XHRcdGluaXRpYWxMYXlvdXQ6IHtcblx0XHRcdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRcdFx0ZGVmYXVsdFZhbHVlOiBcImNvbXBhY3RcIlxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0YXNzb2NpYXRpb25zOiB7XG5cdFx0XHQvKipcblx0XHRcdCAqIENvbnRyb2wgd2hpY2ggYWxsb3dzIGZvciBzd2l0Y2hpbmcgYmV0d2VlbiB2aXN1YWwgYW5kIG5vcm1hbCBmaWx0ZXIgbGF5b3V0c1xuXHRcdFx0ICovXG5cdFx0XHR0b2dnbGVDb250cm9sOiB7XG5cdFx0XHRcdHR5cGU6IFwic2FwLm0uU2VnbWVudGVkQnV0dG9uXCIsXG5cdFx0XHRcdG11bHRpcGxlOiBmYWxzZVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0cmVuZGVyZXI6IHtcblx0XHRhcGlWZXJzaW9uOiAyXG5cdH1cbn0pO1xuRmlsdGVyQmFyLnByb3RvdHlwZS5zZXRUb2dnbGVDb250cm9sID0gZnVuY3Rpb24odlRvZ2dsZTogYW55KSB7XG5cdGlmICh0eXBlb2YgdlRvZ2dsZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHRoaXMuX29TZWdtZW50ZWRCdXR0b24gPSBzYXAudWkuZ2V0Q29yZSgpLmJ5SWQodlRvZ2dsZSk7XG5cdH0gZWxzZSB7XG5cdFx0dGhpcy5fb1NlZ21lbnRlZEJ1dHRvbiA9IHZUb2dnbGU7XG5cdH1cblxuXHRpZiAodGhpcy5nZXRUb2dnbGVDb250cm9sKCkgJiYgdGhpcy5fb1NlZ21lbnRlZEJ1dHRvbikge1xuXHRcdHRoaXMuX29TZWdtZW50ZWRCdXR0b24uZGV0YWNoRXZlbnQoXCJzZWxlY3RcIiwgdGhpcy5fdG9nZ2xlTGF5b3V0LmJpbmQodGhpcykpO1xuXHR9XG5cdGlmICh0aGlzLl9vU2VnbWVudGVkQnV0dG9uKSB7XG5cdFx0dGhpcy5fb1NlZ21lbnRlZEJ1dHRvbi5hdHRhY2hFdmVudChcInNlbGVjdFwiLCB0aGlzLl90b2dnbGVMYXlvdXQuYmluZCh0aGlzKSk7XG5cdH1cblx0dGhpcy5zZXRBc3NvY2lhdGlvbihcInRvZ2dsZUNvbnRyb2xcIiwgdlRvZ2dsZSwgdHJ1ZSk7XG59O1xuRmlsdGVyQmFyLnByb3RvdHlwZS5fdG9nZ2xlTGF5b3V0ID0gZnVuY3Rpb24oKSB7XG5cdC8vIFNpbmNlIHByaW1hcnkgbGF5b3V0IGlzIGFsd2F5cyBjb21wYWN0XG5cdC8vIGhlbmNlIHNldCB0aGUgc2Vjb25kYXJ5IGxheW91dCBhcyB2aXN1YWwgZmlsdGVyIG9ubHkgZm9yIHRoZSBmaXJzdCB0aW1lIG9ubHlcblx0aWYgKCF0aGlzLl9vU2Vjb25kYXJ5RmlsdGVyQmFyTGF5b3V0KSB7XG5cdFx0dGhpcy5fb1NlY29uZGFyeUZpbHRlckJhckxheW91dCA9IG5ldyBWaXN1YWxGaWx0ZXJDb250YWluZXIoKTtcblx0fVxuXG5cdC8vIGRvIG5vdCBzaG93IEFkYXB0IEZpbHRlcnMgQnV0dG9uIGZvciB2aXN1YWwgbGF5b3V0XG5cdGlmICh0aGlzLl9vU2Vjb25kYXJ5RmlsdGVyQmFyTGF5b3V0LmlzQShcInNhcC5mZS5jb3JlLmNvbnRyb2xzLmZpbHRlcmJhci5WaXN1YWxGaWx0ZXJDb250YWluZXJcIikpIHtcblx0XHR0aGlzLnNldFNob3dBZGFwdEZpbHRlcnNCdXR0b24oZmFsc2UpO1xuXHR9IGVsc2Uge1xuXHRcdHRoaXMuc2V0U2hvd0FkYXB0RmlsdGVyc0J1dHRvbih0cnVlKTtcblx0fVxuXG5cdC8vIGdldCBhbGwgZmlsdGVyIGZpZWxkcyBhbmQgYnV0dG9uIG9mIHRoZSBjdXJyZW50IGxheW91dFxuXHRjb25zdCBvQ3VycmVudEZpbHRlckJhckxheW91dCA9IHRoaXMuX29GaWx0ZXJCYXJMYXlvdXQ7XG5cdGNvbnN0IG9GaWx0ZXJJdGVtcyA9IHRoaXMuZ2V0RmlsdGVySXRlbXMoKTtcblx0Y29uc3QgYUZpbHRlckZpZWxkcyA9IG9DdXJyZW50RmlsdGVyQmFyTGF5b3V0LmdldEFsbEZpbHRlckZpZWxkcygpO1xuXHRjb25zdCBhU29ydGVkRmlsdGVyRmllbGRzID0gdGhpcy5nZXRTb3J0ZWRGaWx0ZXJGaWVsZHMob0ZpbHRlckl0ZW1zLCBhRmlsdGVyRmllbGRzKTtcblx0Y29uc3QgYUJ1dHRvbnMgPSBvQ3VycmVudEZpbHRlckJhckxheW91dC5nZXRBbGxCdXR0b25zKCk7XG5cdGNvbnN0IGFWaXN1YWxGaWx0ZXJGaWVsZHMgPSBvQ3VycmVudEZpbHRlckJhckxheW91dC5nZXRBbGxWaXN1YWxGaWx0ZXJGaWVsZHMgJiYgb0N1cnJlbnRGaWx0ZXJCYXJMYXlvdXQuZ2V0QWxsVmlzdWFsRmlsdGVyRmllbGRzKCk7XG5cdGlmICh0aGlzLl9vU2Vjb25kYXJ5RmlsdGVyQmFyTGF5b3V0LmlzQShcInNhcC5mZS5jb3JlLmNvbnRyb2xzLmZpbHRlcmJhci5WaXN1YWxGaWx0ZXJDb250YWluZXJcIikpIHtcblx0XHR0aGlzLl9vU2Vjb25kYXJ5RmlsdGVyQmFyTGF5b3V0LnNldEFsbEZpbHRlckZpZWxkcyhhU29ydGVkRmlsdGVyRmllbGRzLCBhVmlzdWFsRmlsdGVyRmllbGRzKTtcblx0fVxuXHQvLyB1c2Ugc2Vjb25kYXJ5IGZpbHRlciBiYXIgbGF5b3V0IGFzIG5ldyBsYXlvdXRcblx0dGhpcy5fb0ZpbHRlckJhckxheW91dCA9IHRoaXMuX29TZWNvbmRhcnlGaWx0ZXJCYXJMYXlvdXQ7XG5cblx0Ly8gaW5zZXJ0IGFsbCBmaWx0ZXIgZmllbGRzIGZyb20gY3VycmVudCBsYXlvdXQgdG8gbmV3IGxheW91dFxuXHRhRmlsdGVyRmllbGRzLmZvckVhY2goKG9GaWx0ZXJGaWVsZDogYW55LCBpSW5kZXg6IGFueSkgPT4ge1xuXHRcdG9DdXJyZW50RmlsdGVyQmFyTGF5b3V0LnJlbW92ZUZpbHRlckZpZWxkKG9GaWx0ZXJGaWVsZCk7XG5cdFx0dGhpcy5fb0ZpbHRlckJhckxheW91dC5pbnNlcnRGaWx0ZXJGaWVsZChvRmlsdGVyRmllbGQsIGlJbmRleCk7XG5cdH0pO1xuXHQvLyBpbnNlcnQgYWxsIGJ1dHRvbnMgZnJvbSB0aGUgY3VycmVudCBsYXlvdXQgdG8gdGhlIG5ldyBsYXlvdXRcblx0YUJ1dHRvbnMuZm9yRWFjaCgob0J1dHRvbjogYW55KSA9PiB7XG5cdFx0b0N1cnJlbnRGaWx0ZXJCYXJMYXlvdXQucmVtb3ZlQnV0dG9uKG9CdXR0b24pO1xuXHRcdHRoaXMuX29GaWx0ZXJCYXJMYXlvdXQuYWRkQnV0dG9uKG9CdXR0b24pO1xuXHR9KTtcblxuXHQvLyBzZXQgdGhlIGN1cnJlbnQgZmlsdGVyIGJhciBsYXlvdXQgdG8gdGhlIHNlY29uZGFyeSBvbmVcblx0dGhpcy5fb1NlY29uZGFyeUZpbHRlckJhckxheW91dCA9IG9DdXJyZW50RmlsdGVyQmFyTGF5b3V0O1xuXG5cdC8vIHVwZGF0ZSB0aGUgbGF5b3V0IGFnZ3JlZ2F0aW9uIG9mIHRoZSBmaWx0ZXIgYmFyIGFuZCByZXJlbmRlciB0aGUgc2FtZS5cblx0dGhpcy5zZXRBZ2dyZWdhdGlvbihcImxheW91dFwiLCB0aGlzLl9vRmlsdGVyQmFyTGF5b3V0LCB0cnVlKTtcblx0dGhpcy5fb0ZpbHRlckJhckxheW91dC5yZXJlbmRlcigpO1xufTtcbkZpbHRlckJhci5wcm90b3R5cGUuZ2V0U29ydGVkRmlsdGVyRmllbGRzID0gZnVuY3Rpb24oYUZpbHRlckl0ZW1zOiBhbnksIGFGaWx0ZXJGaWVsZHM6IGFueSkge1xuXHRjb25zdCBhRmlsdGVySWRzOiBhbnlbXSA9IFtdO1xuXHRhRmlsdGVySXRlbXMuZm9yRWFjaChmdW5jdGlvbihvRmlsdGVySXRlbTogYW55KSB7XG5cdFx0YUZpbHRlcklkcy5wdXNoKG9GaWx0ZXJJdGVtLmdldElkKCkpO1xuXHR9KTtcblx0YUZpbHRlckZpZWxkcy5zb3J0KGZ1bmN0aW9uKGFGaXJzdEl0ZW06IGFueSwgYVNlY29uZEl0ZW06IGFueSkge1xuXHRcdGxldCBzRmlyc3RJdGVtVkZJZCwgc1NlY29uZEl0ZW1WRklkO1xuXHRcdGFGaXJzdEl0ZW0uZ2V0Q29udGVudCgpLmZvckVhY2goZnVuY3Rpb24ob0lubmVyQ29udHJvbDogYW55KSB7XG5cdFx0XHRpZiAob0lubmVyQ29udHJvbC5pc0EoXCJzYXAudWkubWRjLkZpbHRlckZpZWxkXCIpKSB7XG5cdFx0XHRcdHNGaXJzdEl0ZW1WRklkID0gb0lubmVyQ29udHJvbC5nZXRJZCgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGFTZWNvbmRJdGVtLmdldENvbnRlbnQoKS5mb3JFYWNoKGZ1bmN0aW9uKG9Jbm5lckNvbnRyb2w6IGFueSkge1xuXHRcdFx0aWYgKG9Jbm5lckNvbnRyb2wuaXNBKFwic2FwLnVpLm1kYy5GaWx0ZXJGaWVsZFwiKSkge1xuXHRcdFx0XHRzU2Vjb25kSXRlbVZGSWQgPSBvSW5uZXJDb250cm9sLmdldElkKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGFGaWx0ZXJJZHMuaW5kZXhPZihzRmlyc3RJdGVtVkZJZCkgLSBhRmlsdGVySWRzLmluZGV4T2Yoc1NlY29uZEl0ZW1WRklkKTtcblx0fSk7XG5cdHJldHVybiBhRmlsdGVyRmllbGRzO1xufTtcbkZpbHRlckJhci5wcm90b3R5cGUuX2NyZWF0ZUlubmVyTGF5b3V0ID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuX29GaWx0ZXJCYXJMYXlvdXQgPSBuZXcgRmlsdGVyQ29udGFpbmVyKCk7XG5cdHRoaXMuX2NMYXlvdXRJdGVtID0gRmlsdGVySXRlbUxheW91dDtcblx0dGhpcy5fb0ZpbHRlckJhckxheW91dC5nZXRJbm5lcigpLmFkZFN0eWxlQ2xhc3MoXCJzYXBVaU1kY0ZpbHRlckJhckJhc2VBRkxheW91dFwiKTtcblx0dGhpcy5fYWRkQnV0dG9ucygpO1xuXG5cdC8vIFRPRE86IENoZWNrIHdpdGggTURDIGlmIHRoZXJlIGlzIGEgYmV0dGVyIHdheSB0byBsb2FkIHZpc3VhbCBmaWx0ZXIgb24gdGhlIGJhc2lzIG9mIGNvbnRyb2wgcHJvcGVydHlcblx0Ly8gX2NyZWF0ZUlubmVyTGF5b3V0IGlzIGNhbGxlZCBvbiBJbml0IGJ5IHRoZSBmaWx0ZXIgYmFyIGJhc2UuXG5cdC8vIFRoaXMgbWVhbiB0aGF0IHdlIGRvIG5vdCBoYXZlIGFjY2VzcyB0byB0aGUgY29udHJvbCBwcm9wZXJ0aWVzIHlldFxuXHQvLyBhbmQgaGVuY2Ugd2UgY2Fubm90IGRlY2lkZSBvbiB0aGUgYmFzaXMgb2YgY29udHJvbCBwcm9wZXJ0aWVzIHdoZXRoZXIgaW5pdGlhbCBsYXlvdXQgc2hvdWxkIGJlIGNvbXBhY3Qgb3IgdmlzdWFsXG5cdC8vIEFzIGEgcmVzdWx0IHdlIGhhdmUgdG8gZG8gdGhpcyB3b3JrYXJvdW5kIHRvIGFsd2F5cyBsb2FkIHRoZSBjb21wYWN0IGxheW91dCBieSBkZWZhdWx0XG5cdC8vIEFuZCB0b29nbGUgdGhlIHNhbWUgaW4gY2FzZSB0aGUgaW5pdGlhbExheW91dCB3YXMgc3VwcG9zZWQgdG8gYmUgdmlzdWFsIGZpbHRlcnMuXG5cdGNvbnN0IG9Jbm5lckxheW91dCA9IHRoaXMuX29GaWx0ZXJCYXJMYXlvdXQuZ2V0SW5uZXIoKTtcblx0Y29uc3Qgb0ZpbHRlckNvbnRhaW5lcklubmVyTGF5b3V0RXZlbnREZWxlZ2F0ZSA9IHtcblx0XHRvbkJlZm9yZVJlbmRlcmluZzogKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuZ2V0SW5pdGlhbExheW91dCgpID09PSBcInZpc3VhbFwiKSB7XG5cdFx0XHRcdHRoaXMuX3RvZ2dsZUxheW91dCgpO1xuXHRcdFx0fVxuXHRcdFx0b0lubmVyTGF5b3V0LnJlbW92ZUV2ZW50RGVsZWdhdGUob0ZpbHRlckNvbnRhaW5lcklubmVyTGF5b3V0RXZlbnREZWxlZ2F0ZSk7XG5cdFx0fVxuXHR9O1xuXHRvSW5uZXJMYXlvdXQuYWRkRXZlbnREZWxlZ2F0ZShvRmlsdGVyQ29udGFpbmVySW5uZXJMYXlvdXRFdmVudERlbGVnYXRlKTtcblxuXHR0aGlzLnNldEFnZ3JlZ2F0aW9uKFwibGF5b3V0XCIsIHRoaXMuX29GaWx0ZXJCYXJMYXlvdXQsIHRydWUpO1xufTtcbkZpbHRlckJhci5wcm90b3R5cGUuZXhpdCA9IGZ1bmN0aW9uKCkge1xuXHQoTWRjRmlsdGVyQmFyLnByb3RvdHlwZSBhcyBhbnkpLmV4aXQuYXBwbHkodGhpcywgW10pO1xuXHQvLyBTb21ldGltZXMgdXBvbiBleHRlcm5hbCBuYXZpZ2F0aW9uIHRoaXMuX1NlZ21lbnRlZEJ1dHRvbiBpcyBhbHJlYWR5IGRlc3Ryb3llZFxuXHQvLyBzbyBjaGVjayBpZiBpdCBleGlzdHMgYW5kIHRoZW4gb25seSByZW1vdmUgc3R1ZmZcblx0aWYgKHRoaXMuX29TZWdtZW50ZWRCdXR0b24pIHtcblx0XHR0aGlzLl9vU2VnbWVudGVkQnV0dG9uLmRldGFjaEV2ZW50KFwic2VsZWN0XCIsIHRoaXMuX3RvZ2dsZUxheW91dCk7XG5cdFx0ZGVsZXRlIHRoaXMuX29TZWdtZW50ZWRCdXR0b247XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEZpbHRlckJhcjtcbiJdfQ==
@@ -0,0 +1,143 @@
1
+ import MdcFilterBar from "sap/ui/mdc/FilterBar";
2
+ import FilterItemLayout from "sap/ui/mdc/filterbar/aligned/FilterItemLayout";
3
+ import VisualFilterContainer from "sap/fe/core/controls/filterbar/VisualFilterContainer";
4
+ import FilterContainer from "sap/fe/core/controls/filterbar/FilterContainer";
5
+ const FilterBar = MdcFilterBar.extend("sap.fe.core.controls.FilterBar", {
6
+ metadata: {
7
+ properties: {
8
+ initialLayout: {
9
+ type: "string",
10
+ defaultValue: "compact"
11
+ }
12
+ },
13
+ associations: {
14
+ /**
15
+ * Control which allows for switching between visual and normal filter layouts
16
+ */
17
+ toggleControl: {
18
+ type: "sap.m.SegmentedButton",
19
+ multiple: false
20
+ }
21
+ }
22
+ },
23
+ renderer: {
24
+ apiVersion: 2
25
+ }
26
+ });
27
+ FilterBar.prototype.setToggleControl = function(vToggle: any) {
28
+ if (typeof vToggle === "string") {
29
+ this._oSegmentedButton = sap.ui.getCore().byId(vToggle);
30
+ } else {
31
+ this._oSegmentedButton = vToggle;
32
+ }
33
+
34
+ if (this.getToggleControl() && this._oSegmentedButton) {
35
+ this._oSegmentedButton.detachEvent("select", this._toggleLayout.bind(this));
36
+ }
37
+ if (this._oSegmentedButton) {
38
+ this._oSegmentedButton.attachEvent("select", this._toggleLayout.bind(this));
39
+ }
40
+ this.setAssociation("toggleControl", vToggle, true);
41
+ };
42
+ FilterBar.prototype._toggleLayout = function() {
43
+ // Since primary layout is always compact
44
+ // hence set the secondary layout as visual filter only for the first time only
45
+ if (!this._oSecondaryFilterBarLayout) {
46
+ this._oSecondaryFilterBarLayout = new VisualFilterContainer();
47
+ }
48
+
49
+ // do not show Adapt Filters Button for visual layout
50
+ if (this._oSecondaryFilterBarLayout.isA("sap.fe.core.controls.filterbar.VisualFilterContainer")) {
51
+ this.setShowAdaptFiltersButton(false);
52
+ } else {
53
+ this.setShowAdaptFiltersButton(true);
54
+ }
55
+
56
+ // get all filter fields and button of the current layout
57
+ const oCurrentFilterBarLayout = this._oFilterBarLayout;
58
+ const oFilterItems = this.getFilterItems();
59
+ const aFilterFields = oCurrentFilterBarLayout.getAllFilterFields();
60
+ const aSortedFilterFields = this.getSortedFilterFields(oFilterItems, aFilterFields);
61
+ const aButtons = oCurrentFilterBarLayout.getAllButtons();
62
+ const aVisualFilterFields = oCurrentFilterBarLayout.getAllVisualFilterFields && oCurrentFilterBarLayout.getAllVisualFilterFields();
63
+ if (this._oSecondaryFilterBarLayout.isA("sap.fe.core.controls.filterbar.VisualFilterContainer")) {
64
+ this._oSecondaryFilterBarLayout.setAllFilterFields(aSortedFilterFields, aVisualFilterFields);
65
+ }
66
+ // use secondary filter bar layout as new layout
67
+ this._oFilterBarLayout = this._oSecondaryFilterBarLayout;
68
+
69
+ // insert all filter fields from current layout to new layout
70
+ aFilterFields.forEach((oFilterField: any, iIndex: any) => {
71
+ oCurrentFilterBarLayout.removeFilterField(oFilterField);
72
+ this._oFilterBarLayout.insertFilterField(oFilterField, iIndex);
73
+ });
74
+ // insert all buttons from the current layout to the new layout
75
+ aButtons.forEach((oButton: any) => {
76
+ oCurrentFilterBarLayout.removeButton(oButton);
77
+ this._oFilterBarLayout.addButton(oButton);
78
+ });
79
+
80
+ // set the current filter bar layout to the secondary one
81
+ this._oSecondaryFilterBarLayout = oCurrentFilterBarLayout;
82
+
83
+ // update the layout aggregation of the filter bar and rerender the same.
84
+ this.setAggregation("layout", this._oFilterBarLayout, true);
85
+ this._oFilterBarLayout.rerender();
86
+ };
87
+ FilterBar.prototype.getSortedFilterFields = function(aFilterItems: any, aFilterFields: any) {
88
+ const aFilterIds: any[] = [];
89
+ aFilterItems.forEach(function(oFilterItem: any) {
90
+ aFilterIds.push(oFilterItem.getId());
91
+ });
92
+ aFilterFields.sort(function(aFirstItem: any, aSecondItem: any) {
93
+ let sFirstItemVFId, sSecondItemVFId;
94
+ aFirstItem.getContent().forEach(function(oInnerControl: any) {
95
+ if (oInnerControl.isA("sap.ui.mdc.FilterField")) {
96
+ sFirstItemVFId = oInnerControl.getId();
97
+ }
98
+ });
99
+ aSecondItem.getContent().forEach(function(oInnerControl: any) {
100
+ if (oInnerControl.isA("sap.ui.mdc.FilterField")) {
101
+ sSecondItemVFId = oInnerControl.getId();
102
+ }
103
+ });
104
+ return aFilterIds.indexOf(sFirstItemVFId) - aFilterIds.indexOf(sSecondItemVFId);
105
+ });
106
+ return aFilterFields;
107
+ };
108
+ FilterBar.prototype._createInnerLayout = function() {
109
+ this._oFilterBarLayout = new FilterContainer();
110
+ this._cLayoutItem = FilterItemLayout;
111
+ this._oFilterBarLayout.getInner().addStyleClass("sapUiMdcFilterBarBaseAFLayout");
112
+ this._addButtons();
113
+
114
+ // TODO: Check with MDC if there is a better way to load visual filter on the basis of control property
115
+ // _createInnerLayout is called on Init by the filter bar base.
116
+ // This mean that we do not have access to the control properties yet
117
+ // and hence we cannot decide on the basis of control properties whether initial layout should be compact or visual
118
+ // As a result we have to do this workaround to always load the compact layout by default
119
+ // And toogle the same in case the initialLayout was supposed to be visual filters.
120
+ const oInnerLayout = this._oFilterBarLayout.getInner();
121
+ const oFilterContainerInnerLayoutEventDelegate = {
122
+ onBeforeRendering: () => {
123
+ if (this.getInitialLayout() === "visual") {
124
+ this._toggleLayout();
125
+ }
126
+ oInnerLayout.removeEventDelegate(oFilterContainerInnerLayoutEventDelegate);
127
+ }
128
+ };
129
+ oInnerLayout.addEventDelegate(oFilterContainerInnerLayoutEventDelegate);
130
+
131
+ this.setAggregation("layout", this._oFilterBarLayout, true);
132
+ };
133
+ FilterBar.prototype.exit = function() {
134
+ (MdcFilterBar.prototype as any).exit.apply(this, []);
135
+ // Sometimes upon external navigation this._SegmentedButton is already destroyed
136
+ // so check if it exists and then only remove stuff
137
+ if (this._oSegmentedButton) {
138
+ this._oSegmentedButton.detachEvent("select", this._toggleLayout);
139
+ delete this._oSegmentedButton;
140
+ }
141
+ };
142
+
143
+ export default FilterBar;