UNPKG

@openui5/sap.m

Version:

OpenUI5 UI Library sap.m

158 lines (141 loc) 5.48 kB
/*! * OpenUI5 * (c) Copyright 2009-2023 SAP SE or an SAP affiliate company. * Licensed under the Apache License, Version 2.0 - see LICENSE.txt. */ sap.ui.define([ "sap/ui/fl/changeHandler/BaseAddViaDelegate", "sap/base/util/ObjectPath" ], function ( BaseAddViaDelegate, ObjectPath ) { "use strict"; var COLUMNS_AGGREGATION_NAME = "columns"; var CELLS_AGGREGATION_NAME = "cells"; var ITEMS_AGGREGATION_NAME = "items"; function getLabel(oChangeContent, mInnerControls, oModifier, oView, oAppComponent, oChangeODataInformation){ var sEntityType = oChangeODataInformation && oChangeODataInformation.entityType; if (sEntityType) { return Promise.resolve() .then(oModifier.createControl.bind( oModifier, 'sap.m.Text', oAppComponent, oView, oChangeContent.newFieldSelector.id + '--column', { text: "{/#" + sEntityType + "/" + oChangeContent.bindingPath + "/@sap:label}" } )); } return Promise.resolve(mInnerControls.label); } /** * Change handler for adding a AddTableColumn to sap.m.Table * * @constructor * * @alias sap.m.changeHandler.AddTableColumn * * @author SAP SE * * @version 1.117.4 * * @experimental Since 1.51.0 This class is experimental and provides only limited functionality. * Also the API might be changed in future. */ var AddTableColumn = BaseAddViaDelegate.createAddViaDelegateChangeHandler({ aggregationName: COLUMNS_AGGREGATION_NAME, parentAlias: "targetTable", fieldSuffix: "--field", skipCreateLabel: function(oChangeODataInformation) { //if entity type is given we create label ourselves return !!(oChangeODataInformation && oChangeODataInformation.entityType); }, skipCreateLayout: true, supportsDefault: true, /** * Add a new column * @param {*} mPropertyBag - Parameters * @returns {Promise} Promise resolving when the column is added */ addProperty : function(mPropertyBag) { var mInnerControls = mPropertyBag.innerControls; if (mInnerControls.valueHelp) { //TODO clarify if value help needs to be supported and where to add them //for V2 addODataProperty compatibility it is not necessary to support value helps return Promise.reject(new Error("Adding properties with value helps is not yet supported by addTableColumn change handler")); } var oTable = mPropertyBag.control; var oModifier = mPropertyBag.modifier; var oView = mPropertyBag.view; var oAppComponent = mPropertyBag.appComponent; var oChange = mPropertyBag.change; var oRevertData = oChange.getRevertData(); var oChangeContent = oChange.getContent(); var oChangeODataInformation = oChange.getSupportInformation().oDataInformation; var iIndex = oChangeContent.newFieldIndex; var mFieldSelector = oChangeContent.newFieldSelector; return Promise.resolve() .then(oModifier.getBindingTemplate.bind(oModifier,oTable, ITEMS_AGGREGATION_NAME, oView)) .then(function (oTemplate) { if (oTemplate) { var oSmartField = mInnerControls.control; return Promise.resolve() .then(oModifier.insertAggregation.bind(oModifier, oTemplate, CELLS_AGGREGATION_NAME, oSmartField, iIndex, oView)) .then(oModifier.updateAggregation.bind(oModifier, oTable, ITEMS_AGGREGATION_NAME)) //only needed in JS case .then(function() { // getSelector() helps to decide whether idIsLocal is true/false oRevertData.newCellSelector = oModifier.getSelector(oSmartField, oAppComponent); oChange.setRevertData(oRevertData); }); } return undefined; }) .then(oModifier.createControl.bind(oModifier, 'sap.m.Column', oAppComponent, oView, mFieldSelector)) .then(function(oCreatedControl) { return getLabel(oChangeContent, mInnerControls, oModifier, oView, oAppComponent, oChangeODataInformation) .then(function(oLabel) { return Promise.resolve() .then(oModifier.insertAggregation.bind(oModifier, oCreatedControl, 'header', oLabel, 0, oView)) .then(oModifier.insertAggregation.bind(oModifier, oTable, COLUMNS_AGGREGATION_NAME, oCreatedControl, iIndex, oView)); }); }); }, /** * Revert the controls for the cell that are added in addition to the new column * @param {*} mPropertyBag - Parameters * @returns {Promise} Promise resolving when the controls are reverted */ revertAdditionalControls : function(mPropertyBag) { var oTable = mPropertyBag.control; var oChange = mPropertyBag.change; var oChangeRevertData = oChange.getRevertData(); var oModifier = mPropertyBag.modifier; var oAppComponent = mPropertyBag.appComponent; var oTemplate, oNewCell; // Column Content return Promise.resolve() .then(oModifier.getBindingTemplate.bind(oModifier, oTable, ITEMS_AGGREGATION_NAME)) .then(function(oRetrievedTemplate){ oTemplate = oRetrievedTemplate; if (oTemplate) { return Promise.resolve() .then(oModifier.bySelector.bind(oModifier, oChangeRevertData.newCellSelector, oAppComponent)) .then(function(oCreatedCell) { oNewCell = oCreatedCell; return oModifier.removeAggregation(oTemplate, CELLS_AGGREGATION_NAME, oNewCell); }) .then(function() { return oModifier.destroy(oNewCell); }) .then(oModifier.updateAggregation.bind(oModifier, oTable, ITEMS_AGGREGATION_NAME)); } return undefined; }); } }); return AddTableColumn; }, /* bExport= */true);