@sapui5/sap.cux.home 1.141.0 → 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.
- package/package.json +1 -1
- package/src/sap/cux/home/.library +4 -1
- package/src/sap/cux/home/AdvancedSettingsPanel.d.ts +3 -2
- package/src/sap/cux/home/AdvancedSettingsPanel.d.ts.map +1 -1
- package/src/sap/cux/home/AdvancedSettingsPanel.js +6 -6
- package/src/sap/cux/home/AdvancedSettingsPanel.js.map +1 -1
- package/src/sap/cux/home/AdvancedSettingsPanel.ts +6 -6
- package/src/sap/cux/home/App.d.ts.map +1 -1
- package/src/sap/cux/home/App.js +9 -1
- package/src/sap/cux/home/App.js.map +1 -1
- package/src/sap/cux/home/App.ts +10 -1
- package/src/sap/cux/home/AppsAdditionPanel.d.ts +75 -34
- package/src/sap/cux/home/AppsAdditionPanel.d.ts.map +1 -1
- package/src/sap/cux/home/AppsAdditionPanel.js +378 -179
- package/src/sap/cux/home/AppsAdditionPanel.js.map +1 -1
- package/src/sap/cux/home/AppsAdditionPanel.ts +399 -175
- package/src/sap/cux/home/AppsContainer.d.ts +5 -1
- package/src/sap/cux/home/AppsContainer.d.ts.map +1 -1
- package/src/sap/cux/home/AppsContainer.js +32 -17
- package/src/sap/cux/home/AppsContainer.js.map +1 -1
- package/src/sap/cux/home/AppsContainer.ts +31 -15
- package/src/sap/cux/home/BaseAppPanel.d.ts +2 -1
- package/src/sap/cux/home/BaseAppPanel.d.ts.map +1 -1
- package/src/sap/cux/home/BaseAppPanel.js +2 -1
- package/src/sap/cux/home/BaseAppPanel.js.map +1 -1
- package/src/sap/cux/home/BaseAppPanel.ts +4 -2
- package/src/sap/cux/home/BaseContainer.d.ts +8 -0
- package/src/sap/cux/home/BaseContainer.d.ts.map +1 -1
- package/src/sap/cux/home/BaseContainer.js +35 -5
- package/src/sap/cux/home/BaseContainer.js.map +1 -1
- package/src/sap/cux/home/BaseContainer.ts +32 -5
- package/src/sap/cux/home/BaseContainerRenderer.d.ts.map +1 -1
- package/src/sap/cux/home/BaseContainerRenderer.js +6 -0
- package/src/sap/cux/home/BaseContainerRenderer.js.map +1 -1
- package/src/sap/cux/home/BaseContainerRenderer.ts +7 -1
- package/src/sap/cux/home/BaseNewsPanel.js.map +1 -1
- package/src/sap/cux/home/BaseNewsPanel.ts +2 -2
- package/src/sap/cux/home/BasePanel.d.ts +7 -0
- package/src/sap/cux/home/BasePanel.d.ts.map +1 -1
- package/src/sap/cux/home/BasePanel.js +23 -2
- package/src/sap/cux/home/BasePanel.js.map +1 -1
- package/src/sap/cux/home/BasePanel.ts +18 -1
- package/src/sap/cux/home/CardsContainer.d.ts +108 -0
- package/src/sap/cux/home/CardsContainer.d.ts.map +1 -0
- package/src/sap/cux/home/CardsContainer.js +207 -0
- package/src/sap/cux/home/CardsContainer.js.map +1 -0
- package/src/sap/cux/home/CardsContainer.ts +202 -0
- package/src/sap/cux/home/CardsPanel.d.ts +32 -59
- package/src/sap/cux/home/CardsPanel.d.ts.map +1 -1
- package/src/sap/cux/home/CardsPanel.js +270 -249
- package/src/sap/cux/home/CardsPanel.js.map +1 -1
- package/src/sap/cux/home/CardsPanel.ts +169 -181
- package/src/sap/cux/home/ContentAdditionDialog.d.ts +2 -0
- package/src/sap/cux/home/ContentAdditionDialog.d.ts.map +1 -1
- package/src/sap/cux/home/ContentAdditionDialog.js +17 -7
- package/src/sap/cux/home/ContentAdditionDialog.js.map +1 -1
- package/src/sap/cux/home/ContentAdditionDialog.ts +18 -6
- package/src/sap/cux/home/ErrorPanel.d.ts +0 -5
- package/src/sap/cux/home/ErrorPanel.d.ts.map +1 -1
- package/src/sap/cux/home/ErrorPanel.gen.d.ts +31 -0
- package/src/sap/cux/home/ErrorPanel.js +11 -16
- package/src/sap/cux/home/ErrorPanel.js.map +1 -1
- package/src/sap/cux/home/ErrorPanel.ts +7 -19
- package/src/sap/cux/home/FavAppPanel.d.ts +1 -12
- package/src/sap/cux/home/FavAppPanel.d.ts.map +1 -1
- package/src/sap/cux/home/FavAppPanel.js +354 -414
- package/src/sap/cux/home/FavAppPanel.js.map +1 -1
- package/src/sap/cux/home/FavAppPanel.ts +25 -70
- package/src/sap/cux/home/FrequentAppPanel.d.ts.map +1 -1
- package/src/sap/cux/home/FrequentAppPanel.js +5 -1
- package/src/sap/cux/home/FrequentAppPanel.js.map +1 -1
- package/src/sap/cux/home/FrequentAppPanel.ts +4 -0
- package/src/sap/cux/home/InsightsAdditionPanel.d.ts +4 -4
- package/src/sap/cux/home/InsightsAdditionPanel.d.ts.map +1 -1
- package/src/sap/cux/home/InsightsAdditionPanel.js +12 -9
- package/src/sap/cux/home/InsightsAdditionPanel.js.map +1 -1
- package/src/sap/cux/home/InsightsAdditionPanel.ts +11 -8
- package/src/sap/cux/home/InsightsTilesSettingsPanel.js +1 -1
- package/src/sap/cux/home/InsightsTilesSettingsPanel.js.map +1 -1
- package/src/sap/cux/home/InsightsTilesSettingsPanel.ts +3 -3
- package/src/sap/cux/home/KeyUserLayoutSettingsPanel.d.ts +3 -0
- package/src/sap/cux/home/KeyUserLayoutSettingsPanel.d.ts.map +1 -1
- package/src/sap/cux/home/KeyUserLayoutSettingsPanel.js +252 -39
- package/src/sap/cux/home/KeyUserLayoutSettingsPanel.js.map +1 -1
- package/src/sap/cux/home/KeyUserLayoutSettingsPanel.ts +288 -58
- package/src/sap/cux/home/KeyUserNewsPagesSettingsPanel.d.ts.map +1 -1
- package/src/sap/cux/home/KeyUserNewsPagesSettingsPanel.js +11 -10
- package/src/sap/cux/home/KeyUserNewsPagesSettingsPanel.js.map +1 -1
- package/src/sap/cux/home/KeyUserNewsPagesSettingsPanel.ts +12 -10
- package/src/sap/cux/home/KeyUserNewsSettingsPanel.js +2 -2
- package/src/sap/cux/home/KeyUserNewsSettingsPanel.js.map +1 -1
- package/src/sap/cux/home/KeyUserNewsSettingsPanel.ts +7 -7
- package/src/sap/cux/home/KeyUserPagesSettingsPanel.js.map +1 -1
- package/src/sap/cux/home/KeyUserPagesSettingsPanel.ts +2 -2
- package/src/sap/cux/home/Layout.d.ts +3 -1
- package/src/sap/cux/home/Layout.d.ts.map +1 -1
- package/src/sap/cux/home/Layout.js +45 -8
- package/src/sap/cux/home/Layout.js.map +1 -1
- package/src/sap/cux/home/Layout.ts +55 -8
- package/src/sap/cux/home/LayoutSettingsPanel.d.ts +10 -0
- package/src/sap/cux/home/LayoutSettingsPanel.d.ts.map +1 -1
- package/src/sap/cux/home/LayoutSettingsPanel.js +341 -56
- package/src/sap/cux/home/LayoutSettingsPanel.js.map +1 -1
- package/src/sap/cux/home/LayoutSettingsPanel.ts +380 -64
- package/src/sap/cux/home/{NewsAndPagesContainer.d.ts → NewsContainer.d.ts} +13 -18
- package/src/sap/cux/home/NewsContainer.d.ts.map +1 -0
- package/src/sap/cux/home/{NewsAndPagesContainer.gen.d.ts → NewsContainer.gen.d.ts} +3 -3
- package/src/sap/cux/home/{NewsAndPagesContainer.js → NewsContainer.js} +26 -113
- package/src/sap/cux/home/NewsContainer.js.map +1 -0
- package/src/sap/cux/home/{NewsAndPagesContainer.ts → NewsContainer.ts} +31 -120
- package/src/sap/cux/home/NewsGroup.js.map +1 -1
- package/src/sap/cux/home/NewsGroup.ts +1 -1
- package/src/sap/cux/home/NewsPanel.d.ts +17 -0
- package/src/sap/cux/home/NewsPanel.d.ts.map +1 -1
- package/src/sap/cux/home/NewsPanel.js +90 -57
- package/src/sap/cux/home/NewsPanel.js.map +1 -1
- package/src/sap/cux/home/NewsPanel.ts +51 -23
- package/src/sap/cux/home/NewsSettingsPanel.d.ts +42 -6
- package/src/sap/cux/home/NewsSettingsPanel.d.ts.map +1 -1
- package/src/sap/cux/home/NewsSettingsPanel.js +219 -81
- package/src/sap/cux/home/NewsSettingsPanel.js.map +1 -1
- package/src/sap/cux/home/NewsSettingsPanel.ts +216 -81
- package/src/sap/cux/home/Page.d.ts.map +1 -1
- package/src/sap/cux/home/Page.js +4 -1
- package/src/sap/cux/home/Page.js.map +1 -1
- package/src/sap/cux/home/Page.ts +2 -0
- package/src/sap/cux/home/PagePanel.d.ts +1 -1
- package/src/sap/cux/home/PagePanel.d.ts.map +1 -1
- package/src/sap/cux/home/PagePanel.js +19 -11
- package/src/sap/cux/home/PagePanel.js.map +1 -1
- package/src/sap/cux/home/PagePanel.ts +26 -20
- package/src/sap/cux/home/PageSettingsPanel.d.ts.map +1 -1
- package/src/sap/cux/home/PageSettingsPanel.js +6 -3
- package/src/sap/cux/home/PageSettingsPanel.js.map +1 -1
- package/src/sap/cux/home/PageSettingsPanel.ts +2 -2
- package/src/sap/cux/home/PagesContainer.d.ts +72 -0
- package/src/sap/cux/home/PagesContainer.d.ts.map +1 -0
- package/src/sap/cux/home/PagesContainer.gen.d.ts +78 -0
- package/src/sap/cux/home/PagesContainer.js +333 -0
- package/src/sap/cux/home/PagesContainer.js.map +1 -0
- package/src/sap/cux/home/PagesContainer.ts +179 -0
- package/src/sap/cux/home/RecentAppPanel.d.ts.map +1 -1
- package/src/sap/cux/home/RecentAppPanel.js +6 -0
- package/src/sap/cux/home/RecentAppPanel.js.map +1 -1
- package/src/sap/cux/home/RecentAppPanel.ts +5 -1
- package/src/sap/cux/home/RecommendedAppPanel.d.ts.map +1 -1
- package/src/sap/cux/home/RecommendedAppPanel.js +7 -0
- package/src/sap/cux/home/RecommendedAppPanel.js.map +1 -1
- package/src/sap/cux/home/RecommendedAppPanel.ts +6 -1
- package/src/sap/cux/home/SettingsDialog.d.ts +7 -0
- package/src/sap/cux/home/SettingsDialog.d.ts.map +1 -1
- package/src/sap/cux/home/SettingsDialog.js +18 -10
- package/src/sap/cux/home/SettingsDialog.js.map +1 -1
- package/src/sap/cux/home/SettingsDialog.ts +20 -13
- package/src/sap/cux/home/SideBySideIconTabFilter.d.ts +10 -0
- package/src/sap/cux/home/SideBySideIconTabFilter.d.ts.map +1 -1
- package/src/sap/cux/home/SideBySideIconTabFilter.js +11 -1
- package/src/sap/cux/home/SideBySideIconTabFilter.js.map +1 -1
- package/src/sap/cux/home/SideBySideIconTabFilter.ts +11 -0
- package/src/sap/cux/home/SituationPanel.d.ts.map +1 -1
- package/src/sap/cux/home/SituationPanel.js +7 -2
- package/src/sap/cux/home/SituationPanel.js.map +1 -1
- package/src/sap/cux/home/SituationPanel.ts +2 -0
- package/src/sap/cux/home/SpaceInsightsPanel.d.ts +8 -60
- package/src/sap/cux/home/SpaceInsightsPanel.d.ts.map +1 -1
- package/src/sap/cux/home/SpaceInsightsPanel.js +67 -133
- package/src/sap/cux/home/SpaceInsightsPanel.js.map +1 -1
- package/src/sap/cux/home/SpaceInsightsPanel.ts +70 -152
- package/src/sap/cux/home/TaskPanel.d.ts.map +1 -1
- package/src/sap/cux/home/TaskPanel.js +17 -12
- package/src/sap/cux/home/TaskPanel.js.map +1 -1
- package/src/sap/cux/home/TaskPanel.ts +19 -16
- package/src/sap/cux/home/TilesContainer.d.ts +111 -0
- package/src/sap/cux/home/TilesContainer.d.ts.map +1 -0
- package/src/sap/cux/home/TilesContainer.js +218 -0
- package/src/sap/cux/home/TilesContainer.js.map +1 -0
- package/src/sap/cux/home/TilesContainer.ts +216 -0
- package/src/sap/cux/home/TilesPanel.d.ts +22 -52
- package/src/sap/cux/home/TilesPanel.d.ts.map +1 -1
- package/src/sap/cux/home/TilesPanel.js +194 -168
- package/src/sap/cux/home/TilesPanel.js.map +1 -1
- package/src/sap/cux/home/TilesPanel.ts +167 -157
- package/src/sap/cux/home/ToDoPanel.d.ts.map +1 -1
- package/src/sap/cux/home/ToDoPanel.js +59 -66
- package/src/sap/cux/home/ToDoPanel.js.map +1 -1
- package/src/sap/cux/home/ToDoPanel.ts +46 -34
- package/src/sap/cux/home/ToDosContainer.js +3 -3
- package/src/sap/cux/home/ToDosContainer.js.map +1 -1
- package/src/sap/cux/home/ToDosContainer.ts +1 -1
- package/src/sap/cux/home/changeHandler/NewsFeedVisibilityChange.d.ts +2 -2
- package/src/sap/cux/home/changeHandler/NewsFeedVisibilityChange.d.ts.map +1 -1
- package/src/sap/cux/home/changeHandler/NewsFeedVisibilityChange.js +1 -1
- package/src/sap/cux/home/changeHandler/NewsFeedVisibilityChange.js.map +1 -1
- package/src/sap/cux/home/changeHandler/NewsFeedVisibilityChange.ts +4 -4
- package/src/sap/cux/home/changeHandler/SetNewsFeedUrl.d.ts +2 -2
- package/src/sap/cux/home/changeHandler/SetNewsFeedUrl.d.ts.map +1 -1
- package/src/sap/cux/home/changeHandler/SetNewsFeedUrl.js +1 -1
- package/src/sap/cux/home/changeHandler/SetNewsFeedUrl.js.map +1 -1
- package/src/sap/cux/home/changeHandler/SetNewsFeedUrl.ts +4 -4
- package/src/sap/cux/home/changeHandler/SpacePageColorHandler.d.ts +2 -2
- package/src/sap/cux/home/changeHandler/SpacePageColorHandler.d.ts.map +1 -1
- package/src/sap/cux/home/changeHandler/SpacePageColorHandler.js +1 -1
- package/src/sap/cux/home/changeHandler/SpacePageColorHandler.js.map +1 -1
- package/src/sap/cux/home/changeHandler/SpacePageColorHandler.ts +3 -3
- package/src/sap/cux/home/changeHandler/SpacePageIconHandler.d.ts +2 -2
- package/src/sap/cux/home/changeHandler/SpacePageIconHandler.d.ts.map +1 -1
- package/src/sap/cux/home/changeHandler/SpacePageIconHandler.js +4 -4
- package/src/sap/cux/home/changeHandler/SpacePageIconHandler.js.map +1 -1
- package/src/sap/cux/home/changeHandler/SpacePageIconHandler.ts +5 -5
- package/src/sap/cux/home/flexibility/BaseContainer.flexibility.d.ts.map +1 -1
- package/src/sap/cux/home/flexibility/BaseContainer.flexibility.js +30 -3
- package/src/sap/cux/home/flexibility/BaseContainer.flexibility.js.map +1 -1
- package/src/sap/cux/home/flexibility/BaseContainer.flexibility.ts +23 -1
- package/src/sap/cux/home/flexibility/Layout.flexibility.d.ts +29 -19
- package/src/sap/cux/home/flexibility/Layout.flexibility.d.ts.map +1 -1
- package/src/sap/cux/home/flexibility/Layout.flexibility.js +78 -2
- package/src/sap/cux/home/flexibility/Layout.flexibility.js.map +1 -1
- package/src/sap/cux/home/flexibility/Layout.flexibility.ts +81 -1
- package/src/sap/cux/home/i18n/messagebundle.properties +40 -14
- package/src/sap/cux/home/i18n/messagebundle_ar.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_bg.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_ca.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_cnr.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_cs.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_cy.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_da.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_de.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_el.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_en.properties +9 -5
- package/src/sap/cux/home/i18n/messagebundle_en_GB.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_en_US_sappsd.properties +14 -6
- package/src/sap/cux/home/i18n/messagebundle_en_US_saprigi.properties +14 -6
- package/src/sap/cux/home/i18n/messagebundle_en_US_saptrc.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_es.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_es_MX.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_et.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_fi.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_fr.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_fr_CA.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_hi.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_hr.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_hu.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_id.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_it.properties +10 -6
- package/src/sap/cux/home/i18n/messagebundle_iw.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_ja.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_kk.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_ko.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_lt.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_lv.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_mk.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_ms.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_nl.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_no.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_pl.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_pt.properties +9 -5
- package/src/sap/cux/home/i18n/messagebundle_pt_PT.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_ro.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_ru.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_sh.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_sk.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_sl.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_sr.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_sv.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_th.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_tr.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_uk.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_vi.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_zh_CN.properties +8 -4
- package/src/sap/cux/home/i18n/messagebundle_zh_TW.properties +8 -4
- package/src/sap/cux/home/interface/AppsInterface.d.ts +6 -0
- package/src/sap/cux/home/interface/AppsInterface.d.ts.map +1 -1
- package/src/sap/cux/home/interface/AppsInterface.js.map +1 -1
- package/src/sap/cux/home/interface/AppsInterface.ts +7 -0
- package/src/sap/cux/home/interface/KeyUserInterface.d.ts +27 -4
- package/src/sap/cux/home/interface/KeyUserInterface.d.ts.map +1 -1
- package/src/sap/cux/home/interface/KeyUserInterface.js.map +1 -1
- package/src/sap/cux/home/interface/KeyUserInterface.ts +23 -4
- package/src/sap/cux/home/interface/LayoutInterface.d.ts +7 -0
- package/src/sap/cux/home/interface/LayoutInterface.d.ts.map +1 -1
- package/src/sap/cux/home/interface/LayoutInterface.js.map +1 -1
- package/src/sap/cux/home/interface/LayoutInterface.ts +7 -0
- package/src/sap/cux/home/library.d.ts.map +1 -1
- package/src/sap/cux/home/library.js +7 -4
- package/src/sap/cux/home/library.js.map +1 -1
- package/src/sap/cux/home/library.ts +10 -5
- package/src/sap/cux/home/themes/base/AppsContainer.less +12 -1
- package/src/sap/cux/home/themes/base/BaseContainer.less +36 -0
- package/src/sap/cux/home/themes/base/BaseLayout.less +22 -0
- package/src/sap/cux/home/themes/base/{InsightsContainer.less → CardsContainer.less} +4 -45
- package/src/sap/cux/home/themes/base/ContentAdditionDialog.less +10 -18
- package/src/sap/cux/home/themes/base/PlaceHolder.less +1 -1
- package/src/sap/cux/home/themes/base/SettingsDialog.less +4 -0
- package/src/sap/cux/home/themes/base/TilesContainer.less +65 -0
- package/src/sap/cux/home/themes/base/ToDosContainer.less +4 -0
- package/src/sap/cux/home/themes/base/library.source.less +2 -1
- package/src/sap/cux/home/utils/AppManager.d.ts.map +1 -1
- package/src/sap/cux/home/utils/AppManager.js +2 -1
- package/src/sap/cux/home/utils/AppManager.js.map +1 -1
- package/src/sap/cux/home/utils/AppManager.ts +2 -2
- package/src/sap/cux/home/utils/FESRUtil.d.ts +30 -0
- package/src/sap/cux/home/utils/FESRUtil.d.ts.map +1 -1
- package/src/sap/cux/home/utils/FESRUtil.js +36 -1
- package/src/sap/cux/home/utils/FESRUtil.js.map +1 -1
- package/src/sap/cux/home/utils/FESRUtil.ts +36 -0
- package/src/sap/cux/home/utils/PXFeedback.d.ts +4 -0
- package/src/sap/cux/home/utils/PXFeedback.d.ts.map +1 -0
- package/src/sap/cux/home/utils/PXFeedback.js +28 -0
- package/src/sap/cux/home/utils/PXFeedback.js.map +1 -0
- package/src/sap/cux/home/utils/PXFeedback.ts +19 -0
- package/src/sap/cux/home/utils/PageManager.d.ts +0 -4
- package/src/sap/cux/home/utils/PageManager.d.ts.map +1 -1
- package/src/sap/cux/home/utils/PageManager.js +6 -6
- package/src/sap/cux/home/utils/PageManager.js.map +1 -1
- package/src/sap/cux/home/utils/PageManager.ts +6 -5
- package/src/sap/cux/home/utils/PerformanceUtils.d.ts +4 -2
- package/src/sap/cux/home/utils/PerformanceUtils.d.ts.map +1 -1
- package/src/sap/cux/home/utils/PerformanceUtils.js +4 -2
- package/src/sap/cux/home/utils/PerformanceUtils.js.map +1 -1
- package/src/sap/cux/home/utils/PerformanceUtils.ts +4 -2
- package/src/sap/cux/home/utils/fragment/appsAdditionContent.fragment.xml +155 -151
- package/src/sap/cux/home/utils/placeholder/CardsPlaceholder.d.ts +8 -0
- package/src/sap/cux/home/utils/placeholder/CardsPlaceholder.d.ts.map +1 -0
- package/src/sap/cux/home/utils/placeholder/{InsightsPlaceholder.js → CardsPlaceholder.js} +3 -77
- package/src/sap/cux/home/utils/placeholder/CardsPlaceholder.js.map +1 -0
- package/src/sap/cux/home/utils/placeholder/{InsightsPlaceholder.ts → CardsPlaceholder.ts} +1 -75
- package/src/sap/cux/home/utils/placeholder/NewsPlaceholder.d.ts +8 -0
- package/src/sap/cux/home/utils/placeholder/NewsPlaceholder.d.ts.map +1 -0
- package/src/sap/cux/home/utils/placeholder/NewsPlaceholder.js +44 -0
- package/src/sap/cux/home/utils/placeholder/NewsPlaceholder.js.map +1 -0
- package/src/sap/cux/home/utils/placeholder/NewsPlaceholder.ts +34 -0
- package/src/sap/cux/home/utils/placeholder/PagesPlaceholder.d.ts +8 -0
- package/src/sap/cux/home/utils/placeholder/PagesPlaceholder.d.ts.map +1 -0
- package/src/sap/cux/home/utils/placeholder/{NewsAndPagesPlaceholder.js → PagesPlaceholder.js} +3 -23
- package/src/sap/cux/home/utils/placeholder/PagesPlaceholder.js.map +1 -0
- package/src/sap/cux/home/utils/placeholder/{NewsAndPagesPlaceholder.ts → PagesPlaceholder.ts} +1 -21
- package/src/sap/cux/home/utils/placeholder/TilesPlaceholder.d.ts +8 -0
- package/src/sap/cux/home/utils/placeholder/TilesPlaceholder.d.ts.map +1 -0
- package/src/sap/cux/home/utils/placeholder/TilesPlaceholder.js +95 -0
- package/src/sap/cux/home/utils/placeholder/TilesPlaceholder.js.map +1 -0
- package/src/sap/cux/home/utils/placeholder/TilesPlaceholder.ts +85 -0
- package/ui5.yaml +1 -0
- package/src/sap/cux/home/InsightsContainer.d.ts +0 -205
- package/src/sap/cux/home/InsightsContainer.d.ts.map +0 -1
- package/src/sap/cux/home/InsightsContainer.js +0 -459
- package/src/sap/cux/home/InsightsContainer.js.map +0 -1
- package/src/sap/cux/home/InsightsContainer.ts +0 -489
- package/src/sap/cux/home/NewsAndPagesContainer.d.ts.map +0 -1
- package/src/sap/cux/home/NewsAndPagesContainer.js.map +0 -1
- package/src/sap/cux/home/utils/placeholder/InsightsPlaceholder.d.ts +0 -8
- package/src/sap/cux/home/utils/placeholder/InsightsPlaceholder.d.ts.map +0 -1
- package/src/sap/cux/home/utils/placeholder/InsightsPlaceholder.js.map +0 -1
- package/src/sap/cux/home/utils/placeholder/NewsAndPagesPlaceholder.d.ts +0 -8
- package/src/sap/cux/home/utils/placeholder/NewsAndPagesPlaceholder.d.ts.map +0 -1
- package/src/sap/cux/home/utils/placeholder/NewsAndPagesPlaceholder.js.map +0 -1
|
@@ -3,24 +3,31 @@
|
|
|
3
3
|
* * (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
+
import Localization from "sap/base/i18n/Localization";
|
|
6
7
|
import Log from "sap/base/Log";
|
|
7
8
|
import Button from "sap/m/Button";
|
|
8
9
|
import CustomListItem from "sap/m/CustomListItem";
|
|
9
10
|
import ExpandableText from "sap/m/ExpandableText";
|
|
10
11
|
import FlexBox from "sap/m/FlexBox";
|
|
12
|
+
import FlexItemData from "sap/m/FlexItemData";
|
|
11
13
|
import GenericTile, { GenericTile$PressEvent } from "sap/m/GenericTile";
|
|
12
14
|
import HBox from "sap/m/HBox";
|
|
15
|
+
import IllustratedMessage from "sap/m/IllustratedMessage";
|
|
13
16
|
import Label from "sap/m/Label";
|
|
14
|
-
import { ButtonType, URLHelper } from "sap/m/library";
|
|
17
|
+
import { ButtonType, FlexAlignItems, FlexDirection, FlexJustifyContent, FlexRendertype, URLHelper } from "sap/m/library";
|
|
15
18
|
import List from "sap/m/List";
|
|
16
19
|
import { ListBase$SelectionChangeEvent } from "sap/m/ListBase";
|
|
17
20
|
import MessageToast from "sap/m/MessageToast";
|
|
18
|
-
import
|
|
21
|
+
import ObjectStatus from "sap/m/ObjectStatus";
|
|
22
|
+
import SegmentedButton from "sap/m/SegmentedButton";
|
|
23
|
+
import SegmentedButtonItem from "sap/m/SegmentedButtonItem";
|
|
24
|
+
import Switch, { Switch$ChangeEvent } from "sap/m/Switch";
|
|
19
25
|
import TextArea, { TextArea$LiveChangeEvent } from "sap/m/TextArea";
|
|
26
|
+
import Title from "sap/m/Title";
|
|
20
27
|
import VBox from "sap/m/VBox";
|
|
21
28
|
import Control from "sap/ui/core/Control";
|
|
22
29
|
import Fragment from "sap/ui/core/Fragment";
|
|
23
|
-
import { ValueState } from "sap/ui/core/library";
|
|
30
|
+
import { TitleLevel, ValueState } from "sap/ui/core/library";
|
|
24
31
|
import ChangeReason from "sap/ui/model/ChangeReason";
|
|
25
32
|
import Context from "sap/ui/model/Context";
|
|
26
33
|
import JSONModel from "sap/ui/model/json/JSONModel";
|
|
@@ -35,9 +42,10 @@ import BaseLayout from "./BaseLayout";
|
|
|
35
42
|
import BaseSettingsPanel from "./BaseSettingsPanel";
|
|
36
43
|
import ContentAdditionDialog from "./ContentAdditionDialog";
|
|
37
44
|
import FavAppPanel from "./FavAppPanel";
|
|
38
|
-
import InsightsContainer from "./InsightsContainer";
|
|
39
45
|
import { ICustomVisualization, ICustomVizInstance, IVisualization } from "./interface/AppsInterface";
|
|
40
|
-
import
|
|
46
|
+
import TilesContainer from "./TilesContainer";
|
|
47
|
+
import { DisplayFormat } from "./TilesPanel";
|
|
48
|
+
import AppManager, { _isSmartBusinessTile } from "./utils/AppManager";
|
|
41
49
|
import {
|
|
42
50
|
AI_APP_FINDER_API,
|
|
43
51
|
AI_APP_FINDER_BASE_URL,
|
|
@@ -45,16 +53,19 @@ import {
|
|
|
45
53
|
DEFAULT_APP_ICON,
|
|
46
54
|
FEATURE_TOGGLES,
|
|
47
55
|
FESR_IDS,
|
|
56
|
+
MYHOME_PAGE_ID,
|
|
48
57
|
MYINSIGHT_SECTION_ID
|
|
49
58
|
} from "./utils/Constants";
|
|
50
59
|
import { recycleId } from "./utils/DataFormatUtils";
|
|
51
60
|
import { isNavigationSupportedForFeature } from "./utils/FeatureUtils";
|
|
52
61
|
import { addFESRSemanticStepName, FESR_EVENTS } from "./utils/FESRUtil";
|
|
62
|
+
import { triggerPXIntegration } from "./utils/PXFeedback";
|
|
53
63
|
|
|
54
64
|
const Constants = {
|
|
55
65
|
DeprecatedInfoText: "deprecated",
|
|
56
66
|
MinQueryLength: 2,
|
|
57
|
-
|
|
67
|
+
MaxQueryLength: 2000,
|
|
68
|
+
MaxDescriptionLength: 300
|
|
58
69
|
};
|
|
59
70
|
|
|
60
71
|
enum SearchStatus {
|
|
@@ -69,7 +80,8 @@ enum ErrorType {
|
|
|
69
80
|
}
|
|
70
81
|
|
|
71
82
|
enum TileType {
|
|
72
|
-
Static = "STATIC"
|
|
83
|
+
Static = "STATIC",
|
|
84
|
+
Dynamic = "DYNAMIC"
|
|
73
85
|
}
|
|
74
86
|
|
|
75
87
|
interface RawAppData {
|
|
@@ -81,16 +93,17 @@ interface RawAppData {
|
|
|
81
93
|
iconUrl: string;
|
|
82
94
|
configuration: string;
|
|
83
95
|
}
|
|
84
|
-
interface SuggestedApp {
|
|
96
|
+
export interface SuggestedApp {
|
|
85
97
|
icon: string;
|
|
86
98
|
title: string;
|
|
87
99
|
chipID: string;
|
|
88
|
-
status: string[];
|
|
89
100
|
subTitle: string;
|
|
90
101
|
description: string;
|
|
91
102
|
isStaticApp: boolean;
|
|
92
|
-
|
|
103
|
+
addedToApps?: boolean;
|
|
104
|
+
addedToInsights?: boolean;
|
|
93
105
|
vizData?: IVisualization;
|
|
106
|
+
isDeprecated?: boolean;
|
|
94
107
|
}
|
|
95
108
|
|
|
96
109
|
interface QueryResponse {
|
|
@@ -201,7 +214,7 @@ export default class AppsAdditionPanel extends BaseSettingsPanel {
|
|
|
201
214
|
|
|
202
215
|
//load ui fragment
|
|
203
216
|
const panelContent = (await Fragment.load({
|
|
204
|
-
id: `${this.getId()}-content
|
|
217
|
+
id: recycleId(`${this.getId()}-content`),
|
|
205
218
|
name: "sap.cux.home.utils.fragment.appsAdditionContent",
|
|
206
219
|
controller: this
|
|
207
220
|
})) as Control;
|
|
@@ -250,14 +263,13 @@ export default class AppsAdditionPanel extends BaseSettingsPanel {
|
|
|
250
263
|
path: "/suggestedApps",
|
|
251
264
|
factory: this._generateListItem.bind(this),
|
|
252
265
|
sorter: new Sorter({
|
|
253
|
-
path: "
|
|
254
|
-
comparator: (firstApp:
|
|
255
|
-
const getPriority = (
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
const hasAlreadyAdded = statusArray.includes(this._i18nBundle.getText("alreadyAddedApp") as string);
|
|
259
|
-
const hasDeprecated = statusArray.includes(this._i18nBundle.getText("deprecatedApp") as string);
|
|
266
|
+
path: "",
|
|
267
|
+
comparator: (firstApp: SuggestedApp, secondApp: SuggestedApp) => {
|
|
268
|
+
const getPriority = (app: SuggestedApp) => {
|
|
269
|
+
const hasAlreadyAdded = app.isStaticApp ? app.addedToApps : app.addedToInsights;
|
|
270
|
+
const hasDeprecated = app.isDeprecated;
|
|
260
271
|
|
|
272
|
+
if (!hasAlreadyAdded && !hasDeprecated) return 0; // Neither status - highest priority
|
|
261
273
|
if (hasAlreadyAdded && hasDeprecated) return 3; // Both statuses - lowest priority
|
|
262
274
|
if (hasAlreadyAdded) return 1; // Only "Already Added"
|
|
263
275
|
if (hasDeprecated) return 2; // Only "Deprecated"
|
|
@@ -294,21 +306,31 @@ export default class AppsAdditionPanel extends BaseSettingsPanel {
|
|
|
294
306
|
* @returns {CustomListItem} The generated list item control.
|
|
295
307
|
*/
|
|
296
308
|
private _generateListItem(id: string, context: Context): CustomListItem {
|
|
309
|
+
const langTag = Localization.getLanguageTag();
|
|
310
|
+
const currentLanguage = langTag.language.toLowerCase();
|
|
311
|
+
const isEnglishLanguage = currentLanguage.startsWith("en");
|
|
297
312
|
const listItem = new CustomListItem(id, {
|
|
298
|
-
|
|
313
|
+
//when toggled b/w app and tile view, the selection should update according to whether the app is already added to selected section
|
|
314
|
+
selected: {
|
|
315
|
+
path: "selectedView",
|
|
316
|
+
formatter: () => {
|
|
317
|
+
const isAppAlreadyAdded = this.isAppAlreadyAdded(context);
|
|
318
|
+
//bind associated checkbox to disable it when the app is already added
|
|
319
|
+
listItem.getMultiSelectControl(true).setEnabled(!isAppAlreadyAdded);
|
|
320
|
+
// if app is already added or if user has selected the app, mark it as selected
|
|
321
|
+
return isAppAlreadyAdded || this.userSelectedApps.has(listItem);
|
|
322
|
+
}
|
|
323
|
+
},
|
|
299
324
|
content: [
|
|
300
325
|
new FlexBox(recycleId(`${id}-result-container`), {
|
|
301
|
-
renderType:
|
|
302
|
-
direction:
|
|
303
|
-
|
|
304
|
-
items: [this.
|
|
326
|
+
renderType: FlexRendertype.Bare,
|
|
327
|
+
direction: FlexDirection.Row,
|
|
328
|
+
gap: "1rem",
|
|
329
|
+
items: [this._getAppDetailsContainer(id, context, isEnglishLanguage), this._getAppPreviewContainer(id, context)]
|
|
305
330
|
}).addStyleClass("sapUiSmallMargin")
|
|
306
331
|
]
|
|
307
332
|
});
|
|
308
333
|
|
|
309
|
-
//bind associated checkbox to disable it when the app is already added to home page
|
|
310
|
-
listItem.getMultiSelectControl(true).setEnabled(!context.getProperty("addedToHomePage"));
|
|
311
|
-
|
|
312
334
|
return listItem;
|
|
313
335
|
}
|
|
314
336
|
|
|
@@ -322,37 +344,69 @@ export default class AppsAdditionPanel extends BaseSettingsPanel {
|
|
|
322
344
|
*/
|
|
323
345
|
private _getAppPreviewContainer(id: string, context: Context): HBox {
|
|
324
346
|
const container = new HBox(recycleId(`${id}-suggestedAppContainer`), {
|
|
325
|
-
renderType:
|
|
347
|
+
renderType: FlexRendertype.Bare,
|
|
348
|
+
width: "19rem",
|
|
349
|
+
layoutData: new FlexItemData({
|
|
350
|
+
growFactor: 0,
|
|
351
|
+
shrinkFactor: 0,
|
|
352
|
+
alignSelf: FlexAlignItems.Center
|
|
353
|
+
}),
|
|
354
|
+
justifyContent: FlexJustifyContent.Center
|
|
326
355
|
});
|
|
356
|
+
container.addItem(
|
|
357
|
+
new GenericTile(recycleId(`${id}-staticApp`), {
|
|
358
|
+
mode: "IconMode",
|
|
359
|
+
frameType: "TwoByHalf",
|
|
360
|
+
width: "19rem",
|
|
361
|
+
header: context.getProperty("title") as string,
|
|
362
|
+
subheader: context.getProperty("subTitle") as string,
|
|
363
|
+
tileIcon: (context.getProperty("icon") as string) || DEFAULT_APP_ICON,
|
|
364
|
+
visible: "{= ${selectedView} === 'STATIC' || ${isStaticApp} }",
|
|
365
|
+
url: context.getProperty("url") as string,
|
|
366
|
+
press: (event: GenericTile$PressEvent) => {
|
|
367
|
+
this._persistDialog(this.getParent() as ContentAdditionDialog);
|
|
368
|
+
URLHelper.redirect(event.getSource()?.getUrl(), false);
|
|
369
|
+
}
|
|
370
|
+
}).addStyleClass("suggestedTile")
|
|
371
|
+
);
|
|
372
|
+
|
|
373
|
+
if (!(context.getProperty("isStaticApp") as boolean)) {
|
|
374
|
+
const vizData = context.getProperty("vizData") as IVisualization;
|
|
375
|
+
const supportedDisplayFormatVizs = [
|
|
376
|
+
{
|
|
377
|
+
...vizData,
|
|
378
|
+
displayFormatHint: DisplayFormat.Standard
|
|
379
|
+
}
|
|
380
|
+
];
|
|
381
|
+
if (this.isWideTileSupported(context)) {
|
|
382
|
+
supportedDisplayFormatVizs.push({
|
|
383
|
+
...vizData,
|
|
384
|
+
displayFormatHint: DisplayFormat.StandardWide
|
|
385
|
+
});
|
|
386
|
+
}
|
|
327
387
|
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
388
|
+
supportedDisplayFormatVizs.forEach((vizData) => {
|
|
389
|
+
// instantiate visualization for dynamic app
|
|
390
|
+
const vizInstance = this.vizInstantiationService.instantiateVisualization(vizData) as ICustomVizInstance;
|
|
391
|
+
vizInstance?.setActive(true);
|
|
392
|
+
vizInstance?.setProperty("sizeBehavior", "Small", true);
|
|
393
|
+
vizInstance?.attachPress(() => this._persistDialog(this.getParent() as ContentAdditionDialog));
|
|
394
|
+
vizInstance.bindProperty("visible", {
|
|
395
|
+
parts: ["selectedDisplayFormat", "selectedView"],
|
|
396
|
+
formatter: (selectedDisplayFormat: DisplayFormat, selectedView: TileType) => {
|
|
397
|
+
if (selectedView && selectedView === TileType.Static) {
|
|
398
|
+
return false;
|
|
399
|
+
}
|
|
400
|
+
return vizData.displayFormatHint === DisplayFormat.StandardWide
|
|
401
|
+
? selectedDisplayFormat === DisplayFormat.StandardWide
|
|
402
|
+
: selectedDisplayFormat !== DisplayFormat.StandardWide;
|
|
343
403
|
}
|
|
344
|
-
})
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
// create custom visualization for other apps
|
|
348
|
-
const vizData = context.getProperty("vizData") as ICustomVisualization;
|
|
349
|
-
const instance = this.vizInstantiationService.instantiateVisualization(vizData) as ICustomVizInstance;
|
|
350
|
-
instance?.setActive(true);
|
|
351
|
-
instance?.attachPress(() => this._persistDialog(this.getParent() as ContentAdditionDialog));
|
|
352
|
-
container.addItem(instance);
|
|
404
|
+
});
|
|
405
|
+
container.addItem(vizInstance);
|
|
406
|
+
});
|
|
353
407
|
}
|
|
354
408
|
|
|
355
|
-
return container;
|
|
409
|
+
return container.addStyleClass("suggestedAppPreviewContainer");
|
|
356
410
|
}
|
|
357
411
|
|
|
358
412
|
/**
|
|
@@ -361,33 +415,70 @@ export default class AppsAdditionPanel extends BaseSettingsPanel {
|
|
|
361
415
|
* @private
|
|
362
416
|
* @param {string} id - The unique ID for the container.
|
|
363
417
|
* @param {Context} context - The binding context for the app.
|
|
418
|
+
* @param {boolean} isEnglishLanguage - Flag indicating if the language is english.
|
|
364
419
|
* @returns {VBox} The app details container.
|
|
365
420
|
*/
|
|
366
|
-
private _getAppDetailsContainer(id: string, context: Context): VBox {
|
|
421
|
+
private _getAppDetailsContainer(id: string, context: Context, isEnglishLanguage: boolean): VBox {
|
|
422
|
+
let description = isEnglishLanguage
|
|
423
|
+
? (context.getProperty("description") as string)
|
|
424
|
+
: (this._i18nBundle.getText("NoDescriptionAvailable") as string);
|
|
367
425
|
return new VBox(recycleId(`${id}-app-details-container`), {
|
|
368
|
-
renderType:
|
|
426
|
+
renderType: FlexRendertype.Bare,
|
|
369
427
|
gap: "0.5rem",
|
|
428
|
+
layoutData: new FlexItemData({
|
|
429
|
+
growFactor: 1
|
|
430
|
+
}),
|
|
370
431
|
items: [
|
|
432
|
+
new HBox(recycleId(`${id}-title-container`), {
|
|
433
|
+
gap: "1rem",
|
|
434
|
+
alignItems: FlexAlignItems.Center,
|
|
435
|
+
renderType: FlexRendertype.Bare,
|
|
436
|
+
items: [
|
|
437
|
+
new Title(recycleId(`${id}-app-title`), {
|
|
438
|
+
text: context.getProperty("title") as string,
|
|
439
|
+
titleStyle: TitleLevel.H6
|
|
440
|
+
}),
|
|
441
|
+
new ObjectStatus(recycleId(`${id}-deprecatedApp`), {
|
|
442
|
+
text: this._i18nBundle.getText("deprecatedApp") as string,
|
|
443
|
+
icon: "sap-icon://alert",
|
|
444
|
+
state: ValueState.Warning,
|
|
445
|
+
visible: context.getProperty("isDeprecated") as boolean
|
|
446
|
+
})
|
|
447
|
+
]
|
|
448
|
+
}),
|
|
371
449
|
new ExpandableText(recycleId(`${id}-description`), {
|
|
372
|
-
text:
|
|
450
|
+
text: description,
|
|
373
451
|
maxCharacters: Constants.MaxDescriptionLength
|
|
374
452
|
}),
|
|
453
|
+
// app actions container
|
|
454
|
+
new HBox(recycleId(`${id}-app-actions-container`), {
|
|
455
|
+
renderType: FlexRendertype.Bare,
|
|
456
|
+
gap: "1.5rem",
|
|
457
|
+
visible: !context.getProperty("isStaticApp"),
|
|
458
|
+
items: [this.getAppViewTypeAction(id), this.getDisplayFormatAction(id, context)]
|
|
459
|
+
}),
|
|
375
460
|
new HBox(recycleId(`${id}-app-status-container`), {
|
|
376
|
-
renderType:
|
|
377
|
-
visible:
|
|
461
|
+
renderType: FlexRendertype.Bare,
|
|
462
|
+
visible: {
|
|
463
|
+
parts: ["selectedView"],
|
|
464
|
+
formatter: () => {
|
|
465
|
+
return this.isAppAlreadyAdded(context);
|
|
466
|
+
}
|
|
467
|
+
},
|
|
378
468
|
items: [
|
|
379
469
|
new Label(recycleId(`${id}-appStatusLabel`), {
|
|
380
470
|
text: this._i18nBundle.getText("appStatus"),
|
|
381
471
|
showColon: true
|
|
382
472
|
}),
|
|
383
|
-
new
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
473
|
+
new ObjectStatus(recycleId(`${id}-alreadyAddedStatus`), {
|
|
474
|
+
text: "{= (${isStaticApp} || ${selectedView} === 'STATIC') ? ${i18n>alreadyAddedApp} : ${i18n>alreadyAddedTile} }",
|
|
475
|
+
icon: "sap-icon://sys-enter-2",
|
|
476
|
+
state: "Success"
|
|
477
|
+
}).addStyleClass("sapUiTinyMarginBegin")
|
|
387
478
|
]
|
|
388
|
-
})
|
|
479
|
+
}).addStyleClass("sapUiTinyMarginTop")
|
|
389
480
|
]
|
|
390
|
-
})
|
|
481
|
+
});
|
|
391
482
|
}
|
|
392
483
|
|
|
393
484
|
/**
|
|
@@ -458,15 +549,16 @@ export default class AppsAdditionPanel extends BaseSettingsPanel {
|
|
|
458
549
|
`<svg height="167" fill="none">
|
|
459
550
|
${loadingShimmer}
|
|
460
551
|
<rect x="16" y="75" width="16" height="16" rx="4" fill="var(--sapContent_Placeholderloading_Background)"/>
|
|
461
|
-
<rect x="48" y="
|
|
462
|
-
<rect x="48" y="
|
|
552
|
+
<rect x="48" y="54" width="59%" height="48" rx="4" fill="url(#loadingShimmer)"/>
|
|
553
|
+
<rect x="48" y="110" width="13%" height="16" rx="4" fill="url(#loadingShimmer)"/>
|
|
554
|
+
<rect x="600" y="40" width="303" height="70" rx="16" fill="url(#loadingShimmer)"/>
|
|
463
555
|
</svg>`,
|
|
464
556
|
`<svg height="180" fill="none">
|
|
465
557
|
${loadingShimmer}
|
|
466
558
|
<rect x="16" y="82" width="16" height="16" rx="4" fill="var(--sapContent_Placeholderloading_Background)"/>
|
|
467
|
-
<rect x="48" y="
|
|
468
|
-
<rect x="
|
|
469
|
-
<rect x="
|
|
559
|
+
<rect x="48" y="54" width="58%" height="48" rx="4" fill="url(#loadingShimmer)"/>
|
|
560
|
+
<rect x="48" y="110" width="13%" height="16" rx="4" fill="url(#loadingShimmer)"/>
|
|
561
|
+
<rect x="675" y="16" width="148" height="148" rx="16" fill="url(#loadingShimmer)"/>
|
|
470
562
|
</svg>`
|
|
471
563
|
];
|
|
472
564
|
}
|
|
@@ -511,6 +603,21 @@ export default class AppsAdditionPanel extends BaseSettingsPanel {
|
|
|
511
603
|
this.userSelectedApps?.clear();
|
|
512
604
|
}
|
|
513
605
|
|
|
606
|
+
public setIllustrationSize(): void {
|
|
607
|
+
const containerDom = (Fragment.byId(`${this.getId()}-content`, "container") as VBox)?.getDomRef() as HTMLElement;
|
|
608
|
+
if (containerDom) {
|
|
609
|
+
const clientHeight = containerDom.clientHeight;
|
|
610
|
+
const illustratedMessage = Fragment.byId(`${this.getId()}-content`, "beforeSearch") as IllustratedMessage;
|
|
611
|
+
if (clientHeight <= 500) {
|
|
612
|
+
illustratedMessage.setIllustrationSize("ExtraSmall");
|
|
613
|
+
} else if (500 < clientHeight && clientHeight < 650) {
|
|
614
|
+
illustratedMessage.setIllustrationSize("Small");
|
|
615
|
+
} else {
|
|
616
|
+
illustratedMessage.setIllustrationSize("Medium");
|
|
617
|
+
}
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
|
|
514
621
|
/**
|
|
515
622
|
* Handles the "Go" button press event for searching suggested apps.
|
|
516
623
|
*
|
|
@@ -534,7 +641,7 @@ export default class AppsAdditionPanel extends BaseSettingsPanel {
|
|
|
534
641
|
const insightsApps = await this.appManagerInstance.fetchInsightApps(true, this._i18nBundle.getText("insights") as string);
|
|
535
642
|
|
|
536
643
|
// generate suggested apps
|
|
537
|
-
const apps = this._generateApps(rawApps, allVisualizations,
|
|
644
|
+
const apps = this._generateApps(rawApps, allVisualizations, favoriteApps, insightsApps);
|
|
538
645
|
const suggestedApps = await this._filterUnsupportedApps(apps);
|
|
539
646
|
|
|
540
647
|
if (suggestedApps.length === 0 && !this.model.getProperty("/hasError")) {
|
|
@@ -547,8 +654,9 @@ export default class AppsAdditionPanel extends BaseSettingsPanel {
|
|
|
547
654
|
}
|
|
548
655
|
}
|
|
549
656
|
} catch (err) {
|
|
550
|
-
|
|
551
|
-
|
|
657
|
+
const message = (err as Error).message || "";
|
|
658
|
+
Log.error(message);
|
|
659
|
+
this._handleError(message);
|
|
552
660
|
} finally {
|
|
553
661
|
// update search status only if search is not cancelled
|
|
554
662
|
if (this.model.getProperty("/searchStatus") === SearchStatus.Searching) {
|
|
@@ -579,17 +687,21 @@ export default class AppsAdditionPanel extends BaseSettingsPanel {
|
|
|
579
687
|
* @private
|
|
580
688
|
* @param {RawAppData[]} rawApps - The raw app data to process.
|
|
581
689
|
* @param {IVisualization[]} allVisualizations - All available visualizations.
|
|
582
|
-
* @param {ICustomVisualization[]}
|
|
690
|
+
* @param {ICustomVisualization[]} favoriteApps - Favorite apps available in homepage.
|
|
691
|
+
* @param {ICustomVisualization[]} insightsApps - Insights apps available in homepage.
|
|
583
692
|
* @returns {SuggestedApp[]} The list of suggested apps.
|
|
584
693
|
*/
|
|
585
694
|
private _generateApps(
|
|
586
695
|
rawApps: RawAppData[],
|
|
587
696
|
allVisualizations: IVisualization[],
|
|
588
|
-
|
|
697
|
+
favoriteApps: ICustomVisualization[],
|
|
698
|
+
insightsApps: ICustomVisualization[]
|
|
589
699
|
): SuggestedApp[] {
|
|
590
700
|
return rawApps.map((app) => {
|
|
591
701
|
const vizData = allVisualizations.find((viz) => viz.vizId === app.chipID);
|
|
592
|
-
const
|
|
702
|
+
const addedToApps = favoriteApps.some((viz) => viz.visualization?.vizId === app.chipID);
|
|
703
|
+
const addedToInsights = insightsApps.some((viz) => viz.visualization?.vizId === app.chipID);
|
|
704
|
+
const tileConfig = this.parseTileConfiguration(app.configuration);
|
|
593
705
|
return {
|
|
594
706
|
title: app.title,
|
|
595
707
|
chipID: app.chipID,
|
|
@@ -597,10 +709,12 @@ export default class AppsAdditionPanel extends BaseSettingsPanel {
|
|
|
597
709
|
description: app.appDescription,
|
|
598
710
|
icon: app.iconUrl,
|
|
599
711
|
vizData,
|
|
600
|
-
|
|
712
|
+
addedToApps,
|
|
713
|
+
addedToInsights,
|
|
601
714
|
isStaticApp: app.tileType === TileType.Static,
|
|
602
|
-
|
|
603
|
-
|
|
715
|
+
url: vizData?.targetURL || "",
|
|
716
|
+
isDeprecated: (tileConfig?.display_info_text || "").toLowerCase() === Constants.DeprecatedInfoText,
|
|
717
|
+
selectedView: app.tileType === TileType.Static ? TileType.Static : TileType.Dynamic
|
|
604
718
|
};
|
|
605
719
|
}) as SuggestedApp[];
|
|
606
720
|
}
|
|
@@ -614,7 +728,7 @@ export default class AppsAdditionPanel extends BaseSettingsPanel {
|
|
|
614
728
|
*/
|
|
615
729
|
private isValidQuery(query: string = ""): boolean {
|
|
616
730
|
query = query?.trim();
|
|
617
|
-
return query.length >= Constants.MinQueryLength && query.length <= Constants.
|
|
731
|
+
return query.length >= Constants.MinQueryLength && query.length <= Constants.MaxQueryLength;
|
|
618
732
|
}
|
|
619
733
|
|
|
620
734
|
/**
|
|
@@ -662,97 +776,26 @@ export default class AppsAdditionPanel extends BaseSettingsPanel {
|
|
|
662
776
|
* @returns {Promise<RawAppData[]>} A promise that resolves to the list of raw app data.
|
|
663
777
|
*/
|
|
664
778
|
private async fetchAppsFromSearch(query: string): Promise<RawAppData[]> {
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
};
|
|
671
|
-
|
|
672
|
-
const response = await fetch(AI_APP_FINDER_API, {
|
|
673
|
-
method: "POST",
|
|
674
|
-
headers,
|
|
675
|
-
body: JSON.stringify({ UserInput: query })
|
|
676
|
-
});
|
|
677
|
-
|
|
678
|
-
// handle error responses
|
|
679
|
-
if (!response.ok) {
|
|
680
|
-
const errorResponse = (await response.json()) as ErrorResponse;
|
|
681
|
-
this._handleError(errorResponse.error?.message || "");
|
|
682
|
-
return [];
|
|
683
|
-
}
|
|
684
|
-
|
|
685
|
-
const queryResult = (await response.json()) as QueryResponse;
|
|
686
|
-
return queryResult.value || [];
|
|
687
|
-
} catch (error) {
|
|
688
|
-
Log.error((error as Error).message);
|
|
689
|
-
this._handleError();
|
|
690
|
-
return [];
|
|
691
|
-
}
|
|
692
|
-
}
|
|
693
|
-
|
|
694
|
-
/**
|
|
695
|
-
* Retrieves status texts for an app based on its configuration and homepage status.
|
|
696
|
-
*
|
|
697
|
-
* @private
|
|
698
|
-
* @param {string} configuration - The app's configuration string.
|
|
699
|
-
* @param {boolean} addedToHomePage - Indicates if the app is already added to the homepage.
|
|
700
|
-
* @returns {string[]} An array of status texts for the app.
|
|
701
|
-
*/
|
|
702
|
-
private getAppStatusTexts(configuration: string, addedToHomePage: boolean): string[] {
|
|
703
|
-
let statusTexts = [];
|
|
704
|
-
|
|
705
|
-
if (configuration) {
|
|
706
|
-
try {
|
|
707
|
-
const parsedConfig = JSON.parse(configuration) as Configuration;
|
|
708
|
-
const tileConfig = JSON.parse(parsedConfig?.tileConfiguration) as TileConfig;
|
|
709
|
-
const infoText = (tileConfig?.display_info_text || "").toLowerCase();
|
|
710
|
-
if (infoText === Constants.DeprecatedInfoText) {
|
|
711
|
-
statusTexts.push(this._i18nBundle.getText("deprecatedApp") as string);
|
|
712
|
-
}
|
|
713
|
-
} catch (error: unknown) {
|
|
714
|
-
Log.warning((error as Error).message);
|
|
715
|
-
}
|
|
716
|
-
}
|
|
717
|
-
|
|
718
|
-
if (addedToHomePage) {
|
|
719
|
-
statusTexts.push(this._i18nBundle.getText("alreadyAddedApp") as string);
|
|
720
|
-
}
|
|
721
|
-
|
|
722
|
-
return statusTexts;
|
|
723
|
-
}
|
|
779
|
+
const token = await this._fetchCSRFToken();
|
|
780
|
+
const headers = {
|
|
781
|
+
"Content-Type": "application/json",
|
|
782
|
+
...(token && { "X-CSRF-Token": token })
|
|
783
|
+
};
|
|
724
784
|
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
* @param {string} id - The id of the list item.
|
|
730
|
-
* @param {string[]} stausTexts - The list of status texts.
|
|
731
|
-
* @returns {Text[]} An array of Text controls with applied styles.
|
|
732
|
-
*/
|
|
733
|
-
private _generateStatusTexts(id: string, stausTexts: string[]): Text[] {
|
|
734
|
-
return stausTexts.map((status, index) => {
|
|
735
|
-
return new Text(recycleId(`${id}-statusText-${index}`), {
|
|
736
|
-
text: status
|
|
737
|
-
}).addStyleClass(this.applyStatusClass(status));
|
|
785
|
+
const response = await fetch(AI_APP_FINDER_API, {
|
|
786
|
+
method: "POST",
|
|
787
|
+
headers,
|
|
788
|
+
body: JSON.stringify({ UserInput: query })
|
|
738
789
|
});
|
|
739
|
-
}
|
|
740
790
|
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
* @param {string} status - The status text to classify.
|
|
746
|
-
* @returns {string} The CSS class for the status text.
|
|
747
|
-
*/
|
|
748
|
-
public applyStatusClass(status: string): string {
|
|
749
|
-
if (status === this._i18nBundle.getText("alreadyAddedApp")) {
|
|
750
|
-
return "addedAppStatusText";
|
|
751
|
-
} else if (status === this._i18nBundle.getText("deprecatedApp")) {
|
|
752
|
-
return "deprecatedAppStatusText";
|
|
753
|
-
} else {
|
|
754
|
-
return "";
|
|
791
|
+
// handle error responses
|
|
792
|
+
if (!response.ok) {
|
|
793
|
+
const errorResponse = (await response.json()) as ErrorResponse;
|
|
794
|
+
throw new Error(errorResponse.error?.message || "");
|
|
755
795
|
}
|
|
796
|
+
|
|
797
|
+
const queryResult = (await response.json()) as QueryResponse;
|
|
798
|
+
return queryResult.value || [];
|
|
756
799
|
}
|
|
757
800
|
|
|
758
801
|
/**
|
|
@@ -762,17 +805,29 @@ export default class AppsAdditionPanel extends BaseSettingsPanel {
|
|
|
762
805
|
* @async
|
|
763
806
|
*/
|
|
764
807
|
private async onPressAddApps(): Promise<void> {
|
|
808
|
+
triggerPXIntegration("addAppsButton");
|
|
765
809
|
const userSelectedApps = this.model.getProperty("/userSelectedApps") as CustomListItem[];
|
|
766
810
|
let staticAppsPresent = false;
|
|
767
811
|
let dynamicAppsPresent = false;
|
|
768
812
|
|
|
769
813
|
for (const app of userSelectedApps) {
|
|
770
|
-
const isStaticApp =
|
|
814
|
+
const isStaticApp =
|
|
815
|
+
(app.getBindingContext()?.getProperty("isStaticApp") as boolean) ||
|
|
816
|
+
app.getBindingContext()?.getProperty("selectedView") === TileType.Static;
|
|
817
|
+
const displayFormatHint = (app.getBindingContext()?.getProperty("vizData") as IVisualization)
|
|
818
|
+
?.displayFormatHint as DisplayFormat;
|
|
819
|
+
const selectedDisplayFormat = app.getBindingContext()?.getProperty("selectedDisplayFormat") as DisplayFormat;
|
|
771
820
|
if (isStaticApp) staticAppsPresent = true;
|
|
772
821
|
else dynamicAppsPresent = true;
|
|
773
822
|
|
|
774
823
|
const vizId = app.getBindingContext()?.getProperty("chipID") as string;
|
|
775
824
|
await this.appManagerInstance.addVisualization(vizId, isStaticApp ? undefined : MYINSIGHT_SECTION_ID);
|
|
825
|
+
// for dynamic app, if display format is changed, update it
|
|
826
|
+
if (!isStaticApp && selectedDisplayFormat && displayFormatHint !== selectedDisplayFormat) {
|
|
827
|
+
// TODO: Check if addVisualization method in SpaceContent service can expose 'displayFormat' parameter to avoid this extra call
|
|
828
|
+
// since the internal Pages service method already supports it
|
|
829
|
+
await this.updateDisplayFormat(vizId, selectedDisplayFormat);
|
|
830
|
+
}
|
|
776
831
|
}
|
|
777
832
|
|
|
778
833
|
if (staticAppsPresent) {
|
|
@@ -840,25 +895,25 @@ export default class AppsAdditionPanel extends BaseSettingsPanel {
|
|
|
840
895
|
}
|
|
841
896
|
|
|
842
897
|
/**
|
|
843
|
-
* Retrieves the
|
|
898
|
+
* Retrieves the TilesContainer instance from the parent layout.
|
|
844
899
|
*
|
|
845
900
|
* @private
|
|
846
|
-
* @returns {
|
|
901
|
+
* @returns {TilesContainer | undefined} The AppsContainer instance or undefined if not found.
|
|
847
902
|
*/
|
|
848
|
-
private
|
|
903
|
+
private getTilesContainer(): TilesContainer | undefined {
|
|
849
904
|
return this.getLayout()
|
|
850
905
|
?.getItems()
|
|
851
|
-
.find((container) => container instanceof
|
|
906
|
+
.find((container) => container instanceof TilesContainer);
|
|
852
907
|
}
|
|
853
908
|
|
|
854
909
|
/**
|
|
855
|
-
* Refreshes the Insights tiles panel in the
|
|
910
|
+
* Refreshes the Insights tiles panel in the TilesContainer.
|
|
856
911
|
*
|
|
857
912
|
* @private
|
|
858
913
|
* @async
|
|
859
914
|
*/
|
|
860
915
|
private async refreshInsightsApps(): Promise<void> {
|
|
861
|
-
await this.
|
|
916
|
+
await this.getTilesContainer()?.refreshData("tiles");
|
|
862
917
|
}
|
|
863
918
|
|
|
864
919
|
/**
|
|
@@ -874,8 +929,7 @@ export default class AppsAdditionPanel extends BaseSettingsPanel {
|
|
|
874
929
|
if (!selected) this.userSelectedApps.delete(listItem);
|
|
875
930
|
else {
|
|
876
931
|
const context = listItem.getBindingContext();
|
|
877
|
-
|
|
878
|
-
if (!addedToHomePage) this.userSelectedApps.add(listItem);
|
|
932
|
+
if (context && !this.isAppAlreadyAdded(context)) this.userSelectedApps.add(listItem);
|
|
879
933
|
}
|
|
880
934
|
|
|
881
935
|
this.model.setProperty("/userSelectedApps", Array.from(this.userSelectedApps));
|
|
@@ -925,7 +979,7 @@ export default class AppsAdditionPanel extends BaseSettingsPanel {
|
|
|
925
979
|
if (query.length !== 0 && query.length < Constants.MinQueryLength) {
|
|
926
980
|
textArea.setValueState(ValueState.Information);
|
|
927
981
|
textArea.setValueStateText(this._i18nBundle.getText("minLengthRequired"));
|
|
928
|
-
} else if (query.length > Constants.
|
|
982
|
+
} else if (query.length > Constants.MaxQueryLength) {
|
|
929
983
|
textArea.setValueState(ValueState.Warning);
|
|
930
984
|
textArea.setValueStateText(this._i18nBundle.getText("maxLengthExceeded"));
|
|
931
985
|
} else {
|
|
@@ -967,8 +1021,178 @@ export default class AppsAdditionPanel extends BaseSettingsPanel {
|
|
|
967
1021
|
public sendFeedback(feedbackType: string): void {
|
|
968
1022
|
this.resetFeedback();
|
|
969
1023
|
this.model.setProperty(`/feedback/${feedbackType}`, true);
|
|
1024
|
+
triggerPXIntegration(feedbackType);
|
|
970
1025
|
MessageToast.show(this._i18nBundle.getText("feedBackSent") as string, {
|
|
971
1026
|
width: "20em"
|
|
972
1027
|
});
|
|
973
1028
|
}
|
|
1029
|
+
|
|
1030
|
+
/**
|
|
1031
|
+
* Creates the action to change view type (App / Tile) for suggested app.
|
|
1032
|
+
*
|
|
1033
|
+
* @private
|
|
1034
|
+
* @param {string} id - The unique ID for the container.
|
|
1035
|
+
* @returns {HBox} The app view action container.
|
|
1036
|
+
*/
|
|
1037
|
+
private getAppViewTypeAction(id: string): HBox {
|
|
1038
|
+
const appViewToggleButton = new SegmentedButton(recycleId(`${id}-app-addAs-segmentedBtn`), {
|
|
1039
|
+
selectedKey: "{selectedView}",
|
|
1040
|
+
items: [
|
|
1041
|
+
new SegmentedButtonItem(recycleId(`${id}-addAs-app`), {
|
|
1042
|
+
key: TileType.Static,
|
|
1043
|
+
text: this._i18nBundle.getText("addAsApp")
|
|
1044
|
+
}),
|
|
1045
|
+
new SegmentedButtonItem(recycleId(`${id}-addAs-tile`), {
|
|
1046
|
+
key: TileType.Dynamic,
|
|
1047
|
+
text: this._i18nBundle.getText("addAsTile")
|
|
1048
|
+
})
|
|
1049
|
+
]
|
|
1050
|
+
}).addStyleClass("sapUiTinyMarginBegin");
|
|
1051
|
+
|
|
1052
|
+
const appViewLabel = new Label(recycleId(`${id}-addAsLabel`), {
|
|
1053
|
+
text: this._i18nBundle.getText("addAs"),
|
|
1054
|
+
showColon: true
|
|
1055
|
+
});
|
|
1056
|
+
|
|
1057
|
+
try {
|
|
1058
|
+
appViewToggleButton.setProperty("contentMode", "ContentFit");
|
|
1059
|
+
appViewLabel.setWidth("100%");
|
|
1060
|
+
} catch (error) {
|
|
1061
|
+
Log.error(error instanceof Error ? error.message : (error as string));
|
|
1062
|
+
}
|
|
1063
|
+
|
|
1064
|
+
return new HBox(recycleId(`${id}-app-addAs-container`), {
|
|
1065
|
+
renderType: FlexRendertype.Bare,
|
|
1066
|
+
alignItems: FlexAlignItems.Center,
|
|
1067
|
+
items: [appViewLabel, appViewToggleButton]
|
|
1068
|
+
});
|
|
1069
|
+
}
|
|
1070
|
+
|
|
1071
|
+
/**
|
|
1072
|
+
* Creates the action to change display format (standard / wide) for suggested tile.
|
|
1073
|
+
*
|
|
1074
|
+
* @private
|
|
1075
|
+
* @param {string} id - The unique ID for the container.
|
|
1076
|
+
* @param {Context} context - The binding context for the app.
|
|
1077
|
+
* @returns {HBox} The display format action container.
|
|
1078
|
+
*/
|
|
1079
|
+
private getDisplayFormatAction(id: string, context: Context): HBox {
|
|
1080
|
+
return new HBox(recycleId(`${id}-app-displayFormatSwitch-container`), {
|
|
1081
|
+
renderType: FlexRendertype.Bare,
|
|
1082
|
+
alignItems: FlexAlignItems.Center,
|
|
1083
|
+
visible: {
|
|
1084
|
+
parts: ["selectedView"],
|
|
1085
|
+
formatter: (selectedView: TileType) => {
|
|
1086
|
+
return selectedView !== TileType.Static && this.isWideTileSupported(context);
|
|
1087
|
+
}
|
|
1088
|
+
},
|
|
1089
|
+
items: [
|
|
1090
|
+
new Label(recycleId(`${id}-displayFormatSwitchLabel`), {
|
|
1091
|
+
text: this._i18nBundle.getText("wide"),
|
|
1092
|
+
showColon: true
|
|
1093
|
+
}),
|
|
1094
|
+
new Switch({
|
|
1095
|
+
id: `${id}-displayFormatSwitch`,
|
|
1096
|
+
state: (context.getProperty("vizData") as IVisualization)?.displayFormatHint !== DisplayFormat.Standard,
|
|
1097
|
+
customTextOn: " ",
|
|
1098
|
+
customTextOff: " ",
|
|
1099
|
+
change: (event) => this.toggleDisplayFormat(event, context)
|
|
1100
|
+
}).addStyleClass("sapUiTinyMarginBegin")
|
|
1101
|
+
]
|
|
1102
|
+
});
|
|
1103
|
+
}
|
|
1104
|
+
|
|
1105
|
+
/**
|
|
1106
|
+
* Checks if the visualization supports wide tile conversion.
|
|
1107
|
+
*
|
|
1108
|
+
* @private
|
|
1109
|
+
* @param {Context} context - The binding context for the app.
|
|
1110
|
+
* @returns {boolean} True if wide display format is supported, false otherwise.
|
|
1111
|
+
*/
|
|
1112
|
+
private isWideTileSupported(context: Context): boolean {
|
|
1113
|
+
const vizData = context.getProperty("vizData") as IVisualization;
|
|
1114
|
+
const supportedDisplayFormats = vizData?.supportedDisplayFormats || ([] as string[]);
|
|
1115
|
+
return (
|
|
1116
|
+
vizData &&
|
|
1117
|
+
(vizData.indicatorDataSource || _isSmartBusinessTile(vizData)) &&
|
|
1118
|
+
supportedDisplayFormats.includes(DisplayFormat.Standard) &&
|
|
1119
|
+
supportedDisplayFormats.includes(DisplayFormat.StandardWide)
|
|
1120
|
+
);
|
|
1121
|
+
}
|
|
1122
|
+
|
|
1123
|
+
/**
|
|
1124
|
+
* Handler to switch between standard and wide format for tile.
|
|
1125
|
+
*
|
|
1126
|
+
* @private
|
|
1127
|
+
* @param {Switch$ChangeEvent} event - The switch change event.
|
|
1128
|
+
* @param {Context} context - The binding context for the app being modified.
|
|
1129
|
+
* @returns {void}
|
|
1130
|
+
*/
|
|
1131
|
+
private toggleDisplayFormat(event: Switch$ChangeEvent, context: Context): void {
|
|
1132
|
+
const switchToWideTile = event.getParameter("state") as boolean;
|
|
1133
|
+
const displayFormatHint = switchToWideTile ? DisplayFormat.StandardWide : DisplayFormat.Standard;
|
|
1134
|
+
const path = context.getPath();
|
|
1135
|
+
this.model.setProperty(`${path}/selectedDisplayFormat`, displayFormatHint);
|
|
1136
|
+
}
|
|
1137
|
+
|
|
1138
|
+
/**
|
|
1139
|
+
* Updates the display format of a visualization in the insights section.
|
|
1140
|
+
*
|
|
1141
|
+
* @private
|
|
1142
|
+
* @param {string} vizId - Id of the visualization for which display format has to be updated.
|
|
1143
|
+
* @param {DisplayFormat} displayFormatHint - The new display format to apply.
|
|
1144
|
+
* @returns {Promise<void>} A promise that resolves when the display format is updated.
|
|
1145
|
+
*/
|
|
1146
|
+
private async updateDisplayFormat(vizId: string, displayFormatHint: DisplayFormat): Promise<void> {
|
|
1147
|
+
const insightsApps = await this.appManagerInstance.fetchInsightApps(true, this._i18nBundle.getText("insights") as string);
|
|
1148
|
+
const viz = insightsApps.find((insightApp) => insightApp.visualization?.vizId === vizId);
|
|
1149
|
+
if (viz) {
|
|
1150
|
+
const updateConfig = {
|
|
1151
|
+
pageId: MYHOME_PAGE_ID,
|
|
1152
|
+
sourceSectionIndex: viz.persConfig?.sectionIndex as number,
|
|
1153
|
+
sourceVisualizationIndex: viz.persConfig?.visualizationIndex as number,
|
|
1154
|
+
oVisualizationData: {
|
|
1155
|
+
displayFormatHint
|
|
1156
|
+
}
|
|
1157
|
+
};
|
|
1158
|
+
await this.appManagerInstance.updateVisualizations(updateConfig);
|
|
1159
|
+
}
|
|
1160
|
+
}
|
|
1161
|
+
|
|
1162
|
+
/**
|
|
1163
|
+
* Determines if an app is already added to the appropriate section based on its type and selected view.
|
|
1164
|
+
* For static apps or apps with Static view selected, checks if added to favorites apps section.
|
|
1165
|
+
* For dynamic apps with Dynamic view selected, checks if added to insights section.
|
|
1166
|
+
*
|
|
1167
|
+
* @private
|
|
1168
|
+
* @param {Context} context - The binding context for the app to check.
|
|
1169
|
+
* @returns {boolean} True if the app is already added to the corresponding section, false otherwise.
|
|
1170
|
+
*/
|
|
1171
|
+
private isAppAlreadyAdded(context: Context): boolean {
|
|
1172
|
+
const isStaticApp = context.getProperty("isStaticApp") as boolean;
|
|
1173
|
+
const selectedAppView = context.getProperty("selectedView") as TileType;
|
|
1174
|
+
return (
|
|
1175
|
+
isStaticApp || selectedAppView === TileType.Static ? context.getProperty("addedToApps") : context.getProperty("addedToInsights")
|
|
1176
|
+
) as boolean;
|
|
1177
|
+
}
|
|
1178
|
+
|
|
1179
|
+
/**
|
|
1180
|
+
* Parses the tile configuration string from raw app configuration.
|
|
1181
|
+
*
|
|
1182
|
+
* @private
|
|
1183
|
+
* @param {string} configuration - The raw app configuration string containing tile settings.
|
|
1184
|
+
* @returns {TileConfig | null} The parsed tile configuration object or null if parsing fails.
|
|
1185
|
+
*/
|
|
1186
|
+
private parseTileConfiguration(configuration: string): TileConfig | null {
|
|
1187
|
+
if (configuration) {
|
|
1188
|
+
try {
|
|
1189
|
+
const parsedConfig = JSON.parse(configuration) as Configuration;
|
|
1190
|
+
const tileConfig = JSON.parse(parsedConfig?.tileConfiguration) as TileConfig;
|
|
1191
|
+
return tileConfig;
|
|
1192
|
+
} catch (error: unknown) {
|
|
1193
|
+
Log.warning((error as Error).message);
|
|
1194
|
+
}
|
|
1195
|
+
}
|
|
1196
|
+
return null;
|
|
1197
|
+
}
|
|
974
1198
|
}
|