UNPKG

@openui5/sap.m

Version:

OpenUI5 UI Library sap.m

205 lines (182 loc) 7.9 kB
/*! * UI development toolkit for HTML5 (OpenUI5) * (c) Copyright 2009-2022 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/ChangeHandlerMediator", "sap/base/Log" ], function( ChangeHandlerMediator, Log ) { "use strict"; /** * Change handler for adding a AddTableColumn to sap.m.Table * * @constructor * * @alias sap.m.changeHandler.AddTableColumn * * @author SAP SE * * @version 1.60.39 * * @experimental Since 1.51.0 This class is experimental and provides only limited functionality. * Also the API might be changed in future. */ var AddTableColumn = {}; var COLUMNS_AGGREGATION_NAME = "columns"; var CELLS_AGGREGATION_NAME = "cells"; var ITEMS_AGGREGATION_NAME = "items"; /** * Adds a column using SmartField * * @param {sap.ui.fl.Change} oChange change wrapper object with instructions to be applied on the control map * @param {sap.m.Table} oTable - Table that matches the change selector for applying the change * @param {object} mPropertyBag - Property bag containing the modifier and the view * @param {object} mPropertyBag.modifier - modifier for the controls * @param {object} mPropertyBag.view - application view * @return {boolean} True if successful * @public */ AddTableColumn.applyChange = function(oChange, oTable, mPropertyBag) { var oModifier = mPropertyBag.modifier; var oView = mPropertyBag.view; var oAppComponent = mPropertyBag.appComponent; var oChangeDefinition = oChange.getDefinition(); var mContent = oChange.getContent(); var mChangeHandlerSettings = ChangeHandlerMediator.getChangeHandlerSettings({ "scenario": "addODataField", "oDataServiceVersion": mContent.oDataServiceVersion }); var fnChangeHandlerCreateFunction = mChangeHandlerSettings && mChangeHandlerSettings.content && mChangeHandlerSettings.content.createFunction; var fnCheckChangeDefinition = function(mContent) { var bMandatoryContentPresent = false; bMandatoryContentPresent = mContent.newFieldSelector && (mContent.newFieldIndex !== undefined) && mContent.bindingPath && mContent.oDataServiceVersion && fnChangeHandlerCreateFunction; return bMandatoryContentPresent; }; if (mContent && fnCheckChangeDefinition(mContent)) { var oTemplate = oModifier.getBindingTemplate(oTable, ITEMS_AGGREGATION_NAME, oView); var oText = oModifier.createControl( 'sap.m.Text', oAppComponent, oView, mContent.newFieldSelector.id + '--column', { text: "{/#" + mContent.entityType + "/" + mContent.bindingPath + "/@sap:label}" } ); if (oTemplate) { var mCreateProperties = { "appComponent" : mPropertyBag.appComponent, "view" : mPropertyBag.view, "fieldSelector" : mContent.newFieldSelector.id + '--field', "bindingPath" : mContent.bindingPath }; var oSmartField = fnChangeHandlerCreateFunction(oModifier, mCreateProperties); oModifier.insertAggregation(oTemplate, CELLS_AGGREGATION_NAME, oSmartField, mContent.newFieldIndex, oView); oModifier.updateAggregation(oTable, ITEMS_AGGREGATION_NAME);//only needed in JS case oChange.setRevertData(mContent.newFieldSelector.id + '--field'); } var oControl = oModifier.createControl('sap.m.Column', oAppComponent, oView, mContent.newFieldSelector); oModifier.insertAggregation(oControl, 'header', oText, 0, oView); oModifier.insertAggregation(oTable, COLUMNS_AGGREGATION_NAME, oControl, mContent.newFieldIndex, oView); return true; } else { Log.error("Change does not contain sufficient information to be applied or ChangeHandlerMediator could not be retrieved: [" + oChangeDefinition.layer + "]" + oChangeDefinition.namespace + "/" + oChangeDefinition.fileName + "." + oChangeDefinition.fileType); //however subsequent changes should be applied } }; /** * Reverts applied change * * @param {sap.ui.fl.Change} oChange change wrapper object with instructions to be applied on the control map * @param {sap.m.Table} oTable - Table that matches the change selector for applying the change * @param {object} mPropertyBag - Property bag containing the modifier and the view * @param {object} mPropertyBag.modifier - modifier for the controls * @param {object} mPropertyBag.view - application view * @return {boolean} True if successful * @public */ AddTableColumn.revertChange = function(oChange, oTable, mPropertyBag) { var oModifier = mPropertyBag.modifier; var oView = mPropertyBag.view; var oAppComponent = mPropertyBag.appComponent; var mContent = oChange.getContent(); // Column Content var oTemplate = oModifier.getBindingTemplate(oTable, ITEMS_AGGREGATION_NAME); if (oTemplate) { oModifier.removeAggregation(oTemplate, CELLS_AGGREGATION_NAME, oModifier.bySelector(oChange.getRevertData(), oAppComponent, oView)); oModifier.updateAggregation(oTable, ITEMS_AGGREGATION_NAME); } // Column Header oModifier.removeAggregation(oTable, COLUMNS_AGGREGATION_NAME, oModifier.bySelector(mContent.newFieldSelector, oAppComponent, oView)); oChange.resetRevertData(); return true; }; /** * Completes the change by adding change handler specific content * * @param {sap.ui.fl.Change} oChange change wrapper object to be completed * @param {Object} oSpecificChangeInfo - information specific to this change * @param {string} oSpecificChangeInfo.newControlId - the control ID for the control to be added, * @param {string} oSpecificChangeInfo.bindingPath - the binding path for the new control, * @param {string} oSpecificChangeInfo.parentId - Table where the new control will be added, * @param {number} oSpecificChangeInfo.index - the index where the field will be added, * @param {string} oSpecificChangeInfo.oDataServiceVersion - the OData service version. * @param {Object} mPropertyBag The property bag containing the App Component * @param {object} mPropertyBag.modifier - modifier for the controls * @param {object} mPropertyBag.appComponent - application component * @param {object} mPropertyBag.view - application view * @public */ AddTableColumn.completeChangeContent = function(oChange, oSpecificChangeInfo, mPropertyBag) { var oAppComponent = mPropertyBag.appComponent; var oChangeDefinition = oChange.getDefinition(); if (!oChangeDefinition.content) { oChangeDefinition.content = {}; } if (oSpecificChangeInfo.parentId) { oChange.addDependentControl(oSpecificChangeInfo.parentId, "targetTable", mPropertyBag); } else { throw new Error("oSpecificChangeInfo.parentId attribute required"); } if (oSpecificChangeInfo.bindingPath) { oChangeDefinition.content.bindingPath = oSpecificChangeInfo.bindingPath; } else { throw new Error("oSpecificChangeInfo.bindingPath attribute required"); } if (oSpecificChangeInfo.oDataInformation.entityType) { oChangeDefinition.content.entityType = oSpecificChangeInfo.oDataInformation.entityType; } else { throw new Error("oSpecificChangeInfo.entityType attribute required"); } if (oSpecificChangeInfo.newControlId) { oChangeDefinition.content.newFieldSelector = mPropertyBag.modifier.getSelector(oSpecificChangeInfo.newControlId, oAppComponent); } else { throw new Error("oSpecificChangeInfo.newControlId attribute required"); } if (oSpecificChangeInfo.index === undefined) { throw new Error("oSpecificChangeInfo.targetIndex attribute required"); } else { oChangeDefinition.content.newFieldIndex = oSpecificChangeInfo.index; } if (oSpecificChangeInfo.oDataServiceVersion === undefined) { throw new Error("oSpecificChangeInfo.oDataServiceVersion attribute required"); } else { oChangeDefinition.content.oDataServiceVersion = oSpecificChangeInfo.oDataServiceVersion; } }; return AddTableColumn; }, /* bExport= */true);