@sapui5/sap.suite.ui.generic.template 1.153.0 → 1.154.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/suite/ui/generic/template/.library +1 -1
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/controller/ControllerImplementation.js +31 -2
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n.properties +7 -2
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_ar.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_bg.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_ca.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_cnr.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_cs.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_cy.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_da.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_de.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_el.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_en.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_en_GB.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_en_US_sappsd.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_en_US_saprigi.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_es.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_es_MX.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_et.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_fi.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_fr.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_fr_CA.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_hi.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_hr.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_hu.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_id.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_it.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_iw.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_ja.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_kk.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_ko.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_lt.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_lv.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_mk.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_ms.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_nl.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_no.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_pl.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_pt.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_pt_PT.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_ro.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_ru.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_sh.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_sk.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_sl.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_sr.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_sv.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_th.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_tr.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_uk.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_vi.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_zh_CN.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_zh_TW.properties +3 -0
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/manifest.json +8 -3
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/view/fragments/FilterContainer.fragment.xml +2 -1
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/view/fragments/HeaderCommands.fragment.xml +1 -1
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/view/fragments/SmartFilterBar.fragment.xml +1 -1
- package/src/sap/suite/ui/generic/template/Canvas/manifest.json +1 -1
- package/src/sap/suite/ui/generic/template/ListReport/Component.js +25 -1
- package/src/sap/suite/ui/generic/template/ListReport/controller/ControllerImplementation.js +122 -20
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n.properties +6 -3
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_ar.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_bg.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_ca.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_cnr.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_cs.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_cy.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_da.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_de.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_el.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_en.properties +3 -1
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_en_GB.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_en_US_sappsd.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_en_US_saprigi.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_es.properties +3 -1
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_es_MX.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_et.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_fi.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_fr.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_fr_CA.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_hi.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_hr.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_hu.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_id.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_it.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_iw.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_ja.properties +4 -2
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_kk.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_ko.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_lt.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_lv.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_mk.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_ms.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_nl.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_no.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_pl.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_pt.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_pt_PT.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_ro.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_ru.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_sh.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_sk.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_sl.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_sr.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_sv.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_th.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_tr.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_uk.properties +3 -1
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_vi.properties +2 -0
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_zh_CN.properties +4 -2
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_zh_TW.properties +5 -3
- package/src/sap/suite/ui/generic/template/ListReport/manifest.json +7 -2
- package/src/sap/suite/ui/generic/template/ListReport/view/fragments/HeaderCommands.fragment.xml +21 -15
- package/src/sap/suite/ui/generic/template/ListReport/view/fragments/SmartFilterBar.fragment.xml +1 -1
- package/src/sap/suite/ui/generic/template/ObjectPage/Component.js +0 -5
- package/src/sap/suite/ui/generic/template/ObjectPage/controller/ControllerImplementation.js +87 -36
- package/src/sap/suite/ui/generic/template/ObjectPage/controller/SectionTitleHandler.js +1 -1
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n.properties +6 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_ar.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_bg.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_ca.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_cnr.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_cs.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_cy.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_da.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_de.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_el.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_en.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_en_GB.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_en_US_sappsd.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_en_US_saprigi.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_es.properties +5 -1
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_es_MX.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_et.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_fi.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_fr.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_fr_CA.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_hi.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_hr.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_hu.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_id.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_it.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_iw.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_ja.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_kk.properties +30 -26
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_ko.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_lt.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_lv.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_mk.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_ms.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_nl.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_no.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_pl.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_pt.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_pt_PT.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_ro.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_ru.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_sh.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_sk.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_sl.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_sr.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_sv.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_th.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_tr.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_uk.properties +8 -4
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_vi.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_zh_CN.properties +4 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_zh_TW.properties +8 -4
- package/src/sap/suite/ui/generic/template/ObjectPage/manifest.json +13 -5
- package/src/sap/suite/ui/generic/template/ObjectPage/templateSpecificPreparationHelper.js +2 -2
- package/src/sap/suite/ui/generic/template/ObjectPage/view/fragments/Actions.fragment.xml +1 -1
- package/src/sap/suite/ui/generic/template/ObjectPage/view/fragments/PageLevelCommands.fragment.xml +2 -0
- package/src/sap/suite/ui/generic/template/ObjectPage/view/fragments/SmartTableUiTableCommons.fragment.xml +1 -1
- package/src/sap/suite/ui/generic/template/QuickCreate/manifest.json +1 -1
- package/src/sap/suite/ui/generic/template/QuickView/manifest.json +1 -1
- package/src/sap/suite/ui/generic/template/designtime/controls/DynamicPage.designtime.js +39 -3
- package/src/sap/suite/ui/generic/template/designtime/controls/ObjectPageLayout.designtime.js +39 -5
- package/src/sap/suite/ui/generic/template/designtime/controls/SmartTable.designtime.js +17 -0
- package/src/sap/suite/ui/generic/template/detailTemplates/detailUtils.js +3 -2
- package/src/sap/suite/ui/generic/template/detailTemplates/i18n/i18n_es.properties +1 -1
- package/src/sap/suite/ui/generic/template/fragments/EasyFilter.fragment.xml +1 -0
- package/src/sap/suite/ui/generic/template/fragments/SmartTableUiTableCommons.fragment.xml +1 -0
- package/src/sap/suite/ui/generic/template/fragments/TableColumnListItem.fragment.xml +3 -0
- package/src/sap/suite/ui/generic/template/genericUtilities/controlHelper.js +3 -0
- package/src/sap/suite/ui/generic/template/genericUtilities/controlStateWrapperFactory/SmartTableChartCommon.js +7 -0
- package/src/sap/suite/ui/generic/template/genericUtilities/controlStateWrapperFactory/SmartVariantManagementWrapper.js +35 -43
- package/src/sap/suite/ui/generic/template/lib/AppComponent.js +20 -15
- package/src/sap/suite/ui/generic/template/lib/CommonEventHandlers.js +69 -0
- package/src/sap/suite/ui/generic/template/lib/CommonUtils.js +32 -1
- package/src/sap/suite/ui/generic/template/lib/ContextMenuHandler.js +45 -2
- package/src/sap/suite/ui/generic/template/lib/MessageUtils.js +1 -0
- package/src/sap/suite/ui/generic/template/lib/ai/EasyFill/EasyFillAIOrchestrator.js +127 -8
- package/src/sap/suite/ui/generic/template/lib/ai/EasyFill/EasyFillApplyHandler.js +9 -1
- package/src/sap/suite/ui/generic/template/lib/ai/EasyFill/EasyFillDialogController.js +234 -13
- package/src/sap/suite/ui/generic/template/lib/ai/EasyFill/EasyFillFileHandler.js +218 -0
- package/src/sap/suite/ui/generic/template/lib/ai/EasyFill/EasyFillFormRenderer.js +6 -2
- package/src/sap/suite/ui/generic/template/lib/ai/EasyFill/EasyFillHandler.js +162 -5
- package/src/sap/suite/ui/generic/template/lib/ai/EasyFill/fragments/EasyFillDialog.fragment.xml +193 -30
- package/src/sap/suite/ui/generic/template/lib/ai/EasyFilterBarHandler.js +581 -26
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n.properties +60 -0
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_ar.properties +42 -2
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_bg.properties +43 -3
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_ca.properties +42 -2
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_cnr.properties +42 -2
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_cs.properties +40 -0
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_cy.properties +44 -4
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_da.properties +44 -4
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_de.properties +42 -2
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_el.properties +42 -2
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_en.properties +40 -0
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_en_GB.properties +40 -0
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_en_US_sappsd.properties +40 -0
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_en_US_saprigi.properties +40 -0
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_es.properties +44 -4
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_es_MX.properties +40 -0
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_et.properties +43 -3
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_fi.properties +42 -2
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_fr.properties +40 -0
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_fr_CA.properties +44 -4
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_hi.properties +43 -3
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_hr.properties +42 -2
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_hu.properties +43 -3
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_id.properties +42 -2
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_it.properties +42 -2
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_iw.properties +42 -2
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_ja.properties +43 -3
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_kk.properties +42 -2
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_ko.properties +42 -2
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_lt.properties +42 -2
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_lv.properties +42 -2
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_mk.properties +44 -4
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_ms.properties +43 -3
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_nl.properties +42 -2
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_no.properties +42 -2
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_pl.properties +42 -2
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_pt.properties +42 -2
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_pt_PT.properties +44 -4
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_ro.properties +40 -0
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_ru.properties +40 -0
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_sh.properties +42 -2
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_sk.properties +42 -2
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_sl.properties +42 -2
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_sr.properties +42 -2
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_sv.properties +42 -2
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_th.properties +44 -4
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_tr.properties +43 -3
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_uk.properties +40 -0
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_vi.properties +43 -3
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_zh_CN.properties +42 -2
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_zh_TW.properties +44 -4
- package/src/sap/suite/ui/generic/template/lib/navigation/NavigationController.js +27 -7
- package/src/sap/suite/ui/generic/template/library.js +1 -1
- package/src/sap/suite/ui/generic/template/listTemplates/fragments/DetailSmartTable.fragment.xml +3 -0
- package/src/sap/suite/ui/generic/template/listTemplates/fragments/TableCommands.fragment.xml +23 -19
- package/src/sap/suite/ui/generic/template/themes/base/ObjectPage.less +265 -0
- package/src/sap/suite/ui/generic/template/themes/sap_belize_base/ObjectPage.less +9 -0
- package/src/sap/suite/ui/generic/template/themes/sap_bluecrystal_base/ObjectPage.less +9 -0
- package/src/sap/suite/ui/generic/template/themes/sap_hcb/base_ObjectPage.less +9 -0
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
sap.ui.define([
|
|
2
|
+
"sap/base/Log",
|
|
3
|
+
"sap/m/MessageBox"
|
|
4
|
+
], function(Log, MessageBox) {
|
|
5
|
+
"use strict";
|
|
6
|
+
|
|
7
|
+
var sClassName = "lib.ai.EasyFill.EasyFillFileHandler";
|
|
8
|
+
|
|
9
|
+
// Browser-reported MIME types vary wildly across OS/browser combinations for the very same
|
|
10
|
+
// file (e.g. a .csv is "application/vnd.ms-excel" on Windows+Excel, "application/csv" elsewhere,
|
|
11
|
+
// or "" when nothing is registered). The file extension is the authoritative gate (findHandler),
|
|
12
|
+
// so these are the types we additionally treat as "text-like" when a type IS reported.
|
|
13
|
+
var VENDOR_TEXT_MIME_TYPES = {
|
|
14
|
+
"application/csv": true,
|
|
15
|
+
"application/vnd.ms-excel": true
|
|
16
|
+
};
|
|
17
|
+
var BINARY_MIME_TYPE = "application/octet-stream";
|
|
18
|
+
|
|
19
|
+
var FILE_HANDLERS = [
|
|
20
|
+
{
|
|
21
|
+
extensions: [".txt", ".csv"],
|
|
22
|
+
handle: _handleTextFileImport
|
|
23
|
+
}
|
|
24
|
+
];
|
|
25
|
+
|
|
26
|
+
// ─── File Validation ──────────────────────────────────────────────────────
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Decides whether a file whose extension already matched a handler should be accepted
|
|
30
|
+
* based on its (unreliable) browser-reported MIME type.
|
|
31
|
+
*
|
|
32
|
+
* The extension is the authoritative gate, so an absent/binary/vendor type is accepted —
|
|
33
|
+
* only a type that is explicitly a different, non-text category (e.g. "image/png") is rejected.
|
|
34
|
+
*
|
|
35
|
+
* @param {File} oFile
|
|
36
|
+
* @returns {boolean}
|
|
37
|
+
*/
|
|
38
|
+
function _isMimeTypeAcceptable(oFile) {
|
|
39
|
+
var sMimeType = oFile.type;
|
|
40
|
+
// No type reported, or generic binary — common for .txt/.csv; trust the extension.
|
|
41
|
+
if (!sMimeType || sMimeType === BINARY_MIME_TYPE) {
|
|
42
|
+
Log.warning(sClassName + ": file " + oFile.name + " has no/binary MIME type; accepting on extension");
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
if (sMimeType.indexOf("text/") === 0 || VENDOR_TEXT_MIME_TYPES[sMimeType]) {
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
Log.warning(sClassName + ": file " + oFile.name + " has non-text MIME type: " + sMimeType);
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// ─── File Type Handlers ───────────────────────────────────────────────────
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Reads a TXT or CSV file as text and reports progress/result via callbacks.
|
|
56
|
+
* No user-facing messages are shown here — the caller owns localized feedback.
|
|
57
|
+
* @param {File} oFile
|
|
58
|
+
* @param {{ onTextImported: function, onValidationError: function, onReadError: function(string=), onProgress: function }} oCallbacks
|
|
59
|
+
* onReadError receives "empty" when the file is empty, "read" on a read failure.
|
|
60
|
+
*/
|
|
61
|
+
function _handleTextFileImport(oFile, oCallbacks) {
|
|
62
|
+
if (!_isMimeTypeAcceptable(oFile)) {
|
|
63
|
+
Log.error(sClassName + ": file validation failed for " + oFile.name);
|
|
64
|
+
if (oCallbacks.onValidationError) { oCallbacks.onValidationError("invalidType"); }
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
var oReader = new FileReader();
|
|
69
|
+
oReader.onprogress = function(oEvent) {
|
|
70
|
+
if (oEvent.lengthComputable && oCallbacks.onProgress) {
|
|
71
|
+
oCallbacks.onProgress(Math.round((oEvent.loaded / oEvent.total) * 100));
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
oReader.onload = function(oEvent) {
|
|
75
|
+
if (oCallbacks.onProgress) { oCallbacks.onProgress(100); }
|
|
76
|
+
var sText = oEvent.target && oEvent.target.result;
|
|
77
|
+
if (!sText) {
|
|
78
|
+
Log.error(sClassName + ": text file is empty");
|
|
79
|
+
if (oCallbacks.onReadError) { oCallbacks.onReadError("empty"); }
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
Log.info(sClassName + ": text file parsed successfully");
|
|
83
|
+
oCallbacks.onTextImported(sText);
|
|
84
|
+
};
|
|
85
|
+
oReader.onerror = function() {
|
|
86
|
+
Log.error(sClassName + ": failed to read text file");
|
|
87
|
+
if (oCallbacks.onReadError) { oCallbacks.onReadError("read"); }
|
|
88
|
+
};
|
|
89
|
+
oReader.readAsText(oFile);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// ─── Public API ───────────────────────────────────────────────────────────
|
|
93
|
+
|
|
94
|
+
return {
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Finds the handler entry for the given file name based on its extension.
|
|
98
|
+
* @param {string} sFileName
|
|
99
|
+
* @returns {{ extensions: string[], handle: function } | undefined}
|
|
100
|
+
*/
|
|
101
|
+
findHandler: function(sFileName) {
|
|
102
|
+
var sLower = sFileName.toLowerCase();
|
|
103
|
+
return FILE_HANDLERS.find(function(oHandler) {
|
|
104
|
+
return oHandler.extensions.some(function(sExt) { return sLower.endsWith(sExt); });
|
|
105
|
+
});
|
|
106
|
+
},
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Detects the file type ("csv" or "txt") from the file name.
|
|
110
|
+
* @param {string} sFileName
|
|
111
|
+
* @returns {"csv" | "txt" | "none"}
|
|
112
|
+
*/
|
|
113
|
+
getFileType: function(sFileName) {
|
|
114
|
+
if (!sFileName) { return "none"; }
|
|
115
|
+
var sLower = sFileName.toLowerCase();
|
|
116
|
+
if (sLower.endsWith(".csv")) { return "csv"; }
|
|
117
|
+
if (sLower.endsWith(".txt")) { return "txt"; }
|
|
118
|
+
return "none";
|
|
119
|
+
},
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Shows a confirmation dialog before removing a file.
|
|
123
|
+
* Calls fnOnConfirm only when the user clicks OK.
|
|
124
|
+
* @param {string} sConfirmText - i18n message to display
|
|
125
|
+
* @param {function} fnOnConfirm - callback invoked on confirmation
|
|
126
|
+
*/
|
|
127
|
+
confirmFileRemoval: function(sConfirmText, fnOnConfirm) {
|
|
128
|
+
MessageBox.confirm(sConfirmText, {
|
|
129
|
+
onClose: function(sAction) {
|
|
130
|
+
if (sAction === MessageBox.Action.OK) {
|
|
131
|
+
fnOnConfirm();
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
},
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Parses a CSV/TSV text string into { headers: string[], rows: string[][] }.
|
|
139
|
+
* Auto-detects comma vs. semicolon vs. tab as separator and honours double-quoted
|
|
140
|
+
* fields (separators inside quotes are literal; "" is an escaped quote).
|
|
141
|
+
* @param {string} sText
|
|
142
|
+
* @returns {{ headers: string[], rows: string[][] }}
|
|
143
|
+
*/
|
|
144
|
+
parseCSV: function(sText) {
|
|
145
|
+
if (!sText) { return { headers: [], rows: [] }; }
|
|
146
|
+
var aLines = sText.split(/\r?\n/).filter(function(sLine) { return sLine.trim() !== ""; });
|
|
147
|
+
if (!aLines.length) { return { headers: [], rows: [] }; }
|
|
148
|
+
|
|
149
|
+
// Auto-detect separator: tab > semicolon > comma
|
|
150
|
+
var sSep = ",";
|
|
151
|
+
var sFirst = aLines[0];
|
|
152
|
+
if (sFirst.indexOf("\t") !== -1) {
|
|
153
|
+
sSep = "\t";
|
|
154
|
+
} else if (sFirst.indexOf(";") !== -1) {
|
|
155
|
+
sSep = ";";
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// Quote-aware single-line splitter: a separator inside double quotes is part of the
|
|
159
|
+
// field, and a doubled quote ("") inside a quoted field is a literal quote.
|
|
160
|
+
function splitLine(sLine) {
|
|
161
|
+
var aFields = [];
|
|
162
|
+
var sField = "";
|
|
163
|
+
var bInQuotes = false;
|
|
164
|
+
for (var i = 0; i < sLine.length; i++) {
|
|
165
|
+
var c = sLine.charAt(i);
|
|
166
|
+
if (c === '"') {
|
|
167
|
+
if (bInQuotes && sLine.charAt(i + 1) === '"') {
|
|
168
|
+
sField += '"';
|
|
169
|
+
i++; // skip the escaped quote
|
|
170
|
+
} else {
|
|
171
|
+
bInQuotes = !bInQuotes;
|
|
172
|
+
}
|
|
173
|
+
} else if (c === sSep && !bInQuotes) {
|
|
174
|
+
aFields.push(sField.trim());
|
|
175
|
+
sField = "";
|
|
176
|
+
} else {
|
|
177
|
+
sField += c;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
aFields.push(sField.trim());
|
|
181
|
+
return aFields;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
var aHeaders = splitLine(aLines[0]);
|
|
185
|
+
var aRows = aLines.slice(1).map(splitLine);
|
|
186
|
+
return { headers: aHeaders, rows: aRows };
|
|
187
|
+
},
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Formats a byte size into a human-readable string (e.g. "1.2 KB").
|
|
191
|
+
* @param {number} iBytes
|
|
192
|
+
* @returns {string}
|
|
193
|
+
*/
|
|
194
|
+
formatFileSize: function(iBytes) {
|
|
195
|
+
if (!iBytes || iBytes < 0) { return "0 B"; }
|
|
196
|
+
if (iBytes < 1024) { return iBytes + " B"; }
|
|
197
|
+
if (iBytes < 1024 * 1024) { return (iBytes / 1024).toFixed(1) + " KB"; }
|
|
198
|
+
return (iBytes / (1024 * 1024)).toFixed(1) + " MB";
|
|
199
|
+
},
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Entry point: validates the file and runs the appropriate handler.
|
|
203
|
+
* Reports failures via oCallbacks.onValidationError (no user-facing message is shown here —
|
|
204
|
+
* the caller owns localized feedback).
|
|
205
|
+
* @param {File} oFile
|
|
206
|
+
* @param {{ onTextImported: function, onValidationError: function, onReadError: function, onProgress: function }} oCallbacks
|
|
207
|
+
*/
|
|
208
|
+
importFile: function(oFile, oCallbacks) {
|
|
209
|
+
var oHandler = this.findHandler(oFile.name);
|
|
210
|
+
if (!oHandler) {
|
|
211
|
+
Log.error(sClassName + ": unsupported file type: " + oFile.name);
|
|
212
|
+
if (oCallbacks.onValidationError) { oCallbacks.onValidationError("unsupported"); }
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
oHandler.handle(oFile, oCallbacks);
|
|
216
|
+
}
|
|
217
|
+
};
|
|
218
|
+
});
|
|
@@ -184,7 +184,8 @@ sap.ui.define([
|
|
|
184
184
|
// "Original Value:" text shown for all fields (editable and non-editable)
|
|
185
185
|
var oOriginalValueText = new Text({
|
|
186
186
|
text: sOriginalValueLabel + " " + sCurrentValue,
|
|
187
|
-
wrapping: false
|
|
187
|
+
wrapping: false,
|
|
188
|
+
tooltip: sOriginalValueLabel + " " + sCurrentValue
|
|
188
189
|
}).addStyleClass("sapEasyFillPreviouslyLabel");
|
|
189
190
|
oGroupElement.addElement(oOriginalValueText);
|
|
190
191
|
|
|
@@ -214,7 +215,10 @@ sap.ui.define([
|
|
|
214
215
|
text: sProposedValueLabel + " " + sAIDisplayValue,
|
|
215
216
|
wrapping: false,
|
|
216
217
|
visible: false,
|
|
217
|
-
icon: "sap-icon://ai"
|
|
218
|
+
icon: "sap-icon://ai",
|
|
219
|
+
width: "100%",
|
|
220
|
+
tooltip: sProposedValueLabel + " " + sAIDisplayValue,
|
|
221
|
+
layoutData: new ColumnElementData({ cellsSmall: 12, cellsLarge: 12 })
|
|
218
222
|
}).addStyleClass("sapEasyFillProposedValueLink");
|
|
219
223
|
|
|
220
224
|
// Revert button: State 1 → State 2
|
|
@@ -8,7 +8,8 @@ sap.ui.define([
|
|
|
8
8
|
"sap/suite/ui/generic/template/lib/ai/EasyFill/EasyFillFormRenderer",
|
|
9
9
|
"sap/suite/ui/generic/template/lib/ai/EasyFill/EasyFillTableRenderer",
|
|
10
10
|
"sap/suite/ui/generic/template/lib/ai/EasyFill/EasyFillApplyHandler",
|
|
11
|
-
"sap/suite/ui/generic/template/lib/ai/EasyFill/EasyFillDialogController"
|
|
11
|
+
"sap/suite/ui/generic/template/lib/ai/EasyFill/EasyFillDialogController",
|
|
12
|
+
"sap/suite/ui/generic/template/lib/ai/EasyFill/EasyFillFileHandler"
|
|
12
13
|
], function(
|
|
13
14
|
BaseObject,
|
|
14
15
|
extend,
|
|
@@ -19,7 +20,8 @@ sap.ui.define([
|
|
|
19
20
|
EasyFillFormRenderer,
|
|
20
21
|
EasyFillTableRenderer,
|
|
21
22
|
EasyFillApplyHandler,
|
|
22
|
-
EasyFillDialogController
|
|
23
|
+
EasyFillDialogController,
|
|
24
|
+
EasyFillFileHandler
|
|
23
25
|
) {
|
|
24
26
|
"use strict";
|
|
25
27
|
|
|
@@ -60,6 +62,9 @@ sap.ui.define([
|
|
|
60
62
|
// including extension fragment fields and custom fields.
|
|
61
63
|
var oOPStructureMap = null;
|
|
62
64
|
var mLiveEditable = null;
|
|
65
|
+
// Stores the text extracted from an imported file (TXT/CSV).
|
|
66
|
+
// When non-null, this is sent to the AI instead of the textarea value.
|
|
67
|
+
var sImportedFileText = null;
|
|
63
68
|
|
|
64
69
|
// Collection state — tracks OData row contexts and property metadata for SmartTable collections
|
|
65
70
|
var mCollectionState = {
|
|
@@ -110,6 +115,13 @@ sap.ui.define([
|
|
|
110
115
|
* @returns {object} handler/formatter map
|
|
111
116
|
*/
|
|
112
117
|
function _buildDialogHandlers() {
|
|
118
|
+
// Shared text-imported callback: sets sImportedFileText and re-renders preview.
|
|
119
|
+
// Used by both the FileUploader change handler and the drop handler.
|
|
120
|
+
function fnOnTextImported(sText) {
|
|
121
|
+
sImportedFileText = sText;
|
|
122
|
+
EasyFillDialogController.renderFilePreview(oController, EasyFillFileHandler, sImportedFileText);
|
|
123
|
+
}
|
|
124
|
+
|
|
113
125
|
return {
|
|
114
126
|
// ── Layout mode toggle (Condensed ↔ ObjectPage view) ──────────────
|
|
115
127
|
// After the sections binding is refreshed, SmartForms for the new mode
|
|
@@ -221,6 +233,145 @@ sap.ui.define([
|
|
|
221
233
|
// ── AI Notice popover ─────────────────────────────────────────────
|
|
222
234
|
onLinkPress: async function(oEvent) {
|
|
223
235
|
await EasyFillDialogController.onLinkPress(oEvent, oTemplateUtils, oAIPopoverRef);
|
|
236
|
+
},
|
|
237
|
+
|
|
238
|
+
// ── File import: FileUploader change event ────────────────────────
|
|
239
|
+
onFileUploaderChange: function(oEvent) {
|
|
240
|
+
EasyFillDialogController.onFileUploaderChange(
|
|
241
|
+
oEvent, oController, oRb, EasyFillFileHandler, fnOnTextImported
|
|
242
|
+
);
|
|
243
|
+
},
|
|
244
|
+
|
|
245
|
+
// ── File import: FileUploader rejected the chosen file by extension ──
|
|
246
|
+
onFileTypeMismatch: function() {
|
|
247
|
+
EasyFillDialogController.showFileTypeError(oRb);
|
|
248
|
+
},
|
|
249
|
+
|
|
250
|
+
// ── File discard: removes the imported file and restores the input area ──
|
|
251
|
+
onDiscardImportedFile: function() {
|
|
252
|
+
EasyFillFileHandler.confirmFileRemoval(oRb.getText("EASY_FILL_REMOVE_FILE_CONFIRM"), function() {
|
|
253
|
+
sImportedFileText = null;
|
|
254
|
+
EasyFillDialogController.resetFileState(oController);
|
|
255
|
+
var oDialogModel = oController.getView().getModel("easyFillDialogModel");
|
|
256
|
+
if (oDialogModel) {
|
|
257
|
+
oDialogModel.setProperty("/isEasyFillButtonEnabled", false);
|
|
258
|
+
}
|
|
259
|
+
});
|
|
260
|
+
},
|
|
261
|
+
|
|
262
|
+
// ── Table/text view toggle for CSV preview ───────────────────────────
|
|
263
|
+
onFilePreviewModeChange: function(oEvent) {
|
|
264
|
+
var oDialogModel = oController.getView().getModel("easyFillDialogModel");
|
|
265
|
+
var sSelectedKey = oEvent.getParameter("item").getKey();
|
|
266
|
+
oDialogModel.setProperty("/selectedFilePreviewMode", sSelectedKey);
|
|
267
|
+
EasyFillDialogController.renderFilePreview(oController, EasyFillFileHandler, sImportedFileText);
|
|
268
|
+
},
|
|
269
|
+
|
|
270
|
+
// ── Drag-and-drop: wire native drop events after dialog opens ────────
|
|
271
|
+
// Uses addEventDelegate({onAfterRendering}) on the SAPUI5 control so that
|
|
272
|
+
// drop handlers are re-attached each time the DOM element is re-created.
|
|
273
|
+
// This is necessary because EasyFillInputContainer is hidden (visible=false)
|
|
274
|
+
// when a file is uploaded and shown again on Clear All, which destroys and
|
|
275
|
+
// recreates the DOM element — exactly the V4 approach.
|
|
276
|
+
_onAfterOpen: function() {
|
|
277
|
+
var oInputContainer = oController.byId("EasyFillInputContainer");
|
|
278
|
+
if (!oInputContainer) { return; }
|
|
279
|
+
|
|
280
|
+
function attachDropHandlers() {
|
|
281
|
+
var oDomRef = oInputContainer.getDomRef();
|
|
282
|
+
if (!oDomRef || oDomRef.dataset["dropInitialized"]) { return; }
|
|
283
|
+
oDomRef.dataset["dropInitialized"] = "true";
|
|
284
|
+
|
|
285
|
+
var iDragDepth = 0;
|
|
286
|
+
|
|
287
|
+
function isFileDrag(oDragEvent) {
|
|
288
|
+
var oTransfer = oDragEvent.dataTransfer;
|
|
289
|
+
return !!(oTransfer && Array.prototype.indexOf.call(oTransfer.types, "Files") !== -1);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
function resetDragState() {
|
|
293
|
+
iDragDepth = 0;
|
|
294
|
+
oDomRef.classList.remove("sapSmartTemplatesObjectPageEasyFillInputContainerDropDisabled");
|
|
295
|
+
oController.getView().getModel("easyFillDialogModel").setProperty("/isDragging", false);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
oDomRef.addEventListener("dragenter", function(oDragEvent) {
|
|
299
|
+
if (!isFileDrag(oDragEvent)) { return; }
|
|
300
|
+
oDragEvent.preventDefault();
|
|
301
|
+
iDragDepth++;
|
|
302
|
+
});
|
|
303
|
+
|
|
304
|
+
oDomRef.addEventListener("dragover", function(oDragEvent) {
|
|
305
|
+
if (!isFileDrag(oDragEvent)) { return; }
|
|
306
|
+
oDragEvent.preventDefault();
|
|
307
|
+
var oDialogModel = oController.getView().getModel("easyFillDialogModel");
|
|
308
|
+
var bBlocked = !!oDialogModel.getProperty("/uploadedFileName") ||
|
|
309
|
+
!!oDialogModel.getProperty("/hasEnteredText");
|
|
310
|
+
if (oDragEvent.dataTransfer) {
|
|
311
|
+
oDragEvent.dataTransfer.dropEffect = bBlocked ? "none" : "copy";
|
|
312
|
+
}
|
|
313
|
+
if (bBlocked) {
|
|
314
|
+
oDomRef.classList.add("sapSmartTemplatesObjectPageEasyFillInputContainerDropDisabled");
|
|
315
|
+
} else {
|
|
316
|
+
oDomRef.classList.remove("sapSmartTemplatesObjectPageEasyFillInputContainerDropDisabled");
|
|
317
|
+
}
|
|
318
|
+
oDialogModel.setProperty("/isDragging", true);
|
|
319
|
+
});
|
|
320
|
+
|
|
321
|
+
oDomRef.addEventListener("dragleave", function(oDragEvent) {
|
|
322
|
+
if (!isFileDrag(oDragEvent)) { return; }
|
|
323
|
+
iDragDepth = Math.max(0, iDragDepth - 1);
|
|
324
|
+
if (iDragDepth === 0) {
|
|
325
|
+
oDomRef.classList.remove("sapSmartTemplatesObjectPageEasyFillInputContainerDropDisabled");
|
|
326
|
+
oController.getView().getModel("easyFillDialogModel").setProperty("/isDragging", false);
|
|
327
|
+
}
|
|
328
|
+
});
|
|
329
|
+
|
|
330
|
+
oDomRef.addEventListener("drop", function(oDragEvent) {
|
|
331
|
+
oDragEvent.preventDefault();
|
|
332
|
+
oDragEvent.stopPropagation();
|
|
333
|
+
resetDragState();
|
|
334
|
+
|
|
335
|
+
var oDialogModel = oController.getView().getModel("easyFillDialogModel");
|
|
336
|
+
if (oDialogModel.getProperty("/uploadedFileName") ||
|
|
337
|
+
oDialogModel.getProperty("/hasEnteredText")) { return; }
|
|
338
|
+
|
|
339
|
+
var oTransfer = oDragEvent.dataTransfer;
|
|
340
|
+
var aDropped = oTransfer && oTransfer.files
|
|
341
|
+
? Array.prototype.slice.call(oTransfer.files) : [];
|
|
342
|
+
if (aDropped.length === 0) { return; }
|
|
343
|
+
|
|
344
|
+
var aSupported = aDropped.filter(function(oFile) {
|
|
345
|
+
return !!EasyFillFileHandler.findHandler(oFile.name);
|
|
346
|
+
});
|
|
347
|
+
|
|
348
|
+
if (aSupported.length === 0) {
|
|
349
|
+
EasyFillDialogController.showFileUploadError(oRb,
|
|
350
|
+
oRb.getText("EASY_FILL_UPLOAD_UNSUPPORTED_FILE_ERROR"));
|
|
351
|
+
return;
|
|
352
|
+
}
|
|
353
|
+
if (aSupported.length > 1) {
|
|
354
|
+
EasyFillDialogController.showFileUploadError(oRb,
|
|
355
|
+
oRb.getText("EASY_FILL_UPLOAD_SINGLE_FILE_ONLY_ERROR"));
|
|
356
|
+
return;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
var oFile = aSupported[0];
|
|
360
|
+
// Shared accept path: metadata-set + read + length cap + persistent error feedback.
|
|
361
|
+
EasyFillDialogController.acceptFile(oController, oRb, EasyFillFileHandler, oFile, fnOnTextImported);
|
|
362
|
+
});
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
// Add the onAfterRendering delegate once per container instance. The dialog is
|
|
366
|
+
// kept alive across opens (keepAlive), so a fresh delegate on every open would
|
|
367
|
+
// accumulate; the flag below ensures a single registration. attachDropHandlers()
|
|
368
|
+
// itself is idempotent via the dataset guard and re-binds after DOM re-creation.
|
|
369
|
+
if (!oInputContainer._easyFillDropDelegateAdded) {
|
|
370
|
+
oInputContainer.addEventDelegate({ onAfterRendering: attachDropHandlers });
|
|
371
|
+
oInputContainer._easyFillDropDelegateAdded = true;
|
|
372
|
+
}
|
|
373
|
+
// Attach immediately for the current render (dialog is already open)
|
|
374
|
+
attachDropHandlers();
|
|
224
375
|
}
|
|
225
376
|
};
|
|
226
377
|
}
|
|
@@ -264,9 +415,10 @@ sap.ui.define([
|
|
|
264
415
|
oObjectPageContext, EasyFillFieldCollector, mCollectionState
|
|
265
416
|
);
|
|
266
417
|
|
|
267
|
-
// Submit to AI
|
|
418
|
+
// Submit to AI — prefer imported file text over the textarea value
|
|
419
|
+
var sUserInput = sImportedFileText || oController.byId("EasyFillInputTextArea").getValue();
|
|
268
420
|
var aiCallResult = await EasyFillAIOrchestrator.submitToAI(
|
|
269
|
-
|
|
421
|
+
sUserInput,
|
|
270
422
|
mFieldMapping,
|
|
271
423
|
oTemplateUtils
|
|
272
424
|
);
|
|
@@ -519,7 +671,7 @@ sap.ui.define([
|
|
|
519
671
|
* Resets the EasyFill dialog to its initial state.
|
|
520
672
|
* Delegates to EasyFillApplyHandler.resetEasyFill with the current state references.
|
|
521
673
|
*
|
|
522
|
-
* @param {boolean} [bRemoveTextAreaValue=false] - if true, also clears the text area input
|
|
674
|
+
* @param {boolean} [bRemoveTextAreaValue=false] - if true, also clears the text area input and resets all file import state (sImportedFileText, file model properties)
|
|
523
675
|
*/
|
|
524
676
|
function _resetEasyFill(bRemoveTextAreaValue) {
|
|
525
677
|
mLastFieldMapping = null;
|
|
@@ -541,6 +693,11 @@ sap.ui.define([
|
|
|
541
693
|
oTransientContextForEasyFill = null;
|
|
542
694
|
}
|
|
543
695
|
);
|
|
696
|
+
// Clear file import state on Clear All / Cancel
|
|
697
|
+
if (bRemoveTextAreaValue) {
|
|
698
|
+
sImportedFileText = null;
|
|
699
|
+
EasyFillDialogController.resetFileState(oController);
|
|
700
|
+
}
|
|
544
701
|
}
|
|
545
702
|
|
|
546
703
|
/**
|