@openui5/sap.m
Version:
OpenUI5 UI Library sap.m
191 lines (166 loc) • 5.78 kB
JavaScript
/*!
* 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([
"./QueryPanel", "sap/m/Text", "sap/m/SegmentedButton", "sap/m/SegmentedButtonItem", "sap/ui/layout/Grid", "sap/ui/layout/GridData"
], function (QueryPanel, Text, SegmentedButton, SegmentedButtonItem, Grid, GridData) {
"use strict";
/**
* Constructor for a new <code>SortPanel</code>.
*
* @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
* This control can be used to customize personalization content for sorting
* for an associated control instance.
*
* @extends sap.m.p13n.QueryPanel
*
* @author SAP SE
* @version 1.117.4
*
* @public
* @since 1.96
* @alias sap.m.p13n.SortPanel
*/
var SortPanel = QueryPanel.extend("sap.m.p13n.SortPanel", {
metadata: {
properties: {
/**
* A short text describing the panel.
* <b>Note:</b> This text will only be displayed if the panel is being used in a <code>sap.m.p13n.Popup</code>.
*/
title: {
type: "string",
defaultValue: sap.ui.getCore().getLibraryResourceBundle("sap.m").getText("p13n.DEFAULT_TITLE_SORT")
}
},
library: "sap.m"
},
renderer: {
apiVersion: 2
}
});
SortPanel.prototype.PRESENCE_ATTRIBUTE = "sorted";
SortPanel.prototype.CHANGE_REASON_SORTORDER = "sortorder";
/**
* P13n <code>SortItem</code> object type.
*
* @static
* @constant
* @typedef {object} sap.m.p13n.SortItem
* @property {string} name The unique key of the item
* @property {string} label The label describing the personalization item
* @property {boolean} sorted Defines the sorting state of the personalization item
* @property {boolean} descending Defines the descending state of the personalization item
*
* @public
*/
/**
* Sets the personalization state of the panel instance.
* @name sap.m.p13n.SortPanel.setP13nData
* @public
* @function
*
* @param {sap.m.p13n.SortItem} aP13nData An array containing the personalization state
* @returns {sap.m.p13n.SortPanel} The SortPanel instance
*
*/
SortPanel.prototype._createRemoveButton = function () {
var oRemoveBtn = QueryPanel.prototype._createRemoveButton.apply(this, arguments);
oRemoveBtn.setLayoutData(new GridData({
span: "XL3 L3 M3 S4"//on "S" the Asc/Desc text is invisible, we need to increase the size the
}));
return oRemoveBtn;
};
SortPanel.prototype._createOrderSwitch = function (sKey, bDesc) {
var oSortOrderSwitch = new SegmentedButton({
enabled: sKey ? true : false,
layoutData: new GridData({
span: "XL2 L2 M2 S3" //on "S" the Asc/Desc text is invisible, we need to increase the size then
}),
items: [
new SegmentedButtonItem({
key: "asc",
icon: "sap-icon://sort-ascending"
}),
new SegmentedButtonItem({
key: "desc",
icon: "sap-icon://sort-descending"
})
],
select: function (oEvt) {
var sSortOrder = oEvt.getParameter("key");
var oText = oEvt.getSource().getParent().getContent()[2];
oText.setText(this._getSortOrderText(sSortOrder === "desc"));
var sKey = oEvt.oSource.getParent().getContent()[0].getSelectedItem().getKey();
this._changeOrder(sKey, sSortOrder == "desc");
}.bind(this)
});
oSortOrderSwitch.setSelectedItem(bDesc ? oSortOrderSwitch.getItems()[1] : oSortOrderSwitch.getItems()[0]);
return oSortOrderSwitch;
};
SortPanel.prototype._createSortOrderText = function (sKey, bDesc) {
return new Text({
layoutData: new GridData({
span: "XL3 L3 M3 S3",
visibleS: false
}),
text: this._getSortOrderText(bDesc)
}).addStyleClass("sapUiTinyMarginTop");
};
SortPanel.prototype._createQueryRowGrid = function(oItem) {
//Enhance row with sort specific controls (Segmented Button + sort order text)
var oSelect = this._createKeySelect(oItem.name);
var oSortOrderSwitch = this._createOrderSwitch(oItem.name, oItem.descending);
var oSortOrderText = this._createSortOrderText(oItem.name, oItem.descending);
return new Grid({
containerQuery: true,
defaultSpan: "XL4 L4 M4 S5",
content: [
oSelect,
oSortOrderSwitch,
oSortOrderText
]
}).addStyleClass("sapUiTinyMargin");
};
SortPanel.prototype._getPlaceholderText = function () {
return this._getResourceText("p13n.SORT_PLACEHOLDER");
};
SortPanel.prototype._getRemoveButtonTooltipText = function () {
return this._getResourceText("p13n.SORT_REMOVEICONTOOLTIP");
};
SortPanel.prototype._getRemoveButtonAnnouncementText = function () {
return this._getResourceText("p13n.SORT_REMOVEICONANNOUNCE");
};
SortPanel.prototype._selectKey = function(oComboBox) {
QueryPanel.prototype._selectKey.apply(this, arguments);
//Enable SegmentedButton
var oListItem = oComboBox.getParent().getParent();
var sNewKey = oComboBox.getSelectedKey();
var aContent = oListItem.getContent()[0].getContent();
aContent[1].setEnabled(!!sNewKey);
//keep existing 'sortorder' selection
var bDescending = aContent[1].getSelectedKey() === "desc";
this._changeOrder(sNewKey, bDescending);
};
SortPanel.prototype._getSortOrderText = function(bDesc) {
return bDesc ? this._getResourceText("p13n.SORT_DESCENDING") : this._getResourceText("p13n.SORT_ASCENDING");
};
SortPanel.prototype._changeOrder = function (sKey, bDesc) {
var aItems = this._getP13nModel().getProperty("/items").filter(function (oItem) {
return oItem.name === sKey;
});
if (aItems.length > 0) {
aItems[0].descending = bDesc;
this.fireChange({
reason: this.CHANGE_REASON_SORTORDER,
item: aItems[0]
});
}
};
return SortPanel;
});