@sapui5/sap.fe.macros 1.141.2 → 1.143.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 (257) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Breadcrumbs.js +4 -10
  4. package/src/sap/fe/macros/Breadcrumbs.tsx +2 -8
  5. package/src/sap/fe/macros/Chart.js +34 -23
  6. package/src/sap/fe/macros/Chart.tsx +25 -11
  7. package/src/sap/fe/macros/CollaborativeDraftHandler.js +47 -36
  8. package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +50 -31
  9. package/src/sap/fe/macros/CollectionBindingInfo.js +8 -2
  10. package/src/sap/fe/macros/CollectionBindingInfo.ts +11 -6
  11. package/src/sap/fe/macros/CommonHelper.js +14 -24
  12. package/src/sap/fe/macros/CommonHelper.ts +18 -25
  13. package/src/sap/fe/macros/ConditionalSwitch.js +1 -2
  14. package/src/sap/fe/macros/ConditionalSwitch.tsx +0 -1
  15. package/src/sap/fe/macros/ConditionalSwitchProperty.js +1 -3
  16. package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +0 -2
  17. package/src/sap/fe/macros/Field.js +34 -17
  18. package/src/sap/fe/macros/Field.ts +64 -32
  19. package/src/sap/fe/macros/FooterContent.js +7 -3
  20. package/src/sap/fe/macros/FooterContent.tsx +8 -13
  21. package/src/sap/fe/macros/KPITag.js +6 -6
  22. package/src/sap/fe/macros/KPITag.tsx +8 -6
  23. package/src/sap/fe/macros/MacroAPI.js +4 -3
  24. package/src/sap/fe/macros/MacroAPI.ts +3 -3
  25. package/src/sap/fe/macros/MessageButton.js +4 -3
  26. package/src/sap/fe/macros/MessageButton.tsx +7 -3
  27. package/src/sap/fe/macros/MicroChart.js +12 -7
  28. package/src/sap/fe/macros/MicroChart.tsx +9 -3
  29. package/src/sap/fe/macros/MultiValueField.js +22 -36
  30. package/src/sap/fe/macros/MultiValueField.tsx +34 -66
  31. package/src/sap/fe/macros/RichTextEditor.js +3 -4
  32. package/src/sap/fe/macros/RichTextEditor.tsx +2 -3
  33. package/src/sap/fe/macros/Share.js +7 -7
  34. package/src/sap/fe/macros/Share.tsx +9 -6
  35. package/src/sap/fe/macros/Status.js +39 -11
  36. package/src/sap/fe/macros/Status.tsx +25 -5
  37. package/src/sap/fe/macros/ValueHelp.js +5 -2
  38. package/src/sap/fe/macros/ValueHelp.tsx +5 -0
  39. package/src/sap/fe/macros/ai/EasyFillDialog.js +2 -1
  40. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +1 -0
  41. package/src/sap/fe/macros/ai/EasyFilterBar.js +7 -34
  42. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +6 -35
  43. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +31 -7
  44. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +33 -6
  45. package/src/sap/fe/macros/ai/SummarizationButton.js +6 -4
  46. package/src/sap/fe/macros/ai/SummarizationButton.tsx +5 -3
  47. package/src/sap/fe/macros/chart/Action.js +25 -2
  48. package/src/sap/fe/macros/chart/Action.ts +13 -0
  49. package/src/sap/fe/macros/chart/ActionGroup.js +25 -2
  50. package/src/sap/fe/macros/chart/ActionGroup.ts +13 -0
  51. package/src/sap/fe/macros/chart/ChartDelegate.js +29 -8
  52. package/src/sap/fe/macros/chart/ChartDelegate.ts +46 -14
  53. package/src/sap/fe/macros/chart/MdcChartTemplate.js +58 -12
  54. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +75 -13
  55. package/src/sap/fe/macros/chart/OverflowGroup.js +62 -0
  56. package/src/sap/fe/macros/chart/OverflowGroup.ts +22 -0
  57. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +7 -7
  58. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +3 -2
  59. package/src/sap/fe/macros/controls/FileWrapper.js +11 -5
  60. package/src/sap/fe/macros/controls/FileWrapper.ts +10 -4
  61. package/src/sap/fe/macros/controls/FilterBar.js +39 -3
  62. package/src/sap/fe/macros/controls/FilterBar.ts +42 -1
  63. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +3 -1
  64. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -0
  65. package/src/sap/fe/macros/controls/RadioButtons.js +18 -5
  66. package/src/sap/fe/macros/controls/RadioButtons.tsx +10 -1
  67. package/src/sap/fe/macros/coreUI/CreateDialog.js +3 -3
  68. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +2 -2
  69. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +40 -12
  70. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -9
  71. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +4 -2
  72. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +3 -1
  73. package/src/sap/fe/macros/field/FieldFormatOptions.js +4 -4
  74. package/src/sap/fe/macros/field/FieldFormatOptions.ts +2 -2
  75. package/src/sap/fe/macros/field/FieldHelper.js +4 -3
  76. package/src/sap/fe/macros/field/FieldHelper.ts +7 -1
  77. package/src/sap/fe/macros/field/FieldRuntime.js +44 -9
  78. package/src/sap/fe/macros/field/FieldRuntime.ts +72 -8
  79. package/src/sap/fe/macros/field/FieldRuntimeHelper.js +3 -34
  80. package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +28 -53
  81. package/src/sap/fe/macros/field/FieldTemplating.js +5 -4
  82. package/src/sap/fe/macros/field/FieldTemplating.ts +6 -4
  83. package/src/sap/fe/macros/filter/FilterFieldHelper.js +6 -4
  84. package/src/sap/fe/macros/filter/FilterFieldHelper.ts +7 -2
  85. package/src/sap/fe/macros/filter/FilterUtils.js +130 -40
  86. package/src/sap/fe/macros/filter/FilterUtils.ts +167 -45
  87. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.js +2 -2
  88. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.ts +1 -1
  89. package/src/sap/fe/macros/filterBar/FilterBar.block.js +4 -3
  90. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +19 -8
  91. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +15 -9
  92. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +36 -17
  93. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +21 -10
  94. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +81 -63
  95. package/src/sap/fe/macros/filterBar/UOMValidationDelegate.js +376 -0
  96. package/src/sap/fe/macros/filterBar/UOMValidationDelegate.ts +463 -0
  97. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +4 -3
  98. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +3 -2
  99. package/src/sap/fe/macros/form/Form.block.js +27 -2
  100. package/src/sap/fe/macros/form/Form.block.ts +31 -11
  101. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -3
  102. package/src/sap/fe/macros/form/FormContainer.block.js +110 -63
  103. package/src/sap/fe/macros/form/FormContainer.block.ts +121 -64
  104. package/src/sap/fe/macros/formatters/TableFormatter.js +13 -10
  105. package/src/sap/fe/macros/formatters/TableFormatter.ts +11 -9
  106. package/src/sap/fe/macros/formatters/VisualFilterFormatter.js +6 -4
  107. package/src/sap/fe/macros/formatters/VisualFilterFormatter.ts +5 -5
  108. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +5 -5
  109. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +4 -4
  110. package/src/sap/fe/macros/insights/InsightsService.js +3 -2
  111. package/src/sap/fe/macros/insights/InsightsService.ts +2 -1
  112. package/src/sap/fe/macros/internal/DataPoint.js +7 -8
  113. package/src/sap/fe/macros/internal/DataPoint.tsx +6 -9
  114. package/src/sap/fe/macros/internal/field/DisplayStyle.js +8 -6
  115. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +7 -8
  116. package/src/sap/fe/macros/internal/field/EditStyle.js +9 -20
  117. package/src/sap/fe/macros/internal/field/EditStyle.tsx +17 -41
  118. package/src/sap/fe/macros/internal/field/FieldBlockStructure.js +2 -2
  119. package/src/sap/fe/macros/internal/field/FieldBlockStructure.tsx +1 -1
  120. package/src/sap/fe/macros/internal/field/FieldStructure.js +1 -2
  121. package/src/sap/fe/macros/internal/field/FieldStructure.tsx +0 -2
  122. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +7 -7
  123. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +17 -11
  124. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +6 -2
  125. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +5 -1
  126. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.js +9 -6
  127. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.ts +7 -5
  128. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
  129. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +6 -6
  130. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +5 -2
  131. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +2 -2
  132. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +2 -1
  133. package/src/sap/fe/macros/library.js +5 -6
  134. package/src/sap/fe/macros/{library.ts → library.tsx} +3 -1
  135. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +15 -5
  136. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +21 -5
  137. package/src/sap/fe/macros/messagebundle.properties +13 -5
  138. package/src/sap/fe/macros/messagebundle_ar.properties +12 -3
  139. package/src/sap/fe/macros/messagebundle_bg.properties +13 -4
  140. package/src/sap/fe/macros/messagebundle_ca.properties +12 -3
  141. package/src/sap/fe/macros/messagebundle_cnr.properties +12 -3
  142. package/src/sap/fe/macros/messagebundle_cs.properties +11 -2
  143. package/src/sap/fe/macros/messagebundle_cy.properties +12 -3
  144. package/src/sap/fe/macros/messagebundle_da.properties +12 -3
  145. package/src/sap/fe/macros/messagebundle_de.properties +16 -7
  146. package/src/sap/fe/macros/messagebundle_el.properties +13 -4
  147. package/src/sap/fe/macros/messagebundle_en.properties +13 -4
  148. package/src/sap/fe/macros/messagebundle_en_GB.properties +13 -4
  149. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +13 -4
  150. package/src/sap/fe/macros/messagebundle_es.properties +12 -3
  151. package/src/sap/fe/macros/messagebundle_es_MX.properties +12 -3
  152. package/src/sap/fe/macros/messagebundle_et.properties +12 -3
  153. package/src/sap/fe/macros/messagebundle_fi.properties +12 -3
  154. package/src/sap/fe/macros/messagebundle_fr.properties +12 -3
  155. package/src/sap/fe/macros/messagebundle_fr_CA.properties +12 -3
  156. package/src/sap/fe/macros/messagebundle_hi.properties +12 -3
  157. package/src/sap/fe/macros/messagebundle_hr.properties +13 -4
  158. package/src/sap/fe/macros/messagebundle_hu.properties +12 -3
  159. package/src/sap/fe/macros/messagebundle_id.properties +18 -9
  160. package/src/sap/fe/macros/messagebundle_it.properties +12 -3
  161. package/src/sap/fe/macros/messagebundle_iw.properties +12 -3
  162. package/src/sap/fe/macros/messagebundle_ja.properties +12 -3
  163. package/src/sap/fe/macros/messagebundle_kk.properties +11 -2
  164. package/src/sap/fe/macros/messagebundle_ko.properties +13 -4
  165. package/src/sap/fe/macros/messagebundle_lt.properties +12 -3
  166. package/src/sap/fe/macros/messagebundle_lv.properties +12 -3
  167. package/src/sap/fe/macros/messagebundle_mk.properties +12 -3
  168. package/src/sap/fe/macros/messagebundle_ms.properties +12 -3
  169. package/src/sap/fe/macros/messagebundle_nl.properties +12 -3
  170. package/src/sap/fe/macros/messagebundle_no.properties +12 -3
  171. package/src/sap/fe/macros/messagebundle_pl.properties +12 -3
  172. package/src/sap/fe/macros/messagebundle_pt.properties +12 -3
  173. package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -3
  174. package/src/sap/fe/macros/messagebundle_ro.properties +13 -4
  175. package/src/sap/fe/macros/messagebundle_ru.properties +12 -3
  176. package/src/sap/fe/macros/messagebundle_sh.properties +12 -3
  177. package/src/sap/fe/macros/messagebundle_sk.properties +12 -3
  178. package/src/sap/fe/macros/messagebundle_sl.properties +13 -4
  179. package/src/sap/fe/macros/messagebundle_sr.properties +12 -3
  180. package/src/sap/fe/macros/messagebundle_sv.properties +12 -3
  181. package/src/sap/fe/macros/messagebundle_th.properties +11 -2
  182. package/src/sap/fe/macros/messagebundle_tr.properties +12 -3
  183. package/src/sap/fe/macros/messagebundle_uk.properties +12 -3
  184. package/src/sap/fe/macros/messagebundle_vi.properties +13 -4
  185. package/src/sap/fe/macros/messagebundle_zh_CN.properties +12 -3
  186. package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -3
  187. package/src/sap/fe/macros/messages/MessageButton.js +21 -12
  188. package/src/sap/fe/macros/messages/MessageButton.ts +21 -11
  189. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +7 -3
  190. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +8 -2
  191. package/src/sap/fe/macros/quickView/QuickView.js +5 -4
  192. package/src/sap/fe/macros/quickView/QuickView.tsx +10 -3
  193. package/src/sap/fe/macros/richtexteditor/ButtonGroup.js +2 -2
  194. package/src/sap/fe/macros/richtexteditor/ButtonGroup.ts +2 -2
  195. package/src/sap/fe/macros/table/Action.js +21 -5
  196. package/src/sap/fe/macros/table/Action.ts +14 -4
  197. package/src/sap/fe/macros/table/ActionGroup.js +15 -2
  198. package/src/sap/fe/macros/table/ActionGroup.ts +8 -0
  199. package/src/sap/fe/macros/table/ActionGroupOverride.js +14 -2
  200. package/src/sap/fe/macros/table/ActionGroupOverride.ts +7 -0
  201. package/src/sap/fe/macros/table/ActionOverride.js +14 -2
  202. package/src/sap/fe/macros/table/ActionOverride.ts +7 -0
  203. package/src/sap/fe/macros/table/ActionsTemplating.js +16 -2
  204. package/src/sap/fe/macros/table/ActionsTemplating.tsx +15 -0
  205. package/src/sap/fe/macros/table/Column.js +3 -2
  206. package/src/sap/fe/macros/table/Column.ts +1 -1
  207. package/src/sap/fe/macros/table/MdcTableTemplate.js +96 -18
  208. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +136 -17
  209. package/src/sap/fe/macros/table/OverflowGroups.js +59 -0
  210. package/src/sap/fe/macros/table/OverflowGroups.ts +27 -0
  211. package/src/sap/fe/macros/table/Table.block.js +74 -30
  212. package/src/sap/fe/macros/table/Table.block.tsx +77 -14
  213. package/src/sap/fe/macros/table/TableAPI.js +175 -132
  214. package/src/sap/fe/macros/table/TableAPI.ts +67 -30
  215. package/src/sap/fe/macros/table/TableDefinition.js +20 -3
  216. package/src/sap/fe/macros/table/TableDefinition.ts +18 -2
  217. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +6 -3
  218. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +12 -9
  219. package/src/sap/fe/macros/table/TableHelper.js +5 -2
  220. package/src/sap/fe/macros/table/TableHelper.ts +5 -2
  221. package/src/sap/fe/macros/table/TableRuntime.js +25 -13
  222. package/src/sap/fe/macros/table/TableRuntime.ts +31 -17
  223. package/src/sap/fe/macros/table/TableSizeHelper.js +4 -4
  224. package/src/sap/fe/macros/table/TableSizeHelper.ts +6 -11
  225. package/src/sap/fe/macros/table/Utils.js +9 -3
  226. package/src/sap/fe/macros/table/Utils.ts +14 -8
  227. package/src/sap/fe/macros/table/delegates/TableDelegate.js +72 -29
  228. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +114 -123
  229. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +41 -15
  230. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +41 -22
  231. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +15 -6
  232. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +14 -5
  233. package/src/sap/fe/macros/table/massEdit/MassEditField.js +1 -1
  234. package/src/sap/fe/macros/table/massEdit/MassEditField.tsx +3 -6
  235. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -3
  236. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +3 -2
  237. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +42 -14
  238. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +49 -19
  239. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +7 -9
  240. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +7 -8
  241. package/src/sap/fe/macros/table/mixin/TableExport.js +1 -1
  242. package/src/sap/fe/macros/table/mixin/TableExport.ts +3 -3
  243. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +3 -4
  244. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +2 -3
  245. package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.js +5 -4
  246. package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.ts +6 -3
  247. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +17 -10
  248. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +24 -9
  249. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.js +4 -4
  250. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.ts +3 -3
  251. package/src/sap/fe/macros/visualfilters/VisualFilter.js +20 -2
  252. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +28 -6
  253. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +6 -3
  254. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +4 -3
  255. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.js +3 -3
  256. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.tsx +10 -4
  257. package/src/sap/fe/macros/visualfilters/fragments/InteractiveDonutChart.fragment.xml +1 -1
@@ -46,6 +46,39 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
46
46
  }
47
47
  return sCurrentHash;
48
48
  },
49
+ /**
50
+ * Creates filters for ValueList requests based on ValueListParameterIn and ValueListParameterInOut annotations.
51
+ * @param valueListInfo The ValueList annotation information
52
+ * @param propertyId The ID property of the IdAndDesciption of the text arrangement annotation
53
+ * @param propertyValue The value for the propertyId property
54
+ * @param bindingContext The binding context to get values from
55
+ * @returns Array of filters for the ValueList request
56
+ */
57
+ createValueListFilters: function (valueListInfo, propertyId, propertyValue, bindingContext) {
58
+ // Start with the key filter
59
+ const filters = [new Filter({
60
+ path: propertyId,
61
+ operator: "EQ",
62
+ value1: propertyValue
63
+ })];
64
+ if (bindingContext && valueListInfo.Parameters) {
65
+ const relevantParameters = valueListInfo.Parameters.filter(parameter => {
66
+ const isInOrInOut = parameter.$Type === "com.sap.vocabularies.Common.v1.ValueListParameterIn" || parameter.$Type === "com.sap.vocabularies.Common.v1.ValueListParameterInOut";
67
+ return isInOrInOut && parameter.LocalDataProperty?.$PropertyPath && parameter.ValueListProperty && parameter.ValueListProperty !== propertyId;
68
+ });
69
+ relevantParameters.forEach(parameter => {
70
+ const localValue = bindingContext.getProperty(parameter.LocalDataProperty.$PropertyPath);
71
+ if (localValue !== undefined && localValue !== null && localValue !== "") {
72
+ filters.push(new Filter({
73
+ path: parameter.ValueListProperty,
74
+ operator: "EQ",
75
+ value1: localValue
76
+ }));
77
+ }
78
+ });
79
+ }
80
+ return filters;
81
+ },
49
82
  /**
50
83
  * Method to retrieve text from the value list for DataField.
51
84
  * This is a formatter in disguise.
@@ -61,6 +94,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
61
94
  if (sPropertyValue) {
62
95
  oMetaModel = this.getModel()?.getMetaModel() || CommonHelper.getMetaModel();
63
96
  sPropertyName = oMetaModel.getObject(`${sPropertyFullPath}@sapui.name`);
97
+ const bindingContext = this.getBindingContext();
64
98
  return oMetaModel.requestValueListInfo(sPropertyFullPath, true).then(function (mValueListInfo) {
65
99
  // take the "" one if exists, otherwise take the first one in the object TODO: to be discussed
66
100
  const oValueListInfo = mValueListInfo[mValueListInfo[""] ? "" : Object.keys(mValueListInfo)[0]];
@@ -75,15 +109,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
75
109
  const oTextAnnotation = oMetaModelValueList.getObject(`/${oValueListInfo.CollectionPath}/${oParamWithKey.ValueListProperty}@com.sap.vocabularies.Common.v1.Text`);
76
110
  if (oTextAnnotation && oTextAnnotation.$Path) {
77
111
  sTextProperty = oTextAnnotation.$Path;
78
- const oFilter = new Filter({
79
- path: oParamWithKey.ValueListProperty,
80
- operator: "EQ",
81
- value1: sPropertyValue
82
- });
83
- const oListBinding = oValueListModel.bindList(`/${oValueListInfo.CollectionPath}`, undefined, undefined, oFilter, {
112
+ const filters = FieldRuntime.createValueListFilters(oValueListInfo, oParamWithKey.ValueListProperty, sPropertyValue, bindingContext);
113
+ const listBinding = oValueListModel.bindList(`/${oValueListInfo.CollectionPath}`, undefined, undefined, filters, {
84
114
  $select: sTextProperty
85
115
  });
86
- return oListBinding.requestContexts(0, 2);
116
+ return listBinding.requestContexts(0, 2);
87
117
  } else {
88
118
  sDisplayFormat = "Value";
89
119
  return sPropertyValue;
@@ -117,6 +147,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
117
147
  }
118
148
  const link = event.getSource();
119
149
  const analyticalTable = FPMHelper.getMdcTable(link);
150
+ const popoverId = `${analyticalTable.getId()}-multiUnitPopover`;
151
+ if (analyticalTable.getDependents().some(dependent => dependent.getId() === popoverId)) {
152
+ // Popover is already open for the same link (otherwise the dependent would have been removed and destroyed on close)
153
+ return;
154
+ }
120
155
  const rowContext = link.getBindingContext();
121
156
  const tableRowBinding = rowContext.getBinding();
122
157
 
@@ -166,7 +201,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
166
201
  sorter: new Sorter(unitOrCurrencyName, false) // Order by currency
167
202
  };
168
203
  const isPopoverForGrandTotal = rowContextData["@$ui5.node.level"] === 0;
169
- const popover = await Util.createOrUpdateMultiUnitPopover(`${analyticalTable.getId()}-multiUnitPopover`, {
204
+ const popover = await Util.createOrUpdateMultiUnitPopover(popoverId, {
170
205
  control: analyticalTable,
171
206
  grandTotal: isPopoverForGrandTotal,
172
207
  itemsBindingInfo: oItemsBindingInfo,
@@ -185,4 +220,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
185
220
  ObjectPath.set("sap.fe.macros.field.FieldRuntime", FieldRuntime);
186
221
  return FieldRuntime;
187
222
  }, false);
188
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWVsZFJ1bnRpbWUiLCJ1cGxvYWRQcm9taXNlcyIsImNyZWF0aW5nSW5hY3RpdmVSb3ciLCJpc0RyYWZ0SW5kaWNhdG9yVmlzaWJsZSIsInNQcm9wZXJ0eVBhdGgiLCJzU2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvciIsIkhhc0RyYWZ0RW50aXR5IiwiSXNBY3RpdmVFbnRpdHkiLCJoaWRlRHJhZnRJbmZvIiwidW5kZWZpbmVkIiwib25WYWxpZGF0ZUZpZWxkR3JvdXAiLCJvRXZlbnQiLCJvU291cmNlRmllbGQiLCJnZXRTb3VyY2UiLCJ2aWV3IiwiQ29tbW9uVXRpbHMiLCJnZXRUYXJnZXRWaWV3IiwiY29udHJvbGxlciIsImdldENvbnRyb2xsZXIiLCJvRkVDb250cm9sbGVyIiwiRmllbGRSdW50aW1lSGVscGVyIiwiZ2V0RXh0ZW5zaW9uQ29udHJvbGxlciIsIl9zaWRlRWZmZWN0cyIsImhhbmRsZUZpZWxkR3JvdXBDaGFuZ2UiLCJfZm5GaXhIYXNoUXVlcnlTdHJpbmciLCJzQ3VycmVudEhhc2giLCJpbmNsdWRlcyIsInNwbGl0IiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsInNQcm9wZXJ0eVZhbHVlIiwic1Byb3BlcnR5RnVsbFBhdGgiLCJzRGlzcGxheUZvcm1hdCIsInNUZXh0UHJvcGVydHkiLCJvTWV0YU1vZGVsIiwic1Byb3BlcnR5TmFtZSIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiQ29tbW9uSGVscGVyIiwiZ2V0T2JqZWN0IiwicmVxdWVzdFZhbHVlTGlzdEluZm8iLCJ0aGVuIiwibVZhbHVlTGlzdEluZm8iLCJvVmFsdWVMaXN0SW5mbyIsIk9iamVjdCIsImtleXMiLCJvVmFsdWVMaXN0TW9kZWwiLCIkbW9kZWwiLCJvTWV0YU1vZGVsVmFsdWVMaXN0Iiwib1BhcmFtV2l0aEtleSIsIlBhcmFtZXRlcnMiLCJmaW5kIiwib1BhcmFtZXRlciIsIkxvY2FsRGF0YVByb3BlcnR5IiwiJFByb3BlcnR5UGF0aCIsIlZhbHVlTGlzdFByb3BlcnR5IiwiRXJyb3IiLCJvVGV4dEFubm90YXRpb24iLCJDb2xsZWN0aW9uUGF0aCIsIiRQYXRoIiwib0ZpbHRlciIsIkZpbHRlciIsInBhdGgiLCJvcGVyYXRvciIsInZhbHVlMSIsIm9MaXN0QmluZGluZyIsImJpbmRMaXN0IiwiJHNlbGVjdCIsInJlcXVlc3RDb250ZXh0cyIsImFDb250ZXh0cyIsInNEZXNjcmlwdGlvbiIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsImdldFRleHQiLCJjYXRjaCIsIm9FcnJvciIsImVycm9yT2JqIiwic01zZyIsInN0YXR1cyIsIm1lc3NhZ2UiLCJMb2ciLCJlcnJvciIsImRpc3BsYXlBZ2dyZWdhdGVEZXRhaWxzIiwiZXZlbnQiLCJhZ2dyZWdhdGVkUHJvcGVydHlQYXRoIiwibGluayIsImFuYWx5dGljYWxUYWJsZSIsIkZQTUhlbHBlciIsImdldE1kY1RhYmxlIiwicm93Q29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwidGFibGVSb3dCaW5kaW5nIiwiZ2V0QmluZGluZyIsInJvd0NvbnRleHREYXRhIiwicm93U3BlY2lmaWNGaWx0ZXIiLCJyb3dGaWx0ZXIiLCJnZXRGaWx0ZXIiLCJwdXNoIiwiYWxsRmlsdGVycyIsImNvbmNhdCIsImdldEZpbHRlcnMiLCJhZ2dyZWdhdGlvbiIsImdldEFnZ3JlZ2F0aW9uIiwidW5pdE9yQ3VycmVuY3lOYW1lIiwiYWdncmVnYXRlIiwidW5pdCIsImdyb3VwIiwiZ3JhbmRUb3RhbCIsInN1YnRvdGFscyIsInRhYmxlSXRlbSIsImdldERlcGVuZGVudHMiLCJjbG9uZSIsImN1cnJlbmN5T3JRdWFudGl0eUVuYWJsZWRMYXlvdXQiLCJIQm94IiwicmVuZGVyVHlwZSIsImp1c3RpZnlDb250ZW50IiwiaXRlbXMiLCJhZ2dyZWdhdGlvblBhcmFtZXRlcnMiLCJzZWFyY2giLCJvSXRlbXNCaW5kaW5nSW5mbyIsImdldFJlc29sdmVkUGF0aCIsImZpbHRlcnMiLCJwYXJhbWV0ZXJzIiwiJCRhZ2dyZWdhdGlvbiIsInNvcnRlciIsIlNvcnRlciIsImlzUG9wb3ZlckZvckdyYW5kVG90YWwiLCJwb3BvdmVyIiwiVXRpbCIsImNyZWF0ZU9yVXBkYXRlTXVsdGlVbml0UG9wb3ZlciIsImdldElkIiwiY29udHJvbCIsIml0ZW1zQmluZGluZ0luZm8iLCJsaXN0SXRlbUNvbnRlbnRUZW1wbGF0ZSIsImFkZERlcGVuZGVudCIsImZuT25DbG9zZSIsInJlbW92ZURlcGVuZGVudCIsImRldGFjaEV2ZW50IiwiZGVzdHJveSIsImF0dGFjaEV2ZW50Iiwib3BlbkJ5IiwiT2JqZWN0UGF0aCIsInNldCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRmllbGRSdW50aW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IE9iamVjdFBhdGggZnJvbSBcInNhcC9iYXNlL3V0aWwvT2JqZWN0UGF0aFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IEZQTUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXJcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7ICRIQm94U2V0dGluZ3MgfSBmcm9tIFwic2FwL20vSEJveFwiO1xuaW1wb3J0IEhCb3ggZnJvbSBcInNhcC9tL0hCb3hcIjtcbmltcG9ydCB0eXBlIExpbmsgZnJvbSBcInNhcC9tL0xpbmtcIjtcbmltcG9ydCB0eXBlIFJlc3BvbnNpdmVQb3BvdmVyIGZyb20gXCJzYXAvbS9SZXNwb25zaXZlUG9wb3ZlclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBVdGlsIH0gZnJvbSBcInNhcC9tL3RhYmxlL1V0aWxcIjtcbmltcG9ydCB0eXBlIEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCBTb3J0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9Tb3J0ZXJcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IEZpZWxkUnVudGltZUhlbHBlciBmcm9tIFwiLi9GaWVsZFJ1bnRpbWVIZWxwZXJcIjtcblxuLyoqXG4gKiBTdGF0aWMgY2xhc3MgdXNlZCBieSBcInNhcC51aS5tZGMuRmllbGRcIiBkdXJpbmcgcnVudGltZVxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgRmllbGRSdW50aW1lID0ge1xuXHR1cGxvYWRQcm9taXNlczoge30gYXMgUmVjb3JkPHN0cmluZywgeyByZXNvbHZlOiBGdW5jdGlvbjsgcmVqZWN0OiBGdW5jdGlvbiB9Pixcblx0Y3JlYXRpbmdJbmFjdGl2ZVJvdzogZmFsc2UsXG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgYSBmb3JtYXR0ZXIgaW4gZGlzZ3Vpc2UuXG5cdCAqIEBwYXJhbSBzUHJvcGVydHlQYXRoXG5cdCAqIEBwYXJhbSBzU2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvclxuXHQgKiBAcGFyYW0gSGFzRHJhZnRFbnRpdHlcblx0ICogQHBhcmFtIElzQWN0aXZlRW50aXR5XG5cdCAqIEBwYXJhbSBoaWRlRHJhZnRJbmZvXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGRyYWZ0IGluZGljYXRvciBzaG91bGQgYmUgZGlzcGxheWVkLlxuXHQgKi9cblx0aXNEcmFmdEluZGljYXRvclZpc2libGU6IGZ1bmN0aW9uIChcblx0XHRzUHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdFx0c1NlbWFudGljS2V5SGFzRHJhZnRJbmRpY2F0b3I6IHN0cmluZyxcblx0XHRIYXNEcmFmdEVudGl0eT86IGJvb2xlYW4sXG5cdFx0SXNBY3RpdmVFbnRpdHk/OiBib29sZWFuLFxuXHRcdGhpZGVEcmFmdEluZm8/OiBib29sZWFuXG5cdCk6IGJvb2xlYW4ge1xuXHRcdGlmIChJc0FjdGl2ZUVudGl0eSAhPT0gdW5kZWZpbmVkICYmIEhhc0RyYWZ0RW50aXR5ICE9PSB1bmRlZmluZWQgJiYgKCFJc0FjdGl2ZUVudGl0eSB8fCBIYXNEcmFmdEVudGl0eSkgJiYgIWhpZGVEcmFmdEluZm8pIHtcblx0XHRcdHJldHVybiBzUHJvcGVydHlQYXRoID09PSBzU2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvcjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogSGFuZGxlciBmb3IgdGhlIHZhbGlkYXRlRmllbGRHcm91cCBldmVudC5cblx0ICogQHBhcmFtIG9FdmVudCBUaGUgZXZlbnQgb2JqZWN0IHBhc3NlZCBieSB0aGUgdmFsaWRhdGVGaWVsZEdyb3VwIGV2ZW50XG5cdCAqL1xuXHRvblZhbGlkYXRlRmllbGRHcm91cDogZnVuY3Rpb24gKG9FdmVudDogQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IG9Tb3VyY2VGaWVsZCA9IG9FdmVudC5nZXRTb3VyY2UoKSBhcyBNYW5hZ2VkT2JqZWN0O1xuXHRcdGNvbnN0IHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KG9Tb3VyY2VGaWVsZCksXG5cdFx0XHRjb250cm9sbGVyID0gdmlldy5nZXRDb250cm9sbGVyKCk7XG5cblx0XHRjb25zdCBvRkVDb250cm9sbGVyID0gRmllbGRSdW50aW1lSGVscGVyLmdldEV4dGVuc2lvbkNvbnRyb2xsZXIoY29udHJvbGxlcik7XG5cdFx0b0ZFQ29udHJvbGxlci5fc2lkZUVmZmVjdHMuaGFuZGxlRmllbGRHcm91cENoYW5nZShvRXZlbnQpO1xuXHR9LFxuXG5cdF9mbkZpeEhhc2hRdWVyeVN0cmluZzogZnVuY3Rpb24gKHNDdXJyZW50SGFzaDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRpZiAoc0N1cnJlbnRIYXNoPy5pbmNsdWRlcyhcIj9cIikpIHtcblx0XHRcdC8vIHNDdXJyZW50SGFzaCBjYW4gY29udGFpbiBxdWVyeSBzdHJpbmcsIGN1dCBpdCBvZmYhXG5cdFx0XHRzQ3VycmVudEhhc2ggPSBzQ3VycmVudEhhc2guc3BsaXQoXCI/XCIpWzBdO1xuXHRcdH1cblx0XHRyZXR1cm4gc0N1cnJlbnRIYXNoO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gcmV0cmlldmUgdGV4dCBmcm9tIHRoZSB2YWx1ZSBsaXN0IGZvciBEYXRhRmllbGQuXG5cdCAqIFRoaXMgaXMgYSBmb3JtYXR0ZXIgaW4gZGlzZ3Vpc2UuXG5cdCAqIEBwYXJhbSBzUHJvcGVydHlWYWx1ZSBUaGUgcHJvcGVydHkgdmFsdWUgb2YgdGhlIGRhdGEgZmllbGQuXG5cdCAqIEBwYXJhbSBzUHJvcGVydHlGdWxsUGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSBwcm9wZXJ0eSBpbiB0aGUgbWV0YWRhdGEuXG5cdCAqIEBwYXJhbSBzRGlzcGxheUZvcm1hdCBUaGUgZGlzcGxheSBmb3JtYXQgZm9yIHRoZSBkYXRhIGZpZWxkLlxuXHQgKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIHZhbHVlIGJhc2VkIG9uIHRoZSBkaXNwbGF5IGZvcm1hdC5cblx0ICovXG5cdHJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Q6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHR0aGlzOiBDb250cm9sLFxuXHRcdHNQcm9wZXJ0eVZhbHVlOiBzdHJpbmcsXG5cdFx0c1Byb3BlcnR5RnVsbFBhdGg6IHN0cmluZyxcblx0XHRzRGlzcGxheUZvcm1hdDogc3RyaW5nXG5cdCk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0bGV0IHNUZXh0UHJvcGVydHk6IHN0cmluZztcblx0XHRsZXQgb01ldGFNb2RlbDtcblx0XHRsZXQgc1Byb3BlcnR5TmFtZTogc3RyaW5nO1xuXHRcdGlmIChzUHJvcGVydHlWYWx1ZSkge1xuXHRcdFx0b01ldGFNb2RlbCA9ICh0aGlzLmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsKSB8fCBDb21tb25IZWxwZXIuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRzUHJvcGVydHlOYW1lID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c1Byb3BlcnR5RnVsbFBhdGh9QHNhcHVpLm5hbWVgKTtcblx0XHRcdHJldHVybiBvTWV0YU1vZGVsXG5cdFx0XHRcdC5yZXF1ZXN0VmFsdWVMaXN0SW5mbyhzUHJvcGVydHlGdWxsUGF0aCwgdHJ1ZSlcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKG1WYWx1ZUxpc3RJbmZvKSB7XG5cdFx0XHRcdFx0Ly8gdGFrZSB0aGUgXCJcIiBvbmUgaWYgZXhpc3RzLCBvdGhlcndpc2UgdGFrZSB0aGUgZmlyc3Qgb25lIGluIHRoZSBvYmplY3QgVE9ETzogdG8gYmUgZGlzY3Vzc2VkXG5cdFx0XHRcdFx0Y29uc3Qgb1ZhbHVlTGlzdEluZm8gPSBtVmFsdWVMaXN0SW5mb1ttVmFsdWVMaXN0SW5mb1tcIlwiXSA/IFwiXCIgOiBPYmplY3Qua2V5cyhtVmFsdWVMaXN0SW5mbylbMF1dO1xuXHRcdFx0XHRcdGNvbnN0IG9WYWx1ZUxpc3RNb2RlbCA9IG9WYWx1ZUxpc3RJbmZvLiRtb2RlbDtcblx0XHRcdFx0XHRjb25zdCBvTWV0YU1vZGVsVmFsdWVMaXN0ID0gb1ZhbHVlTGlzdE1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0XHRcdGNvbnN0IG9QYXJhbVdpdGhLZXkgPSBvVmFsdWVMaXN0SW5mby5QYXJhbWV0ZXJzLmZpbmQoZnVuY3Rpb24gKG9QYXJhbWV0ZXI6IHtcblx0XHRcdFx0XHRcdExvY2FsRGF0YVByb3BlcnR5PzogeyAkUHJvcGVydHlQYXRoOiBzdHJpbmcgfTtcblx0XHRcdFx0XHR9KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb1BhcmFtZXRlci5Mb2NhbERhdGFQcm9wZXJ0eSAmJiBvUGFyYW1ldGVyLkxvY2FsRGF0YVByb3BlcnR5LiRQcm9wZXJ0eVBhdGggPT09IHNQcm9wZXJ0eU5hbWU7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0aWYgKG9QYXJhbVdpdGhLZXkgJiYgIW9QYXJhbVdpdGhLZXkuVmFsdWVMaXN0UHJvcGVydHkpIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgSW5jb25zaXN0ZW50IHZhbHVlIGhlbHAgYW5ub3RhdGlvbiBmb3IgJHtzUHJvcGVydHlOYW1lfWApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBvVGV4dEFubm90YXRpb24gPSBvTWV0YU1vZGVsVmFsdWVMaXN0LmdldE9iamVjdChcblx0XHRcdFx0XHRcdGAvJHtvVmFsdWVMaXN0SW5mby5Db2xsZWN0aW9uUGF0aH0vJHtvUGFyYW1XaXRoS2V5LlZhbHVlTGlzdFByb3BlcnR5fUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dGBcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0aWYgKG9UZXh0QW5ub3RhdGlvbiAmJiBvVGV4dEFubm90YXRpb24uJFBhdGgpIHtcblx0XHRcdFx0XHRcdHNUZXh0UHJvcGVydHkgPSBvVGV4dEFubm90YXRpb24uJFBhdGg7XG5cdFx0XHRcdFx0XHRjb25zdCBvRmlsdGVyID0gbmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0XHRcdHBhdGg6IG9QYXJhbVdpdGhLZXkuVmFsdWVMaXN0UHJvcGVydHksXG5cdFx0XHRcdFx0XHRcdG9wZXJhdG9yOiBcIkVRXCIsXG5cdFx0XHRcdFx0XHRcdHZhbHVlMTogc1Byb3BlcnR5VmFsdWVcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0Y29uc3Qgb0xpc3RCaW5kaW5nID0gb1ZhbHVlTGlzdE1vZGVsLmJpbmRMaXN0KGAvJHtvVmFsdWVMaXN0SW5mby5Db2xsZWN0aW9uUGF0aH1gLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgb0ZpbHRlciwge1xuXHRcdFx0XHRcdFx0XHQkc2VsZWN0OiBzVGV4dFByb3BlcnR5XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHJldHVybiBvTGlzdEJpbmRpbmcucmVxdWVzdENvbnRleHRzKDAsIDIpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzRGlzcGxheUZvcm1hdCA9IFwiVmFsdWVcIjtcblx0XHRcdFx0XHRcdHJldHVybiBzUHJvcGVydHlWYWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChhQ29udGV4dHM6IENvbnRleHRbXSkge1xuXHRcdFx0XHRcdGNvbnN0IHNEZXNjcmlwdGlvbiA9IHNUZXh0UHJvcGVydHkgPyBhQ29udGV4dHNbMF0/LmdldE9iamVjdCgpW3NUZXh0UHJvcGVydHldIDogXCJcIjtcblx0XHRcdFx0XHRpZiAoIXNEZXNjcmlwdGlvbikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNQcm9wZXJ0eVZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzd2l0Y2ggKHNEaXNwbGF5Rm9ybWF0KSB7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHNEZXNjcmlwdGlvbiB8fCBzUHJvcGVydHlWYWx1ZTtcblx0XHRcdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLmdldFRleHQoXCJDX0ZPUk1BVF9GT1JfVEVYVF9BUlJBTkdFTUVOVFwiLCBbXG5cdFx0XHRcdFx0XHRcdFx0c0Rlc2NyaXB0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdHNQcm9wZXJ0eVZhbHVlXG5cdFx0XHRcdFx0XHRcdF0pO1xuXHRcdFx0XHRcdFx0Y2FzZSBcIlZhbHVlRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIkNfRk9STUFUX0ZPUl9URVhUX0FSUkFOR0VNRU5UXCIsIFtcblx0XHRcdFx0XHRcdFx0XHRzUHJvcGVydHlWYWx1ZSxcblx0XHRcdFx0XHRcdFx0XHRzRGVzY3JpcHRpb25cblx0XHRcdFx0XHRcdFx0XSk7XG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gc1Byb3BlcnR5VmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdGNvbnN0IGVycm9yT2JqID0gb0Vycm9yIGFzIHsgc3RhdHVzOiBudW1iZXI7IG1lc3NhZ2U6IHN0cmluZyB9O1xuXHRcdFx0XHRcdGNvbnN0IHNNc2cgPVxuXHRcdFx0XHRcdFx0ZXJyb3JPYmouc3RhdHVzICYmIGVycm9yT2JqLnN0YXR1cyA9PT0gNDA0XG5cdFx0XHRcdFx0XHRcdD8gYE1ldGFkYXRhIG5vdCBmb3VuZCAoJHtlcnJvck9iai5zdGF0dXN9KSBmb3IgdmFsdWUgaGVscCBvZiBwcm9wZXJ0eSAke3NQcm9wZXJ0eUZ1bGxQYXRofWBcblx0XHRcdFx0XHRcdFx0OiBlcnJvck9iai5tZXNzYWdlO1xuXHRcdFx0XHRcdExvZy5lcnJvcihzTXNnKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBzUHJvcGVydHlWYWx1ZTtcblx0fSxcblxuXHRkaXNwbGF5QWdncmVnYXRlRGV0YWlsczogYXN5bmMgZnVuY3Rpb24gKGV2ZW50OiBFdmVudCwgYWdncmVnYXRlZFByb3BlcnR5UGF0aD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICghYWdncmVnYXRlZFByb3BlcnR5UGF0aCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBsaW5rID0gZXZlbnQuZ2V0U291cmNlPExpbms+KCk7XG5cdFx0Y29uc3QgYW5hbHl0aWNhbFRhYmxlID0gRlBNSGVscGVyLmdldE1kY1RhYmxlKGxpbmspITtcblxuXHRcdGNvbnN0IHJvd0NvbnRleHQgPSBsaW5rLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRjb25zdCB0YWJsZVJvd0JpbmRpbmcgPSByb3dDb250ZXh0LmdldEJpbmRpbmcoKSBhcyBPRGF0YUxpc3RCaW5kaW5nO1xuXG5cdFx0Ly8gR2V0IHRoZSBmaWx0ZXJzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHRvdGFsIHJvd1xuXHRcdGNvbnN0IHJvd0NvbnRleHREYXRhID0gcm93Q29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRjb25zdCByb3dTcGVjaWZpY0ZpbHRlcjogRmlsdGVyW10gPSBbXTtcblx0XHRjb25zdCByb3dGaWx0ZXIgPSByb3dDb250ZXh0LmdldEZpbHRlcigpO1xuXHRcdGlmIChyb3dGaWx0ZXIpIHtcblx0XHRcdHJvd1NwZWNpZmljRmlsdGVyLnB1c2gocm93RmlsdGVyKTtcblx0XHR9XG5cblx0XHQvLyBBZGQgdGhlIGZpbHRlcnMgYXBwbGllZCB0byB0aGUgb3JpZ2luYWwgdGFibGVcblx0XHRjb25zdCBhbGxGaWx0ZXJzID0gcm93U3BlY2lmaWNGaWx0ZXIuY29uY2F0KHRhYmxlUm93QmluZGluZy5nZXRGaWx0ZXJzKFwiQXBwbGljYXRpb25cIiksIHRhYmxlUm93QmluZGluZy5nZXRGaWx0ZXJzKFwiQ29udHJvbFwiKSk7XG5cblx0XHQvLyBDYWxjdWxhdGUgJCRhZ2dyZWdhdGlvbiBwYXJhbWV0ZXJzIGZvciB0aGUgdGFibGUgaW4gdGhlIHBvcG92ZXIgKGFnZ3JlZ2F0ZSBhbW91bnQsIGdyb3VwIGJ5IGN1cnJlbmN5L3VuaXQpXG5cdFx0Y29uc3QgYWdncmVnYXRpb24gPSB0YWJsZVJvd0JpbmRpbmcuZ2V0QWdncmVnYXRpb24oKSBhcyB7XG5cdFx0XHRncm91cDogUmVjb3JkPHN0cmluZywgb2JqZWN0Pjtcblx0XHRcdGFnZ3JlZ2F0ZTogUmVjb3JkPHN0cmluZywgeyB1bml0OiBzdHJpbmcgfT47XG5cdFx0XHRzZWFyY2g/OiBzdHJpbmc7XG5cdFx0fTtcblx0XHRjb25zdCB1bml0T3JDdXJyZW5jeU5hbWUgPSBhZ2dyZWdhdGlvbi5hZ2dyZWdhdGVbYWdncmVnYXRlZFByb3BlcnR5UGF0aF0udW5pdDtcblx0XHRjb25zdCBncm91cDogUmVjb3JkPHN0cmluZywgb2JqZWN0PiA9IHt9O1xuXHRcdGdyb3VwW3VuaXRPckN1cnJlbmN5TmFtZV0gPSB7fTtcblx0XHRjb25zdCBhZ2dyZWdhdGU6IFJlY29yZDxzdHJpbmcsIG9iamVjdD4gPSB7fTtcblx0XHRhZ2dyZWdhdGVbYWdncmVnYXRlZFByb3BlcnR5UGF0aF0gPSB7IGdyYW5kVG90YWw6IGZhbHNlLCBzdWJ0b3RhbHM6IGZhbHNlLCB1bml0OiB1bml0T3JDdXJyZW5jeU5hbWUgfTtcblxuXHRcdC8vIFRoZSBpdGVtIGRpc3BsYXllZCBpbiB0aGUgdGFibGUgaW4gdGhlIHBvcG92ZXIgaXMgYSBjb3B5IG9mIHRoZSBpdGVtIGRpc3BsYXllZCBpbiB0aGUgdGFibGVcblx0XHRjb25zdCB0YWJsZUl0ZW0gPSBsaW5rLmdldERlcGVuZGVudHMoKVswXS5jbG9uZSgpO1xuXHRcdGNvbnN0IGN1cnJlbmN5T3JRdWFudGl0eUVuYWJsZWRMYXlvdXQgPSBuZXcgSEJveCh7XG5cdFx0XHRyZW5kZXJUeXBlOiBcIkJhcmVcIixcblx0XHRcdGp1c3RpZnlDb250ZW50OiBcIkVuZFwiLFxuXHRcdFx0aXRlbXM6IFt0YWJsZUl0ZW1dXG5cdFx0fSBhcyAkSEJveFNldHRpbmdzKTtcblxuXHRcdGNvbnN0IGFnZ3JlZ2F0aW9uUGFyYW1ldGVyczoge1xuXHRcdFx0Z3JvdXA6IFJlY29yZDxzdHJpbmcsIG9iamVjdD47XG5cdFx0XHRhZ2dyZWdhdGU6IFJlY29yZDxzdHJpbmcsIG9iamVjdD47XG5cdFx0XHRzZWFyY2g/OiBzdHJpbmc7XG5cdFx0fSA9IHsgZ3JvdXAsIGFnZ3JlZ2F0ZSB9O1xuXHRcdGlmIChhZ2dyZWdhdGlvbi5zZWFyY2gpIHtcblx0XHRcdGFnZ3JlZ2F0aW9uUGFyYW1ldGVycy5zZWFyY2ggPSBhZ2dyZWdhdGlvbi5zZWFyY2g7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb0l0ZW1zQmluZGluZ0luZm8gPSB7XG5cdFx0XHRwYXRoOiB0YWJsZVJvd0JpbmRpbmcuZ2V0UmVzb2x2ZWRQYXRoKCksXG5cdFx0XHRmaWx0ZXJzOiBhbGxGaWx0ZXJzLFxuXHRcdFx0cGFyYW1ldGVyczoge1xuXHRcdFx0XHQkJGFnZ3JlZ2F0aW9uOiBhZ2dyZWdhdGlvblBhcmFtZXRlcnNcblx0XHRcdH0sXG5cdFx0XHRzb3J0ZXI6IG5ldyBTb3J0ZXIodW5pdE9yQ3VycmVuY3lOYW1lLCBmYWxzZSkgLy8gT3JkZXIgYnkgY3VycmVuY3lcblx0XHR9O1xuXG5cdFx0Y29uc3QgaXNQb3BvdmVyRm9yR3JhbmRUb3RhbCA9IHJvd0NvbnRleHREYXRhW1wiQCR1aTUubm9kZS5sZXZlbFwiXSA9PT0gMDtcblx0XHRjb25zdCBwb3BvdmVyOiBSZXNwb25zaXZlUG9wb3ZlciA9IGF3YWl0IFV0aWwuY3JlYXRlT3JVcGRhdGVNdWx0aVVuaXRQb3BvdmVyKGAke2FuYWx5dGljYWxUYWJsZS5nZXRJZCgpfS1tdWx0aVVuaXRQb3BvdmVyYCwge1xuXHRcdFx0Y29udHJvbDogYW5hbHl0aWNhbFRhYmxlLFxuXHRcdFx0Z3JhbmRUb3RhbDogaXNQb3BvdmVyRm9yR3JhbmRUb3RhbCxcblx0XHRcdGl0ZW1zQmluZGluZ0luZm86IG9JdGVtc0JpbmRpbmdJbmZvLFxuXHRcdFx0bGlzdEl0ZW1Db250ZW50VGVtcGxhdGU6IGN1cnJlbmN5T3JRdWFudGl0eUVuYWJsZWRMYXlvdXRcblx0XHR9KTtcblx0XHRhbmFseXRpY2FsVGFibGUuYWRkRGVwZW5kZW50KHBvcG92ZXIpO1xuXG5cdFx0Y29uc3QgZm5PbkNsb3NlID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0YW5hbHl0aWNhbFRhYmxlLnJlbW92ZURlcGVuZGVudChwb3BvdmVyKTtcblx0XHRcdHBvcG92ZXIuZGV0YWNoRXZlbnQoXCJhZnRlckNsb3NlXCIsIGZuT25DbG9zZSk7XG5cdFx0XHRwb3BvdmVyLmRlc3Ryb3koKTtcblx0XHR9O1xuXHRcdHBvcG92ZXIuYXR0YWNoRXZlbnQoXCJhZnRlckNsb3NlXCIsIGZuT25DbG9zZSk7XG5cdFx0cG9wb3Zlci5vcGVuQnkobGluayk7XG5cdH1cbn07XG5cbk9iamVjdFBhdGguc2V0KFwic2FwLmZlLm1hY3Jvcy5maWVsZC5GaWVsZFJ1bnRpbWVcIiwgRmllbGRSdW50aW1lKTtcblxuZXhwb3J0IGRlZmF1bHQgRmllbGRSdW50aW1lO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0VBc0JBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsTUFBTUEsWUFBWSxHQUFHO0lBQ3BCQyxjQUFjLEVBQUUsQ0FBQyxDQUE0RDtJQUM3RUMsbUJBQW1CLEVBQUUsS0FBSztJQUUxQjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQ0MsdUJBQXVCLEVBQUUsU0FBQUEsQ0FDeEJDLGFBQXFCLEVBQ3JCQyw2QkFBcUMsRUFDckNDLGNBQXdCLEVBQ3hCQyxjQUF3QixFQUN4QkMsYUFBdUIsRUFDYjtNQUNWLElBQUlELGNBQWMsS0FBS0UsU0FBUyxJQUFJSCxjQUFjLEtBQUtHLFNBQVMsS0FBSyxDQUFDRixjQUFjLElBQUlELGNBQWMsQ0FBQyxJQUFJLENBQUNFLGFBQWEsRUFBRTtRQUMxSCxP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
223
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWVsZFJ1bnRpbWUiLCJ1cGxvYWRQcm9taXNlcyIsImNyZWF0aW5nSW5hY3RpdmVSb3ciLCJpc0RyYWZ0SW5kaWNhdG9yVmlzaWJsZSIsInNQcm9wZXJ0eVBhdGgiLCJzU2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvciIsIkhhc0RyYWZ0RW50aXR5IiwiSXNBY3RpdmVFbnRpdHkiLCJoaWRlRHJhZnRJbmZvIiwidW5kZWZpbmVkIiwib25WYWxpZGF0ZUZpZWxkR3JvdXAiLCJvRXZlbnQiLCJvU291cmNlRmllbGQiLCJnZXRTb3VyY2UiLCJ2aWV3IiwiQ29tbW9uVXRpbHMiLCJnZXRUYXJnZXRWaWV3IiwiY29udHJvbGxlciIsImdldENvbnRyb2xsZXIiLCJvRkVDb250cm9sbGVyIiwiRmllbGRSdW50aW1lSGVscGVyIiwiZ2V0RXh0ZW5zaW9uQ29udHJvbGxlciIsIl9zaWRlRWZmZWN0cyIsImhhbmRsZUZpZWxkR3JvdXBDaGFuZ2UiLCJfZm5GaXhIYXNoUXVlcnlTdHJpbmciLCJzQ3VycmVudEhhc2giLCJpbmNsdWRlcyIsInNwbGl0IiwiY3JlYXRlVmFsdWVMaXN0RmlsdGVycyIsInZhbHVlTGlzdEluZm8iLCJwcm9wZXJ0eUlkIiwicHJvcGVydHlWYWx1ZSIsImJpbmRpbmdDb250ZXh0IiwiZmlsdGVycyIsIkZpbHRlciIsInBhdGgiLCJvcGVyYXRvciIsInZhbHVlMSIsIlBhcmFtZXRlcnMiLCJyZWxldmFudFBhcmFtZXRlcnMiLCJmaWx0ZXIiLCJwYXJhbWV0ZXIiLCJpc0luT3JJbk91dCIsIiRUeXBlIiwiTG9jYWxEYXRhUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwiVmFsdWVMaXN0UHJvcGVydHkiLCJmb3JFYWNoIiwibG9jYWxWYWx1ZSIsImdldFByb3BlcnR5IiwicHVzaCIsInJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QiLCJzUHJvcGVydHlWYWx1ZSIsInNQcm9wZXJ0eUZ1bGxQYXRoIiwic0Rpc3BsYXlGb3JtYXQiLCJzVGV4dFByb3BlcnR5Iiwib01ldGFNb2RlbCIsInNQcm9wZXJ0eU5hbWUiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsIkNvbW1vbkhlbHBlciIsImdldE9iamVjdCIsImdldEJpbmRpbmdDb250ZXh0IiwicmVxdWVzdFZhbHVlTGlzdEluZm8iLCJ0aGVuIiwibVZhbHVlTGlzdEluZm8iLCJvVmFsdWVMaXN0SW5mbyIsIk9iamVjdCIsImtleXMiLCJvVmFsdWVMaXN0TW9kZWwiLCIkbW9kZWwiLCJvTWV0YU1vZGVsVmFsdWVMaXN0Iiwib1BhcmFtV2l0aEtleSIsImZpbmQiLCJvUGFyYW1ldGVyIiwiRXJyb3IiLCJvVGV4dEFubm90YXRpb24iLCJDb2xsZWN0aW9uUGF0aCIsIiRQYXRoIiwibGlzdEJpbmRpbmciLCJiaW5kTGlzdCIsIiRzZWxlY3QiLCJyZXF1ZXN0Q29udGV4dHMiLCJhQ29udGV4dHMiLCJzRGVzY3JpcHRpb24iLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJnZXRUZXh0IiwiY2F0Y2giLCJvRXJyb3IiLCJlcnJvck9iaiIsInNNc2ciLCJzdGF0dXMiLCJtZXNzYWdlIiwiTG9nIiwiZXJyb3IiLCJkaXNwbGF5QWdncmVnYXRlRGV0YWlscyIsImV2ZW50IiwiYWdncmVnYXRlZFByb3BlcnR5UGF0aCIsImxpbmsiLCJhbmFseXRpY2FsVGFibGUiLCJGUE1IZWxwZXIiLCJnZXRNZGNUYWJsZSIsInBvcG92ZXJJZCIsImdldElkIiwiZ2V0RGVwZW5kZW50cyIsInNvbWUiLCJkZXBlbmRlbnQiLCJyb3dDb250ZXh0IiwidGFibGVSb3dCaW5kaW5nIiwiZ2V0QmluZGluZyIsInJvd0NvbnRleHREYXRhIiwicm93U3BlY2lmaWNGaWx0ZXIiLCJyb3dGaWx0ZXIiLCJnZXRGaWx0ZXIiLCJhbGxGaWx0ZXJzIiwiY29uY2F0IiwiZ2V0RmlsdGVycyIsImFnZ3JlZ2F0aW9uIiwiZ2V0QWdncmVnYXRpb24iLCJ1bml0T3JDdXJyZW5jeU5hbWUiLCJhZ2dyZWdhdGUiLCJ1bml0IiwiZ3JvdXAiLCJncmFuZFRvdGFsIiwic3VidG90YWxzIiwidGFibGVJdGVtIiwiY2xvbmUiLCJjdXJyZW5jeU9yUXVhbnRpdHlFbmFibGVkTGF5b3V0IiwiSEJveCIsInJlbmRlclR5cGUiLCJqdXN0aWZ5Q29udGVudCIsIml0ZW1zIiwiYWdncmVnYXRpb25QYXJhbWV0ZXJzIiwic2VhcmNoIiwib0l0ZW1zQmluZGluZ0luZm8iLCJnZXRSZXNvbHZlZFBhdGgiLCJwYXJhbWV0ZXJzIiwiJCRhZ2dyZWdhdGlvbiIsInNvcnRlciIsIlNvcnRlciIsImlzUG9wb3ZlckZvckdyYW5kVG90YWwiLCJwb3BvdmVyIiwiVXRpbCIsImNyZWF0ZU9yVXBkYXRlTXVsdGlVbml0UG9wb3ZlciIsImNvbnRyb2wiLCJpdGVtc0JpbmRpbmdJbmZvIiwibGlzdEl0ZW1Db250ZW50VGVtcGxhdGUiLCJhZGREZXBlbmRlbnQiLCJmbk9uQ2xvc2UiLCJyZW1vdmVEZXBlbmRlbnQiLCJkZXRhY2hFdmVudCIsImRlc3Ryb3kiLCJhdHRhY2hFdmVudCIsIm9wZW5CeSIsIk9iamVjdFBhdGgiLCJzZXQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkZpZWxkUnVudGltZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBPYmplY3RQYXRoIGZyb20gXCJzYXAvYmFzZS91dGlsL09iamVjdFBhdGhcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBGUE1IZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRlBNSGVscGVyXCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL3ZhbHVlaGVscC9WYWx1ZUxpc3RIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgJEhCb3hTZXR0aW5ncyB9IGZyb20gXCJzYXAvbS9IQm94XCI7XG5pbXBvcnQgSEJveCBmcm9tIFwic2FwL20vSEJveFwiO1xuaW1wb3J0IHR5cGUgTGluayBmcm9tIFwic2FwL20vTGlua1wiO1xuaW1wb3J0IHR5cGUgUmVzcG9uc2l2ZVBvcG92ZXIgZnJvbSBcInNhcC9tL1Jlc3BvbnNpdmVQb3BvdmVyXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFV0aWwgfSBmcm9tIFwic2FwL20vdGFibGUvVXRpbFwiO1xuaW1wb3J0IHR5cGUgRXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2wkVmFsaWRhdGVGaWVsZEdyb3VwRXZlbnQgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgQmFzZUNvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgU29ydGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvU29ydGVyXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBGaWVsZFJ1bnRpbWVIZWxwZXIgZnJvbSBcIi4vRmllbGRSdW50aW1lSGVscGVyXCI7XG5cbi8qKlxuICogU3RhdGljIGNsYXNzIHVzZWQgYnkgXCJzYXAudWkubWRjLkZpZWxkXCIgZHVyaW5nIHJ1bnRpbWVcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IEZpZWxkUnVudGltZSA9IHtcblx0dXBsb2FkUHJvbWlzZXM6IHt9IGFzIFJlY29yZDxzdHJpbmcsIHsgcmVzb2x2ZTogRnVuY3Rpb247IHJlamVjdDogRnVuY3Rpb24gfT4sXG5cdGNyZWF0aW5nSW5hY3RpdmVSb3c6IGZhbHNlLFxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgZm9ybWF0dGVyIGluIGRpc2d1aXNlLlxuXHQgKiBAcGFyYW0gc1Byb3BlcnR5UGF0aFxuXHQgKiBAcGFyYW0gc1NlbWFudGljS2V5SGFzRHJhZnRJbmRpY2F0b3Jcblx0ICogQHBhcmFtIEhhc0RyYWZ0RW50aXR5XG5cdCAqIEBwYXJhbSBJc0FjdGl2ZUVudGl0eVxuXHQgKiBAcGFyYW0gaGlkZURyYWZ0SW5mb1xuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBkcmFmdCBpbmRpY2F0b3Igc2hvdWxkIGJlIGRpc3BsYXllZC5cblx0ICovXG5cdGlzRHJhZnRJbmRpY2F0b3JWaXNpYmxlOiBmdW5jdGlvbiAoXG5cdFx0c1Byb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRcdHNTZW1hbnRpY0tleUhhc0RyYWZ0SW5kaWNhdG9yOiBzdHJpbmcsXG5cdFx0SGFzRHJhZnRFbnRpdHk/OiBib29sZWFuLFxuXHRcdElzQWN0aXZlRW50aXR5PzogYm9vbGVhbixcblx0XHRoaWRlRHJhZnRJbmZvPzogYm9vbGVhblxuXHQpOiBib29sZWFuIHtcblx0XHRpZiAoSXNBY3RpdmVFbnRpdHkgIT09IHVuZGVmaW5lZCAmJiBIYXNEcmFmdEVudGl0eSAhPT0gdW5kZWZpbmVkICYmICghSXNBY3RpdmVFbnRpdHkgfHwgSGFzRHJhZnRFbnRpdHkpICYmICFoaWRlRHJhZnRJbmZvKSB7XG5cdFx0XHRyZXR1cm4gc1Byb3BlcnR5UGF0aCA9PT0gc1NlbWFudGljS2V5SGFzRHJhZnRJbmRpY2F0b3I7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIEhhbmRsZXIgZm9yIHRoZSB2YWxpZGF0ZUZpZWxkR3JvdXAgZXZlbnQuXG5cdCAqIEBwYXJhbSBvRXZlbnQgVGhlIGV2ZW50IG9iamVjdCBwYXNzZWQgYnkgdGhlIHZhbGlkYXRlRmllbGRHcm91cCBldmVudFxuXHQgKi9cblx0b25WYWxpZGF0ZUZpZWxkR3JvdXA6IGZ1bmN0aW9uIChvRXZlbnQ6IENvbnRyb2wkVmFsaWRhdGVGaWVsZEdyb3VwRXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBvU291cmNlRmllbGQgPSBvRXZlbnQuZ2V0U291cmNlKCkgYXMgTWFuYWdlZE9iamVjdDtcblx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0VmlldyhvU291cmNlRmllbGQpLFxuXHRcdFx0Y29udHJvbGxlciA9IHZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXG5cdFx0Y29uc3Qgb0ZFQ29udHJvbGxlciA9IEZpZWxkUnVudGltZUhlbHBlci5nZXRFeHRlbnNpb25Db250cm9sbGVyKGNvbnRyb2xsZXIpO1xuXHRcdG9GRUNvbnRyb2xsZXIuX3NpZGVFZmZlY3RzLmhhbmRsZUZpZWxkR3JvdXBDaGFuZ2Uob0V2ZW50KTtcblx0fSxcblxuXHRfZm5GaXhIYXNoUXVlcnlTdHJpbmc6IGZ1bmN0aW9uIChzQ3VycmVudEhhc2g6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0aWYgKHNDdXJyZW50SGFzaD8uaW5jbHVkZXMoXCI/XCIpKSB7XG5cdFx0XHQvLyBzQ3VycmVudEhhc2ggY2FuIGNvbnRhaW4gcXVlcnkgc3RyaW5nLCBjdXQgaXQgb2ZmIVxuXHRcdFx0c0N1cnJlbnRIYXNoID0gc0N1cnJlbnRIYXNoLnNwbGl0KFwiP1wiKVswXTtcblx0XHR9XG5cdFx0cmV0dXJuIHNDdXJyZW50SGFzaDtcblx0fSxcblxuXHQvKipcblx0ICogQ3JlYXRlcyBmaWx0ZXJzIGZvciBWYWx1ZUxpc3QgcmVxdWVzdHMgYmFzZWQgb24gVmFsdWVMaXN0UGFyYW1ldGVySW4gYW5kIFZhbHVlTGlzdFBhcmFtZXRlckluT3V0IGFubm90YXRpb25zLlxuXHQgKiBAcGFyYW0gdmFsdWVMaXN0SW5mbyBUaGUgVmFsdWVMaXN0IGFubm90YXRpb24gaW5mb3JtYXRpb25cblx0ICogQHBhcmFtIHByb3BlcnR5SWQgVGhlIElEIHByb3BlcnR5IG9mIHRoZSBJZEFuZERlc2NpcHRpb24gb2YgdGhlIHRleHQgYXJyYW5nZW1lbnQgYW5ub3RhdGlvblxuXHQgKiBAcGFyYW0gcHJvcGVydHlWYWx1ZSBUaGUgdmFsdWUgZm9yIHRoZSBwcm9wZXJ0eUlkIHByb3BlcnR5XG5cdCAqIEBwYXJhbSBiaW5kaW5nQ29udGV4dCBUaGUgYmluZGluZyBjb250ZXh0IHRvIGdldCB2YWx1ZXMgZnJvbVxuXHQgKiBAcmV0dXJucyBBcnJheSBvZiBmaWx0ZXJzIGZvciB0aGUgVmFsdWVMaXN0IHJlcXVlc3Rcblx0ICovXG5cdGNyZWF0ZVZhbHVlTGlzdEZpbHRlcnM6IGZ1bmN0aW9uIChcblx0XHR2YWx1ZUxpc3RJbmZvOiBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSxcblx0XHRwcm9wZXJ0eUlkOiBzdHJpbmcsXG5cdFx0cHJvcGVydHlWYWx1ZTogc3RyaW5nLFxuXHRcdGJpbmRpbmdDb250ZXh0OiBCYXNlQ29udGV4dCB8IG51bGwgfCB1bmRlZmluZWRcblx0KTogRmlsdGVyW10ge1xuXHRcdC8vIFN0YXJ0IHdpdGggdGhlIGtleSBmaWx0ZXJcblx0XHRjb25zdCBmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtcblx0XHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRwYXRoOiBwcm9wZXJ0eUlkLFxuXHRcdFx0XHRvcGVyYXRvcjogXCJFUVwiLFxuXHRcdFx0XHR2YWx1ZTE6IHByb3BlcnR5VmFsdWVcblx0XHRcdH0pXG5cdFx0XTtcblxuXHRcdGlmIChiaW5kaW5nQ29udGV4dCAmJiB2YWx1ZUxpc3RJbmZvLlBhcmFtZXRlcnMpIHtcblx0XHRcdGNvbnN0IHJlbGV2YW50UGFyYW1ldGVycyA9IHZhbHVlTGlzdEluZm8uUGFyYW1ldGVycy5maWx0ZXIoKHBhcmFtZXRlcikgPT4ge1xuXHRcdFx0XHRjb25zdCBpc0luT3JJbk91dCA9XG5cdFx0XHRcdFx0cGFyYW1ldGVyLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJJblwiIHx8XG5cdFx0XHRcdFx0cGFyYW1ldGVyLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dFwiO1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdGlzSW5PckluT3V0ICYmXG5cdFx0XHRcdFx0cGFyYW1ldGVyLkxvY2FsRGF0YVByb3BlcnR5Py4kUHJvcGVydHlQYXRoICYmXG5cdFx0XHRcdFx0cGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5ICYmXG5cdFx0XHRcdFx0cGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5ICE9PSBwcm9wZXJ0eUlkXG5cdFx0XHRcdCk7XG5cdFx0XHR9KTtcblxuXHRcdFx0cmVsZXZhbnRQYXJhbWV0ZXJzLmZvckVhY2goKHBhcmFtZXRlcikgPT4ge1xuXHRcdFx0XHRjb25zdCBsb2NhbFZhbHVlID0gYmluZGluZ0NvbnRleHQuZ2V0UHJvcGVydHkocGFyYW1ldGVyLkxvY2FsRGF0YVByb3BlcnR5IS4kUHJvcGVydHlQYXRoKTtcblx0XHRcdFx0aWYgKGxvY2FsVmFsdWUgIT09IHVuZGVmaW5lZCAmJiBsb2NhbFZhbHVlICE9PSBudWxsICYmIGxvY2FsVmFsdWUgIT09IFwiXCIpIHtcblx0XHRcdFx0XHRmaWx0ZXJzLnB1c2goXG5cdFx0XHRcdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRcdFx0cGF0aDogcGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5LFxuXHRcdFx0XHRcdFx0XHRvcGVyYXRvcjogXCJFUVwiLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTE6IGxvY2FsVmFsdWVcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZpbHRlcnM7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byByZXRyaWV2ZSB0ZXh0IGZyb20gdGhlIHZhbHVlIGxpc3QgZm9yIERhdGFGaWVsZC5cblx0ICogVGhpcyBpcyBhIGZvcm1hdHRlciBpbiBkaXNndWlzZS5cblx0ICogQHBhcmFtIHNQcm9wZXJ0eVZhbHVlIFRoZSBwcm9wZXJ0eSB2YWx1ZSBvZiB0aGUgZGF0YSBmaWVsZC5cblx0ICogQHBhcmFtIHNQcm9wZXJ0eUZ1bGxQYXRoIFRoZSBmdWxsIHBhdGggdG8gdGhlIHByb3BlcnR5IGluIHRoZSBtZXRhZGF0YS5cblx0ICogQHBhcmFtIHNEaXNwbGF5Rm9ybWF0IFRoZSBkaXNwbGF5IGZvcm1hdCBmb3IgdGhlIGRhdGEgZmllbGQuXG5cdCAqIEByZXR1cm5zIFRoZSBmb3JtYXR0ZWQgdmFsdWUgYmFzZWQgb24gdGhlIGRpc3BsYXkgZm9ybWF0LlxuXHQgKi9cblx0cmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdDogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdHRoaXM6IENvbnRyb2wsXG5cdFx0c1Byb3BlcnR5VmFsdWU6IHN0cmluZyxcblx0XHRzUHJvcGVydHlGdWxsUGF0aDogc3RyaW5nLFxuXHRcdHNEaXNwbGF5Rm9ybWF0OiBzdHJpbmdcblx0KTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRsZXQgc1RleHRQcm9wZXJ0eTogc3RyaW5nO1xuXHRcdGxldCBvTWV0YU1vZGVsO1xuXHRcdGxldCBzUHJvcGVydHlOYW1lOiBzdHJpbmc7XG5cdFx0aWYgKHNQcm9wZXJ0eVZhbHVlKSB7XG5cdFx0XHRvTWV0YU1vZGVsID0gKHRoaXMuZ2V0TW9kZWwoKT8uZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwpIHx8IENvbW1vbkhlbHBlci5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdHNQcm9wZXJ0eU5hbWUgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzUHJvcGVydHlGdWxsUGF0aH1Ac2FwdWkubmFtZWApO1xuXHRcdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSB0aGlzLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHRyZXR1cm4gb01ldGFNb2RlbFxuXHRcdFx0XHQucmVxdWVzdFZhbHVlTGlzdEluZm8oc1Byb3BlcnR5RnVsbFBhdGgsIHRydWUpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChtVmFsdWVMaXN0SW5mbykge1xuXHRcdFx0XHRcdC8vIHRha2UgdGhlIFwiXCIgb25lIGlmIGV4aXN0cywgb3RoZXJ3aXNlIHRha2UgdGhlIGZpcnN0IG9uZSBpbiB0aGUgb2JqZWN0IFRPRE86IHRvIGJlIGRpc2N1c3NlZFxuXHRcdFx0XHRcdGNvbnN0IG9WYWx1ZUxpc3RJbmZvID0gbVZhbHVlTGlzdEluZm9bbVZhbHVlTGlzdEluZm9bXCJcIl0gPyBcIlwiIDogT2JqZWN0LmtleXMobVZhbHVlTGlzdEluZm8pWzBdXTtcblx0XHRcdFx0XHRjb25zdCBvVmFsdWVMaXN0TW9kZWwgPSBvVmFsdWVMaXN0SW5mby4kbW9kZWw7XG5cdFx0XHRcdFx0Y29uc3Qgb01ldGFNb2RlbFZhbHVlTGlzdCA9IG9WYWx1ZUxpc3RNb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdFx0XHRjb25zdCBvUGFyYW1XaXRoS2V5ID0gb1ZhbHVlTGlzdEluZm8uUGFyYW1ldGVycy5maW5kKGZ1bmN0aW9uIChvUGFyYW1ldGVyOiB7XG5cdFx0XHRcdFx0XHRMb2NhbERhdGFQcm9wZXJ0eT86IHsgJFByb3BlcnR5UGF0aDogc3RyaW5nIH07XG5cdFx0XHRcdFx0fSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9QYXJhbWV0ZXIuTG9jYWxEYXRhUHJvcGVydHkgJiYgb1BhcmFtZXRlci5Mb2NhbERhdGFQcm9wZXJ0eS4kUHJvcGVydHlQYXRoID09PSBzUHJvcGVydHlOYW1lO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGlmIChvUGFyYW1XaXRoS2V5ICYmICFvUGFyYW1XaXRoS2V5LlZhbHVlTGlzdFByb3BlcnR5KSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEluY29uc2lzdGVudCB2YWx1ZSBoZWxwIGFubm90YXRpb24gZm9yICR7c1Byb3BlcnR5TmFtZX1gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3Qgb1RleHRBbm5vdGF0aW9uID0gb01ldGFNb2RlbFZhbHVlTGlzdC5nZXRPYmplY3QoXG5cdFx0XHRcdFx0XHRgLyR7b1ZhbHVlTGlzdEluZm8uQ29sbGVjdGlvblBhdGh9LyR7b1BhcmFtV2l0aEtleS5WYWx1ZUxpc3RQcm9wZXJ0eX1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRgXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdGlmIChvVGV4dEFubm90YXRpb24gJiYgb1RleHRBbm5vdGF0aW9uLiRQYXRoKSB7XG5cdFx0XHRcdFx0XHRzVGV4dFByb3BlcnR5ID0gb1RleHRBbm5vdGF0aW9uLiRQYXRoO1xuXG5cdFx0XHRcdFx0XHRjb25zdCBmaWx0ZXJzID0gRmllbGRSdW50aW1lLmNyZWF0ZVZhbHVlTGlzdEZpbHRlcnMoXG5cdFx0XHRcdFx0XHRcdG9WYWx1ZUxpc3RJbmZvLFxuXHRcdFx0XHRcdFx0XHRvUGFyYW1XaXRoS2V5LlZhbHVlTGlzdFByb3BlcnR5LFxuXHRcdFx0XHRcdFx0XHRzUHJvcGVydHlWYWx1ZSxcblx0XHRcdFx0XHRcdFx0YmluZGluZ0NvbnRleHRcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRjb25zdCBsaXN0QmluZGluZyA9IG9WYWx1ZUxpc3RNb2RlbC5iaW5kTGlzdChgLyR7b1ZhbHVlTGlzdEluZm8uQ29sbGVjdGlvblBhdGh9YCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZpbHRlcnMsIHtcblx0XHRcdFx0XHRcdFx0JHNlbGVjdDogc1RleHRQcm9wZXJ0eVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gbGlzdEJpbmRpbmcucmVxdWVzdENvbnRleHRzKDAsIDIpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzRGlzcGxheUZvcm1hdCA9IFwiVmFsdWVcIjtcblx0XHRcdFx0XHRcdHJldHVybiBzUHJvcGVydHlWYWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChhQ29udGV4dHM6IENvbnRleHRbXSkge1xuXHRcdFx0XHRcdGNvbnN0IHNEZXNjcmlwdGlvbiA9IHNUZXh0UHJvcGVydHkgPyBhQ29udGV4dHNbMF0/LmdldE9iamVjdCgpW3NUZXh0UHJvcGVydHldIDogXCJcIjtcblx0XHRcdFx0XHRpZiAoIXNEZXNjcmlwdGlvbikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNQcm9wZXJ0eVZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzd2l0Y2ggKHNEaXNwbGF5Rm9ybWF0KSB7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHNEZXNjcmlwdGlvbiB8fCBzUHJvcGVydHlWYWx1ZTtcblx0XHRcdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLmdldFRleHQoXCJDX0ZPUk1BVF9GT1JfVEVYVF9BUlJBTkdFTUVOVFwiLCBbXG5cdFx0XHRcdFx0XHRcdFx0c0Rlc2NyaXB0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdHNQcm9wZXJ0eVZhbHVlXG5cdFx0XHRcdFx0XHRcdF0pO1xuXHRcdFx0XHRcdFx0Y2FzZSBcIlZhbHVlRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIkNfRk9STUFUX0ZPUl9URVhUX0FSUkFOR0VNRU5UXCIsIFtcblx0XHRcdFx0XHRcdFx0XHRzUHJvcGVydHlWYWx1ZSxcblx0XHRcdFx0XHRcdFx0XHRzRGVzY3JpcHRpb25cblx0XHRcdFx0XHRcdFx0XSk7XG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gc1Byb3BlcnR5VmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdGNvbnN0IGVycm9yT2JqID0gb0Vycm9yIGFzIHsgc3RhdHVzOiBudW1iZXI7IG1lc3NhZ2U6IHN0cmluZyB9O1xuXHRcdFx0XHRcdGNvbnN0IHNNc2cgPVxuXHRcdFx0XHRcdFx0ZXJyb3JPYmouc3RhdHVzICYmIGVycm9yT2JqLnN0YXR1cyA9PT0gNDA0XG5cdFx0XHRcdFx0XHRcdD8gYE1ldGFkYXRhIG5vdCBmb3VuZCAoJHtlcnJvck9iai5zdGF0dXN9KSBmb3IgdmFsdWUgaGVscCBvZiBwcm9wZXJ0eSAke3NQcm9wZXJ0eUZ1bGxQYXRofWBcblx0XHRcdFx0XHRcdFx0OiBlcnJvck9iai5tZXNzYWdlO1xuXHRcdFx0XHRcdExvZy5lcnJvcihzTXNnKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBzUHJvcGVydHlWYWx1ZTtcblx0fSxcblxuXHRkaXNwbGF5QWdncmVnYXRlRGV0YWlsczogYXN5bmMgZnVuY3Rpb24gKGV2ZW50OiBFdmVudCwgYWdncmVnYXRlZFByb3BlcnR5UGF0aD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICghYWdncmVnYXRlZFByb3BlcnR5UGF0aCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBsaW5rID0gZXZlbnQuZ2V0U291cmNlPExpbms+KCk7XG5cdFx0Y29uc3QgYW5hbHl0aWNhbFRhYmxlID0gRlBNSGVscGVyLmdldE1kY1RhYmxlKGxpbmspITtcblxuXHRcdGNvbnN0IHBvcG92ZXJJZCA9IGAke2FuYWx5dGljYWxUYWJsZS5nZXRJZCgpfS1tdWx0aVVuaXRQb3BvdmVyYDtcblx0XHRpZiAoYW5hbHl0aWNhbFRhYmxlLmdldERlcGVuZGVudHMoKS5zb21lKChkZXBlbmRlbnQpID0+IGRlcGVuZGVudC5nZXRJZCgpID09PSBwb3BvdmVySWQpKSB7XG5cdFx0XHQvLyBQb3BvdmVyIGlzIGFscmVhZHkgb3BlbiBmb3IgdGhlIHNhbWUgbGluayAob3RoZXJ3aXNlIHRoZSBkZXBlbmRlbnQgd291bGQgaGF2ZSBiZWVuIHJlbW92ZWQgYW5kIGRlc3Ryb3llZCBvbiBjbG9zZSlcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCByb3dDb250ZXh0ID0gbGluay5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0Y29uc3QgdGFibGVSb3dCaW5kaW5nID0gcm93Q29udGV4dC5nZXRCaW5kaW5nKCkgYXMgT0RhdGFMaXN0QmluZGluZztcblxuXHRcdC8vIEdldCB0aGUgZmlsdGVycyBjb3JyZXNwb25kaW5nIHRvIHRoZSB0b3RhbCByb3dcblx0XHRjb25zdCByb3dDb250ZXh0RGF0YSA9IHJvd0NvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0Y29uc3Qgcm93U3BlY2lmaWNGaWx0ZXI6IEZpbHRlcltdID0gW107XG5cdFx0Y29uc3Qgcm93RmlsdGVyID0gcm93Q29udGV4dC5nZXRGaWx0ZXIoKTtcblx0XHRpZiAocm93RmlsdGVyKSB7XG5cdFx0XHRyb3dTcGVjaWZpY0ZpbHRlci5wdXNoKHJvd0ZpbHRlcik7XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIHRoZSBmaWx0ZXJzIGFwcGxpZWQgdG8gdGhlIG9yaWdpbmFsIHRhYmxlXG5cdFx0Y29uc3QgYWxsRmlsdGVycyA9IHJvd1NwZWNpZmljRmlsdGVyLmNvbmNhdCh0YWJsZVJvd0JpbmRpbmcuZ2V0RmlsdGVycyhcIkFwcGxpY2F0aW9uXCIpLCB0YWJsZVJvd0JpbmRpbmcuZ2V0RmlsdGVycyhcIkNvbnRyb2xcIikpO1xuXG5cdFx0Ly8gQ2FsY3VsYXRlICQkYWdncmVnYXRpb24gcGFyYW1ldGVycyBmb3IgdGhlIHRhYmxlIGluIHRoZSBwb3BvdmVyIChhZ2dyZWdhdGUgYW1vdW50LCBncm91cCBieSBjdXJyZW5jeS91bml0KVxuXHRcdGNvbnN0IGFnZ3JlZ2F0aW9uID0gdGFibGVSb3dCaW5kaW5nLmdldEFnZ3JlZ2F0aW9uKCkgYXMge1xuXHRcdFx0Z3JvdXA6IFJlY29yZDxzdHJpbmcsIG9iamVjdD47XG5cdFx0XHRhZ2dyZWdhdGU6IFJlY29yZDxzdHJpbmcsIHsgdW5pdDogc3RyaW5nIH0+O1xuXHRcdFx0c2VhcmNoPzogc3RyaW5nO1xuXHRcdH07XG5cdFx0Y29uc3QgdW5pdE9yQ3VycmVuY3lOYW1lID0gYWdncmVnYXRpb24uYWdncmVnYXRlW2FnZ3JlZ2F0ZWRQcm9wZXJ0eVBhdGhdLnVuaXQ7XG5cdFx0Y29uc3QgZ3JvdXA6IFJlY29yZDxzdHJpbmcsIG9iamVjdD4gPSB7fTtcblx0XHRncm91cFt1bml0T3JDdXJyZW5jeU5hbWVdID0ge307XG5cdFx0Y29uc3QgYWdncmVnYXRlOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+ID0ge307XG5cdFx0YWdncmVnYXRlW2FnZ3JlZ2F0ZWRQcm9wZXJ0eVBhdGhdID0geyBncmFuZFRvdGFsOiBmYWxzZSwgc3VidG90YWxzOiBmYWxzZSwgdW5pdDogdW5pdE9yQ3VycmVuY3lOYW1lIH07XG5cblx0XHQvLyBUaGUgaXRlbSBkaXNwbGF5ZWQgaW4gdGhlIHRhYmxlIGluIHRoZSBwb3BvdmVyIGlzIGEgY29weSBvZiB0aGUgaXRlbSBkaXNwbGF5ZWQgaW4gdGhlIHRhYmxlXG5cdFx0Y29uc3QgdGFibGVJdGVtID0gbGluay5nZXREZXBlbmRlbnRzKClbMF0uY2xvbmUoKTtcblx0XHRjb25zdCBjdXJyZW5jeU9yUXVhbnRpdHlFbmFibGVkTGF5b3V0ID0gbmV3IEhCb3goe1xuXHRcdFx0cmVuZGVyVHlwZTogXCJCYXJlXCIsXG5cdFx0XHRqdXN0aWZ5Q29udGVudDogXCJFbmRcIixcblx0XHRcdGl0ZW1zOiBbdGFibGVJdGVtXVxuXHRcdH0gYXMgJEhCb3hTZXR0aW5ncyk7XG5cblx0XHRjb25zdCBhZ2dyZWdhdGlvblBhcmFtZXRlcnM6IHtcblx0XHRcdGdyb3VwOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+O1xuXHRcdFx0YWdncmVnYXRlOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+O1xuXHRcdFx0c2VhcmNoPzogc3RyaW5nO1xuXHRcdH0gPSB7IGdyb3VwLCBhZ2dyZWdhdGUgfTtcblx0XHRpZiAoYWdncmVnYXRpb24uc2VhcmNoKSB7XG5cdFx0XHRhZ2dyZWdhdGlvblBhcmFtZXRlcnMuc2VhcmNoID0gYWdncmVnYXRpb24uc2VhcmNoO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9JdGVtc0JpbmRpbmdJbmZvID0ge1xuXHRcdFx0cGF0aDogdGFibGVSb3dCaW5kaW5nLmdldFJlc29sdmVkUGF0aCgpLFxuXHRcdFx0ZmlsdGVyczogYWxsRmlsdGVycyxcblx0XHRcdHBhcmFtZXRlcnM6IHtcblx0XHRcdFx0JCRhZ2dyZWdhdGlvbjogYWdncmVnYXRpb25QYXJhbWV0ZXJzXG5cdFx0XHR9LFxuXHRcdFx0c29ydGVyOiBuZXcgU29ydGVyKHVuaXRPckN1cnJlbmN5TmFtZSwgZmFsc2UpIC8vIE9yZGVyIGJ5IGN1cnJlbmN5XG5cdFx0fTtcblxuXHRcdGNvbnN0IGlzUG9wb3ZlckZvckdyYW5kVG90YWwgPSByb3dDb250ZXh0RGF0YVtcIkAkdWk1Lm5vZGUubGV2ZWxcIl0gPT09IDA7XG5cdFx0Y29uc3QgcG9wb3ZlcjogUmVzcG9uc2l2ZVBvcG92ZXIgPSBhd2FpdCBVdGlsLmNyZWF0ZU9yVXBkYXRlTXVsdGlVbml0UG9wb3Zlcihwb3BvdmVySWQsIHtcblx0XHRcdGNvbnRyb2w6IGFuYWx5dGljYWxUYWJsZSxcblx0XHRcdGdyYW5kVG90YWw6IGlzUG9wb3ZlckZvckdyYW5kVG90YWwsXG5cdFx0XHRpdGVtc0JpbmRpbmdJbmZvOiBvSXRlbXNCaW5kaW5nSW5mbyxcblx0XHRcdGxpc3RJdGVtQ29udGVudFRlbXBsYXRlOiBjdXJyZW5jeU9yUXVhbnRpdHlFbmFibGVkTGF5b3V0XG5cdFx0fSk7XG5cdFx0YW5hbHl0aWNhbFRhYmxlLmFkZERlcGVuZGVudChwb3BvdmVyKTtcblxuXHRcdGNvbnN0IGZuT25DbG9zZSA9ICgpOiB2b2lkID0+IHtcblx0XHRcdGFuYWx5dGljYWxUYWJsZS5yZW1vdmVEZXBlbmRlbnQocG9wb3Zlcik7XG5cdFx0XHRwb3BvdmVyLmRldGFjaEV2ZW50KFwiYWZ0ZXJDbG9zZVwiLCBmbk9uQ2xvc2UpO1xuXHRcdFx0cG9wb3Zlci5kZXN0cm95KCk7XG5cdFx0fTtcblx0XHRwb3BvdmVyLmF0dGFjaEV2ZW50KFwiYWZ0ZXJDbG9zZVwiLCBmbk9uQ2xvc2UpO1xuXHRcdHBvcG92ZXIub3BlbkJ5KGxpbmspO1xuXHR9XG59O1xuXG5PYmplY3RQYXRoLnNldChcInNhcC5mZS5tYWNyb3MuZmllbGQuRmllbGRSdW50aW1lXCIsIEZpZWxkUnVudGltZSk7XG5cbmV4cG9ydCBkZWZhdWx0IEZpZWxkUnVudGltZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztFQXdCQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLE1BQU1BLFlBQVksR0FBRztJQUNwQkMsY0FBYyxFQUFFLENBQUMsQ0FBNEQ7SUFDN0VDLG1CQUFtQixFQUFFLEtBQUs7SUFFMUI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0NDLHVCQUF1QixFQUFFLFNBQUFBLENBQ3hCQyxhQUFxQixFQUNyQkMsNkJBQXFDLEVBQ3JDQyxjQUF3QixFQUN4QkMsY0FBd0IsRUFDeEJDLGFBQXVCLEVBQ2I7TUFDVixJQUFJRCxjQUFjLEtBQUtFLFNBQVMsSUFBSUgsY0FBYyxLQUFLRyxTQUFTLEtBQUssQ0FBQ0YsY0FBYyxJQUFJRCxjQUFjLENBQUMsSUFBSSxDQUFDRSxhQUFhLEVBQUU7UUFDMUgsT0FBT0osYUFBYSxLQUFLQyw2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
@@ -3,6 +3,7 @@ import ObjectPath from "sap/base/util/ObjectPath";
3
3
  import CommonUtils from "sap/fe/core/CommonUtils";
4
4
  import FPMHelper from "sap/fe/core/helpers/FPMHelper";
5
5
  import CommonHelper from "sap/fe/macros/CommonHelper";
6
+ import type { AnnotationValueListType } from "sap/fe/macros/internal/valuehelp/ValueListHelper";
6
7
  import type { $HBoxSettings } from "sap/m/HBox";
7
8
  import HBox from "sap/m/HBox";
8
9
  import type Link from "sap/m/Link";
@@ -13,6 +14,7 @@ import type ManagedObject from "sap/ui/base/ManagedObject";
13
14
  import type Control from "sap/ui/core/Control";
14
15
  import type { Control$ValidateFieldGroupEvent } from "sap/ui/core/Control";
15
16
  import Library from "sap/ui/core/Lib";
17
+ import type BaseContext from "sap/ui/model/Context";
16
18
  import Filter from "sap/ui/model/Filter";
17
19
  import Sorter from "sap/ui/model/Sorter";
18
20
  import type Context from "sap/ui/model/odata/v4/Context";
@@ -72,6 +74,59 @@ const FieldRuntime = {
72
74
  return sCurrentHash;
73
75
  },
74
76
 
77
+ /**
78
+ * Creates filters for ValueList requests based on ValueListParameterIn and ValueListParameterInOut annotations.
79
+ * @param valueListInfo The ValueList annotation information
80
+ * @param propertyId The ID property of the IdAndDesciption of the text arrangement annotation
81
+ * @param propertyValue The value for the propertyId property
82
+ * @param bindingContext The binding context to get values from
83
+ * @returns Array of filters for the ValueList request
84
+ */
85
+ createValueListFilters: function (
86
+ valueListInfo: AnnotationValueListType,
87
+ propertyId: string,
88
+ propertyValue: string,
89
+ bindingContext: BaseContext | null | undefined
90
+ ): Filter[] {
91
+ // Start with the key filter
92
+ const filters: Filter[] = [
93
+ new Filter({
94
+ path: propertyId,
95
+ operator: "EQ",
96
+ value1: propertyValue
97
+ })
98
+ ];
99
+
100
+ if (bindingContext && valueListInfo.Parameters) {
101
+ const relevantParameters = valueListInfo.Parameters.filter((parameter) => {
102
+ const isInOrInOut =
103
+ parameter.$Type === "com.sap.vocabularies.Common.v1.ValueListParameterIn" ||
104
+ parameter.$Type === "com.sap.vocabularies.Common.v1.ValueListParameterInOut";
105
+ return (
106
+ isInOrInOut &&
107
+ parameter.LocalDataProperty?.$PropertyPath &&
108
+ parameter.ValueListProperty &&
109
+ parameter.ValueListProperty !== propertyId
110
+ );
111
+ });
112
+
113
+ relevantParameters.forEach((parameter) => {
114
+ const localValue = bindingContext.getProperty(parameter.LocalDataProperty!.$PropertyPath);
115
+ if (localValue !== undefined && localValue !== null && localValue !== "") {
116
+ filters.push(
117
+ new Filter({
118
+ path: parameter.ValueListProperty,
119
+ operator: "EQ",
120
+ value1: localValue
121
+ })
122
+ );
123
+ }
124
+ });
125
+ }
126
+
127
+ return filters;
128
+ },
129
+
75
130
  /**
76
131
  * Method to retrieve text from the value list for DataField.
77
132
  * This is a formatter in disguise.
@@ -92,6 +147,7 @@ const FieldRuntime = {
92
147
  if (sPropertyValue) {
93
148
  oMetaModel = (this.getModel()?.getMetaModel() as ODataMetaModel) || CommonHelper.getMetaModel();
94
149
  sPropertyName = oMetaModel.getObject(`${sPropertyFullPath}@sapui.name`);
150
+ const bindingContext = this.getBindingContext();
95
151
  return oMetaModel
96
152
  .requestValueListInfo(sPropertyFullPath, true)
97
153
  .then(function (mValueListInfo) {
@@ -113,15 +169,17 @@ const FieldRuntime = {
113
169
 
114
170
  if (oTextAnnotation && oTextAnnotation.$Path) {
115
171
  sTextProperty = oTextAnnotation.$Path;
116
- const oFilter = new Filter({
117
- path: oParamWithKey.ValueListProperty,
118
- operator: "EQ",
119
- value1: sPropertyValue
120
- });
121
- const oListBinding = oValueListModel.bindList(`/${oValueListInfo.CollectionPath}`, undefined, undefined, oFilter, {
172
+
173
+ const filters = FieldRuntime.createValueListFilters(
174
+ oValueListInfo,
175
+ oParamWithKey.ValueListProperty,
176
+ sPropertyValue,
177
+ bindingContext
178
+ );
179
+ const listBinding = oValueListModel.bindList(`/${oValueListInfo.CollectionPath}`, undefined, undefined, filters, {
122
180
  $select: sTextProperty
123
181
  });
124
- return oListBinding.requestContexts(0, 2);
182
+ return listBinding.requestContexts(0, 2);
125
183
  } else {
126
184
  sDisplayFormat = "Value";
127
185
  return sPropertyValue;
@@ -168,6 +226,12 @@ const FieldRuntime = {
168
226
  const link = event.getSource<Link>();
169
227
  const analyticalTable = FPMHelper.getMdcTable(link)!;
170
228
 
229
+ const popoverId = `${analyticalTable.getId()}-multiUnitPopover`;
230
+ if (analyticalTable.getDependents().some((dependent) => dependent.getId() === popoverId)) {
231
+ // Popover is already open for the same link (otherwise the dependent would have been removed and destroyed on close)
232
+ return;
233
+ }
234
+
171
235
  const rowContext = link.getBindingContext() as Context;
172
236
  const tableRowBinding = rowContext.getBinding() as ODataListBinding;
173
237
 
@@ -221,7 +285,7 @@ const FieldRuntime = {
221
285
  };
222
286
 
223
287
  const isPopoverForGrandTotal = rowContextData["@$ui5.node.level"] === 0;
224
- const popover: ResponsivePopover = await Util.createOrUpdateMultiUnitPopover(`${analyticalTable.getId()}-multiUnitPopover`, {
288
+ const popover: ResponsivePopover = await Util.createOrUpdateMultiUnitPopover(popoverId, {
225
289
  control: analyticalTable,
226
290
  grandTotal: isPopoverForGrandTotal,
227
291
  itemsBindingInfo: oItemsBindingInfo,