@openui5/sap.m
Version:
OpenUI5 UI Library sap.m
1,275 lines (1,133 loc) • 43.7 kB
JavaScript
/*!
* 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.StandardDynamicDateOption.
sap.ui.define([
'sap/base/i18n/date/CalendarWeekNumbering',
'sap/ui/core/Lib',
'sap/ui/core/library',
'sap/ui/core/Item',
'./DynamicDateOption',
'./Label',
'./RadioButton',
'./RadioButtonGroup',
'./Select',
'sap/ui/core/date/UniversalDateUtils',
'sap/ui/core/date/UniversalDate',
'sap/ui/core/date/UI5Date',
'sap/m/DynamicDateValueHelpUIType',
'./library'
],
function(
_CalendarWeekNumbering, // type of `calendarWeekNumbering`
Library,
coreLibrary,
Item,
DynamicDateOption,
Label,
RadioButton,
RadioButtonGroup,
Select,
UniversalDateUtils,
UniversalDate,
UI5Date,
DynamicDateValueHelpUIType,
library
) {
"use strict";
// shortcut for sap.ui.core.VerticalAlign
var VerticalAlign = coreLibrary.VerticalAlign;
/**
* Constructor for a new StandardDynamicDateOption.
*
* @param {string} [sId] id for the new control, generated automatically if no id is given
* @param {object} [mSettings] initial settings for the new control
* @param {string} [mSettings.key] One of the predefined keys identifying the standard dynamic date options
*
* @class
* A control base type.
* @extends sap.m.DynamicDateOption
*
* @author SAP SE
* @version 1.146.0
*
* @private
* @alias sap.m.StandardDynamicDateOption
*/
var StandardDynamicDateOption = DynamicDateOption.extend("sap.m.StandardDynamicDateOption", /** @lends sap.m.StandardDynamicDateOption.prototype */ {
metadata: {
library: "sap.m",
properties: {
/**
* If set, the calendar week numbering is used for display.
* If not set, the calendar week numbering of the global configuration is used.
* @since 1.111.0
*/
calendarWeekNumbering: { type : "sap.base.i18n.date.CalendarWeekNumbering", group : "Appearance", defaultValue: null}
}
}
});
var MIN_VALUE_HELP_INTEGER = 1;
var MAX_VALUE_HELP_INTEGER = 6000;
var Keys = {
"DATE": "DATE",
"DATETIME": "DATETIME",
"DATERANGE": "DATERANGE",
"DATETIMERANGE": "DATETIMERANGE",
"TODAY": "TODAY",
"YESTERDAY": "YESTERDAY",
"TOMORROW": "TOMORROW",
"SPECIFICMONTH": "SPECIFICMONTH",
"SPECIFICMONTHINYEAR": "SPECIFICMONTHINYEAR",
"FIRSTDAYWEEK": "FIRSTDAYWEEK",
"LASTDAYWEEK": "LASTDAYWEEK",
"FIRSTDAYMONTH":"FIRSTDAYMONTH",
"LASTDAYMONTH":"LASTDAYMONTH",
"FIRSTDAYQUARTER":"FIRSTDAYQUARTER",
"LASTDAYQUARTER":"LASTDAYQUARTER",
"FIRSTDAYYEAR":"FIRSTDAYYEAR",
"LASTDAYYEAR":"LASTDAYYEAR",
"THISWEEK": "THISWEEK",
"THISMONTH": "THISMONTH",
"THISQUARTER": "THISQUARTER",
"THISYEAR": "THISYEAR",
"LASTWEEK": "LASTWEEK",
"LASTMONTH": "LASTMONTH",
"LASTQUARTER": "LASTQUARTER",
"LASTYEAR": "LASTYEAR",
"NEXTWEEK": "NEXTWEEK",
"NEXTMONTH": "NEXTMONTH",
"NEXTQUARTER": "NEXTQUARTER",
"NEXTYEAR": "NEXTYEAR",
"LASTMINUTES": "LASTMINUTES",
"LASTHOURS": "LASTHOURS",
"LASTDAYS": "LASTDAYS",
"LASTWEEKS": "LASTWEEKS",
"LASTMONTHS": "LASTMONTHS",
"LASTQUARTERS": "LASTQUARTERS",
"LASTYEARS": "LASTYEARS",
"NEXTMINUTES": "NEXTMINUTES",
"NEXTHOURS": "NEXTHOURS",
"NEXTDAYS": "NEXTDAYS",
"NEXTWEEKS": "NEXTWEEKS",
"NEXTMONTHS": "NEXTMONTHS",
"NEXTQUARTERS": "NEXTQUARTERS",
"NEXTYEARS": "NEXTYEARS",
"LASTMINUTESINCLUDED": "LASTMINUTESINCLUDED",
"LASTHOURSINCLUDED": "LASTHOURSINCLUDED",
"LASTDAYSINCLUDED": "LASTDAYSINCLUDED",
"LASTWEEKSINCLUDED": "LASTWEEKSINCLUDED",
"LASTMONTHSINCLUDED": "LASTMONTHSINCLUDED",
"LASTQUARTERSINCLUDED": "LASTQUARTERSINCLUDED",
"LASTYEARSINCLUDED": "LASTYEARSINCLUDED",
"NEXTMINUTESINCLUDED": "NEXTMINUTESINCLUDED",
"NEXTHOURSINCLUDED": "NEXTHOURSINCLUDED",
"NEXTDAYSINCLUDED": "NEXTDAYSINCLUDED",
"NEXTWEEKSINCLUDED": "NEXTWEEKSINCLUDED",
"NEXTMONTHSINCLUDED": "NEXTMONTHSINCLUDED",
"NEXTQUARTERSINCLUDED": "NEXTQUARTERSINCLUDED",
"NEXTYEARSINCLUDED": "NEXTYEARSINCLUDED",
"FROM": "FROM",
"TO": "TO",
"FROMDATETIME": "FROMDATETIME",
"TODATETIME": "TODATETIME",
"YEARTODATE": "YEARTODATE",
"DATETOYEAR":"DATETOYEAR",
"TODAYFROMTO": "TODAYFROMTO",
"QUARTER1": "QUARTER1",
"QUARTER2": "QUARTER2",
"QUARTER3": "QUARTER3",
"QUARTER4": "QUARTER4"
};
var _Groups = {
"SingleDates": 1,
"DateRanges": 2,
"Weeks": 3,
"Months": 4,
"Quarters": 5,
"Years": 6
};
var _OptionsGroup = {
"DATE": _Groups.SingleDates,
"DATETIME": _Groups.SingleDates,
"DATERANGE": _Groups.DateRanges,
"DATETIMERANGE": _Groups.DateRanges,
"TODAY": _Groups.SingleDates,
"YESTERDAY": _Groups.SingleDates,
"TOMORROW": _Groups.SingleDates,
"SPECIFICMONTH": _Groups.Months,
"SPECIFICMONTHINYEAR": _Groups.Months,
"FIRSTDAYWEEK": _Groups.SingleDates,
"LASTDAYWEEK": _Groups.SingleDates,
"FIRSTDAYMONTH":_Groups.SingleDates,
"LASTDAYMONTH":_Groups.SingleDates,
"FIRSTDAYQUARTER":_Groups.SingleDates,
"LASTDAYQUARTER":_Groups.SingleDates,
"FIRSTDAYYEAR":_Groups.SingleDates,
"LASTDAYYEAR":_Groups.SingleDates,
"THISWEEK": _Groups.Weeks,
"THISMONTH": _Groups.Months,
"THISQUARTER": _Groups.Quarters,
"THISYEAR": _Groups.Years,
"LASTWEEK": _Groups.Weeks,
"LASTMONTH": _Groups.Months,
"LASTQUARTER": _Groups.Quarters,
"LASTYEAR": _Groups.Years,
"NEXTWEEK": _Groups.Weeks,
"NEXTMONTH": _Groups.Months,
"NEXTQUARTER": _Groups.Quarters,
"NEXTYEAR": _Groups.Years,
"LASTMINUTES": _Groups.DateRanges,
"LASTHOURS": _Groups.DateRanges,
"LASTDAYS": _Groups.DateRanges,
"LASTWEEKS": _Groups.DateRanges,
"LASTMONTHS": _Groups.DateRanges,
"LASTQUARTERS": _Groups.DateRanges,
"LASTYEARS": _Groups.DateRanges,
"NEXTMINUTES": _Groups.DateRanges,
"NEXTHOURS": _Groups.DateRanges,
"NEXTDAYS": _Groups.DateRanges,
"NEXTWEEKS": _Groups.DateRanges,
"NEXTMONTHS": _Groups.DateRanges,
"NEXTQUARTERS": _Groups.DateRanges,
"NEXTYEARS": _Groups.DateRanges,
"LASTMINUTESINCLUDED": _Groups.DateRanges,
"LASTHOURSINCLUDED": _Groups.DateRanges,
"LASTDAYSINCLUDED": _Groups.DateRanges,
"LASTWEEKSINCLUDED": _Groups.DateRanges,
"LASTMONTHSINCLUDED": _Groups.DateRanges,
"LASTQUARTERSINCLUDED": _Groups.DateRanges,
"LASTYEARSINCLUDED": _Groups.DateRanges,
"NEXTMINUTESINCLUDED": _Groups.DateRanges,
"NEXTHOURSINCLUDED": _Groups.DateRanges,
"NEXTDAYSINCLUDED": _Groups.DateRanges,
"NEXTWEEKSINCLUDED": _Groups.DateRanges,
"NEXTMONTHSINCLUDED": _Groups.DateRanges,
"NEXTQUARTERSINCLUDED": _Groups.DateRanges,
"NEXTYEARSINCLUDED": _Groups.DateRanges,
"FROM": _Groups.DateRanges,
"TO": _Groups.DateRanges,
"FROMDATETIME": _Groups.DateRanges,
"TODATETIME": _Groups.DateRanges,
"YEARTODATE": _Groups.DateRanges,
"DATETOYEAR": _Groups.DateRanges,
"TODAYFROMTO": _Groups.DateRanges,
"QUARTER1": _Groups.Quarters,
"QUARTER2": _Groups.Quarters,
"QUARTER3": _Groups.Quarters,
"QUARTER4": _Groups.Quarters
};
var aLastOptions = ["LASTMINUTES", "LASTHOURS", "LASTDAYS", "LASTWEEKS", "LASTMONTHS", "LASTQUARTERS", "LASTYEARS"];
var aNextOptions = ["NEXTMINUTES", "NEXTHOURS", "NEXTDAYS", "NEXTWEEKS", "NEXTMONTHS", "NEXTQUARTERS", "NEXTYEARS"];
var aLastIncludedOptions = ["LASTMINUTESINCLUDED", "LASTHOURSINCLUDED", "LASTDAYSINCLUDED", "LASTWEEKSINCLUDED", "LASTMONTHSINCLUDED", "LASTQUARTERSINCLUDED", "LASTYEARSINCLUDED"];
var aNextIncludedOptions = ["NEXTMINUTESINCLUDED", "NEXTHOURSINCLUDED", "NEXTDAYSINCLUDED", "NEXTWEEKSINCLUDED", "NEXTMONTHSINCLUDED", "NEXTQUARTERSINCLUDED", "NEXTYEARSINCLUDED"];
StandardDynamicDateOption.LastXKeys = aLastOptions.concat(aLastIncludedOptions);
StandardDynamicDateOption.NextXKeys = aNextOptions.concat(aNextIncludedOptions);
var _resourceBundle = Library.getResourceBundleFor("sap.m");
StandardDynamicDateOption.Keys = Keys;
StandardDynamicDateOption.prototype.exit = function() {
if (this.aValueHelpUITypes) {
while (this.aValueHelpUITypes.length) {
this.aValueHelpUITypes.pop().destroy();
}
delete this.aValueHelpUITypes;
}
};
StandardDynamicDateOption.prototype.getText = function(oControl) {
var sKey = this.getKey();
var oOptions = oControl._getOptions();
var aParams = this.getValueHelpUITypes(oControl);
var oLastOptionParam = this._getOptionParams(aLastOptions, oOptions);
var oLastOptionIncludedParam = this._getOptionIncludedParams(aLastIncludedOptions, oOptions);
var oNextOptionParam = this._getOptionParams(aNextOptions, oOptions);
var oNextOptionIncludedParam = this._getOptionIncludedParams(aNextIncludedOptions, oOptions);
if (oLastOptionParam) {
aParams.push(oLastOptionParam);
}
if (oLastOptionIncludedParam) {
aParams.push(oLastOptionIncludedParam);
}
if (oNextOptionParam) {
aParams.push(oNextOptionParam);
}
if (oNextOptionIncludedParam) {
aParams.push(oNextOptionIncludedParam);
}
switch (sKey) {
case Keys.LASTMINUTES:
case Keys.LASTHOURS:
case Keys.LASTDAYS:
case Keys.LASTWEEKS:
case Keys.LASTMONTHS:
case Keys.LASTQUARTERS:
case Keys.LASTYEARS:
case Keys.NEXTMINUTES:
case Keys.NEXTHOURS:
case Keys.NEXTDAYS:
case Keys.NEXTWEEKS:
case Keys.NEXTMONTHS:
case Keys.NEXTQUARTERS:
case Keys.NEXTYEARS:
case Keys.LASTMINUTESINCLUDED:
case Keys.LASTHOURSINCLUDED:
case Keys.LASTDAYSINCLUDED:
case Keys.LASTWEEKSINCLUDED:
case Keys.LASTMONTHSINCLUDED:
case Keys.LASTQUARTERSINCLUDED:
case Keys.LASTYEARSINCLUDED:
case Keys.NEXTMINUTESINCLUDED:
case Keys.NEXTHOURSINCLUDED:
case Keys.NEXTDAYSINCLUDED:
case Keys.NEXTWEEKSINCLUDED:
case Keys.NEXTMONTHSINCLUDED:
case Keys.NEXTQUARTERSINCLUDED:
case Keys.NEXTYEARSINCLUDED:
return this._getXPeriodTitle(aParams[1].getOptions());
case Keys.FROMDATETIME:
case Keys.TODATETIME:
case Keys.DATETIMERANGE:
return oControl._findOption(sKey)._bAdditionalTimeText ?
_resourceBundle.getText("DYNAMIC_DATE_" + sKey + "_TITLE") + " (" + _resourceBundle.getText("DYNAMIC_DATE_DATETIME_TITLE") + ")" :
_resourceBundle.getText("DYNAMIC_DATE_" + sKey + "_TITLE");
default:
return _resourceBundle.getText("DYNAMIC_DATE_" + sKey + "_TITLE");
}
};
StandardDynamicDateOption.prototype.getValueHelpUITypes = function(oControl) {
var sKey = this.getKey();
if (!this.aValueHelpUITypes) { //the empty array is still an initialized value and can be reused
switch (sKey) {
case Keys.TODAY:
case Keys.YESTERDAY:
case Keys.TOMORROW:
case Keys.FIRSTDAYWEEK:
case Keys.LASTDAYWEEK:
case Keys.FIRSTDAYMONTH:
case Keys.LASTDAYMONTH:
case Keys.FIRSTDAYQUARTER:
case Keys.LASTDAYQUARTER:
case Keys.FIRSTDAYYEAR:
case Keys.LASTDAYYEAR:
case Keys.THISWEEK:
case Keys.THISMONTH:
case Keys.THISQUARTER:
case Keys.THISYEAR:
case Keys.LASTWEEK:
case Keys.LASTMONTH:
case Keys.LASTQUARTER:
case Keys.LASTYEAR:
case Keys.NEXTWEEK:
case Keys.NEXTMONTH:
case Keys.NEXTQUARTER:
case Keys.NEXTYEAR:
case Keys.YEARTODATE:
case Keys.DATETOYEAR:
case Keys.QUARTER1:
case Keys.QUARTER2:
case Keys.QUARTER3:
case Keys.QUARTER4:
this.aValueHelpUITypes = [];
break;
case Keys.DATETIME:
case Keys.FROMDATETIME:
case Keys.TODATETIME:
this.aValueHelpUITypes = [
new DynamicDateValueHelpUIType({
type: "datetime"
})];
break;
case Keys.DATE:
case Keys.FROM:
case Keys.TO:
this.aValueHelpUITypes = [
new DynamicDateValueHelpUIType({
type: "date"
})];
break;
case Keys.DATERANGE:
this.aValueHelpUITypes = [
new DynamicDateValueHelpUIType({
type: "daterange"
})];
break;
case Keys.SPECIFICMONTH:
this.aValueHelpUITypes = [
new DynamicDateValueHelpUIType({
type: "month"
})];
break;
case Keys.SPECIFICMONTHINYEAR:
this.aValueHelpUITypes = [
new DynamicDateValueHelpUIType({
type: "custommonth"
})];
break;
case Keys.LASTMINUTES:
case Keys.LASTHOURS:
case Keys.LASTDAYS:
case Keys.LASTWEEKS:
case Keys.LASTMONTHS:
case Keys.LASTQUARTERS:
case Keys.LASTYEARS:
case Keys.NEXTMINUTES:
case Keys.NEXTHOURS:
case Keys.NEXTDAYS:
case Keys.NEXTWEEKS:
case Keys.NEXTMONTHS:
case Keys.NEXTQUARTERS:
case Keys.NEXTYEARS:
case Keys.LASTMINUTESINCLUDED:
case Keys.LASTHOURSINCLUDED:
case Keys.LASTDAYSINCLUDED:
case Keys.LASTWEEKSINCLUDED:
case Keys.LASTMONTHSINCLUDED:
case Keys.LASTQUARTERSINCLUDED:
case Keys.LASTYEARSINCLUDED:
case Keys.NEXTMINUTESINCLUDED:
case Keys.NEXTHOURSINCLUDED:
case Keys.NEXTDAYSINCLUDED:
case Keys.NEXTWEEKSINCLUDED:
case Keys.NEXTMONTHSINCLUDED:
case Keys.NEXTQUARTERSINCLUDED:
case Keys.NEXTYEARSINCLUDED:
this.aValueHelpUITypes = [
new DynamicDateValueHelpUIType({
text: _resourceBundle.getText("DDR_LASTNEXTX_LABEL"),
type: "int"
})];
break;
case Keys.TODAYFROMTO:
this.aValueHelpUITypes = [
new DynamicDateValueHelpUIType({
text: _resourceBundle.getText("DDR_TODAYFROMTO_FROM_LABEL"),
type: "int",
additionalText: _resourceBundle.getText("DDR_TODAYFROMTO_TO_ADDITIONAL_LABEL")
}),
new DynamicDateValueHelpUIType({
text: _resourceBundle.getText("DDR_TODAYFROMTO_TO_LABEL"),
type: "int",
additionalText: _resourceBundle.getText("DDR_TODAYFROMTO_TO_ADDITIONAL_LABEL")
})];
break;
case Keys.DATETIMERANGE:
this.aValueHelpUITypes = [
new DynamicDateValueHelpUIType({
text: _resourceBundle.getText("DDR_DATETIMERANGE_FROM_LABEL"),
type: "datetime"
}),
new DynamicDateValueHelpUIType({
text: _resourceBundle.getText("DDR_DATETIMERANGE_TO_LABEL"),
type: "datetime"
})];
break;
}
}
return this.aValueHelpUITypes.slice(0);
};
/**
* Creates a UI for this DynamicDateOption.
* @param {sap.m.DynamicDateRange} oControl to create the UI for
* @param {function} fnControlsUpdated A callback invoked when any of the created controls updates its value
*
* @return {sap.ui.core.Control[]} Returns an array of controls which is mapped to the parameters of this DynamicDateOption.
*/
StandardDynamicDateOption.prototype.createValueHelpUI = function(oControl, fnControlsUpdated) {
var oOptions = oControl._getOptions(),
oValue = oControl.getValue() && Object.assign({}, oControl.getValue()),
aParams = this.getValueHelpUITypes(oControl),
aControls = [],
oCurrentLabel,
sCalendarWeekNumbering = oControl.getCalendarWeekNumbering();
if (!oControl.aControlsByParameters) {
oControl.aControlsByParameters = {};
}
oControl.aControlsByParameters[this.getKey()] = [];
var oLastOptionParam = this._getOptionParams(aLastOptions, oOptions);
var oLastOptionIncludedParam = this._getOptionIncludedParams(aLastIncludedOptions, oOptions);
var oNextOptionParam = this._getOptionParams(aNextOptions, oOptions);
var oNextOptionIncludedParam = this._getOptionIncludedParams(aNextIncludedOptions, oOptions);
if (oLastOptionParam) {
aParams.push(oLastOptionParam);
}
if (oLastOptionIncludedParam) {
aParams.push(oLastOptionIncludedParam);
}
if (oNextOptionParam) {
aParams.push(oNextOptionParam);
}
if (oNextOptionIncludedParam) {
aParams.push(oNextOptionIncludedParam);
}
if (oValue && oValue.values) {
oValue.values = oValue.values.map(function(val) {
return val;
});
}
for (var iIndex = 0; iIndex < aParams.length; iIndex++) {
oCurrentLabel = null;
if (aParams[iIndex].getOptions() && aParams[iIndex].getOptions().length <= 1 && aParams[iIndex].getOptions().indexOf("included") !== -1) {
break;
} else if (aParams[ iIndex ].getText()) {
oCurrentLabel = new Label({
text: aParams[ iIndex ].getText(),
width: "100%"
});
aControls.push(oCurrentLabel);
}
var oInputControl;
switch (aParams[iIndex].getType()) {
case "int":
oInputControl = this._createIntegerControl(oValue, iIndex, fnControlsUpdated);
var bHasLastNextOption = oValue && aParams[1] && aParams[1].getOptions() && (aParams[1].getOptions().indexOf(oValue.operator.slice(4).toLowerCase()) !== -1 || aParams[1].getOptions().indexOf(oValue.operator.slice(4).toLowerCase().replace("included", "")) !== -1);
if (bHasLastNextOption) {
oInputControl.setValue(oValue.values[iIndex]);
}
break;
case "date":
oInputControl = this._createDateControl(oValue, iIndex, fnControlsUpdated, sCalendarWeekNumbering);
break;
case "datetime":
if (aParams.length === 1) {
// creates "single" DateTime option (embedded in the DynamicDateRange popup)
oInputControl = this._createDateTimeInnerControl(oValue, iIndex, fnControlsUpdated, sCalendarWeekNumbering);
} else if (aParams.length === 2) {
oInputControl = this._createDateTimeControl(oValue, iIndex, fnControlsUpdated, sCalendarWeekNumbering);
}
break;
case "daterange":
oInputControl = this._createDateRangeControl(oValue, iIndex, fnControlsUpdated, sCalendarWeekNumbering);
break;
case "month":
oInputControl = this._createMonthControl(oValue, iIndex, fnControlsUpdated);
break;
case "custommonth":
oInputControl = this._createCustomMonthControl(oValue, iIndex, fnControlsUpdated);
break;
case "options":
oInputControl = this._createOptionsControl(oValue, iIndex, fnControlsUpdated, aParams);
break;
case "included":
oInputControl = this._createIncludedControl(oValue, fnControlsUpdated);
break;
default:
break;
}
aControls.push(oInputControl);
if (oCurrentLabel) {
oCurrentLabel.setLabelFor(oInputControl);
}
if (aParams[iIndex].getAdditionalText()) {
aControls.push(
new Label({
vAlign: VerticalAlign.Bottom,
text: aParams[iIndex].getAdditionalText()
}).addStyleClass("sapMDDRAdditionalLabel")
);
}
oControl.aControlsByParameters[this.getKey()].push(oInputControl);
}
return aControls;
};
StandardDynamicDateOption.prototype._createIntegerControl = function(oValue, iIndex, fnControlsUpdated) {
var oControl = DynamicDateOption.prototype._createIntegerControl.call(this, oValue, iIndex, fnControlsUpdated);
var iMin = this.getKey() === "TODAYFROMTO" ? 0 : MIN_VALUE_HELP_INTEGER;
var bUseDefaultValue = !oValue || this.getKey() !== oValue.operator;
if (bUseDefaultValue) {
oControl.setValue(1);
}
oControl.setMin(iMin);
oControl.setMax(MAX_VALUE_HELP_INTEGER);
return oControl;
};
StandardDynamicDateOption.prototype._createOptionsControl = function(oValue, iIndex, fnControlsUpdated, aParameters) {
const aOptions = aParameters[iIndex].getOptions();
const aOptionsStrings = aOptions.map(function(sOption) {
let sOptionName = sOption;
if (sOptionName.indexOf("included") !== -1) {
sOptionName = sOptionName.replace("included", "");
}
if (aOptions.indexOf(sOption) !== -1 && aOptions.indexOf(sOptionName) !== -1 && sOptionName !== sOption) {
return "";
}
return sOptionName.toUpperCase();
});
const aFilteredOptions = aOptionsStrings.filter(function(str) {
return str !== "";
});
var oControl = new Select({
items: [
aFilteredOptions.map(makeSelectOption)
]
});
oControl.setSelectedKey(oControl.getAggregation("items")[0].getKey());
if (oValue) {
const aOptionsArray = aParameters[iIndex].getOptions();
for (let i = 0; i < aOptionsArray.length; i++) {
if (aOptionsArray[i].indexOf("included") !== -1) {
aOptionsArray[i] = aOptionsArray[i].replace("included", "");
}
const iLastIndexOfOption = aOptionsArray.lastIndexOf(aOptionsArray[i]);
if (i !== iLastIndexOfOption) {
aOptionsArray.splice(iLastIndexOfOption, 1);
}
}
var sKey = oValue.operator.slice(4).replace("INCLUDED", ""),
iOptionIndex = aOptionsArray.indexOf(sKey?.toLowerCase());
if (iOptionIndex !== -1) {
oControl.setSelectedKey(sKey);
}
}
if (fnControlsUpdated instanceof Function) {
oControl.attachChange(function() {
fnControlsUpdated(this);
}, this);
}
return oControl;
};
StandardDynamicDateOption.prototype._createIncludedControl = function(oValue, fnControlsUpdated) {
const oRadioButtonGroup = new RadioButtonGroup({
columns: 1,
buttons: [
new RadioButton({
text: _resourceBundle.getText("DDR_LASTNEXTX_EXCLUDE_LABEL"),
selected: true
}),
new RadioButton({
text: _resourceBundle.getText("DDR_LASTNEXTX_INCLUDE_LABEL")
})
]
});
if (oValue && oValue.operator.indexOf("INCLUDED") > -1) {
oRadioButtonGroup.setSelectedIndex(1);
}
if (fnControlsUpdated instanceof Function) {
oRadioButtonGroup.attachSelect(function() {
fnControlsUpdated(this);
}, this);
}
this._oInternalIncludedControl = oRadioButtonGroup;
return oRadioButtonGroup;
};
StandardDynamicDateOption.prototype._getOptionParams = function(aGroupOptions, oOptions){
if (aGroupOptions.indexOf(this.getKey()) !== -1) {
return new DynamicDateValueHelpUIType({
text: _resourceBundle.getText("DDR_LASTNEXTX_TIME_UNIT_LABEL"),
type: "options",
options: oOptions ? oOptions.filter(function(option) {
return aGroupOptions.indexOf(option.getKey()) !== -1 || aGroupOptions.indexOf(option.getKey().replace("INCLUDED", "")) !== -1;
}).map(function(option) {
return option.getKey().slice(4).toLowerCase();
}) : []
});
}
return undefined;
};
StandardDynamicDateOption.prototype._getOptionIncludedParams = function(aGroupOptions, oOptions){
if (aGroupOptions.indexOf(this.getKey() + "INCLUDED") !== -1) {
return new DynamicDateValueHelpUIType({
text: _resourceBundle.getText("DDR_LASTNEXTX_TIME_PERIODS_LABEL"),
type: "included",
options: oOptions ? oOptions.filter(function(option) {
return aGroupOptions.indexOf(option.getKey()) !== -1;
}).map(function(option) {
return option.getKey().slice(4).toLowerCase();
}) : []
});
}
if (aGroupOptions.indexOf(this.getKey()) !== -1) {
return new DynamicDateValueHelpUIType({
text: _resourceBundle.getText("DDR_LASTNEXTX_TIME_UNIT_LABEL"),
type: "options",
options: oOptions ? oOptions.filter(function(option) {
return aGroupOptions.indexOf(option.getKey()) !== -1;
}).map(function(option) {
return option.getKey().replace("INCLUDED", "").slice(4).toLowerCase();
}) : []
});
}
return undefined;
};
/**
* Validates all input controls in the value help UI related to the current option.
* If one of the input controls contains invalid value, then validation will return <code>false</code>.
* If all input controls contain valid value, then the validation will return <code>true</code>.
*
* @public
* @param {sap.m.DynamicDateRange} oControl The control instance
* @returns {boolean} value help UI validity indicator
*/
StandardDynamicDateOption.prototype.validateValueHelpUI = function(oControl) {
var aParams = this.getValueHelpUITypes();
for (var i = 0; i < aParams.length; i++) {
var oInputControl = oControl.aControlsByParameters[this.getKey()][i];
switch (aParams[i].getType()) {
case "int":
if (oInputControl._isLessThanMin(oInputControl.getValue()) ||
oInputControl._isMoreThanMax(oInputControl.getValue())) {
return false;
}
break;
case "month":
case "custommonth":
case "date":
case "daterange":
if (!oInputControl.getSelectedDates() || oInputControl.getSelectedDates().length == 0) {
return false;
}
break;
case "datetime":
if (aParams.length === 1) {
// validates "single" DateTime option (embedded in the DynamicDateRange popup)
if (!oInputControl.getCalendar().getSelectedDates() || oInputControl.getCalendar().getSelectedDates().length == 0) {
return false;
}
} else if (!oInputControl.getDateValue() && aParams.length === 2) {
return false;
}
break;
case "options":
if (oInputControl.getSelectedIndex() < 0) {
return false;
}
break;
default:
break;
}
}
return true;
};
// Gets the output for each input parameter.
// Returns an object { operator: "KEY", values: [] (mapped positionally to each input control) }.
StandardDynamicDateOption.prototype.getValueHelpOutput = function(oControl) {
var oOptions = oControl._getOptions();
var aParams = this.getValueHelpUITypes(oControl),
bHasIncludedControl = oControl.aControlsByParameters && oControl.aControlsByParameters[this.getKey()] && oControl.aControlsByParameters[this.getKey()].length > 1,
bHasLastOption = aLastOptions.indexOf(this.getKey()) !== -1 || aLastIncludedOptions.indexOf(this.getKey()) !== -1,
bHasNextOption = aNextOptions.indexOf(this.getKey()) !== -1 || aNextIncludedOptions.indexOf(this.getKey()) !== -1,
aResult = {},
vOutput;
if (bHasLastOption && bHasIncludedControl) {
aResult.operator = oOptions.filter(function(option) {
return this._shouldAddLastOrNextOption(oOptions, option, aLastOptions);
}.bind(this))[oControl.aControlsByParameters[this.getKey()][1].getSelectedIndex()].getKey();
} else if (bHasNextOption && bHasIncludedControl) {
aResult.operator = oOptions.filter(function(option) {
return this._shouldAddLastOrNextOption(oOptions, option, aNextOptions);
}.bind(this))[oControl.aControlsByParameters[this.getKey()][1].getSelectedIndex()].getKey();
} else {
aResult.operator = this.getKey();
}
if (aLastOptions.indexOf(this.getKey()) !== -1 || aNextOptions.indexOf(this.getKey()) !== -1) {
const bCurrentOptionHasAlsoIncluded = oControl.getStandardOptions().indexOf(aResult.operator + "INCLUDED") > -1;
const oRadioButtonGroup = oControl.aControlsByParameters && oControl.aControlsByParameters[this.getKey()] && oControl.aControlsByParameters[this.getKey()][2];
const bIncludedRadioButtonIsSelected = oRadioButtonGroup ? oRadioButtonGroup.getSelectedIndex() === 1 : false;
if (bIncludedRadioButtonIsSelected && bCurrentOptionHasAlsoIncluded) {
aResult.operator = aResult.operator + "INCLUDED";
}
}
aResult.values = [];
if (!oControl.aControlsByParameters || !oControl.aControlsByParameters[this.getKey()]) {
return aResult;
}
for (var i = 0; i < aParams.length; i++) {
var oInputControl = oControl.aControlsByParameters[this.getKey()][i];
switch (aParams[i].getType()) {
case "int":
vOutput = oInputControl.getValue();
break;
case "month":
if (!oInputControl.getSelectedDates() || !oInputControl.getSelectedDates().length) {
return null;
}
vOutput = oInputControl.getSelectedDates()[0].getStartDate().getMonth();
break;
case "custommonth":
if (!oInputControl.getSelectedDates() || !oInputControl.getSelectedDates().length) {
return null;
}
vOutput = [oInputControl.getSelectedDates()[0].getStartDate().getMonth(), oInputControl.getSelectedDates()[0].getStartDate().getFullYear()];
break;
case "date":
if (!oInputControl.getSelectedDates().length) {
return null;
}
vOutput = oInputControl.getSelectedDates()[0].getStartDate();
break;
case "datetime":
if (aParams.length === 1) {
// "single" DateTime picker (embedded in the DynamicDateRange popup)
var oDate,
oTimeDate,
oCalendar,
oClocks;
oCalendar = oInputControl.getCalendar();
oClocks = oInputControl.getClocks();
if (!oCalendar.getSelectedDates().length) {
return null;
}
oDate = oCalendar.getSelectedDates()[0].getStartDate();
oTimeDate = oClocks.getTimeValues();
oDate.setHours(oTimeDate.getHours(), oTimeDate.getMinutes(), oTimeDate.getSeconds());
vOutput = oDate;
} else if (aParams.length === 2) {
if (!oInputControl.getDateValue()) {
return null;
}
vOutput = oInputControl.getDateValue();
}
break;
case "daterange":
if (!oInputControl.getSelectedDates().length) {
return null;
}
var oEndDate = oInputControl.getSelectedDates()[0].getEndDate() || oInputControl.getSelectedDates()[0].getStartDate();
vOutput = [oInputControl.getSelectedDates()[0].getStartDate(), oEndDate];
break;
default:
break;
}
if (Array.isArray(vOutput)) {
aResult.values = Array.prototype.concat.apply(aResult.values, vOutput);
} else {
vOutput !== null && vOutput !== undefined && aResult.values.push(vOutput);
}
}
return aResult;
};
StandardDynamicDateOption.prototype._shouldAddLastOrNextOption = function(aOptions, oOption, aTargetOptions) {
let sOptionKey = oOption.getKey();
let iRepetitionCounter = 0;
if (sOptionKey.indexOf("INCLUDED") !== -1) {
iRepetitionCounter++;
sOptionKey = sOptionKey.replace("INCLUDED", "");
}
for (let i = 0; i < aOptions.length; i++) {
if (aOptions[i].getKey() === sOptionKey) {
iRepetitionCounter++;
}
}
return aTargetOptions.indexOf(sOptionKey) !== -1 && iRepetitionCounter === 1;
};
StandardDynamicDateOption.prototype._isLastOrNextOption = function () {
const aLastNextKeys = StandardDynamicDateOption.LastXKeys.concat(StandardDynamicDateOption.NextXKeys);
return aLastNextKeys.includes(this.getKey());
};
StandardDynamicDateOption.prototype.alignValueHelpUI = function(oControl) {
const aControls = oControl.aControlsByParameters[this.getKey()];
const oSelectControl = aControls[1];
const bIsSelectControl = oSelectControl instanceof Select;
if (bIsSelectControl && this._isLastOrNextOption() && oSelectControl.getSelectableItems().length === 1) {
oSelectControl.setVisible(false);
const oSelectControlLabel = oControl.aInputControls[2];
oSelectControlLabel.setVisible(false);
}
const bHasIncludedLastOptions = aLastOptions.indexOf(this.getKey()) !== -1 && oControl.aControlsByParameters[Object.keys(oControl.aControlsByParameters)[0]].length > 1;
const bHasIncludedNextOptions = aNextOptions.indexOf(this.getKey()) !== -1 && oControl.aControlsByParameters[Object.keys(oControl.aControlsByParameters)[0]].length > 1;
const bHasRadioButtons = bHasIncludedLastOptions || bHasIncludedNextOptions;
if (!bHasRadioButtons) {
return;
}
const sSelectedOption = oSelectControl.getSelectedKey();
const sFullOptionName = this.getKey().slice(0,4) + sSelectedOption.toUpperCase();
const oRadioButtonGroup = aControls[2];
const oIncludedControlLabel = oControl.aInputControls[4];
if (oControl.getStandardOptions().indexOf(sFullOptionName + "INCLUDED") !== -1 && oControl.getStandardOptions().indexOf(sFullOptionName) !== -1) {
oRadioButtonGroup?.setVisible(true);
oIncludedControlLabel?.setVisible(true);
} else {
oRadioButtonGroup?.setVisible(false);
oIncludedControlLabel?.setVisible(false);
}
};
StandardDynamicDateOption.prototype.getGroup = function() {
return _OptionsGroup[this.getKey()];
};
StandardDynamicDateOption.prototype.getGroupHeader = function() {
return _resourceBundle.getText("DDR_OPTIONS_GROUP_" + _OptionsGroup[this.getKey()]);
};
StandardDynamicDateOption.prototype.format = function(oObj, oFormatter) {
return oFormatter.format(oObj, true);
};
StandardDynamicDateOption.prototype.parse = function(sValue, oFormatter) {
return oFormatter.parse(sValue, this.getKey());
};
StandardDynamicDateOption.prototype.toDates = function(oValue, sCalendarWeekNumbering) {
if (!oValue) {
return null;
}
var sKey = oValue.operator;
var iParamLastNext = oValue.values[0] || 0;
switch (sKey) {
case "SPECIFICMONTH":
var oDate = new UniversalDate();
oDate.setMonth(oValue.values[0]);
oDate = UniversalDateUtils.getMonthStartDate(oDate);
return UniversalDateUtils.getRange(0, "MONTH", oDate);
case "SPECIFICMONTHINYEAR":
var oDate = new UniversalDate();
oDate.setMonth(oValue.values[0]);
oDate.setFullYear(oValue.values[1]);
oDate = UniversalDateUtils.getMonthStartDate(oDate);
return UniversalDateUtils.getRange(0, "MONTH", oDate);
case "DATE":
return UniversalDateUtils.getRange(0, "DAY", UniversalDate.getInstance(oValue.values[0]));
case "DATETIME":
var oDateTime = new UniversalDate.getInstance(oValue.values[0]);
return [oDateTime, oDateTime];
case "DATERANGE":
var oStart = UniversalDate.getInstance(oValue.values[0]);
var oEnd = UniversalDate.getInstance(oValue.values[1]);
return [UniversalDateUtils.resetStartTime(oStart), UniversalDateUtils.resetEndTime(oEnd)];
case "DATETIMERANGE":
var oStart = UniversalDate.getInstance(oValue.values[0]);
var oEnd = UniversalDate.getInstance(oValue.values[1]);
oStart.setMilliseconds(0);
oEnd.setMilliseconds(999);
return [oStart, oEnd];
case "TODAY":
return UniversalDateUtils.ranges.today();
case "YESTERDAY":
return UniversalDateUtils.ranges.yesterday();
case "TOMORROW":
return UniversalDateUtils.ranges.tomorrow();
case "FIRSTDAYWEEK":
return UniversalDateUtils.ranges.firstDayOfWeek(sCalendarWeekNumbering);
case "LASTDAYWEEK":
return UniversalDateUtils.ranges.lastDayOfWeek(sCalendarWeekNumbering);
case "FIRSTDAYMONTH":
return UniversalDateUtils.ranges.firstDayOfMonth();
case "LASTDAYMONTH":
return UniversalDateUtils.ranges.lastDayOfMonth();
case "FIRSTDAYQUARTER":
return UniversalDateUtils.ranges.firstDayOfQuarter();
case "LASTDAYQUARTER":
return UniversalDateUtils.ranges.lastDayOfQuarter();
case "FIRSTDAYYEAR":
return UniversalDateUtils.ranges.firstDayOfYear();
case "LASTDAYYEAR":
return UniversalDateUtils.ranges.lastDayOfYear();
case "THISWEEK":
return UniversalDateUtils.ranges.currentWeek(sCalendarWeekNumbering);
case "THISMONTH":
return UniversalDateUtils.ranges.currentMonth();
case "THISQUARTER":
return UniversalDateUtils.ranges.currentQuarter();
case "THISYEAR":
return UniversalDateUtils.ranges.currentYear();
case "LASTWEEK":
return UniversalDateUtils.ranges.lastWeek(sCalendarWeekNumbering);
case "LASTMONTH":
return UniversalDateUtils.ranges.lastMonth();
case "LASTQUARTER":
return UniversalDateUtils.ranges.lastQuarter();
case "LASTYEAR":
return UniversalDateUtils.ranges.lastYear();
case "NEXTWEEK":
return UniversalDateUtils.ranges.nextWeek(sCalendarWeekNumbering);
case "NEXTMONTH":
return UniversalDateUtils.ranges.nextMonth();
case "NEXTQUARTER":
return UniversalDateUtils.ranges.nextQuarter();
case "NEXTYEAR":
return UniversalDateUtils.ranges.nextYear();
case "LASTMINUTES":
return UniversalDateUtils.ranges.lastMinutes(iParamLastNext);
case "LASTHOURS":
return UniversalDateUtils.ranges.lastHours(iParamLastNext);
case "LASTDAYS":
return UniversalDateUtils.ranges.lastDays(iParamLastNext);
case "LASTWEEKS":
return UniversalDateUtils.ranges.lastWeeks(iParamLastNext, sCalendarWeekNumbering);
case "LASTMONTHS":
return UniversalDateUtils.ranges.lastMonths(iParamLastNext);
case "LASTQUARTERS":
return UniversalDateUtils.ranges.lastQuarters(iParamLastNext);
case "LASTYEARS":
return UniversalDateUtils.ranges.lastYears(iParamLastNext);
case "LASTMINUTESINCLUDED":
var oResultValues = UniversalDateUtils.ranges.lastMinutes(iParamLastNext - 1);
oResultValues[0].setSeconds(0);
return oResultValues;
case "LASTHOURSINCLUDED":
var oResultValues = UniversalDateUtils.ranges.lastHours(iParamLastNext - 1);
oResultValues[0].setMinutes(0, 0);
return oResultValues;
case "LASTDAYSINCLUDED":
var oResultValues = UniversalDateUtils.ranges.lastDays(iParamLastNext - 1);
oResultValues[1] = UniversalDate.getInstance(UI5Date.getInstance());
return oResultValues;
case "LASTWEEKSINCLUDED":
var oResultValues = UniversalDateUtils.ranges.lastWeeks(iParamLastNext - 1, sCalendarWeekNumbering);
oResultValues[1] = UniversalDate.getInstance(UI5Date.getInstance());
return oResultValues;
case "LASTMONTHSINCLUDED":
var oResultValues = UniversalDateUtils.ranges.lastMonths(iParamLastNext - 1);
oResultValues[1] = UniversalDate.getInstance(UI5Date.getInstance());
return oResultValues;
case "LASTQUARTERSINCLUDED":
var oResultValues = UniversalDateUtils.ranges.lastQuarters(iParamLastNext - 1);
oResultValues[1] = UniversalDate.getInstance(UI5Date.getInstance());
return oResultValues;
case "LASTYEARSINCLUDED":
var oResultValues = UniversalDateUtils.ranges.lastYears(iParamLastNext - 1);
oResultValues[1] = UniversalDate.getInstance(UI5Date.getInstance());
return oResultValues;
case "NEXTMINUTES":
return UniversalDateUtils.ranges.nextMinutes(iParamLastNext);
case "NEXTHOURS":
return UniversalDateUtils.ranges.nextHours(iParamLastNext);
case "NEXTDAYS":
return UniversalDateUtils.ranges.nextDays(iParamLastNext);
case "NEXTWEEKS":
return UniversalDateUtils.ranges.nextWeeks(iParamLastNext, sCalendarWeekNumbering);
case "NEXTMONTHS":
return UniversalDateUtils.ranges.nextMonths(iParamLastNext);
case "NEXTQUARTERS":
return UniversalDateUtils.ranges.nextQuarters(iParamLastNext);
case "NEXTYEARS":
return UniversalDateUtils.ranges.nextYears(iParamLastNext);
case "NEXTMINUTESINCLUDED":
var oResultValues = UniversalDateUtils.ranges.nextMinutes(iParamLastNext - 1);
oResultValues[1].setSeconds(59);
return oResultValues;
case "NEXTHOURSINCLUDED":
var oResultValues = UniversalDateUtils.ranges.nextHours(iParamLastNext - 1);
oResultValues[1].setMinutes(59, 59);
return oResultValues;
case "NEXTDAYSINCLUDED":
var oResultValues = UniversalDateUtils.ranges.nextDays(iParamLastNext - 1);
oResultValues[0] = UniversalDate.getInstance(UI5Date.getInstance());
return oResultValues;
case "NEXTWEEKSINCLUDED":
var oResultValues = UniversalDateUtils.ranges.nextWeeks(iParamLastNext - 1, sCalendarWeekNumbering);
oResultValues[0] = UniversalDate.getInstance(UI5Date.getInstance());
return oResultValues;
case "NEXTMONTHSINCLUDED":
var oResultValues = UniversalDateUtils.ranges.nextMonths(iParamLastNext - 1);
oResultValues[0] = UniversalDate.getInstance(UI5Date.getInstance());
return oResultValues;
case "NEXTQUARTERSINCLUDED":
var oResultValues = UniversalDateUtils.ranges.nextQuarters(iParamLastNext - 1);
oResultValues[0] = UniversalDate.getInstance(UI5Date.getInstance());
return oResultValues;
case "NEXTYEARSINCLUDED":
var oResultValues = UniversalDateUtils.ranges.nextYears(iParamLastNext - 1);
oResultValues[0] = UniversalDate.getInstance(UI5Date.getInstance());
return oResultValues;
case "FROM":
return [UniversalDate.getInstance(oValue.values[0])];
case "TO":
return [UniversalDate.getInstance(oValue.values[0])];
case "FROMDATETIME":
var oDate = UniversalDate.getInstance(oValue.values[0]);
oDate.setMilliseconds(0);
return [oDate];
case "TODATETIME":
var oDate = UniversalDate.getInstance(oValue.values[0]);
oDate.setMilliseconds(999);
return [oDate];
case "YEARTODATE":
return UniversalDateUtils.ranges.yearToDate();
case "DATETOYEAR":
return UniversalDateUtils.ranges.dateToYear();
case "TODAYFROMTO":
if (oValue.values.length !== 2) {
return [];
}
var xDays = oValue.values[0];
var yDays = oValue.values[1];
var oStart = xDays >= 0 ? UniversalDateUtils.ranges.lastDays(xDays)[0] : UniversalDateUtils.ranges.nextDays(-xDays)[1];
var oEnd = yDays >= 0 ? UniversalDateUtils.ranges.nextDays(yDays)[1] : UniversalDateUtils.ranges.lastDays(-yDays)[0];
if (oStart.oDate.getTime() > oEnd.oDate.getTime()) {
oEnd = [oStart, oStart = oEnd][0];
}
return [UniversalDateUtils.resetStartTime(oStart), UniversalDateUtils.resetEndTime(oEnd)];
case "QUARTER1":
return UniversalDateUtils.ranges.quarter(1);
case "QUARTER2":
return UniversalDateUtils.ranges.quarter(2);
case "QUARTER3":
return UniversalDateUtils.ranges.quarter(3);
case "QUARTER4":
return UniversalDateUtils.ranges.quarter(4);
default:
return [];
}
};
StandardDynamicDateOption.prototype.enhanceFormattedValue = function() {
switch (this.getKey()) {
case "TODAY":
case "YESTERDAY":
case "TOMORROW":
case "FIRSTDAYWEEK":
case "LASTDAYWEEK":
case "FIRSTDAYMONTH":
case "LASTDAYMONTH":
case "FIRSTDAYQUARTER":
case "LASTDAYQUARTER":
case "FIRSTDAYYEAR":
case "LASTDAYYEAR":
case "THISWEEK":
case "THISMONTH":
case "THISQUARTER":
case "THISYEAR":
case "LASTWEEK":
case "LASTMONTH":
case "LASTQUARTER":
case "LASTYEAR":
case "NEXTWEEK":
case "NEXTMONTH":
case "NEXTQUARTER":
case "NEXTYEAR":
case "YEARTODATE":
case "DATETOYEAR":
case "QUARTER1":
case "QUARTER2":
case "QUARTER3":
case "QUARTER4":
return true;
default:
return false;
}
};
/**
* Gets a combined option title for the last x or the next x option.
*
* @param {*} aOptions A combination of the following string values: days, weeks, months, quarters, years
* @returns {string} A combined option title
* @private
*/
StandardDynamicDateOption.prototype._getXPeriodTitle = function(aOptions) {
var sCombinedOptions,
sKey = this.getKey();
if (aOptions.length === 1) {
return _resourceBundle.getText("DYNAMIC_DATE_" + sKey + "_TITLE");
}
const aOptionsStrings = aOptions.map(function(sOption) {
let sOptionName = sOption;
if (sOptionName.indexOf("included") !== -1) {
sOptionName = sOptionName.replace("included", "");
}
if (aOptions.indexOf(sOption) !== -1 && aOptions.indexOf(sOptionName) !== -1 && sOptionName !== sOption) {
return "";
}
return _resourceBundle.getText("DYNAMIC_DATE_" + sOptionName.toUpperCase());
});
const filteredArray = aOptionsStrings.filter(function(str) {
return str !== "";
});
sCombinedOptions = filteredArray.join(" / ");
if (sKey.indexOf("LAST") === 0) {
return _resourceBundle.getText("DYNAMIC_DATE_LASTX_TITLE", [sCombinedOptions]);
}
if (sKey.indexOf("NEXT") === 0) {
return _resourceBundle.getText("DYNAMIC_DATE_NEXTX_TITLE", [sCombinedOptions]);
}
};
function makeSelectOption(sOption) {
return new Item({ key: sOption.toUpperCase(), text: _resourceBundle.getText("DYNAMIC_DATE_" + sOption.toUpperCase()) });
}
return StandardDynamicDateOption;
});