@sapui5/sap.cux.home 1.141.0 → 1.142.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 (148) hide show
  1. package/package.json +1 -1
  2. package/src/sap/cux/home/.library +1 -1
  3. package/src/sap/cux/home/AdvancedSettingsPanel.d.ts.map +1 -1
  4. package/src/sap/cux/home/AdvancedSettingsPanel.js +0 -1
  5. package/src/sap/cux/home/AdvancedSettingsPanel.js.map +1 -1
  6. package/src/sap/cux/home/AdvancedSettingsPanel.ts +0 -1
  7. package/src/sap/cux/home/App.d.ts.map +1 -1
  8. package/src/sap/cux/home/App.js +6 -1
  9. package/src/sap/cux/home/App.js.map +1 -1
  10. package/src/sap/cux/home/App.ts +7 -1
  11. package/src/sap/cux/home/AppsAdditionPanel.d.ts +1 -0
  12. package/src/sap/cux/home/AppsAdditionPanel.d.ts.map +1 -1
  13. package/src/sap/cux/home/AppsAdditionPanel.js +59 -58
  14. package/src/sap/cux/home/AppsAdditionPanel.js.map +1 -1
  15. package/src/sap/cux/home/AppsAdditionPanel.ts +39 -33
  16. package/src/sap/cux/home/AppsContainer.d.ts +5 -1
  17. package/src/sap/cux/home/AppsContainer.d.ts.map +1 -1
  18. package/src/sap/cux/home/AppsContainer.js +30 -16
  19. package/src/sap/cux/home/AppsContainer.js.map +1 -1
  20. package/src/sap/cux/home/AppsContainer.ts +29 -13
  21. package/src/sap/cux/home/BaseAppPanel.d.ts +2 -1
  22. package/src/sap/cux/home/BaseAppPanel.d.ts.map +1 -1
  23. package/src/sap/cux/home/BaseAppPanel.js +2 -1
  24. package/src/sap/cux/home/BaseAppPanel.js.map +1 -1
  25. package/src/sap/cux/home/BaseAppPanel.ts +4 -2
  26. package/src/sap/cux/home/BaseContainer.d.ts +8 -0
  27. package/src/sap/cux/home/BaseContainer.d.ts.map +1 -1
  28. package/src/sap/cux/home/BaseContainer.js +26 -4
  29. package/src/sap/cux/home/BaseContainer.js.map +1 -1
  30. package/src/sap/cux/home/BaseContainer.ts +26 -3
  31. package/src/sap/cux/home/BaseContainerRenderer.d.ts.map +1 -1
  32. package/src/sap/cux/home/BaseContainerRenderer.js.map +1 -1
  33. package/src/sap/cux/home/BaseContainerRenderer.ts +1 -1
  34. package/src/sap/cux/home/BasePanel.d.ts +7 -0
  35. package/src/sap/cux/home/BasePanel.d.ts.map +1 -1
  36. package/src/sap/cux/home/BasePanel.js +20 -0
  37. package/src/sap/cux/home/BasePanel.js.map +1 -1
  38. package/src/sap/cux/home/BasePanel.ts +16 -0
  39. package/src/sap/cux/home/CardsPanel.d.ts +7 -0
  40. package/src/sap/cux/home/CardsPanel.d.ts.map +1 -1
  41. package/src/sap/cux/home/CardsPanel.js +130 -111
  42. package/src/sap/cux/home/CardsPanel.js.map +1 -1
  43. package/src/sap/cux/home/CardsPanel.ts +17 -6
  44. package/src/sap/cux/home/ContentAdditionDialog.d.ts.map +1 -1
  45. package/src/sap/cux/home/ContentAdditionDialog.js +6 -2
  46. package/src/sap/cux/home/ContentAdditionDialog.js.map +1 -1
  47. package/src/sap/cux/home/ContentAdditionDialog.ts +5 -1
  48. package/src/sap/cux/home/FavAppPanel.d.ts +0 -10
  49. package/src/sap/cux/home/FavAppPanel.d.ts.map +1 -1
  50. package/src/sap/cux/home/FavAppPanel.js +258 -313
  51. package/src/sap/cux/home/FavAppPanel.js.map +1 -1
  52. package/src/sap/cux/home/FavAppPanel.ts +7 -56
  53. package/src/sap/cux/home/FrequentAppPanel.d.ts.map +1 -1
  54. package/src/sap/cux/home/FrequentAppPanel.js +5 -1
  55. package/src/sap/cux/home/FrequentAppPanel.js.map +1 -1
  56. package/src/sap/cux/home/FrequentAppPanel.ts +4 -0
  57. package/src/sap/cux/home/InsightsAdditionPanel.d.ts.map +1 -1
  58. package/src/sap/cux/home/InsightsAdditionPanel.js +3 -1
  59. package/src/sap/cux/home/InsightsAdditionPanel.js.map +1 -1
  60. package/src/sap/cux/home/InsightsAdditionPanel.ts +2 -0
  61. package/src/sap/cux/home/NewsAndPagesContainer.d.ts +0 -4
  62. package/src/sap/cux/home/NewsAndPagesContainer.d.ts.map +1 -1
  63. package/src/sap/cux/home/NewsAndPagesContainer.js +2 -2
  64. package/src/sap/cux/home/NewsAndPagesContainer.js.map +1 -1
  65. package/src/sap/cux/home/NewsAndPagesContainer.ts +4 -4
  66. package/src/sap/cux/home/NewsPanel.d.ts +17 -0
  67. package/src/sap/cux/home/NewsPanel.d.ts.map +1 -1
  68. package/src/sap/cux/home/NewsPanel.js +90 -57
  69. package/src/sap/cux/home/NewsPanel.js.map +1 -1
  70. package/src/sap/cux/home/NewsPanel.ts +50 -22
  71. package/src/sap/cux/home/NewsSettingsPanel.d.ts +42 -6
  72. package/src/sap/cux/home/NewsSettingsPanel.d.ts.map +1 -1
  73. package/src/sap/cux/home/NewsSettingsPanel.js +219 -81
  74. package/src/sap/cux/home/NewsSettingsPanel.js.map +1 -1
  75. package/src/sap/cux/home/NewsSettingsPanel.ts +215 -80
  76. package/src/sap/cux/home/Page.d.ts.map +1 -1
  77. package/src/sap/cux/home/Page.js +4 -1
  78. package/src/sap/cux/home/Page.js.map +1 -1
  79. package/src/sap/cux/home/Page.ts +2 -0
  80. package/src/sap/cux/home/PagePanel.d.ts.map +1 -1
  81. package/src/sap/cux/home/PagePanel.js +1 -1
  82. package/src/sap/cux/home/PagePanel.js.map +1 -1
  83. package/src/sap/cux/home/PagePanel.ts +2 -6
  84. package/src/sap/cux/home/PageSettingsPanel.d.ts.map +1 -1
  85. package/src/sap/cux/home/PageSettingsPanel.js +6 -3
  86. package/src/sap/cux/home/PageSettingsPanel.js.map +1 -1
  87. package/src/sap/cux/home/PageSettingsPanel.ts +2 -2
  88. package/src/sap/cux/home/RecentAppPanel.d.ts.map +1 -1
  89. package/src/sap/cux/home/RecentAppPanel.js +6 -0
  90. package/src/sap/cux/home/RecentAppPanel.js.map +1 -1
  91. package/src/sap/cux/home/RecentAppPanel.ts +5 -1
  92. package/src/sap/cux/home/RecommendedAppPanel.d.ts.map +1 -1
  93. package/src/sap/cux/home/RecommendedAppPanel.js +7 -0
  94. package/src/sap/cux/home/RecommendedAppPanel.js.map +1 -1
  95. package/src/sap/cux/home/RecommendedAppPanel.ts +6 -1
  96. package/src/sap/cux/home/SideBySideIconTabFilter.d.ts +10 -0
  97. package/src/sap/cux/home/SideBySideIconTabFilter.d.ts.map +1 -1
  98. package/src/sap/cux/home/SideBySideIconTabFilter.js +11 -1
  99. package/src/sap/cux/home/SideBySideIconTabFilter.js.map +1 -1
  100. package/src/sap/cux/home/SideBySideIconTabFilter.ts +11 -0
  101. package/src/sap/cux/home/SituationPanel.d.ts.map +1 -1
  102. package/src/sap/cux/home/SituationPanel.js +7 -2
  103. package/src/sap/cux/home/SituationPanel.js.map +1 -1
  104. package/src/sap/cux/home/SituationPanel.ts +2 -0
  105. package/src/sap/cux/home/SpaceInsightsPanel.js +1 -1
  106. package/src/sap/cux/home/SpaceInsightsPanel.js.map +1 -1
  107. package/src/sap/cux/home/SpaceInsightsPanel.ts +1 -1
  108. package/src/sap/cux/home/TaskPanel.d.ts.map +1 -1
  109. package/src/sap/cux/home/TaskPanel.js +3 -0
  110. package/src/sap/cux/home/TaskPanel.js.map +1 -1
  111. package/src/sap/cux/home/TaskPanel.ts +2 -1
  112. package/src/sap/cux/home/TilesPanel.d.ts.map +1 -1
  113. package/src/sap/cux/home/TilesPanel.js +10 -3
  114. package/src/sap/cux/home/TilesPanel.js.map +1 -1
  115. package/src/sap/cux/home/TilesPanel.ts +7 -3
  116. package/src/sap/cux/home/ToDoPanel.d.ts.map +1 -1
  117. package/src/sap/cux/home/ToDoPanel.js +29 -8
  118. package/src/sap/cux/home/ToDoPanel.js.map +1 -1
  119. package/src/sap/cux/home/ToDoPanel.ts +19 -8
  120. package/src/sap/cux/home/ToDosContainer.js +3 -3
  121. package/src/sap/cux/home/ToDosContainer.js.map +1 -1
  122. package/src/sap/cux/home/ToDosContainer.ts +1 -1
  123. package/src/sap/cux/home/i18n/messagebundle.properties +12 -6
  124. package/src/sap/cux/home/i18n/messagebundle_pt.properties +1 -1
  125. package/src/sap/cux/home/interface/AppsInterface.d.ts +5 -0
  126. package/src/sap/cux/home/interface/AppsInterface.d.ts.map +1 -1
  127. package/src/sap/cux/home/interface/AppsInterface.js.map +1 -1
  128. package/src/sap/cux/home/interface/AppsInterface.ts +6 -0
  129. package/src/sap/cux/home/themes/base/AppsContainer.less +12 -1
  130. package/src/sap/cux/home/themes/base/BaseLayout.less +11 -0
  131. package/src/sap/cux/home/themes/base/InsightsContainer.less +4 -0
  132. package/src/sap/cux/home/themes/base/ToDosContainer.less +4 -0
  133. package/src/sap/cux/home/utils/FESRUtil.d.ts +30 -0
  134. package/src/sap/cux/home/utils/FESRUtil.d.ts.map +1 -1
  135. package/src/sap/cux/home/utils/FESRUtil.js +36 -1
  136. package/src/sap/cux/home/utils/FESRUtil.js.map +1 -1
  137. package/src/sap/cux/home/utils/FESRUtil.ts +36 -0
  138. package/src/sap/cux/home/utils/PXFeedback.d.ts +4 -0
  139. package/src/sap/cux/home/utils/PXFeedback.d.ts.map +1 -0
  140. package/src/sap/cux/home/utils/PXFeedback.js +28 -0
  141. package/src/sap/cux/home/utils/PXFeedback.js.map +1 -0
  142. package/src/sap/cux/home/utils/PXFeedback.ts +19 -0
  143. package/src/sap/cux/home/utils/PageManager.d.ts +0 -4
  144. package/src/sap/cux/home/utils/PageManager.d.ts.map +1 -1
  145. package/src/sap/cux/home/utils/PageManager.js +6 -6
  146. package/src/sap/cux/home/utils/PageManager.js.map +1 -1
  147. package/src/sap/cux/home/utils/PageManager.ts +6 -5
  148. package/src/sap/cux/home/utils/fragment/appsAdditionContent.fragment.xml +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"NewsSettingsPanel.js","names":["sap","ui","define","CheckBox","CustomListItem","HBox","Label","List","Switch","Text","Title","VBox","CustomData","__BaseSettingsPanel","___library","___utils_Accessibility","___utils_Constants","___utils_FESRUtil","__PersonalisationUtils","__UshellPersonalizer","_interopRequireDefault","obj","__esModule","default","BaseSettingsPanel","NewsType","getInvisibleText","SETTINGS_PANELS_KEYS","addFESRSemanticStepName","FESR_EVENTS","PersonalisationUtils","UshellPersonalizer","NewsSettingsPanel","extend","init","_init","BaseSettingsPanel.prototype.init.call","setProperty","NEWS","_i18nBundle","getText","addAggregation","getContent","attachPanelNavigated","loadNewsFeedSettings","aFavNewsFeed","_getContent","oHeader","setHeader","oTitle","setTitleMessage","oContentVBox","getId","alignItems","justifyContent","items","setNewsList","getPersonalization","_getPersonalization","_this","_temp2","oPersonalizer","_temp","Promise","resolve","getInstance","getPersContainerId","_getPanel","getOwnerComponent","then","_UshellPersonalizer$g","e","reject","_setHeader","headerText","text","oHeaderVBox","addStyleClass","_setTitleMessage","title","titleStyle","oTitleHbox","oTitleVBox","_setNewsList","oShowSwitchLabel","oShowSwitch","customTextOn","customTextOff","change","saveNewsFeedSettings","state","ariaLabelledBy","CHANGE","oCustNewsSwitchContainer","width","oShowAllPrep","oInvisibleText","oList","oNewsListVBox","direction","isCSVFileFormat","_isCSVFileFormat","fileName","split","pop","toLowerCase","_saveNewsFeedSettings","_this2","selectedFeeds","deselectedDefaultFeeds","newsType","oNewsPanel","getNewsType","showDefault","Default","customFileName","getProperty","feedKey","getCustomFeedKey","getItems","forEach","item","newsListContent","getAggregation","newsListHBox","checkbox","label","isSelected","getSelected","groupId","getDefaultGroupId","push","personalizer","read","personalizationData","defaultNewsFeed","favNewsFeed","showAllPreparationRequired","getState","write","setState","setCustomNewsFeed","_getDefaultGroupId","contentBox","customData","getCustomData","length","getValue","setItems","_setItems","aItems","destroyAggregation","oItem","i","oNewsListItemHbox","id","select","selected","enabled","disabled","addCustomData","key","value","group_id","customListItem","content","addItem","_loadNewsFeedSettings","_this3","sFeedKey","showDefaultNewsFeed","setVisible","oPersData","aPersNewsFeed","getCustomOrDefaultNewsFeed","aNewsFeed","_handleDefaultNewsFeed","_handleCustomNewsFeed","setText","mandatoryNewsFeed","getMandatoryDefaultNewsFeed","map","oNewsFeed","isDeselected","includes","favFeedTitles","isFavorite","isSupported","_isSupported","_this4","newsPanel","getParent","Custom","isNoUpdatesNewsFeed"],"sources":["NewsSettingsPanel.ts"],"sourcesContent":["/*!\n * SAP UI development toolkit for HTML5 (SAPUI5)\n * * (c) Copyright 2009-2025 SAP SE. All rights reserved\n */\n\nimport CheckBox from \"sap/m/CheckBox\";\nimport CustomListItem from \"sap/m/CustomListItem\";\nimport HBox from \"sap/m/HBox\";\nimport Label from \"sap/m/Label\";\nimport List from \"sap/m/List\";\nimport ListItemBase from \"sap/m/ListItemBase\";\nimport Switch from \"sap/m/Switch\";\nimport Text from \"sap/m/Text\";\nimport Title from \"sap/m/Title\";\nimport VBox from \"sap/m/VBox\";\nimport Component from \"sap/ui/core/Component\";\nimport Control from \"sap/ui/core/Control\";\nimport CustomData from \"sap/ui/core/CustomData\";\nimport BaseSettingsPanel from \"./BaseSettingsPanel\";\nimport { NewsType } from \"./library\";\nimport NewsAndPagesContainer from \"./NewsAndPagesContainer\";\nimport NewsPanel, { INewsFeed } from \"./NewsPanel\";\nimport { getInvisibleText } from \"./utils/Accessibility\";\nimport { SETTINGS_PANELS_KEYS } from \"./utils/Constants\";\nimport { addFESRSemanticStepName, FESR_EVENTS } from \"./utils/FESRUtil\";\nimport PersonalisationUtils from \"./utils/PersonalisationUtils\";\nimport UshellPersonalizer from \"./utils/UshellPersonalizer\";\n\ninterface IFavNewsFeed {\n\titems: string[];\n\tshowAllPreparationRequired?: boolean;\n}\n\n/**\n *\n * Class for My Home News Settings Panel.\n *\n * @extends BaseSettingsPanel\n *\n * @author SAP SE\n * @version 0.0.1\n * @since 1.121\n * @private\n *\n * @alias sap.cux.home.NewsSettingsPanel\n */\nexport default class NewsSettingsPanel extends BaseSettingsPanel {\n\tprivate oShowSwitch!: Switch;\n\tprivate oCustNewsSwitchContainer!: HBox;\n\tprivate oList!: List;\n\tprivate oPersonalizer!: UshellPersonalizer;\n\tprivate oNewsPanel!: NewsPanel;\n\tprivate aFavNewsFeed!: INewsFeed[] | string[];\n\tprivate deselectedDefaultFeeds!: string[];\n\tprivate headerText!: Text;\n\tprivate title!: Title;\n\n\t/**\n\t * Init lifecycle method\n\t *\n\t * @public\n\t * @override\n\t */\n\tpublic init(): void {\n\t\tsuper.init();\n\n\t\t//setup panel\n\t\tthis.setProperty(\"key\", SETTINGS_PANELS_KEYS.NEWS);\n\t\tthis.setProperty(\"title\", this._i18nBundle.getText(\"news\"));\n\t\tthis.setProperty(\"icon\", \"sap-icon://newspaper\");\n\n\t\t//setup layout content\n\t\tthis.addAggregation(\"content\", this.getContent());\n\n\t\t//fired every time on panel navigation\n\t\tthis.attachPanelNavigated(() => {\n\t\t\tvoid this.loadNewsFeedSettings();\n\t\t});\n\t\tthis.aFavNewsFeed = [];\n\t}\n\n\t/**\n\t * Returns the content for the News Settings Panel.\n\t *\n\t * @private\n\t * @returns {Control} The control containing the News Settings Panel content.\n\t */\n\tprivate getContent(): Control {\n\t\tconst oHeader = this.setHeader();\n\t\tconst oTitle = this.setTitleMessage();\n\t\tconst oContentVBox = new VBox(this.getId() + \"--idNewsPageOuterVBoX\", {\n\t\t\talignItems: \"Start\",\n\t\t\tjustifyContent: \"SpaceBetween\",\n\t\t\titems: [oHeader, oTitle, this.setNewsList()]\n\t\t});\n\t\treturn oContentVBox;\n\t}\n\n\t/**\n\t * Get personalization instance\n\t */\n\tprivate async getPersonalization() {\n\t\tif (!this.oPersonalizer) {\n\t\t\tthis.oPersonalizer = await UshellPersonalizer.getInstance(\n\t\t\t\tPersonalisationUtils.getPersContainerId(this._getPanel()),\n\t\t\t\tPersonalisationUtils.getOwnerComponent(this._getPanel()) as Component\n\t\t\t);\n\t\t}\n\t\treturn this.oPersonalizer;\n\t}\n\n\t/**\n\t * Returns the content for the News Settings Panel Header.\n\t *\n\t * @private\n\t * @returns {sap.ui.core.Control} The control containing the News Settings Panel's Header content.\n\t */\n\tprivate setHeader() {\n\t\tthis.headerText = new Text(this.getId() + \"--idCustNewsFeedSettingsText\", {\n\t\t\ttext: this._i18nBundle.getText(\"newsFeedSettingsText\")\n\t\t});\n\t\tconst oHeaderVBox = new VBox(this.getId() + \"--idCustNewsFeedSettingsTextContainer\", {\n\t\t\talignItems: \"Start\",\n\t\t\tjustifyContent: \"SpaceBetween\",\n\t\t\titems: [this.headerText]\n\t\t}).addStyleClass(\"sapUiSmallMarginTop sapUiSmallMarginBegin\");\n\t\treturn oHeaderVBox;\n\t}\n\n\t/**\n\t * Returns the content for the News Settings Panel Title description.\n\t *\n\t * @private\n\t * @returns {sap.ui.core.Control} The control containing the News Settings Panel's Title description.\n\t */\n\tprivate setTitleMessage() {\n\t\tthis.title = new Title(this.getId() + \"--idCustNewsFeedSettignsTitle\", {\n\t\t\ttext: this._i18nBundle.getText(\"newsFeedSettingsHeading\"),\n\t\t\ttitleStyle: \"H3\"\n\t\t});\n\t\tconst oTitleHbox = new HBox(this.getId() + \"--idCustNewsFeedSettingsTitleContainer\", {\n\t\t\talignItems: \"Center\",\n\t\t\tjustifyContent: \"SpaceBetween\",\n\t\t\titems: [this.title]\n\t\t});\n\t\tconst oTitleVBox = new VBox(this.getId() + \"--idCustNewsFeedSettingsTitleVBox\", {\n\t\t\talignItems: \"Start\",\n\t\t\tjustifyContent: \"SpaceBetween\",\n\t\t\titems: [oTitleHbox]\n\t\t}).addStyleClass(\"sapUiSmallMarginTop sapUiSmallMarginBegin\");\n\t\treturn oTitleVBox;\n\t}\n\n\t/**\n\t * Returns the content for the news List\n\t *\n\t * @private\n\t * @returns {sap.ui.core.Control} The control containing the News Settings Panel's List\n\t */\n\tprivate setNewsList() {\n\t\t//showAllPrepRequired Switch\n\t\tconst oShowSwitchLabel = new Label(this.getId() + \"--idShowAllCustNewsSwitchLabel\", {\n\t\t\ttext: this._i18nBundle.getText(\"showAllPreparationRequiredSwitchLabel\")\n\t\t});\n\t\tthis.oShowSwitch = new Switch(`${this.getId()}-showSwitch`, {\n\t\t\t// 'ariaLabelledBy': \"idShowAllCustNewsSwitchLabel idShowAllCustNewsSwitch\",\n\t\t\tcustomTextOn: \" \",\n\t\t\tcustomTextOff: \" \",\n\t\t\tchange: () => {\n\t\t\t\tvoid this.saveNewsFeedSettings();\n\t\t\t},\n\t\t\t// 'fesr:change': \"showPrepRequire\",\n\t\t\tstate: false,\n\t\t\tariaLabelledBy: [`${this.getId()}--idShowAllCustNewsSwitchLabel`]\n\t\t});\n\t\taddFESRSemanticStepName(this.oShowSwitch, FESR_EVENTS.CHANGE, \"showPrepRequire\");\n\t\tthis.oCustNewsSwitchContainer = new HBox(this.getId() + \"--idShowAllCustNewsSwitchContainer\", {\n\t\t\talignItems: \"Center\",\n\t\t\titems: [oShowSwitchLabel, this.oShowSwitch],\n\t\t\twidth: \"94%\"\n\t\t}).addStyleClass(\"sapUiSmallMarginTop\");\n\n\t\tconst oShowAllPrep = new VBox(this.getId() + \"--idShowAllCustNewsSwitchVBox\", {\n\t\t\titems: [this.oCustNewsSwitchContainer],\n\t\t\twidth: \"94%\"\n\t\t}).addStyleClass(\"sapUiSmallMarginTop\");\n\t\tconst oInvisibleText = getInvisibleText(`${this.getId()}--newsTitleText`, this._i18nBundle.getText(\"newsTitle\"));\n\t\t//List of news items\n\t\tthis.oList = new List(this.getId() + \"--idCustNewsFeedList\", {\n\t\t\tariaLabelledBy: [\n\t\t\t\toInvisibleText.getId(),\n\t\t\t\t`${this.getId()}--idCustNewsFeedSettingsText`,\n\t\t\t\t`${this.getId()}--idCustNewsFeedSettignsTitle`\n\t\t\t]\n\t\t});\n\t\t//Outer VBox\n\t\tconst oNewsListVBox = new VBox(this.getId() + \"--idCustNewsFeedListContainer\", {\n\t\t\tdirection: \"Column\",\n\t\t\titems: [this.oList, oShowAllPrep, oInvisibleText],\n\t\t\twidth: \"96%\"\n\t\t}).addStyleClass(\"sapUiSmallMarginTop sapUiSmallMarginBegin\");\n\t\treturn oNewsListVBox;\n\t}\n\n\t/**\n\t * Checks if the custom file format is CSV based on the custom file name.\n\t *\n\t * @param {string} fileName - The custom file name.\n\t * @returns {boolean} True if the file format is CSV, otherwise false.\n\t */\n\tprivate isCSVFileFormat(fileName: string): boolean {\n\t\treturn fileName.split(\".\").pop()?.toLowerCase() === \"csv\";\n\t}\n\n\t/**\n\t *\n\t * Saves news feed settings and shows news feed based on selection change of list of switch\n\t *\n\t * @private\n\t */\n\tprivate async saveNewsFeedSettings(): Promise<void> {\n\t\tconst selectedFeeds: string[] = [];\n\t\tconst deselectedDefaultFeeds: string[] = [];\n\t\tconst newsType = this.oNewsPanel?.getNewsType();\n\t\tconst showDefault = newsType === NewsType.Default;\n\t\tconst customFileName = this.oNewsPanel.getProperty(\"customFileName\") as string;\n\t\tconst feedKey = this.oNewsPanel.getCustomFeedKey();\n\n\t\tthis.oList.getItems().forEach((item: ListItemBase) => {\n\t\t\tconst newsListContent = item.getAggregation(\"content\") as Control[];\n\t\t\tconst newsListHBox = newsListContent[0] as HBox;\n\t\t\tconst [checkbox, label] = newsListHBox.getItems() as [CheckBox, Text];\n\t\t\tconst isSelected = checkbox.getSelected();\n\n\t\t\tif (showDefault) {\n\t\t\t\tconst groupId = this.getDefaultGroupId(newsListHBox);\n\t\t\t\tif (!isSelected && groupId) {\n\t\t\t\t\tdeselectedDefaultFeeds.push(groupId);\n\t\t\t\t}\n\t\t\t} else if (isSelected) {\n\t\t\t\tselectedFeeds.push(label.getText());\n\t\t\t}\n\t\t});\n\n\t\tconst personalizer = await this.getPersonalization();\n\t\tconst personalizationData = (await personalizer.read()) || {};\n\n\t\tif (showDefault) {\n\t\t\tpersonalizationData.defaultNewsFeed = { items: deselectedDefaultFeeds };\n\t\t} else {\n\t\t\tpersonalizationData.favNewsFeed = {\n\t\t\t\titems: selectedFeeds,\n\t\t\t\tshowAllPreparationRequired: this.isCSVFileFormat(customFileName) ? false : this.oShowSwitch.getState()\n\t\t\t} as IFavNewsFeed;\n\t\t}\n\n\t\tawait personalizer.write(personalizationData);\n\n\t\t// get the latest value of switch and set the state\n\t\tif (!showDefault) {\n\t\t\tthis.oShowSwitch.setState(personalizationData.favNewsFeed?.showAllPreparationRequired);\n\t\t}\n\t\tawait this.oNewsPanel.setCustomNewsFeed(showDefault ? \"\" : feedKey);\n\t}\n\n\t/** Get groupId info for the default NewsList\n\t * @param {HBox} [contentBox] content Hbox\n\t * @returns {string} groupId\n\t * @private\n\t */\n\tprivate getDefaultGroupId(contentBox: HBox): string {\n\t\tconst customData = contentBox.getCustomData();\n\t\treturn customData?.length ? (customData[0].getValue() as string) : \"\";\n\t}\n\n\t/** Set items for the NewsList\n\t * @param {Array} [aItems] news items to be set as items aggregation\n\t * @private\n\t */\n\tprivate setItems(aItems: INewsFeed[]) {\n\t\tthis.oList.destroyAggregation(\"items\", true);\n\t\tconst newsType = this.oNewsPanel?.getNewsType();\n\t\tlet showDefault = newsType === NewsType.Default;\n\t\t(aItems || []).forEach((oItem: INewsFeed, i: number) => {\n\t\t\tlet oNewsListItemHbox = new HBox({\n\t\t\t\tid: `${this.getId()}--idCustNewsFeedItemContent--${i}`,\n\t\t\t\talignItems: \"Center\",\n\t\t\t\titems: [\n\t\t\t\t\tnew CheckBox(`${this.getId()}--custNewsFeedItemCheckBox--${i}`, {\n\t\t\t\t\t\tselect: () => {\n\t\t\t\t\t\t\tvoid this.saveNewsFeedSettings();\n\t\t\t\t\t\t},\n\t\t\t\t\t\tselected: oItem.selected as boolean,\n\t\t\t\t\t\tenabled: !oItem.disabled\n\t\t\t\t\t}),\n\t\t\t\t\tnew Text(`${this.getId()}--custNewsFeedItemText--${i}`, { text: oItem.title })\n\t\t\t\t],\n\t\t\t\twidth: \"100%\"\n\t\t\t});\n\t\t\tif (showDefault) {\n\t\t\t\t// if showDefault is true, add group_id as custom data to the item\n\t\t\t\toNewsListItemHbox.addCustomData(new CustomData({ key: \"newsGroupId\", value: oItem.group_id }));\n\t\t\t}\n\t\t\tconst customListItem = new CustomListItem({\n\t\t\t\tid: `${this.getId()}--idCustNewsFeedItem--${i}`,\n\t\t\t\tcontent: [oNewsListItemHbox]\n\t\t\t});\n\t\t\tthis.oList.addItem(customListItem);\n\t\t});\n\t}\n\n\t/**\n\t * Loads news feed settings\n\t *\n\t * @returns {Promise} resolves to news feed settings\n\t */\n\tprivate async loadNewsFeedSettings(): Promise<INewsFeed[] | undefined> {\n\t\tthis.oNewsPanel = this._getPanel() as NewsPanel;\n\t\tconst sFeedKey = this.oNewsPanel.getCustomFeedKey();\n\t\tconst newsType = this.oNewsPanel?.getNewsType();\n\t\tconst showDefaultNewsFeed = newsType === NewsType.Default;\n\n\t\tconst customFileName = this.oNewsPanel.getProperty(\"customFileName\") as string;\n\t\tif (this.isCSVFileFormat(customFileName) || showDefaultNewsFeed) {\n\t\t\tthis.oCustNewsSwitchContainer.setVisible(false);\n\t\t}\n\n\t\tconst oPersonalizer = await this.getPersonalization();\n\t\tconst oPersData = await oPersonalizer.read();\n\t\tconst aPersNewsFeed = (showDefaultNewsFeed ? oPersData?.[\"defaultNewsFeed\"] : oPersData?.[\"favNewsFeed\"]) as IFavNewsFeed;\n\t\tconst showAllPreparationRequired = aPersNewsFeed?.showAllPreparationRequired ?? !aPersNewsFeed;\n\n\t\tlet aNewsFeed: INewsFeed[] = await this.oNewsPanel.getCustomOrDefaultNewsFeed(showDefaultNewsFeed ? \"\" : sFeedKey, false);\n\n\t\tif (showDefaultNewsFeed) {\n\t\t\treturn this._handleDefaultNewsFeed(aNewsFeed, aPersNewsFeed);\n\t\t} else {\n\t\t\treturn this._handleCustomNewsFeed(aNewsFeed, aPersNewsFeed, showAllPreparationRequired);\n\t\t}\n\t}\n\n\t/**\n\t *\n\t * @param {INewsFeed[]} aNewsFeed\n\t * @param {IFavNewsFeed} aPersNewsFeed\n\t * @returns {INewsFeed[] | undefined}\n\t * @private\n\t * @description Handles the default news feed settings by setting the header text, title, and items.\n\t * It maps the news feed items to set their selected and disabled states based on the personalisation data.\n\t * If no news feed is provided, it returns undefined.\n\t */\n\tprivate _handleDefaultNewsFeed(aNewsFeed: INewsFeed[], aPersNewsFeed: IFavNewsFeed): INewsFeed[] | undefined {\n\t\tthis.headerText.setText(this._i18nBundle.getText(\"defaultNewsSettingsText\"));\n\t\tthis.title.setText(this._i18nBundle.getText(\"defaultNewsSettingsHeading\"));\n\t\tconst mandatoryNewsFeed = this.oNewsPanel.getMandatoryDefaultNewsFeed();\n\t\tthis.deselectedDefaultFeeds = aPersNewsFeed?.items || [];\n\n\t\tif (!aNewsFeed || aNewsFeed.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\taNewsFeed = aNewsFeed.map((oNewsFeed: INewsFeed) => {\n\t\t\t// if group_id not available in deselectedDefaultFeeds, then mark it as selected\n\t\t\tconst isDeselected = oNewsFeed.group_id ? this.deselectedDefaultFeeds.includes(oNewsFeed.group_id) : false;\n\t\t\toNewsFeed.selected = !aPersNewsFeed ? true : !isDeselected;\n\t\t\t// if group_id is available in mandatoryNewsFeed, then mark it as disabled, user cannot hide mandatory feeds\n\t\t\tif (mandatoryNewsFeed.includes(oNewsFeed.group_id ?? \"\")) {\n\t\t\t\toNewsFeed.selected = true;\n\t\t\t\toNewsFeed.disabled = true;\n\t\t\t}\n\n\t\t\treturn oNewsFeed;\n\t\t});\n\n\t\tthis.setItems(aNewsFeed);\n\t\tthis.oShowSwitch.setState(false);\n\t\treturn aNewsFeed;\n\t}\n\n\t/**\n\t * @param {INewsFeed[]} aNewsFeed\n\t * @param aPersNewsFeed\n\t * @param showAllPreparationRequired\n\t * @returns {INewsFeed[] | undefined}\n\t * @private\n\t * This method is responsible for managing the custom news feed settings in the News Settings Panel.\n\t * It updates the header text and title, checks if the news feed is available, and maps the news feed items to set their selected state.\n\t * If the news feed is not available or empty, it returns undefined.\n\t * It also sets the state of the show switch based on the `showAllPreparationRequired` parameter.\n\t */\n\tprivate _handleCustomNewsFeed(\n\t\taNewsFeed: INewsFeed[],\n\t\taPersNewsFeed: IFavNewsFeed,\n\t\tshowAllPreparationRequired: boolean\n\t): INewsFeed[] | undefined {\n\t\tthis.headerText.setText(this._i18nBundle.getText(\"newsFeedSettingsText\"));\n\t\tthis.title.setText(this._i18nBundle.getText(\"newsFeedSettingsHeading\"));\n\n\t\tif (!aNewsFeed || aNewsFeed.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst favFeedTitles: string[] = aPersNewsFeed?.items || aNewsFeed;\n\t\taNewsFeed = aNewsFeed.map((oNewsFeed: INewsFeed) => {\n\t\t\tconst isFavorite = favFeedTitles.includes(oNewsFeed.title);\n\t\t\toNewsFeed.selected = !aPersNewsFeed ? true : isFavorite;\n\t\t\treturn oNewsFeed;\n\t\t});\n\n\t\tthis.aFavNewsFeed = aNewsFeed;\n\t\tthis.setItems(this.aFavNewsFeed);\n\t\tthis.oShowSwitch.setState(!!showAllPreparationRequired);\n\t\treturn aNewsFeed;\n\t}\n\n\t/**\n\t * Checks if the News Settings Panel is supported based on the properties of the News Panel.\n\t *\n\t * @returns {Promise<boolean>} A promise that resolves to true if the News Settings Panel is supported, otherwise false.\n\t */\n\tpublic async isSupported(): Promise<boolean> {\n\t\tconst newsPanel = this._getPanel() as NewsPanel;\n\t\tif (!newsPanel || !(newsPanel?.getParent() as NewsAndPagesContainer).getProperty(\"newsFeedVisibility\")) {\n\t\t\treturn Promise.resolve(false);\n\t\t}\n\n\t\treturn Promise.resolve(\n\t\t\t(newsPanel.getNewsType() === NewsType.Custom || newsPanel.getNewsType() === NewsType.Default) &&\n\t\t\t\t!newsPanel.isNoUpdatesNewsFeed()\n\t\t);\n\t}\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"NewsSettingsPanel.js","names":["sap","ui","define","Button","CheckBox","Column","ColumnListItem","CustomListItem","HBox","Label","List","Switch","Table","Text","Title","VBox","CustomData","__BaseSettingsPanel","___library","___utils_Accessibility","___utils_Constants","___utils_FESRUtil","__PersonalisationUtils","__UshellPersonalizer","_interopRequireDefault","obj","__esModule","default","BaseSettingsPanel","NewsType","getInvisibleText","SETTINGS_PANELS_KEYS","addFESRSemanticStepName","FESR_EVENTS","PersonalisationUtils","UshellPersonalizer","NewsSettingsPanel","extend","init","_init","BaseSettingsPanel.prototype.init.call","setProperty","NEWS","_i18nBundle","getText","_resetActionButton","id","getId","visible","enabled","text","press","resetDefaultNewsSettings","addActionButton","addAggregation","getContent","attachPanelNavigated","loadNewsFeedSettings","aFavNewsFeed","_getContent","oHeader","setHeader","oTitle","setTitleMessage","oContentVBox","alignItems","justifyContent","items","createCustomNewsList","createNewsGroupTable","getPersonalization","_getPersonalization","_this","_temp2","oPersonalizer","_temp","Promise","resolve","getInstance","getPersContainerId","_getPanel","getOwnerComponent","then","_UshellPersonalizer$g","e","reject","_setHeader","headerText","oHeaderVBox","addStyleClass","_setTitleMessage","title","titleStyle","oTitleHbox","oTitleVBox","_createCustomNewsList","newsListVBox","oShowSwitchLabel","oShowSwitch","customTextOn","customTextOff","change","saveNewsFeedSettings","state","ariaLabelledBy","CHANGE","oCustNewsSwitchContainer","width","oShowAllPrep","oInvisibleText","oList","direction","_createNewsGroupTable","groupTable","includeItemInSelection","placeHolderCol","titleCol","header","articleCount","addColumn","isCSVFileFormat","_isCSVFileFormat","fileName","split","pop","toLowerCase","_saveNewsFeedSettings","_this2","selectedFeeds","deselectedDefaultFeeds","newsType","oNewsPanel","getNewsType","showDefault","Default","customFileName","getProperty","feedKey","getCustomFeedKey","push","collectDeselectedDefaultGroupIds","collectSelectedCustomFeedTitles","personalizer","read","personalizationData","defaultNewsFeed","favNewsFeed","showAllPreparationRequired","getState","write","setState","setEnabled","length","setCustomNewsFeed","_collectSelectedCustomFeedTitles","getItems","flatMap","item","content","getAggregation","hBox","checkBox","getSelected","_collectDeselectedDefaultGroupIds","rows","row","cells","getCells","groupId","getDefaultGroupId","_getDefaultGroupId","contentBox","customData","getCustomData","getValue","setCustomNewsItems","_setCustomNewsItems","aItems","destroyAggregation","forEach","oItem","i","oNewsListItemHbox","select","selected","disabled","customListItem","addItem","_loadNewsFeedSettings","_this3","sFeedKey","showDefaultNewsFeed","setVisible","oPersData","aPersNewsFeed","aNewsFeed","getDefaultNewsData","_this3$oNewsPanel$get","_handleDefaultNewsFeed","getCustomOrDefaultNewsFeed","_this3$oNewsPanel$get2","_handleCustomNewsFeed","setText","mandatoryNewsFeed","getMandatoryDefaultNewsFeed","map","oNewsFeed","isDeselected","group_id","includes","setColumnListItems","_setColumnListItems","destroyItems","colListItem","type","String","_group_to_article","addCustomData","key","value","favFeedTitles","isFavorite","_resetDefaultNewsSettings","_this4","isSupported","_isSupported","_this5","newsPanel","getParent","Custom","isNoUpdatesNewsFeed"],"sources":["NewsSettingsPanel.ts"],"sourcesContent":["/*!\n * SAP UI development toolkit for HTML5 (SAPUI5)\n * * (c) Copyright 2009-2025 SAP SE. All rights reserved\n */\n\nimport Button from \"sap/m/Button\";\nimport CheckBox from \"sap/m/CheckBox\";\nimport Column from \"sap/m/Column\";\nimport ColumnListItem from \"sap/m/ColumnListItem\";\nimport CustomListItem from \"sap/m/CustomListItem\";\nimport HBox from \"sap/m/HBox\";\nimport Label from \"sap/m/Label\";\nimport List from \"sap/m/List\";\nimport Switch from \"sap/m/Switch\";\nimport Table from \"sap/m/Table\";\nimport Text from \"sap/m/Text\";\nimport Title from \"sap/m/Title\";\nimport VBox from \"sap/m/VBox\";\nimport Component from \"sap/ui/core/Component\";\nimport Control from \"sap/ui/core/Control\";\nimport CustomData from \"sap/ui/core/CustomData\";\nimport BaseSettingsPanel from \"./BaseSettingsPanel\";\nimport { NewsType } from \"./library\";\nimport NewsAndPagesContainer from \"./NewsAndPagesContainer\";\nimport NewsPanel, { INewsFeed } from \"./NewsPanel\";\nimport { getInvisibleText } from \"./utils/Accessibility\";\nimport { SETTINGS_PANELS_KEYS } from \"./utils/Constants\";\nimport { addFESRSemanticStepName, FESR_EVENTS } from \"./utils/FESRUtil\";\nimport PersonalisationUtils from \"./utils/PersonalisationUtils\";\nimport UshellPersonalizer from \"./utils/UshellPersonalizer\";\n\ninterface IFavNewsFeed {\n\titems: string[];\n\tshowAllPreparationRequired?: boolean;\n}\n\n/**\n *\n * Class for My Home News Settings Panel.\n *\n * @extends BaseSettingsPanel\n *\n * @author SAP SE\n * @version 0.0.1\n * @since 1.121\n * @private\n *\n * @alias sap.cux.home.NewsSettingsPanel\n */\nexport default class NewsSettingsPanel extends BaseSettingsPanel {\n\tprivate oShowSwitch!: Switch;\n\tprivate oCustNewsSwitchContainer!: HBox;\n\tprivate oList!: List;\n\tprivate oPersonalizer!: UshellPersonalizer;\n\tprivate oNewsPanel!: NewsPanel;\n\tprivate aFavNewsFeed!: INewsFeed[] | string[];\n\tprivate deselectedDefaultFeeds!: string[];\n\tprivate headerText!: Text;\n\tprivate title!: Title;\n\tprivate groupTable!: Table;\n\tprivate newsListVBox!: VBox;\n\tprivate _resetActionButton!: Button;\n\n\t/**\n\t * Init lifecycle method\n\t *\n\t * @public\n\t * @override\n\t */\n\tpublic init(): void {\n\t\tsuper.init();\n\n\t\t//setup panel\n\t\tthis.setProperty(\"key\", SETTINGS_PANELS_KEYS.NEWS);\n\t\tthis.setProperty(\"title\", this._i18nBundle.getText(\"news\"));\n\t\tthis.setProperty(\"icon\", \"sap-icon://newspaper\");\n\n\t\tthis._resetActionButton = new Button({\n\t\t\tid: `${this.getId()}-newsResetBtn`,\n\t\t\tvisible: false,\n\t\t\tenabled: false,\n\t\t\ttext: this._i18nBundle.getText(\"resetDefaultButton\"),\n\t\t\tpress: () => this.resetDefaultNewsSettings()\n\t\t});\n\t\t// Add button to actionButtons aggregation\n\t\tthis.addActionButton(this._resetActionButton);\n\t\t//setup layout content\n\t\tthis.addAggregation(\"content\", this.getContent());\n\n\t\t//fired every time on panel navigation\n\t\tthis.attachPanelNavigated(() => {\n\t\t\tvoid this.loadNewsFeedSettings();\n\t\t});\n\t\tthis.aFavNewsFeed = [];\n\t}\n\n\t/**\n\t * Returns the content for the News Settings Panel.\n\t *\n\t * @private\n\t * @returns {Control} The control containing the News Settings Panel content.\n\t */\n\tprivate getContent(): Control {\n\t\tconst oHeader = this.setHeader();\n\t\tconst oTitle = this.setTitleMessage();\n\t\tconst oContentVBox = new VBox(this.getId() + \"--idNewsPageOuterVBoX\", {\n\t\t\talignItems: \"Start\",\n\t\t\tjustifyContent: \"SpaceBetween\",\n\t\t\titems: [oHeader, oTitle, this.createCustomNewsList(), this.createNewsGroupTable()]\n\t\t});\n\t\treturn oContentVBox;\n\t}\n\n\t/**\n\t * Get personalization instance\n\t */\n\tprivate async getPersonalization() {\n\t\tif (!this.oPersonalizer) {\n\t\t\tthis.oPersonalizer = await UshellPersonalizer.getInstance(\n\t\t\t\tPersonalisationUtils.getPersContainerId(this._getPanel()),\n\t\t\t\tPersonalisationUtils.getOwnerComponent(this._getPanel()) as Component\n\t\t\t);\n\t\t}\n\t\treturn this.oPersonalizer;\n\t}\n\n\t/**\n\t * Returns the content for the News Settings Panel Header.\n\t *\n\t * @private\n\t * @returns {sap.ui.core.Control} The control containing the News Settings Panel's Header content.\n\t */\n\tprivate setHeader() {\n\t\tthis.headerText = new Text(this.getId() + \"--idCustNewsFeedSettingsText\", {\n\t\t\ttext: this._i18nBundle.getText(\"newsFeedSettingsText\")\n\t\t});\n\t\tconst oHeaderVBox = new VBox(this.getId() + \"--idCustNewsFeedSettingsTextContainer\", {\n\t\t\talignItems: \"Start\",\n\t\t\tjustifyContent: \"SpaceBetween\",\n\t\t\titems: [this.headerText]\n\t\t}).addStyleClass(\"sapUiSmallMarginTop sapUiSmallMarginBegin\");\n\t\treturn oHeaderVBox;\n\t}\n\n\t/**\n\t * Returns the content for the News Settings Panel Title description.\n\t *\n\t * @private\n\t * @returns {sap.ui.core.Control} The control containing the News Settings Panel's Title description.\n\t */\n\tprivate setTitleMessage() {\n\t\tthis.title = new Title(this.getId() + \"--idCustNewsFeedSettignsTitle\", {\n\t\t\ttext: this._i18nBundle.getText(\"newsFeedSettingsHeading\"),\n\t\t\ttitleStyle: \"H3\"\n\t\t});\n\t\tconst oTitleHbox = new HBox(this.getId() + \"--idCustNewsFeedSettingsTitleContainer\", {\n\t\t\talignItems: \"Center\",\n\t\t\tjustifyContent: \"SpaceBetween\",\n\t\t\titems: [this.title]\n\t\t});\n\t\tconst oTitleVBox = new VBox(this.getId() + \"--idCustNewsFeedSettingsTitleVBox\", {\n\t\t\talignItems: \"Start\",\n\t\t\tjustifyContent: \"SpaceBetween\",\n\t\t\titems: [oTitleHbox]\n\t\t}).addStyleClass(\"sapUiSmallMarginTop sapUiSmallMarginBegin\");\n\t\treturn oTitleVBox;\n\t}\n\n\t/**\n\t * Returns the content for the news List for custom news feed\n\t *\n\t * @private\n\t * @returns {sap.ui.core.Control} The control containing the News Settings Panel's List\n\t */\n\tprivate createCustomNewsList() {\n\t\tif (!this.newsListVBox) {\n\t\t\t//showAllPrepRequired Switch\n\t\t\tconst oShowSwitchLabel = new Label(this.getId() + \"--idShowAllCustNewsSwitchLabel\", {\n\t\t\t\ttext: this._i18nBundle.getText(\"showAllPreparationRequiredSwitchLabel\")\n\t\t\t});\n\t\t\tthis.oShowSwitch = new Switch(`${this.getId()}-showSwitch`, {\n\t\t\t\tcustomTextOn: \" \",\n\t\t\t\tcustomTextOff: \" \",\n\t\t\t\tchange: () => {\n\t\t\t\t\tvoid this.saveNewsFeedSettings();\n\t\t\t\t},\n\t\t\t\tstate: false,\n\t\t\t\tariaLabelledBy: [`${this.getId()}--idShowAllCustNewsSwitchLabel`]\n\t\t\t});\n\t\t\taddFESRSemanticStepName(this.oShowSwitch, FESR_EVENTS.CHANGE, \"showPrepRequire\");\n\t\t\tthis.oCustNewsSwitchContainer = new HBox(this.getId() + \"--idShowAllCustNewsSwitchContainer\", {\n\t\t\t\talignItems: \"Center\",\n\t\t\t\titems: [oShowSwitchLabel, this.oShowSwitch],\n\t\t\t\twidth: \"94%\"\n\t\t\t}).addStyleClass(\"sapUiSmallMarginTop\");\n\n\t\t\tconst oShowAllPrep = new VBox(this.getId() + \"--idShowAllCustNewsSwitchVBox\", {\n\t\t\t\titems: [this.oCustNewsSwitchContainer],\n\t\t\t\twidth: \"94%\"\n\t\t\t}).addStyleClass(\"sapUiSmallMarginTop\");\n\t\t\tconst oInvisibleText = getInvisibleText(`${this.getId()}--newsTitleText`, this._i18nBundle.getText(\"newsTitle\"));\n\t\t\t//List of news items\n\t\t\tthis.oList = new List(this.getId() + \"--idCustNewsFeedList\", {\n\t\t\t\tariaLabelledBy: [\n\t\t\t\t\toInvisibleText.getId(),\n\t\t\t\t\t`${this.getId()}--idCustNewsFeedSettingsText`,\n\t\t\t\t\t`${this.getId()}--idCustNewsFeedSettignsTitle`\n\t\t\t\t]\n\t\t\t});\n\t\t\t//Outer VBox\n\t\t\tthis.newsListVBox = new VBox(this.getId() + \"--idCustNewsFeedListContainer\", {\n\t\t\t\tdirection: \"Column\",\n\t\t\t\tvisible: false,\n\t\t\t\titems: [this.oList, oShowAllPrep, oInvisibleText],\n\t\t\t\twidth: \"96%\"\n\t\t\t}).addStyleClass(\"sapUiSmallMarginTop sapUiSmallMarginBegin\");\n\t\t}\n\t\treturn this.newsListVBox;\n\t}\n\n\t/**\n\t *\tCreates and returns a table for managing default news group settings.\n\t * @returns {Table} Table for news groups for default manage news feed\n\t * @private\n\t */\n\tprivate createNewsGroupTable() {\n\t\t//Table for news groups\n\t\tif (!this.groupTable) {\n\t\t\tthis.groupTable = new Table(this.getId() + \"--idNewsGroupTbl\", {\n\t\t\t\tincludeItemInSelection: true,\n\t\t\t\tvisible: false\n\t\t\t}).addStyleClass(\"sapUiTinyMarginBegin\");\n\t\t\tconst placeHolderCol = new Column(this.getId() + \"--idNewsGroupPlaceHolder\", {\n\t\t\t\twidth: \"8%\"\n\t\t\t});\n\n\t\t\t//title column\n\t\t\tconst titleCol = new Column(this.getId() + \"--idNewsGroupTitle\", {\n\t\t\t\theader: new Label(this.getId() + \"--idNewsGroupTitleLbl\", {\n\t\t\t\t\ttext: this._i18nBundle.getText(\"defaultNewsSettingsHeading\")\n\t\t\t\t}),\n\t\t\t\twidth: \"50%\"\n\t\t\t});\n\t\t\tconst articleCount = new Column(this.getId() + \"--idNewsGroupCount\", {\n\t\t\t\theader: new Label(this.getId() + \"--idNewsGroupCountLbl\", {\n\t\t\t\t\ttext: this._i18nBundle.getText(\"articleCount\")\n\t\t\t\t}),\n\t\t\t\twidth: \"42%\"\n\t\t\t});\n\t\t\tthis.groupTable.addColumn(placeHolderCol);\n\t\t\tthis.groupTable.addColumn(titleCol);\n\t\t\tthis.groupTable.addColumn(articleCount);\n\t\t}\n\t\treturn this.groupTable;\n\t}\n\t/**\n\t * Checks if the custom file format is CSV based on the custom file name.\n\t *\n\t * @param {string} fileName - The custom file name.\n\t * @returns {boolean} True if the file format is CSV, otherwise false.\n\t */\n\tprivate isCSVFileFormat(fileName: string): boolean {\n\t\treturn fileName.split(\".\").pop()?.toLowerCase() === \"csv\";\n\t}\n\n\t/**\n\t *\n\t * Saves news feed settings and shows news feed based on selection change of list of switch\n\t *\n\t * @private\n\t */\n\tprivate async saveNewsFeedSettings(): Promise<void> {\n\t\tconst selectedFeeds: string[] = [];\n\t\tconst deselectedDefaultFeeds: string[] = [];\n\t\tconst newsType = this.oNewsPanel?.getNewsType();\n\t\tconst showDefault = newsType === NewsType.Default;\n\t\tconst customFileName = this.oNewsPanel.getProperty(\"customFileName\") as string;\n\t\tconst feedKey = this.oNewsPanel.getCustomFeedKey();\n\t\tif (showDefault) {\n\t\t\tdeselectedDefaultFeeds.push(...this.collectDeselectedDefaultGroupIds());\n\t\t} else {\n\t\t\tselectedFeeds.push(...this.collectSelectedCustomFeedTitles());\n\t\t}\n\n\t\tconst personalizer = await this.getPersonalization();\n\t\tconst personalizationData = (await personalizer.read()) || {};\n\n\t\tif (showDefault) {\n\t\t\tpersonalizationData.defaultNewsFeed = { items: deselectedDefaultFeeds };\n\t\t} else {\n\t\t\tpersonalizationData.favNewsFeed = {\n\t\t\t\titems: selectedFeeds,\n\t\t\t\tshowAllPreparationRequired: this.isCSVFileFormat(customFileName) ? false : this.oShowSwitch.getState()\n\t\t\t} as IFavNewsFeed;\n\t\t}\n\n\t\tawait personalizer.write(personalizationData);\n\n\t\t// get the latest value of switch and set the state\n\t\tif (!showDefault) {\n\t\t\tthis.oShowSwitch.setState(personalizationData.favNewsFeed?.showAllPreparationRequired);\n\t\t} else {\n\t\t\tthis._resetActionButton.setEnabled(!!(deselectedDefaultFeeds.length > 0));\n\t\t}\n\t\tawait this.oNewsPanel.setCustomNewsFeed(showDefault ? \"\" : feedKey);\n\t}\n\n\t/**\n\t * Collect selected custom feed titles from the list\n\t * @returns {string[]} Array of selected custom feed titles\n\t * @private\n\t */\n\tprivate collectSelectedCustomFeedTitles(): string[] {\n\t\tconst items = this.oList?.getItems() ?? [];\n\t\tif (!items.length) return [];\n\t\treturn items.flatMap((item) => {\n\t\t\tconst content = item.getAggregation(\"content\") as Control[] | undefined;\n\t\t\tconst hBox = content?.[0] as HBox | undefined;\n\t\t\tif (!hBox) return [];\n\t\t\tconst [checkBox, text] = hBox.getItems() as [CheckBox, Text];\n\t\t\treturn checkBox.getSelected() ? [text.getText()] : [];\n\t\t});\n\t}\n\n\t/**\n\t * Collect deselected default group IDs from the table\n\t * @returns {string[]} Array of deselected default group IDs from the table\n\t * @private\n\t */\n\tprivate collectDeselectedDefaultGroupIds(): string[] {\n\t\tconst rows = (this.groupTable?.getItems() as ColumnListItem[]) ?? [];\n\t\tif (!rows.length) return [];\n\t\treturn rows.flatMap((row: ColumnListItem) => {\n\t\t\tconst cells = row.getCells() as [CheckBox, Text, Text];\n\t\t\tconst checkBox = cells[0];\n\t\t\tif (checkBox.getSelected()) return [];\n\t\t\tconst groupId = this.getDefaultGroupId(row);\n\t\t\treturn groupId ? [groupId] : [];\n\t\t});\n\t}\n\n\t/**\n\t * Get groupId info for the default NewsList\n\t * @param {HBox | ColumnListItem} contentBox, content Hbox or ColumnListItem\n\t * @returns {string} groupId\n\t * @private\n\t */\n\tprivate getDefaultGroupId(contentBox: HBox | ColumnListItem): string {\n\t\tconst customData = contentBox.getCustomData();\n\t\treturn customData?.length ? (customData[0].getValue() as string) : \"\";\n\t}\n\n\t/**\n\t * Set items for the NewsList for custom news feed\n\t * @param {Array} [aItems] news items to be set as items aggregation\n\t * @private\n\t */\n\tprivate setCustomNewsItems(aItems: INewsFeed[]) {\n\t\tthis.oList.destroyAggregation(\"items\", true);\n\t\t(aItems || []).forEach((oItem: INewsFeed, i: number) => {\n\t\t\tlet oNewsListItemHbox = new HBox({\n\t\t\t\tid: `${this.getId()}--idCustNewsFeedItemContent--${i}`,\n\t\t\t\talignItems: \"Center\",\n\t\t\t\titems: [\n\t\t\t\t\tnew CheckBox(`${this.getId()}--custNewsFeedItemCheckBox--${i}`, {\n\t\t\t\t\t\tselect: () => {\n\t\t\t\t\t\t\tvoid this.saveNewsFeedSettings();\n\t\t\t\t\t\t},\n\t\t\t\t\t\tselected: oItem.selected as boolean,\n\t\t\t\t\t\tenabled: !oItem.disabled\n\t\t\t\t\t}),\n\t\t\t\t\tnew Text(`${this.getId()}--custNewsFeedItemText--${i}`, { text: oItem.title })\n\t\t\t\t],\n\t\t\t\twidth: \"100%\"\n\t\t\t});\n\n\t\t\tconst customListItem = new CustomListItem({\n\t\t\t\tid: `${this.getId()}--idCustNewsFeedItem--${i}`,\n\t\t\t\tcontent: [oNewsListItemHbox]\n\t\t\t});\n\t\t\tthis.oList.addItem(customListItem);\n\t\t});\n\t}\n\n\t/**\n\t * Loads news feed settings\n\t *\n\t * @returns {Promise} resolves to news feed settings\n\t */\n\tprivate async loadNewsFeedSettings(): Promise<INewsFeed[] | undefined> {\n\t\tthis.oNewsPanel = this._getPanel() as NewsPanel;\n\t\tconst sFeedKey = this.oNewsPanel.getCustomFeedKey();\n\t\tconst newsType = this.oNewsPanel?.getNewsType();\n\t\tconst showDefaultNewsFeed = newsType === NewsType.Default;\n\n\t\tconst customFileName = this.oNewsPanel.getProperty(\"customFileName\") as string;\n\t\tif (this.isCSVFileFormat(customFileName) || showDefaultNewsFeed) {\n\t\t\tthis.oCustNewsSwitchContainer.setVisible(false);\n\t\t}\n\n\t\tconst oPersonalizer = await this.getPersonalization();\n\t\tconst oPersData = await oPersonalizer.read();\n\t\tconst aPersNewsFeed = (showDefaultNewsFeed ? oPersData?.[\"defaultNewsFeed\"] : oPersData?.[\"favNewsFeed\"]) as IFavNewsFeed;\n\t\tconst showAllPreparationRequired = aPersNewsFeed?.showAllPreparationRequired ?? !aPersNewsFeed;\n\n\t\tlet aNewsFeed: INewsFeed[];\n\t\tif (showDefaultNewsFeed) {\n\t\t\tthis._resetActionButton.setVisible(true);\n\t\t\tthis._resetActionButton.setEnabled(!!(aPersNewsFeed?.items?.length > 0));\n\t\t\taNewsFeed = await this.oNewsPanel.getDefaultNewsData();\n\t\t\treturn this._handleDefaultNewsFeed(aNewsFeed, aPersNewsFeed);\n\t\t} else {\n\t\t\tthis._resetActionButton.setVisible(false);\n\t\t\taNewsFeed = await this.oNewsPanel.getCustomOrDefaultNewsFeed(showDefaultNewsFeed ? \"\" : sFeedKey, false);\n\t\t\treturn this._handleCustomNewsFeed(aNewsFeed, aPersNewsFeed, showAllPreparationRequired);\n\t\t}\n\t}\n\n\t/**\n\t *\n\t * @param {INewsFeed[]} aNewsFeed\n\t * @param {IFavNewsFeed} aPersNewsFeed\n\t * @returns {INewsFeed[] | undefined}\n\t * @private\n\t * @description Handles the default news feed settings by setting the header text, title, and items.\n\t * It maps the news feed items to set their selected and disabled states based on the personalisation data.\n\t * If no news feed is provided, it returns undefined.\n\t */\n\tprivate _handleDefaultNewsFeed(aNewsFeed: INewsFeed[], aPersNewsFeed: IFavNewsFeed): INewsFeed[] | undefined {\n\t\tthis.headerText.setText(\n\t\t\tthis._i18nBundle.getText(\"defaultNewsSettingsText\") + \"\\n\" + this._i18nBundle.getText(\"defaultNewsSettingsSubText\")\n\t\t);\n\t\tthis.title.setVisible(false);\n\t\tthis.newsListVBox.setVisible(false);\n\t\tthis.oShowSwitch.setState(false);\n\n\t\tconst mandatoryNewsFeed = this.oNewsPanel.getMandatoryDefaultNewsFeed();\n\t\tthis.deselectedDefaultFeeds = aPersNewsFeed?.items || [];\n\n\t\tif (!aNewsFeed || aNewsFeed.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\taNewsFeed = aNewsFeed.map((oNewsFeed: INewsFeed) => {\n\t\t\t// if group_id not available in deselectedDefaultFeeds, then mark it as selected\n\t\t\tconst isDeselected = oNewsFeed.group_id ? this.deselectedDefaultFeeds.includes(oNewsFeed.group_id) : false;\n\t\t\toNewsFeed.selected = !aPersNewsFeed ? true : !isDeselected;\n\t\t\t// if group_id is available in mandatoryNewsFeed, then mark it as disabled, user cannot hide mandatory feeds\n\t\t\tif (mandatoryNewsFeed.includes(oNewsFeed.group_id ?? \"\")) {\n\t\t\t\toNewsFeed.selected = true;\n\t\t\t\toNewsFeed.disabled = true;\n\t\t\t}\n\n\t\t\treturn oNewsFeed;\n\t\t});\n\n\t\tthis.groupTable.setVisible(true);\n\t\tthis.setColumnListItems(aNewsFeed);\n\n\t\treturn aNewsFeed;\n\t}\n\n\t/**\n\t * This method populates the column list items in the group table for the default news feed settings.\n\t * @param aItems Array of news feed items\n\t * @private\n\t */\n\tprivate setColumnListItems(aItems: INewsFeed[]) {\n\t\tthis.groupTable.destroyItems();\n\t\t//add column list item, title and article count\n\t\t(aItems || []).forEach((oItem: INewsFeed, i: number) => {\n\t\t\tconst colListItem = new ColumnListItem({\n\t\t\t\tid: `${this.getId()}--idNewsGroupColListItem--${i}`,\n\t\t\t\tselected: oItem.selected as boolean,\n\t\t\t\ttype: \"Active\",\n\t\t\t\tcells: [\n\t\t\t\t\tnew CheckBox({\n\t\t\t\t\t\tid: `${this.getId()}--idNewsGroupCheckBox--${i}`,\n\t\t\t\t\t\tselected: oItem.selected as boolean,\n\t\t\t\t\t\tenabled: !oItem.disabled,\n\t\t\t\t\t\tselect: () => {\n\t\t\t\t\t\t\tvoid this.saveNewsFeedSettings();\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\t\tnew Text({ text: oItem.title }),\n\t\t\t\t\tnew Text({ text: String(oItem._group_to_article?.length ?? 0) })\n\t\t\t\t]\n\t\t\t});\n\n\t\t\t// if showDefault is true, add group_id as custom data to the item\n\t\t\tcolListItem.addCustomData(new CustomData({ key: \"newsGroupId\", value: oItem.group_id }));\n\t\t\tthis.groupTable.addItem(colListItem);\n\t\t});\n\t}\n\t/**\n\t * @param {INewsFeed[]} aNewsFeed\n\t * @param aPersNewsFeed\n\t * @param showAllPreparationRequired\n\t * @returns {INewsFeed[] | undefined}\n\t * @private\n\t * This method is responsible for managing the custom news feed settings in the News Settings Panel.\n\t * It updates the header text and title, checks if the news feed is available, and maps the news feed items to set their selected state.\n\t * If the news feed is not available or empty, it returns undefined.\n\t * It also sets the state of the show switch based on the `showAllPreparationRequired` parameter.\n\t */\n\tprivate _handleCustomNewsFeed(\n\t\taNewsFeed: INewsFeed[],\n\t\taPersNewsFeed: IFavNewsFeed,\n\t\tshowAllPreparationRequired: boolean\n\t): INewsFeed[] | undefined {\n\t\tthis.groupTable.setVisible(false);\n\t\tthis.headerText.setText(this._i18nBundle.getText(\"newsFeedSettingsText\"));\n\t\tthis.title.setText(this._i18nBundle.getText(\"newsFeedSettingsHeading\"));\n\t\tthis.title.setVisible(true);\n\t\tthis.newsListVBox.setVisible(true);\n\n\t\tif (!aNewsFeed || aNewsFeed.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst favFeedTitles: string[] = aPersNewsFeed?.items || aNewsFeed;\n\t\taNewsFeed = aNewsFeed.map((oNewsFeed: INewsFeed) => {\n\t\t\tconst isFavorite = favFeedTitles.includes(oNewsFeed.title);\n\t\t\toNewsFeed.selected = !aPersNewsFeed ? true : isFavorite;\n\t\t\treturn oNewsFeed;\n\t\t});\n\n\t\tthis.aFavNewsFeed = aNewsFeed;\n\t\tthis.setCustomNewsItems(this.aFavNewsFeed);\n\t\tthis.oShowSwitch.setState(!!showAllPreparationRequired);\n\t\treturn aNewsFeed;\n\t}\n\n\t/**\n\t * Resets the default manage news' news settings to default by clearing\n\t * the personalization data and updating the news panel.\n\t * @private\n\t * @returns {Promise<INewsFeed[] | undefined>} A promise that resolves to the updated news feed items or undefined.\n\t */\n\tprivate async resetDefaultNewsSettings() {\n\t\tconst personalizer = await this.getPersonalization();\n\t\tconst personalizationData = (await personalizer.read()) || {};\n\t\tpersonalizationData.defaultNewsFeed = { items: [] };\n\t\tawait personalizer.write(personalizationData);\n\t\tawait this.oNewsPanel.setCustomNewsFeed(\"\");\n\t\tlet aNewsFeed = await this.oNewsPanel.getDefaultNewsData();\n\t\tthis._resetActionButton.setEnabled(false);\n\t\treturn this._handleDefaultNewsFeed(aNewsFeed, personalizationData.defaultNewsFeed);\n\t}\n\n\t/**\n\t * Checks if the News Settings Panel is supported based on the properties of the News Panel.\n\t *\n\t * @returns {Promise<boolean>} A promise that resolves to true if the News Settings Panel is supported, otherwise false.\n\t */\n\tpublic async isSupported(): Promise<boolean> {\n\t\tconst newsPanel = this._getPanel() as NewsPanel;\n\t\tif (!newsPanel || !(newsPanel?.getParent() as NewsAndPagesContainer).getProperty(\"newsFeedVisibility\")) {\n\t\t\treturn Promise.resolve(false);\n\t\t}\n\n\t\treturn Promise.resolve(\n\t\t\t(newsPanel.getNewsType() === NewsType.Custom || newsPanel.getNewsType() === NewsType.Default) &&\n\t\t\t\t!newsPanel.isNoUpdatesNewsFeed()\n\t\t);\n\t}\n}\n"],"mappings":"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","ignoreList":[]}
@@ -3,13 +3,16 @@
3
3
  * * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
5
 
6
+ import Button from "sap/m/Button";
6
7
  import CheckBox from "sap/m/CheckBox";
8
+ import Column from "sap/m/Column";
9
+ import ColumnListItem from "sap/m/ColumnListItem";
7
10
  import CustomListItem from "sap/m/CustomListItem";
8
11
  import HBox from "sap/m/HBox";
9
12
  import Label from "sap/m/Label";
10
13
  import List from "sap/m/List";
11
- import ListItemBase from "sap/m/ListItemBase";
12
14
  import Switch from "sap/m/Switch";
15
+ import Table from "sap/m/Table";
13
16
  import Text from "sap/m/Text";
14
17
  import Title from "sap/m/Title";
15
18
  import VBox from "sap/m/VBox";
@@ -54,6 +57,9 @@ export default class NewsSettingsPanel extends BaseSettingsPanel {
54
57
  private deselectedDefaultFeeds!: string[];
55
58
  private headerText!: Text;
56
59
  private title!: Title;
60
+ private groupTable!: Table;
61
+ private newsListVBox!: VBox;
62
+ private _resetActionButton!: Button;
57
63
 
58
64
  /**
59
65
  * Init lifecycle method
@@ -69,6 +75,15 @@ export default class NewsSettingsPanel extends BaseSettingsPanel {
69
75
  this.setProperty("title", this._i18nBundle.getText("news"));
70
76
  this.setProperty("icon", "sap-icon://newspaper");
71
77
 
78
+ this._resetActionButton = new Button({
79
+ id: `${this.getId()}-newsResetBtn`,
80
+ visible: false,
81
+ enabled: false,
82
+ text: this._i18nBundle.getText("resetDefaultButton"),
83
+ press: () => this.resetDefaultNewsSettings()
84
+ });
85
+ // Add button to actionButtons aggregation
86
+ this.addActionButton(this._resetActionButton);
72
87
  //setup layout content
73
88
  this.addAggregation("content", this.getContent());
74
89
 
@@ -91,7 +106,7 @@ export default class NewsSettingsPanel extends BaseSettingsPanel {
91
106
  const oContentVBox = new VBox(this.getId() + "--idNewsPageOuterVBoX", {
92
107
  alignItems: "Start",
93
108
  justifyContent: "SpaceBetween",
94
- items: [oHeader, oTitle, this.setNewsList()]
109
+ items: [oHeader, oTitle, this.createCustomNewsList(), this.createNewsGroupTable()]
95
110
  });
96
111
  return oContentVBox;
97
112
  }
@@ -152,56 +167,92 @@ export default class NewsSettingsPanel extends BaseSettingsPanel {
152
167
  }
153
168
 
154
169
  /**
155
- * Returns the content for the news List
170
+ * Returns the content for the news List for custom news feed
156
171
  *
157
172
  * @private
158
173
  * @returns {sap.ui.core.Control} The control containing the News Settings Panel's List
159
174
  */
160
- private setNewsList() {
161
- //showAllPrepRequired Switch
162
- const oShowSwitchLabel = new Label(this.getId() + "--idShowAllCustNewsSwitchLabel", {
163
- text: this._i18nBundle.getText("showAllPreparationRequiredSwitchLabel")
164
- });
165
- this.oShowSwitch = new Switch(`${this.getId()}-showSwitch`, {
166
- // 'ariaLabelledBy': "idShowAllCustNewsSwitchLabel idShowAllCustNewsSwitch",
167
- customTextOn: " ",
168
- customTextOff: " ",
169
- change: () => {
170
- void this.saveNewsFeedSettings();
171
- },
172
- // 'fesr:change': "showPrepRequire",
173
- state: false,
174
- ariaLabelledBy: [`${this.getId()}--idShowAllCustNewsSwitchLabel`]
175
- });
176
- addFESRSemanticStepName(this.oShowSwitch, FESR_EVENTS.CHANGE, "showPrepRequire");
177
- this.oCustNewsSwitchContainer = new HBox(this.getId() + "--idShowAllCustNewsSwitchContainer", {
178
- alignItems: "Center",
179
- items: [oShowSwitchLabel, this.oShowSwitch],
180
- width: "94%"
181
- }).addStyleClass("sapUiSmallMarginTop");
182
-
183
- const oShowAllPrep = new VBox(this.getId() + "--idShowAllCustNewsSwitchVBox", {
184
- items: [this.oCustNewsSwitchContainer],
185
- width: "94%"
186
- }).addStyleClass("sapUiSmallMarginTop");
187
- const oInvisibleText = getInvisibleText(`${this.getId()}--newsTitleText`, this._i18nBundle.getText("newsTitle"));
188
- //List of news items
189
- this.oList = new List(this.getId() + "--idCustNewsFeedList", {
190
- ariaLabelledBy: [
191
- oInvisibleText.getId(),
192
- `${this.getId()}--idCustNewsFeedSettingsText`,
193
- `${this.getId()}--idCustNewsFeedSettignsTitle`
194
- ]
195
- });
196
- //Outer VBox
197
- const oNewsListVBox = new VBox(this.getId() + "--idCustNewsFeedListContainer", {
198
- direction: "Column",
199
- items: [this.oList, oShowAllPrep, oInvisibleText],
200
- width: "96%"
201
- }).addStyleClass("sapUiSmallMarginTop sapUiSmallMarginBegin");
202
- return oNewsListVBox;
175
+ private createCustomNewsList() {
176
+ if (!this.newsListVBox) {
177
+ //showAllPrepRequired Switch
178
+ const oShowSwitchLabel = new Label(this.getId() + "--idShowAllCustNewsSwitchLabel", {
179
+ text: this._i18nBundle.getText("showAllPreparationRequiredSwitchLabel")
180
+ });
181
+ this.oShowSwitch = new Switch(`${this.getId()}-showSwitch`, {
182
+ customTextOn: " ",
183
+ customTextOff: " ",
184
+ change: () => {
185
+ void this.saveNewsFeedSettings();
186
+ },
187
+ state: false,
188
+ ariaLabelledBy: [`${this.getId()}--idShowAllCustNewsSwitchLabel`]
189
+ });
190
+ addFESRSemanticStepName(this.oShowSwitch, FESR_EVENTS.CHANGE, "showPrepRequire");
191
+ this.oCustNewsSwitchContainer = new HBox(this.getId() + "--idShowAllCustNewsSwitchContainer", {
192
+ alignItems: "Center",
193
+ items: [oShowSwitchLabel, this.oShowSwitch],
194
+ width: "94%"
195
+ }).addStyleClass("sapUiSmallMarginTop");
196
+
197
+ const oShowAllPrep = new VBox(this.getId() + "--idShowAllCustNewsSwitchVBox", {
198
+ items: [this.oCustNewsSwitchContainer],
199
+ width: "94%"
200
+ }).addStyleClass("sapUiSmallMarginTop");
201
+ const oInvisibleText = getInvisibleText(`${this.getId()}--newsTitleText`, this._i18nBundle.getText("newsTitle"));
202
+ //List of news items
203
+ this.oList = new List(this.getId() + "--idCustNewsFeedList", {
204
+ ariaLabelledBy: [
205
+ oInvisibleText.getId(),
206
+ `${this.getId()}--idCustNewsFeedSettingsText`,
207
+ `${this.getId()}--idCustNewsFeedSettignsTitle`
208
+ ]
209
+ });
210
+ //Outer VBox
211
+ this.newsListVBox = new VBox(this.getId() + "--idCustNewsFeedListContainer", {
212
+ direction: "Column",
213
+ visible: false,
214
+ items: [this.oList, oShowAllPrep, oInvisibleText],
215
+ width: "96%"
216
+ }).addStyleClass("sapUiSmallMarginTop sapUiSmallMarginBegin");
217
+ }
218
+ return this.newsListVBox;
203
219
  }
204
220
 
221
+ /**
222
+ * Creates and returns a table for managing default news group settings.
223
+ * @returns {Table} Table for news groups for default manage news feed
224
+ * @private
225
+ */
226
+ private createNewsGroupTable() {
227
+ //Table for news groups
228
+ if (!this.groupTable) {
229
+ this.groupTable = new Table(this.getId() + "--idNewsGroupTbl", {
230
+ includeItemInSelection: true,
231
+ visible: false
232
+ }).addStyleClass("sapUiTinyMarginBegin");
233
+ const placeHolderCol = new Column(this.getId() + "--idNewsGroupPlaceHolder", {
234
+ width: "8%"
235
+ });
236
+
237
+ //title column
238
+ const titleCol = new Column(this.getId() + "--idNewsGroupTitle", {
239
+ header: new Label(this.getId() + "--idNewsGroupTitleLbl", {
240
+ text: this._i18nBundle.getText("defaultNewsSettingsHeading")
241
+ }),
242
+ width: "50%"
243
+ });
244
+ const articleCount = new Column(this.getId() + "--idNewsGroupCount", {
245
+ header: new Label(this.getId() + "--idNewsGroupCountLbl", {
246
+ text: this._i18nBundle.getText("articleCount")
247
+ }),
248
+ width: "42%"
249
+ });
250
+ this.groupTable.addColumn(placeHolderCol);
251
+ this.groupTable.addColumn(titleCol);
252
+ this.groupTable.addColumn(articleCount);
253
+ }
254
+ return this.groupTable;
255
+ }
205
256
  /**
206
257
  * Checks if the custom file format is CSV based on the custom file name.
207
258
  *
@@ -225,22 +276,11 @@ export default class NewsSettingsPanel extends BaseSettingsPanel {
225
276
  const showDefault = newsType === NewsType.Default;
226
277
  const customFileName = this.oNewsPanel.getProperty("customFileName") as string;
227
278
  const feedKey = this.oNewsPanel.getCustomFeedKey();
228
-
229
- this.oList.getItems().forEach((item: ListItemBase) => {
230
- const newsListContent = item.getAggregation("content") as Control[];
231
- const newsListHBox = newsListContent[0] as HBox;
232
- const [checkbox, label] = newsListHBox.getItems() as [CheckBox, Text];
233
- const isSelected = checkbox.getSelected();
234
-
235
- if (showDefault) {
236
- const groupId = this.getDefaultGroupId(newsListHBox);
237
- if (!isSelected && groupId) {
238
- deselectedDefaultFeeds.push(groupId);
239
- }
240
- } else if (isSelected) {
241
- selectedFeeds.push(label.getText());
242
- }
243
- });
279
+ if (showDefault) {
280
+ deselectedDefaultFeeds.push(...this.collectDeselectedDefaultGroupIds());
281
+ } else {
282
+ selectedFeeds.push(...this.collectSelectedCustomFeedTitles());
283
+ }
244
284
 
245
285
  const personalizer = await this.getPersonalization();
246
286
  const personalizationData = (await personalizer.read()) || {};
@@ -259,28 +299,64 @@ export default class NewsSettingsPanel extends BaseSettingsPanel {
259
299
  // get the latest value of switch and set the state
260
300
  if (!showDefault) {
261
301
  this.oShowSwitch.setState(personalizationData.favNewsFeed?.showAllPreparationRequired);
302
+ } else {
303
+ this._resetActionButton.setEnabled(!!(deselectedDefaultFeeds.length > 0));
262
304
  }
263
305
  await this.oNewsPanel.setCustomNewsFeed(showDefault ? "" : feedKey);
264
306
  }
265
307
 
266
- /** Get groupId info for the default NewsList
267
- * @param {HBox} [contentBox] content Hbox
308
+ /**
309
+ * Collect selected custom feed titles from the list
310
+ * @returns {string[]} Array of selected custom feed titles
311
+ * @private
312
+ */
313
+ private collectSelectedCustomFeedTitles(): string[] {
314
+ const items = this.oList?.getItems() ?? [];
315
+ if (!items.length) return [];
316
+ return items.flatMap((item) => {
317
+ const content = item.getAggregation("content") as Control[] | undefined;
318
+ const hBox = content?.[0] as HBox | undefined;
319
+ if (!hBox) return [];
320
+ const [checkBox, text] = hBox.getItems() as [CheckBox, Text];
321
+ return checkBox.getSelected() ? [text.getText()] : [];
322
+ });
323
+ }
324
+
325
+ /**
326
+ * Collect deselected default group IDs from the table
327
+ * @returns {string[]} Array of deselected default group IDs from the table
328
+ * @private
329
+ */
330
+ private collectDeselectedDefaultGroupIds(): string[] {
331
+ const rows = (this.groupTable?.getItems() as ColumnListItem[]) ?? [];
332
+ if (!rows.length) return [];
333
+ return rows.flatMap((row: ColumnListItem) => {
334
+ const cells = row.getCells() as [CheckBox, Text, Text];
335
+ const checkBox = cells[0];
336
+ if (checkBox.getSelected()) return [];
337
+ const groupId = this.getDefaultGroupId(row);
338
+ return groupId ? [groupId] : [];
339
+ });
340
+ }
341
+
342
+ /**
343
+ * Get groupId info for the default NewsList
344
+ * @param {HBox | ColumnListItem} contentBox, content Hbox or ColumnListItem
268
345
  * @returns {string} groupId
269
346
  * @private
270
347
  */
271
- private getDefaultGroupId(contentBox: HBox): string {
348
+ private getDefaultGroupId(contentBox: HBox | ColumnListItem): string {
272
349
  const customData = contentBox.getCustomData();
273
350
  return customData?.length ? (customData[0].getValue() as string) : "";
274
351
  }
275
352
 
276
- /** Set items for the NewsList
353
+ /**
354
+ * Set items for the NewsList for custom news feed
277
355
  * @param {Array} [aItems] news items to be set as items aggregation
278
356
  * @private
279
357
  */
280
- private setItems(aItems: INewsFeed[]) {
358
+ private setCustomNewsItems(aItems: INewsFeed[]) {
281
359
  this.oList.destroyAggregation("items", true);
282
- const newsType = this.oNewsPanel?.getNewsType();
283
- let showDefault = newsType === NewsType.Default;
284
360
  (aItems || []).forEach((oItem: INewsFeed, i: number) => {
285
361
  let oNewsListItemHbox = new HBox({
286
362
  id: `${this.getId()}--idCustNewsFeedItemContent--${i}`,
@@ -297,10 +373,7 @@ export default class NewsSettingsPanel extends BaseSettingsPanel {
297
373
  ],
298
374
  width: "100%"
299
375
  });
300
- if (showDefault) {
301
- // if showDefault is true, add group_id as custom data to the item
302
- oNewsListItemHbox.addCustomData(new CustomData({ key: "newsGroupId", value: oItem.group_id }));
303
- }
376
+
304
377
  const customListItem = new CustomListItem({
305
378
  id: `${this.getId()}--idCustNewsFeedItem--${i}`,
306
379
  content: [oNewsListItemHbox]
@@ -330,11 +403,15 @@ export default class NewsSettingsPanel extends BaseSettingsPanel {
330
403
  const aPersNewsFeed = (showDefaultNewsFeed ? oPersData?.["defaultNewsFeed"] : oPersData?.["favNewsFeed"]) as IFavNewsFeed;
331
404
  const showAllPreparationRequired = aPersNewsFeed?.showAllPreparationRequired ?? !aPersNewsFeed;
332
405
 
333
- let aNewsFeed: INewsFeed[] = await this.oNewsPanel.getCustomOrDefaultNewsFeed(showDefaultNewsFeed ? "" : sFeedKey, false);
334
-
406
+ let aNewsFeed: INewsFeed[];
335
407
  if (showDefaultNewsFeed) {
408
+ this._resetActionButton.setVisible(true);
409
+ this._resetActionButton.setEnabled(!!(aPersNewsFeed?.items?.length > 0));
410
+ aNewsFeed = await this.oNewsPanel.getDefaultNewsData();
336
411
  return this._handleDefaultNewsFeed(aNewsFeed, aPersNewsFeed);
337
412
  } else {
413
+ this._resetActionButton.setVisible(false);
414
+ aNewsFeed = await this.oNewsPanel.getCustomOrDefaultNewsFeed(showDefaultNewsFeed ? "" : sFeedKey, false);
338
415
  return this._handleCustomNewsFeed(aNewsFeed, aPersNewsFeed, showAllPreparationRequired);
339
416
  }
340
417
  }
@@ -350,8 +427,13 @@ export default class NewsSettingsPanel extends BaseSettingsPanel {
350
427
  * If no news feed is provided, it returns undefined.
351
428
  */
352
429
  private _handleDefaultNewsFeed(aNewsFeed: INewsFeed[], aPersNewsFeed: IFavNewsFeed): INewsFeed[] | undefined {
353
- this.headerText.setText(this._i18nBundle.getText("defaultNewsSettingsText"));
354
- this.title.setText(this._i18nBundle.getText("defaultNewsSettingsHeading"));
430
+ this.headerText.setText(
431
+ this._i18nBundle.getText("defaultNewsSettingsText") + "\n" + this._i18nBundle.getText("defaultNewsSettingsSubText")
432
+ );
433
+ this.title.setVisible(false);
434
+ this.newsListVBox.setVisible(false);
435
+ this.oShowSwitch.setState(false);
436
+
355
437
  const mandatoryNewsFeed = this.oNewsPanel.getMandatoryDefaultNewsFeed();
356
438
  this.deselectedDefaultFeeds = aPersNewsFeed?.items || [];
357
439
 
@@ -372,11 +454,44 @@ export default class NewsSettingsPanel extends BaseSettingsPanel {
372
454
  return oNewsFeed;
373
455
  });
374
456
 
375
- this.setItems(aNewsFeed);
376
- this.oShowSwitch.setState(false);
457
+ this.groupTable.setVisible(true);
458
+ this.setColumnListItems(aNewsFeed);
459
+
377
460
  return aNewsFeed;
378
461
  }
379
462
 
463
+ /**
464
+ * This method populates the column list items in the group table for the default news feed settings.
465
+ * @param aItems Array of news feed items
466
+ * @private
467
+ */
468
+ private setColumnListItems(aItems: INewsFeed[]) {
469
+ this.groupTable.destroyItems();
470
+ //add column list item, title and article count
471
+ (aItems || []).forEach((oItem: INewsFeed, i: number) => {
472
+ const colListItem = new ColumnListItem({
473
+ id: `${this.getId()}--idNewsGroupColListItem--${i}`,
474
+ selected: oItem.selected as boolean,
475
+ type: "Active",
476
+ cells: [
477
+ new CheckBox({
478
+ id: `${this.getId()}--idNewsGroupCheckBox--${i}`,
479
+ selected: oItem.selected as boolean,
480
+ enabled: !oItem.disabled,
481
+ select: () => {
482
+ void this.saveNewsFeedSettings();
483
+ }
484
+ }),
485
+ new Text({ text: oItem.title }),
486
+ new Text({ text: String(oItem._group_to_article?.length ?? 0) })
487
+ ]
488
+ });
489
+
490
+ // if showDefault is true, add group_id as custom data to the item
491
+ colListItem.addCustomData(new CustomData({ key: "newsGroupId", value: oItem.group_id }));
492
+ this.groupTable.addItem(colListItem);
493
+ });
494
+ }
380
495
  /**
381
496
  * @param {INewsFeed[]} aNewsFeed
382
497
  * @param aPersNewsFeed
@@ -393,8 +508,11 @@ export default class NewsSettingsPanel extends BaseSettingsPanel {
393
508
  aPersNewsFeed: IFavNewsFeed,
394
509
  showAllPreparationRequired: boolean
395
510
  ): INewsFeed[] | undefined {
511
+ this.groupTable.setVisible(false);
396
512
  this.headerText.setText(this._i18nBundle.getText("newsFeedSettingsText"));
397
513
  this.title.setText(this._i18nBundle.getText("newsFeedSettingsHeading"));
514
+ this.title.setVisible(true);
515
+ this.newsListVBox.setVisible(true);
398
516
 
399
517
  if (!aNewsFeed || aNewsFeed.length === 0) {
400
518
  return;
@@ -408,11 +526,28 @@ export default class NewsSettingsPanel extends BaseSettingsPanel {
408
526
  });
409
527
 
410
528
  this.aFavNewsFeed = aNewsFeed;
411
- this.setItems(this.aFavNewsFeed);
529
+ this.setCustomNewsItems(this.aFavNewsFeed);
412
530
  this.oShowSwitch.setState(!!showAllPreparationRequired);
413
531
  return aNewsFeed;
414
532
  }
415
533
 
534
+ /**
535
+ * Resets the default manage news' news settings to default by clearing
536
+ * the personalization data and updating the news panel.
537
+ * @private
538
+ * @returns {Promise<INewsFeed[] | undefined>} A promise that resolves to the updated news feed items or undefined.
539
+ */
540
+ private async resetDefaultNewsSettings() {
541
+ const personalizer = await this.getPersonalization();
542
+ const personalizationData = (await personalizer.read()) || {};
543
+ personalizationData.defaultNewsFeed = { items: [] };
544
+ await personalizer.write(personalizationData);
545
+ await this.oNewsPanel.setCustomNewsFeed("");
546
+ let aNewsFeed = await this.oNewsPanel.getDefaultNewsData();
547
+ this._resetActionButton.setEnabled(false);
548
+ return this._handleDefaultNewsFeed(aNewsFeed, personalizationData.defaultNewsFeed);
549
+ }
550
+
416
551
  /**
417
552
  * Checks if the News Settings Panel is supported based on the properties of the News Panel.
418
553
  *
@@ -1 +1 @@
1
- {"version":3,"file":"Page.d.ts","sourceRoot":"../../../../..","sources":["src/sap/cux/home/Page.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,mBAAmB,CAAC;IACnC;;;OAGG;IAEH,OAAO,OAAO,EAAE,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;IAG/D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;IAClD,OAAO,EAAE,KAAK,EAAE,MAAM,2CAA2C,CAAC;IAElE;;;;;;;;;;;;OAYG;IAEH,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,OAAO;oBAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,aAAa;oBACrC,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,aAAa;QAIjD,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAkDvC;QAEW,eAAe,CAAC,KAAK,EAAE,KAAK;KAezC;CAEA"}
1
+ {"version":3,"file":"Page.d.ts","sourceRoot":"../../../../..","sources":["src/sap/cux/home/Page.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,mBAAmB,CAAC;IACnC;;;OAGG;IAEH,OAAO,OAAO,EAAE,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;IAG/D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;IAClD,OAAO,EAAE,KAAK,EAAE,MAAM,2CAA2C,CAAC;IAGlE;;;;;;;;;;;;OAYG;IAEH,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,OAAO;oBAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,aAAa;oBACrC,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,aAAa;QAIjD,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAkDvC;QAEW,eAAe,CAAC,KAAK,EAAE,KAAK;KAgBzC;CAEA"}
@@ -2,9 +2,11 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/ui/core/Element", "sap/ushell/Container"], function (Element, Container) {
5
+ sap.ui.define(["sap/ui/core/Element", "sap/ushell/Container", "./utils/FESRUtil"], function (Element, Container, ___utils_FESRUtil) {
6
6
  "use strict";
7
7
 
8
+ const addFESRNavigationSource = ___utils_FESRUtil["addFESRNavigationSource"];
9
+ const FESRNavigationSource = ___utils_FESRUtil["FESRNavigationSource"];
8
10
  /**
9
11
  *
10
12
  * Class for managing and storing Pages.
@@ -110,6 +112,7 @@ sap.ui.define(["sap/ui/core/Element", "sap/ushell/Container"], function (Element
110
112
  const sPageId = oPage.getProperty?.("pageId"),
111
113
  sSpaceId = oPage.getProperty?.("spaceId");
112
114
  return Promise.resolve(Container.getServiceAsync("Navigation")).then(function (navigationService) {
115
+ addFESRNavigationSource(FESRNavigationSource.Page);
113
116
  return Promise.resolve(navigationService.navigate({
114
117
  target: {
115
118
  semanticObject: "Launchpad",