@sapui5/sap.fe.core 1.96.4 → 1.99.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 +6 -5
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AnnotationHelper.js +377 -405
- package/src/sap/fe/core/AnnotationHelper.ts +385 -0
- package/src/sap/fe/core/AppComponent.js +5 -3
- package/src/sap/fe/core/AppStateHandler.js +229 -195
- package/src/sap/fe/core/AppStateHandler.ts +171 -0
- package/src/sap/fe/core/BaseController.js +3 -2
- package/src/sap/fe/core/BusyLocker.js +105 -121
- package/src/sap/fe/core/BusyLocker.ts +98 -0
- package/src/sap/fe/core/CommonUtils.js +2073 -2606
- package/src/sap/fe/core/CommonUtils.ts +2078 -0
- package/src/sap/fe/core/ExtensionAPI.js +16 -7
- package/src/sap/fe/core/PageController.js +84 -119
- package/src/sap/fe/core/PageController.ts +101 -0
- package/src/sap/fe/core/RouterProxy.js +986 -809
- package/src/sap/fe/core/RouterProxy.ts +838 -0
- package/src/sap/fe/core/Synchronization.js +51 -35
- package/src/sap/fe/core/Synchronization.ts +29 -0
- package/src/sap/fe/core/TemplateComponent.js +173 -155
- package/src/sap/fe/core/TemplateComponent.ts +166 -0
- package/src/sap/fe/core/TemplateModel.js +97 -54
- package/src/sap/fe/core/TemplateModel.ts +63 -0
- package/src/sap/fe/core/TransactionHelper.js +1576 -1627
- package/src/sap/fe/core/TransactionHelper.ts +1706 -0
- package/src/sap/fe/core/actions/draft.js +559 -581
- package/src/sap/fe/core/actions/draft.ts +593 -0
- package/src/sap/fe/core/actions/messageHandling.js +545 -435
- package/src/sap/fe/core/actions/messageHandling.ts +532 -0
- package/src/sap/fe/core/actions/nonDraft.js +17 -19
- package/src/sap/fe/core/actions/nonDraft.ts +12 -0
- package/src/sap/fe/core/actions/operations.js +1074 -1192
- package/src/sap/fe/core/actions/operations.ts +1162 -0
- package/src/sap/fe/core/actions/sticky.js +102 -105
- package/src/sap/fe/core/actions/sticky.ts +102 -0
- package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +3 -2
- package/src/sap/fe/core/controllerextensions/EditFlow.js +235 -264
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +3 -2
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +288 -13
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +35 -25
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +79 -46
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +86 -10
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +109 -31
- package/src/sap/fe/core/controllerextensions/MassEdit.js +172 -0
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +237 -104
- package/src/sap/fe/core/controllerextensions/PageReady.js +3 -3
- package/src/sap/fe/core/controllerextensions/PageReady.ts +12 -8
- package/src/sap/fe/core/controllerextensions/Paginator.js +37 -9
- package/src/sap/fe/core/controllerextensions/Placeholder.js +8 -4
- package/src/sap/fe/core/controllerextensions/Routing.js +25 -5
- package/src/sap/fe/core/controllerextensions/RoutingListener.js +3 -2
- package/src/sap/fe/core/controllerextensions/Share.js +3 -2
- package/src/sap/fe/core/controllerextensions/SideEffects.js +9 -9
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +22 -21
- package/src/sap/fe/core/controllerextensions/ViewState.js +36 -8
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -1
- package/src/sap/fe/core/controls/CommandExecution.js +3 -2
- package/src/sap/fe/core/controls/ConditionalWrapper.js +3 -2
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +112 -113
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +9 -5
- package/src/sap/fe/core/controls/FieldWrapper.js +18 -23
- package/src/sap/fe/core/controls/FilterBar.js +3 -2
- package/src/sap/fe/core/controls/FormElementWrapper.js +3 -7
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +3 -2
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +2 -1
- package/src/sap/fe/core/controls/filterbar/FilterContainer.js +3 -2
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +5 -4
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -2
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +3 -2
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +106 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +79 -0
- package/src/sap/fe/core/converters/ConverterContext.js +14 -2
- package/src/sap/fe/core/converters/ConverterContext.ts +14 -3
- package/src/sap/fe/core/converters/ManifestSettings.js +2 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +8 -1
- package/src/sap/fe/core/converters/ManifestWrapper.js +56 -32
- package/src/sap/fe/core/converters/ManifestWrapper.ts +24 -6
- package/src/sap/fe/core/converters/MetaModelConverter.js +76 -6
- package/src/sap/fe/core/converters/MetaModelConverter.ts +79 -15
- package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
- package/src/sap/fe/core/converters/TemplateConverter.ts +2 -2
- package/src/sap/fe/core/converters/annotations/DataField.js +3 -3
- package/src/sap/fe/core/converters/annotations/DataField.ts +1 -1
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +85 -46
- package/src/sap/fe/core/converters/controls/Common/Action.js +16 -4
- package/src/sap/fe/core/converters/controls/Common/Action.ts +14 -5
- package/src/sap/fe/core/converters/controls/Common/Chart.js +5 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +11 -3
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +3 -3
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +2 -2
- package/src/sap/fe/core/converters/controls/Common/Form.js +60 -19
- package/src/sap/fe/core/converters/controls/Common/Form.ts +66 -14
- package/src/sap/fe/core/converters/controls/Common/KPI.js +69 -4
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +72 -0
- package/src/sap/fe/core/converters/controls/Common/Table.js +503 -399
- package/src/sap/fe/core/converters/controls/Common/Table.ts +615 -480
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +527 -0
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +655 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +489 -37
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +506 -58
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +2 -2
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +6 -6
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +9 -15
- package/src/sap/fe/core/converters/helpers/Aggregation.js +18 -3
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +28 -5
- package/src/sap/fe/core/converters/helpers/ID.js +9 -1
- package/src/sap/fe/core/converters/helpers/ID.ts +4 -0
- package/src/sap/fe/core/converters/helpers/IssueManager.js +7 -1
- package/src/sap/fe/core/converters/helpers/IssueManager.ts +6 -0
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +4 -4
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +3 -3
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +29 -11
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +36 -20
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +13 -3
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
- package/src/sap/fe/core/formatters/CriticalityFormatter.ts +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.ts +4 -10
- package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
- package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -1
- package/src/sap/fe/core/formatters/TableFormatter.js +65 -31
- package/src/sap/fe/core/formatters/TableFormatter.ts +62 -30
- package/src/sap/fe/core/formatters/ValueFormatter.js +30 -5
- package/src/sap/fe/core/formatters/ValueFormatter.ts +30 -7
- package/src/sap/fe/core/fpm/Component.js +3 -2
- package/src/sap/fe/core/helpers/AppStartupHelper.js +359 -0
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +391 -0
- package/src/sap/fe/core/helpers/BindingExpression.js +479 -464
- package/src/sap/fe/core/helpers/BindingExpression.ts +477 -483
- package/src/sap/fe/core/helpers/ClassSupport.js +27 -15
- package/src/sap/fe/core/helpers/ClassSupport.ts +31 -20
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +63 -59
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +56 -0
- package/src/sap/fe/core/helpers/EditState.js +81 -84
- package/src/sap/fe/core/helpers/EditState.ts +81 -0
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +62 -48
- package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +49 -0
- package/src/sap/fe/core/helpers/FPMHelper.js +52 -56
- package/src/sap/fe/core/helpers/FPMHelper.ts +62 -0
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +210 -0
- package/src/sap/fe/core/helpers/KeepAliveHelper.ts +202 -0
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +32 -0
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.ts +36 -0
- package/src/sap/fe/core/helpers/MassEditHelper.js +687 -0
- package/src/sap/fe/core/helpers/ModelHelper.js +229 -174
- package/src/sap/fe/core/helpers/ModelHelper.ts +227 -0
- package/src/sap/fe/core/helpers/PasteHelper.js +210 -132
- package/src/sap/fe/core/helpers/PasteHelper.ts +196 -0
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +332 -313
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +330 -0
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +66 -67
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +73 -0
- package/src/sap/fe/core/helpers/StableIdHelper.js +4 -7
- package/src/sap/fe/core/helpers/StableIdHelper.ts +2 -6
- package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -1
- package/src/sap/fe/core/library.js +30 -3
- package/src/sap/fe/core/library.support.js +12 -5
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +62 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +66 -0
- package/src/sap/fe/core/messagebundle.properties +72 -10
- package/src/sap/fe/core/messagebundle_ar.properties +41 -0
- package/src/sap/fe/core/messagebundle_bg.properties +41 -0
- package/src/sap/fe/core/messagebundle_ca.properties +41 -0
- package/src/sap/fe/core/messagebundle_cs.properties +42 -1
- package/src/sap/fe/core/messagebundle_cy.properties +41 -0
- package/src/sap/fe/core/messagebundle_da.properties +41 -0
- package/src/sap/fe/core/messagebundle_de.properties +41 -0
- package/src/sap/fe/core/messagebundle_el.properties +41 -0
- package/src/sap/fe/core/messagebundle_en.properties +41 -0
- package/src/sap/fe/core/messagebundle_en_GB.properties +41 -0
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +41 -0
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +35 -0
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +41 -0
- package/src/sap/fe/core/messagebundle_es.properties +41 -0
- package/src/sap/fe/core/messagebundle_es_MX.properties +41 -0
- package/src/sap/fe/core/messagebundle_et.properties +41 -0
- package/src/sap/fe/core/messagebundle_fi.properties +41 -0
- package/src/sap/fe/core/messagebundle_fr.properties +46 -5
- package/src/sap/fe/core/messagebundle_fr_CA.properties +41 -0
- package/src/sap/fe/core/messagebundle_hi.properties +41 -0
- package/src/sap/fe/core/messagebundle_hr.properties +41 -0
- package/src/sap/fe/core/messagebundle_hu.properties +42 -1
- package/src/sap/fe/core/messagebundle_id.properties +45 -4
- package/src/sap/fe/core/messagebundle_it.properties +41 -0
- package/src/sap/fe/core/messagebundle_iw.properties +41 -0
- package/src/sap/fe/core/messagebundle_ja.properties +50 -9
- package/src/sap/fe/core/messagebundle_kk.properties +41 -0
- package/src/sap/fe/core/messagebundle_ko.properties +41 -0
- package/src/sap/fe/core/messagebundle_lt.properties +41 -0
- package/src/sap/fe/core/messagebundle_lv.properties +41 -0
- package/src/sap/fe/core/messagebundle_ms.properties +41 -0
- package/src/sap/fe/core/messagebundle_nl.properties +41 -0
- package/src/sap/fe/core/messagebundle_no.properties +41 -0
- package/src/sap/fe/core/messagebundle_pl.properties +41 -0
- package/src/sap/fe/core/messagebundle_pt.properties +43 -2
- package/src/sap/fe/core/messagebundle_pt_PT.properties +41 -0
- package/src/sap/fe/core/messagebundle_ro.properties +41 -0
- package/src/sap/fe/core/messagebundle_ru.properties +41 -0
- package/src/sap/fe/core/messagebundle_sh.properties +41 -0
- package/src/sap/fe/core/messagebundle_sk.properties +41 -0
- package/src/sap/fe/core/messagebundle_sl.properties +41 -0
- package/src/sap/fe/core/messagebundle_sv.properties +42 -1
- package/src/sap/fe/core/messagebundle_th.properties +41 -0
- package/src/sap/fe/core/messagebundle_tr.properties +41 -0
- package/src/sap/fe/core/messagebundle_uk.properties +41 -0
- package/src/sap/fe/core/messagebundle_vi.properties +41 -0
- package/src/sap/fe/core/messagebundle_zh_CN.properties +41 -0
- package/src/sap/fe/core/messagebundle_zh_TW.properties +41 -0
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +269 -202
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +212 -0
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +4 -3
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +9 -5
- package/src/sap/fe/core/services/NavigationServiceFactory.js +406 -300
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +316 -0
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +149 -81
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +80 -0
- package/src/sap/fe/core/services/RoutingServiceFactory.js +987 -1166
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +898 -0
- package/src/sap/fe/core/services/ShellServicesFactory.js +31 -2
- package/src/sap/fe/core/services/ShellServicesFactory.ts +45 -11
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +41 -84
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +56 -99
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +461 -478
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +453 -0
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +10 -8
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +8 -0
- package/src/sap/fe/core/support/AnnotationIssue.support.js +15 -3
- package/src/sap/fe/core/support/AnnotationIssue.support.ts +16 -2
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +2 -2
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.ts +1 -1
- package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +38 -0
- package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.ts +18 -0
- package/src/sap/fe/core/templating/DataModelPathHelper.js +6 -24
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +10 -23
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +114 -0
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +86 -0
- package/src/sap/fe/core/templating/EntitySetHelper.js +80 -7
- package/src/sap/fe/core/templating/EntitySetHelper.ts +42 -2
- package/src/sap/fe/core/templating/FieldControlHelper.js +8 -8
- package/src/sap/fe/core/templating/FieldControlHelper.ts +25 -7
- package/src/sap/fe/core/templating/FilterHelper.js +139 -70
- package/src/sap/fe/core/templating/FilterHelper.ts +140 -70
- package/src/sap/fe/core/templating/PropertyHelper.js +2 -2
- package/src/sap/fe/core/templating/PropertyHelper.ts +1 -1
- package/src/sap/fe/core/templating/UIFormatters.js +45 -113
- package/src/sap/fe/core/templating/UIFormatters.ts +39 -76
- package/src/sap/fe/core/type/Email.js +1 -1
- package/src/sap/fe/core/type/Email.ts +4 -6
- package/ui5.yaml +0 -3
|
@@ -1,17 +1,23 @@
|
|
|
1
|
-
import
|
|
1
|
+
import ControllerExtension from "sap/ui/core/mvc/ControllerExtension";
|
|
2
2
|
import { ControllerExtensionMetadata } from "sap/fe/core/controllerextensions";
|
|
3
3
|
import { UI5Class, Override, Public } from "../helpers/ClassSupport";
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
4
|
+
import JSONModel from "sap/ui/model/json/JSONModel";
|
|
5
|
+
import ODataModel from "sap/ui/model/odata/v4/ODataModel";
|
|
6
|
+
import Context from "sap/ui/model/odata/v4/Context";
|
|
7
|
+
import Log from "sap/base/Log";
|
|
8
|
+
import { KPIChartDefinition, KPIDefinition, NavigationInfo } from "sap/fe/core/converters/controls/Common/KPI";
|
|
8
9
|
import { BaseController } from "sap/fe/core";
|
|
9
10
|
import { MessageType } from "sap/fe/core/formatters/TableFormatterTypes";
|
|
10
11
|
import { FilterDefinition, RangeDefinition } from "sap/fe/core/converters/helpers/SelectionVariantHelper";
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
import
|
|
12
|
+
import NumberFormat from "sap/ui/core/format/NumberFormat";
|
|
13
|
+
import DateFormat from "sap/ui/core/format/DateFormat";
|
|
14
|
+
import Locale from "sap/ui/core/Locale";
|
|
15
|
+
import Filter from "sap/ui/model/Filter";
|
|
16
|
+
import FilterOperator from "sap/ui/model/FilterOperator";
|
|
17
|
+
import Sorter from "sap/ui/model/Sorter";
|
|
18
|
+
import GenericTag from "sap/m/GenericTag";
|
|
19
|
+
import Popover from "sap/m/Popover";
|
|
20
|
+
import ResourceBundle from "sap/base/i18n/ResourceBundle";
|
|
15
21
|
|
|
16
22
|
const MessageTypeFromCriticality: Record<string, MessageType> = {
|
|
17
23
|
"1": MessageType.Error,
|
|
@@ -211,7 +217,7 @@ function getFilterStringFromDefinition(filterDefinition: FilterDefinition): stri
|
|
|
211
217
|
.getConfiguration()
|
|
212
218
|
.getLanguage()
|
|
213
219
|
);
|
|
214
|
-
const resBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core");
|
|
220
|
+
const resBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core") as ResourceBundle;
|
|
215
221
|
const dateFormat = DateFormat.getDateInstance({ style: "medium" }, currentLocale);
|
|
216
222
|
|
|
217
223
|
function formatRange(range: RangeDefinition): string {
|
|
@@ -263,7 +269,7 @@ function getFilterStringFromDefinition(filterDefinition: FilterDefinition): stri
|
|
|
263
269
|
}
|
|
264
270
|
|
|
265
271
|
function formatChartTitle(kpiDef: KPIDefinition): string {
|
|
266
|
-
const resBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core");
|
|
272
|
+
const resBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core") as ResourceBundle;
|
|
267
273
|
|
|
268
274
|
function formatList(items: { name: string; label: string }[]) {
|
|
269
275
|
if (items.length === 0) {
|
|
@@ -522,6 +528,37 @@ function getChartFeeds(chartDefinition: KPIChartDefinition): { uid: string; type
|
|
|
522
528
|
return res;
|
|
523
529
|
}
|
|
524
530
|
|
|
531
|
+
function getNavigationParameters(
|
|
532
|
+
navInfo: NavigationInfo,
|
|
533
|
+
oShellService: any
|
|
534
|
+
): Promise<{ semanticObject?: string; action?: string; outbound?: string } | undefined> {
|
|
535
|
+
if (navInfo.semanticObject) {
|
|
536
|
+
if (navInfo.action) {
|
|
537
|
+
// Action is already specified: check if it's available in the shell
|
|
538
|
+
return oShellService.getLinks({ semanticObject: navInfo.semanticObject, action: navInfo.action }).then((aLinks: any[]) => {
|
|
539
|
+
return aLinks.length ? { semanticObject: navInfo.semanticObject, action: navInfo.action } : undefined;
|
|
540
|
+
});
|
|
541
|
+
} else {
|
|
542
|
+
// We get the primary intent from the shell
|
|
543
|
+
return oShellService.getPrimaryIntent(navInfo.semanticObject).then((oLink: any) => {
|
|
544
|
+
if (!oLink) {
|
|
545
|
+
// No primary intent...
|
|
546
|
+
return undefined;
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
// Check that the primary intent is not part of the unavailable actions
|
|
550
|
+
const oInfo = oShellService.parseShellHash(oLink.intent);
|
|
551
|
+
return navInfo.unavailableActions && navInfo.unavailableActions.indexOf(oInfo.action) >= 0
|
|
552
|
+
? undefined
|
|
553
|
+
: { semanticObject: oInfo.semanticObject, action: oInfo.action };
|
|
554
|
+
});
|
|
555
|
+
}
|
|
556
|
+
} else {
|
|
557
|
+
// Outbound navigation specified in the manifest
|
|
558
|
+
return navInfo.outboundNavigation ? Promise.resolve({ outbound: navInfo.outboundNavigation }) : Promise.resolve(undefined);
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
|
|
525
562
|
/**
|
|
526
563
|
* @class A controller extension for managing the KPIs in an analytical list page
|
|
527
564
|
*
|
|
@@ -543,7 +580,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
|
|
|
543
580
|
* @param kpiDefinition The KPI definition
|
|
544
581
|
* @param oKPIModel The JSON model in which the manifest will be stored
|
|
545
582
|
*/
|
|
546
|
-
protected initCardManifest(kpiDefinition: KPIDefinition, oKPIModel: JSONModel
|
|
583
|
+
protected initCardManifest(kpiDefinition: KPIDefinition, oKPIModel: JSONModel): void {
|
|
547
584
|
const oCardManifest: any = {
|
|
548
585
|
"sap.app": {
|
|
549
586
|
id: "sap.fe",
|
|
@@ -587,7 +624,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
|
|
|
587
624
|
|
|
588
625
|
// Add side indicators in the card header if a target is defined for the KPI
|
|
589
626
|
if (kpiDefinition.datapoint.targetPath || kpiDefinition.datapoint.targetValue !== undefined) {
|
|
590
|
-
const resBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core");
|
|
627
|
+
const resBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core") as ResourceBundle;
|
|
591
628
|
oCardManifest["sap.card"].header.sideIndicators = [
|
|
592
629
|
{
|
|
593
630
|
title: resBundle.getText("C_KPICARD_INDICATOR_TARGET"),
|
|
@@ -634,6 +671,24 @@ class KPIManagementControllerExtension extends ControllerExtension {
|
|
|
634
671
|
});
|
|
635
672
|
}
|
|
636
673
|
|
|
674
|
+
protected initNavigationInfo(kpiDefinition: KPIDefinition, oKPIModel: JSONModel, oShellService: any): Promise<void> {
|
|
675
|
+
// Add navigation
|
|
676
|
+
if (kpiDefinition.navigation) {
|
|
677
|
+
return getNavigationParameters(kpiDefinition.navigation, oShellService).then(oNavInfo => {
|
|
678
|
+
if (oNavInfo) {
|
|
679
|
+
oKPIModel.setProperty("/" + kpiDefinition.id + "/manifest/sap.card/header/actions", [
|
|
680
|
+
{
|
|
681
|
+
type: "Navigation",
|
|
682
|
+
parameters: oNavInfo
|
|
683
|
+
}
|
|
684
|
+
]);
|
|
685
|
+
}
|
|
686
|
+
});
|
|
687
|
+
} else {
|
|
688
|
+
return Promise.resolve();
|
|
689
|
+
}
|
|
690
|
+
}
|
|
691
|
+
|
|
637
692
|
@Override()
|
|
638
693
|
public onInit(): void {
|
|
639
694
|
this.aKPIDefinitions = this.getKPIData();
|
|
@@ -650,6 +705,11 @@ class KPIManagementControllerExtension extends ControllerExtension {
|
|
|
650
705
|
// Create the manifest for the KPI card and store it in the KPI model
|
|
651
706
|
this.initCardManifest(kpiDefinition, oKPIModel);
|
|
652
707
|
|
|
708
|
+
// Set the navigation information in the manifest
|
|
709
|
+
this.initNavigationInfo(kpiDefinition, oKPIModel, oAppComponent.getShellServices()).catch(function(err: any) {
|
|
710
|
+
Log.error(err);
|
|
711
|
+
});
|
|
712
|
+
|
|
653
713
|
// Load tag data for the KPI
|
|
654
714
|
this.loadKPITagData(kpiDefinition, oAppComponent.getModel() as ODataModel, oKPIModel).catch(function(err: any) {
|
|
655
715
|
Log.error(err);
|
|
@@ -660,7 +720,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
|
|
|
660
720
|
|
|
661
721
|
@Override()
|
|
662
722
|
public onExit(): void {
|
|
663
|
-
const oKPIModel = this.getView().getModel("kpiModel") as JSONModel
|
|
723
|
+
const oKPIModel = this.getView().getModel("kpiModel") as JSONModel;
|
|
664
724
|
|
|
665
725
|
if (oKPIModel) {
|
|
666
726
|
oKPIModel.destroy();
|
|
@@ -683,7 +743,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
|
|
|
683
743
|
}
|
|
684
744
|
}
|
|
685
745
|
|
|
686
|
-
private updateDatapointValueAndCurrency(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel
|
|
746
|
+
private updateDatapointValueAndCurrency(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel) {
|
|
687
747
|
const currentLocale = new Locale(
|
|
688
748
|
sap.ui
|
|
689
749
|
.getCore()
|
|
@@ -760,7 +820,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
|
|
|
760
820
|
}
|
|
761
821
|
}
|
|
762
822
|
|
|
763
|
-
private updateDatapointCriticality(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel
|
|
823
|
+
private updateDatapointCriticality(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel) {
|
|
764
824
|
const rawValue = Number.parseFloat(kpiContext.getProperty(kpiDefinition.datapoint.propertyPath));
|
|
765
825
|
|
|
766
826
|
let criticalityValue = MessageType.None;
|
|
@@ -802,7 +862,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
|
|
|
802
862
|
);
|
|
803
863
|
}
|
|
804
864
|
|
|
805
|
-
private updateDatapointTrend(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel
|
|
865
|
+
private updateDatapointTrend(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel) {
|
|
806
866
|
const rawValue = Number.parseFloat(kpiContext.getProperty(kpiDefinition.datapoint.propertyPath));
|
|
807
867
|
|
|
808
868
|
let trendValue = "None";
|
|
@@ -837,7 +897,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
|
|
|
837
897
|
oKPIModel.setProperty("/" + kpiDefinition.id + "/manifest/sap.card/data/json/trend", trendValue);
|
|
838
898
|
}
|
|
839
899
|
|
|
840
|
-
private updateTargetValue(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel
|
|
900
|
+
private updateTargetValue(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel) {
|
|
841
901
|
if (kpiDefinition.datapoint.targetValue === undefined && kpiDefinition.datapoint.targetPath === undefined) {
|
|
842
902
|
return; // No target set for the KPI
|
|
843
903
|
}
|
|
@@ -904,7 +964,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
|
|
|
904
964
|
* @param loadFull If not true, loads only data for the KPI tag
|
|
905
965
|
* @returns {Promise} Returns the promise that is resolved when data is loaded.
|
|
906
966
|
*/
|
|
907
|
-
protected loadKPITagData(kpiDefinition: KPIDefinition, oMainModel: ODataModel, oKPIModel: JSONModel
|
|
967
|
+
protected loadKPITagData(kpiDefinition: KPIDefinition, oMainModel: ODataModel, oKPIModel: JSONModel, loadFull?: boolean): any {
|
|
908
968
|
// If loadFull=false, then we're just loading data for the tag and we use the "$auto.LongRunners" groupID
|
|
909
969
|
// If loadFull=true, we're loading data for the whole KPI (tag + card) and we use the default ("$auto") groupID
|
|
910
970
|
const oListBinding = loadFull
|
|
@@ -987,7 +1047,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
|
|
|
987
1047
|
* @param {JSONModel} oKPIModel The JSON model where the data will be stored
|
|
988
1048
|
* @returns {Promise} Returns the promise that is resolved when data is loaded.
|
|
989
1049
|
*/
|
|
990
|
-
protected loadKPICardData(kpiDefinition: KPIDefinition, oMainModel: ODataModel, oKPIModel: JSONModel
|
|
1050
|
+
protected loadKPICardData(kpiDefinition: KPIDefinition, oMainModel: ODataModel, oKPIModel: JSONModel): any {
|
|
991
1051
|
const oListBinding = oMainModel.bindList("/" + kpiDefinition.entitySet);
|
|
992
1052
|
const oGroup: Record<string, Object> = {};
|
|
993
1053
|
const oAggregate: Record<string, Object> = {};
|
|
@@ -1040,26 +1100,42 @@ class KPIManagementControllerExtension extends ControllerExtension {
|
|
|
1040
1100
|
/**
|
|
1041
1101
|
* Gets the popover to display the KPI card
|
|
1042
1102
|
* The popover and the contained card for the KPIs are created if necessary.
|
|
1043
|
-
* The popover is shared between all KPIs, so
|
|
1103
|
+
* The popover is shared between all KPIs, so it's created only once.
|
|
1044
1104
|
*
|
|
1045
|
-
* @param oKPITag The
|
|
1046
|
-
* @returns The shared popover.
|
|
1105
|
+
* @param oKPITag The tag that triggered the popover opening.
|
|
1106
|
+
* @returns The shared popover as a promise.
|
|
1047
1107
|
*/
|
|
1048
1108
|
protected getPopover(oKPITag: GenericTag): Promise<Popover> {
|
|
1049
1109
|
if (!this.oPopover) {
|
|
1050
1110
|
return new Promise((resolve, reject) => {
|
|
1051
|
-
sap.ui
|
|
1052
|
-
.getCore()
|
|
1053
|
-
.loadLibrary("sap/ui/integration", { async: true })
|
|
1111
|
+
(sap.ui.getCore().loadLibrary("sap/ui/integration", { async: true }) as Promise<object>)
|
|
1054
1112
|
.then(() => {
|
|
1055
|
-
sap.ui.require(["sap/ui/integration/widgets/Card"], (Card: any) => {
|
|
1113
|
+
sap.ui.require(["sap/ui/integration/widgets/Card", "sap/ui/integration/Host"], (Card: any, Host: any) => {
|
|
1114
|
+
const oHost = new Host();
|
|
1115
|
+
|
|
1116
|
+
oHost.attachAction((oEvent: any) => {
|
|
1117
|
+
const sType = oEvent.getParameter("type");
|
|
1118
|
+
const oParams = oEvent.getParameter("parameters");
|
|
1119
|
+
|
|
1120
|
+
if (sType === "Navigation") {
|
|
1121
|
+
if (oParams.semanticObject) {
|
|
1122
|
+
(this.getView().getController() as any)._intentBasedNavigation.navigate(
|
|
1123
|
+
oParams.semanticObject,
|
|
1124
|
+
oParams.action
|
|
1125
|
+
);
|
|
1126
|
+
} else {
|
|
1127
|
+
(this.getView().getController() as any)._intentBasedNavigation.navigateOutbound(oParams.outbound);
|
|
1128
|
+
}
|
|
1129
|
+
}
|
|
1130
|
+
});
|
|
1131
|
+
|
|
1056
1132
|
this.oCard = new Card({
|
|
1057
1133
|
width: "25rem",
|
|
1058
1134
|
height: "auto"
|
|
1059
1135
|
});
|
|
1136
|
+
this.oCard.setHost(oHost as any);
|
|
1060
1137
|
|
|
1061
|
-
this.oPopover = new Popover({
|
|
1062
|
-
id: "kpi-Popover",
|
|
1138
|
+
this.oPopover = new Popover("kpi-Popover", {
|
|
1063
1139
|
showHeader: false,
|
|
1064
1140
|
placement: "Auto",
|
|
1065
1141
|
content: [this.oCard]
|
|
@@ -1070,7 +1146,9 @@ class KPIManagementControllerExtension extends ControllerExtension {
|
|
|
1070
1146
|
resolve(this.oPopover);
|
|
1071
1147
|
});
|
|
1072
1148
|
})
|
|
1073
|
-
.catch(
|
|
1149
|
+
.catch(function() {
|
|
1150
|
+
reject();
|
|
1151
|
+
});
|
|
1074
1152
|
});
|
|
1075
1153
|
} else {
|
|
1076
1154
|
return Promise.resolve(this.oPopover);
|
|
@@ -1079,7 +1157,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
|
|
|
1079
1157
|
|
|
1080
1158
|
@Public
|
|
1081
1159
|
public onKPIPressed(oKPITag: any, kpiID: string): void {
|
|
1082
|
-
const oKPIModel = oKPITag.getModel("kpiModel") as JSONModel
|
|
1160
|
+
const oKPIModel = oKPITag.getModel("kpiModel") as JSONModel;
|
|
1083
1161
|
|
|
1084
1162
|
if (this.aKPIDefinitions && this.aKPIDefinitions.length) {
|
|
1085
1163
|
const kpiDefinition = this.aKPIDefinitions.find(function(oDef) {
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
+
(c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
|
+
|
|
5
|
+
*/
|
|
6
|
+
sap.ui.define(
|
|
7
|
+
[
|
|
8
|
+
"sap/ui/core/mvc/ControllerExtension",
|
|
9
|
+
"sap/ui/core/mvc/OverrideExecution",
|
|
10
|
+
"sap/fe/core/helpers/MassEditHelper",
|
|
11
|
+
"sap/fe/core/helpers/ModelHelper",
|
|
12
|
+
"sap/base/Log",
|
|
13
|
+
"sap/m/MessageBox"
|
|
14
|
+
],
|
|
15
|
+
function(ControllerExtension, OverrideExecution, MassEditHelper, ModelHelper, Log, MessageBox) {
|
|
16
|
+
"use strict";
|
|
17
|
+
/**
|
|
18
|
+
* @class Controller extension providing hooks for the mass edit in a table
|
|
19
|
+
*
|
|
20
|
+
* @name sap.fe.core.controllerextensions.MassEdit
|
|
21
|
+
* @hideconstructor
|
|
22
|
+
* @private
|
|
23
|
+
*/
|
|
24
|
+
return ControllerExtension.extend("sap.fe.core.controllerextensions.MassEdit", {
|
|
25
|
+
metadata: {
|
|
26
|
+
methods: {
|
|
27
|
+
openMassEditDialog: {
|
|
28
|
+
"final": true,
|
|
29
|
+
"public": true
|
|
30
|
+
},
|
|
31
|
+
fetchContextsForEdit: {
|
|
32
|
+
"final": false,
|
|
33
|
+
"public": false,
|
|
34
|
+
overrideExecution: OverrideExecution.After
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
|
|
39
|
+
_getMessageDetailForNonEditable: function(oResourceBundle) {
|
|
40
|
+
var sHeader = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE_DETAIL_HEADER"),
|
|
41
|
+
sReasonGroup = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE_DETAIL_REASON"),
|
|
42
|
+
sReasonDraft = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE_DETAIL_REASON_DRAFT"),
|
|
43
|
+
sReasonNonEditable = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE_DETAIL_REASON_NON_EDITABLE");
|
|
44
|
+
|
|
45
|
+
return (
|
|
46
|
+
"<p><strong>" +
|
|
47
|
+
sHeader +
|
|
48
|
+
"</strong></p>\n" +
|
|
49
|
+
"<p>" +
|
|
50
|
+
sReasonGroup +
|
|
51
|
+
"</p>\n" +
|
|
52
|
+
"<ul>" +
|
|
53
|
+
"<li>" +
|
|
54
|
+
sReasonDraft +
|
|
55
|
+
"</li>" +
|
|
56
|
+
"<li>" +
|
|
57
|
+
sReasonNonEditable +
|
|
58
|
+
"</li>" +
|
|
59
|
+
"</ul>"
|
|
60
|
+
);
|
|
61
|
+
},
|
|
62
|
+
|
|
63
|
+
_openConfirmDialog: function(oTable, aContexts, iSelectedContexts) {
|
|
64
|
+
var that = this,
|
|
65
|
+
iUpdatableContexts = (aContexts || []).length;
|
|
66
|
+
|
|
67
|
+
return new Promise(function(resolve, reject) {
|
|
68
|
+
that.getView()
|
|
69
|
+
.getModel("sap.fe.i18n")
|
|
70
|
+
.getResourceBundle()
|
|
71
|
+
.then(function(oResourceBundle) {
|
|
72
|
+
var sEditButton = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_BUTTON_TEXT"),
|
|
73
|
+
sCancelButton = oResourceBundle.getText("C_MASS_EDIT_CANCEL_BUTTON_TEXT"),
|
|
74
|
+
iNonEditable = iSelectedContexts - iUpdatableContexts,
|
|
75
|
+
sMessage = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE", [
|
|
76
|
+
iNonEditable,
|
|
77
|
+
iSelectedContexts,
|
|
78
|
+
iUpdatableContexts
|
|
79
|
+
]),
|
|
80
|
+
sPath = oTable.data("targetCollectionPath"),
|
|
81
|
+
oMetaModel = oTable.getModel().getMetaModel(),
|
|
82
|
+
bIsDraft = ModelHelper.isDraftSupported(oMetaModel, sPath),
|
|
83
|
+
bDisplayMode = oTable.data("displayModePropertyBinding") === "true",
|
|
84
|
+
sMessageDetail = bIsDraft && bDisplayMode && that._getMessageDetailForNonEditable(oResourceBundle);
|
|
85
|
+
|
|
86
|
+
MessageBox.warning(sMessage, {
|
|
87
|
+
details: sMessageDetail,
|
|
88
|
+
actions: [sEditButton, sCancelButton],
|
|
89
|
+
emphasizedAction: sEditButton,
|
|
90
|
+
contentWidth: "100px",
|
|
91
|
+
onClose: function(sSelection) {
|
|
92
|
+
var aContextsForEdit = [];
|
|
93
|
+
if (sSelection === sEditButton) {
|
|
94
|
+
Log.info("Mass Edit: Confirmed to edit ", iUpdatableContexts, " selections.");
|
|
95
|
+
aContextsForEdit = aContexts;
|
|
96
|
+
} else if (sSelection === sCancelButton) {
|
|
97
|
+
Log.info("Mass Edit: Cancelled.");
|
|
98
|
+
}
|
|
99
|
+
resolve(aContextsForEdit);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
})
|
|
103
|
+
.catch(function(error) {
|
|
104
|
+
Log.error(error);
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
},
|
|
108
|
+
|
|
109
|
+
_confirmContexts: function(oTable, aContexts) {
|
|
110
|
+
var that = this,
|
|
111
|
+
oInternalModelContext = oTable.getBindingContext("internal"),
|
|
112
|
+
iSelectedContexts = +oInternalModelContext.getProperty("numberOfSelectedContexts") || 0;
|
|
113
|
+
|
|
114
|
+
aContexts = aContexts || [];
|
|
115
|
+
|
|
116
|
+
if (aContexts.length && aContexts.length !== iSelectedContexts) {
|
|
117
|
+
return that._openConfirmDialog(oTable, aContexts, iSelectedContexts);
|
|
118
|
+
}
|
|
119
|
+
return Promise.resolve(aContexts);
|
|
120
|
+
},
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* The following operations are performed by method openMassEditDialog:
|
|
124
|
+
* => Opens the mass edit dialog.
|
|
125
|
+
* => Implements the save and cancel functionality.
|
|
126
|
+
* => Sets the runtime model to the dialog.
|
|
127
|
+
* => Sets the static model's context to the dialog.
|
|
128
|
+
*
|
|
129
|
+
* @param {object} oTable Instance of the table
|
|
130
|
+
* @returns {Promise} A promise that resolves on open of the mass edit dialog.
|
|
131
|
+
* @private
|
|
132
|
+
*/
|
|
133
|
+
openMassEditDialog: function(oTable) {
|
|
134
|
+
var that = this,
|
|
135
|
+
oController = that.getView().getController(),
|
|
136
|
+
pContextsForEdit = that.fetchContextsForEdit(oTable);
|
|
137
|
+
|
|
138
|
+
return pContextsForEdit
|
|
139
|
+
.then(that._confirmContexts.bind(that, oTable))
|
|
140
|
+
.then(function(aContexts) {
|
|
141
|
+
return aContexts && aContexts.length > 0
|
|
142
|
+
? MassEditHelper.createDialog(oTable, aContexts, oController)
|
|
143
|
+
: Promise.resolve();
|
|
144
|
+
})
|
|
145
|
+
.then(function(oDialog) {
|
|
146
|
+
if (oDialog) {
|
|
147
|
+
oDialog.open();
|
|
148
|
+
}
|
|
149
|
+
})
|
|
150
|
+
.catch(function(oError) {
|
|
151
|
+
Log.error("Mass Edit: Something went wrong in mass edit dialog creation.", oError);
|
|
152
|
+
});
|
|
153
|
+
},
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Returns a promise that resolves to the contexts for mass edit.
|
|
157
|
+
* @function
|
|
158
|
+
* @param {string} oTable Table for mass edit.
|
|
159
|
+
* @alias sap.fe.core.contrllerextensions.MassEdit#fetchContextsForEdit
|
|
160
|
+
* @returns {Promise} A promise to be resolved with an array of context(s) which should be considered for mass edit.
|
|
161
|
+
* @private
|
|
162
|
+
**/
|
|
163
|
+
fetchContextsForEdit: function(oTable) {
|
|
164
|
+
//To be overridden by the application
|
|
165
|
+
var oInternalModelContext = oTable.getBindingContext("internal"),
|
|
166
|
+
aSelectedContexts = oInternalModelContext.getProperty("updatableContexts") || [];
|
|
167
|
+
|
|
168
|
+
return Promise.resolve(aSelectedContexts);
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
);
|