UNPKG

@openui5/sap.m

Version:

OpenUI5 UI Library sap.m

213 lines (185 loc) 5.87 kB
/*! * OpenUI5 * (c) Copyright 2026 SAP SE or an SAP affiliate company. * Licensed under the Apache License, Version 2.0 - see LICENSE.txt. */ // Provides control sap.m.SelectDialogBase. sap.ui.define([ './library', 'sap/ui/core/Control', 'sap/ui/core/InvisibleText', "sap/ui/core/Lib" ], function( library, Control, InvisibleText, Library ) { "use strict"; // shortcut for sap.m.SelectDialogInitialFocus var SelectDialogInitialFocus = library.SelectDialogInitialFocus; /** * Constructor for a new SelectDialogBase. * * @param {string} [sId] ID for the new control, generated automatically if no ID is given * @param {object} [mSettings] Initial settings for the new control * * @class * The <code>sap.m.SelectDialogBase</code> control provides a base functionality of the * <code>sap.m.SelectDialog</code> and <code>sap.m.TableSelectDialog</code> controls. * @extends sap.ui.core.Control * * @author SAP SE * @version 1.146.0 * * @constructor * @public * @abstract * @since 1.93 * @alias sap.m.SelectDialogBase */ var SelectDialogBase = Control.extend("sap.m.SelectDialogBase", /** @lends sap.m.SelectDialogBase.prototype */ { metadata: { library: "sap.m", "abstract": true, properties: { /** * Specifies the control that will receive the initial focus. * * <b>Note:</b> When the <code>growing</code> property is set to <code>true</code>, * you can set the initial focus to <code>sap.m.SelectDialogInitialFocus.SearchField</code>. * In this way the user can easily search for items that are not currently visible. * @since 1.117.0 */ initialFocus: {type: "sap.m.SelectDialogInitialFocus", group: "Behavior", defaultValue: SelectDialogInitialFocus.List} }, aggregations: {}, events: { /** * Fires before <code>items</code> binding is updated (e.g. sorting, filtering) * * <b>Note:</b> Event handler should not invalidate the control. * @since 1.93 */ updateStarted : { parameters : { /** * The reason of the update, e.g. Binding, Filter, Sort, Growing, Change, Refresh, Context. */ reason : {type : "string"}, /** * Actual number of items. */ actual : {type : "int"}, /** * The total count of bound items. This can be used if the <code>growing</code> property is set to <code>true</code>. */ total : {type : "int"} } }, /** * Fires after <code>items</code> binding is updated and processed by the control. * @since 1.93 */ updateFinished : { parameters : { /** * The reason of the update, e.g. Binding, Filter, Sort, Growing, Change, Refresh, Context. */ reason : {type : "string"}, /** * Actual number of items. */ actual : {type : "int"}, /** * The total count of bound items. This can be used if the <code>growing</code> property is set to <code>true</code>. */ total : {type : "int"} } }, /** * Fires when selection is changed via user interaction inside the control. * @since 1.93 */ selectionChange : { parameters : { /** * The item whose selection has changed. In <code>MultiSelect</code> mode, only the up-most selected item is returned. This parameter can be used for single-selection modes. */ listItem : {type : "sap.m.ListItemBase"}, /** * Array of items whose selection has changed. This parameter can be used for <code>MultiSelect</code> mode. */ listItems : {type : "sap.m.ListItemBase[]"}, /** * Indicates whether the <code>listItem</code> parameter is selected or not. */ selected : {type : "boolean"}, /** * Indicates whether the select all action is triggered or not. */ selectAll : {type : "boolean"} } } } }, renderer: { apiVersion: 2, render: function () { } } }); SelectDialogBase.getInvisibleText = function() { if (!this.oInvisibleText) { this.oInvisibleText = new InvisibleText({ text: Library.getResourceBundleFor("sap.m").getText("SELECTDIALOGBASE_LISTLABEL") }).toStatic(); } return this.oInvisibleText; }; SelectDialogBase.getSelectionIndicatorInvisibleText = function() { if (!this._oSelectionIndicatorInvisibleText) { this._oSelectionIndicatorInvisibleText = new InvisibleText().toStatic(); } return this._oSelectionIndicatorInvisibleText; }; SelectDialogBase.prototype.updateDialogAriaDescribedBy = function() { const oSelectionIndicatorInvisibleText = SelectDialogBase.getSelectionIndicatorInvisibleText(); if (oSelectionIndicatorInvisibleText.getText()) { if (!this._oDialog.getAriaDescribedBy().includes(oSelectionIndicatorInvisibleText.getId())) { this._oDialog.addAriaDescribedBy(oSelectionIndicatorInvisibleText); } } else { this._oDialog.removeAriaDescribedBy(oSelectionIndicatorInvisibleText); } }; SelectDialogBase.prototype._getInitialFocus = function () { switch (this.getInitialFocus()) { case SelectDialogInitialFocus.SearchField: return this._oSearchField; default: { const oList = this._oDialog.getContent()[1]; return oList?.getSelectedItem?.() || oList?.getItems?.()[0] || oList; } } }; /** * @override */ SelectDialogBase.prototype.addCustomData = function (aCustomData) { Control.prototype.addCustomData.apply(this, arguments); const mSettings = this.data("sap-ui-custom-settings"); const oDt = mSettings && mSettings["sap.ui.dt"]; const sDesigntime = oDt && oDt.designtime; if (sDesigntime && this._oDialog) { this._oDialog.data("sap-ui-custom-settings", { "sap.ui.dt": { designtime: sDesigntime } }); } return this; }; return SelectDialogBase; });