@openui5/sap.ui.mdc 1.94.0 → 1.95.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.reuse/dep5 +1 -6
- package/THIRDPARTY.txt +3 -9
- package/package.json +4 -4
- package/src/sap/ui/mdc/.library +1 -1
- package/src/sap/ui/mdc/ActionToolbar.js +1 -1
- package/src/sap/ui/mdc/Chart.js +12 -5
- package/src/sap/ui/mdc/ChartNew.js +1 -1
- package/src/sap/ui/mdc/Control.js +1 -1
- package/src/sap/ui/mdc/Element.js +2 -2
- package/src/sap/ui/mdc/Field.js +2 -2
- package/src/sap/ui/mdc/FilterBar.js +1 -1
- package/src/sap/ui/mdc/FilterField.js +28 -4
- package/src/sap/ui/mdc/Link.js +1 -1
- package/src/sap/ui/mdc/MultiValueField.js +1 -1
- package/src/sap/ui/mdc/Table.js +44 -29
- package/src/sap/ui/mdc/ValueHelp.js +1459 -0
- package/src/sap/ui/mdc/ValueHelpDelegate.js +41 -0
- package/src/sap/ui/mdc/chart/ToolbarHandler.js +233 -224
- package/src/sap/ui/mdc/chartNew/ChartSelectionDetailsNew.js +1 -1
- package/src/sap/ui/mdc/chartNew/ChartToolbarNew.js +1 -1
- package/src/sap/ui/mdc/chartNew/ChartTypeButtonNew.js +1 -1
- package/src/sap/ui/mdc/chartNew/PropertyHelperNew.js +1 -1
- package/src/sap/ui/mdc/condition/Condition.js +1 -1
- package/src/sap/ui/mdc/condition/ConditionConverter.js +1 -1
- package/src/sap/ui/mdc/condition/ConditionModel.js +1 -1
- package/src/sap/ui/mdc/condition/FilterConverter.js +1 -1
- package/src/sap/ui/mdc/condition/FilterOperatorUtil.js +1 -1
- package/src/sap/ui/mdc/condition/Operator.js +1 -1
- package/src/sap/ui/mdc/condition/RangeOperator.js +1 -1
- package/src/sap/ui/mdc/enum/SelectType.js +43 -0
- package/src/sap/ui/mdc/field/BoolFieldHelp.js +1 -1
- package/src/sap/ui/mdc/field/ConditionFieldHelp.js +1 -1
- package/src/sap/ui/mdc/field/ConditionType.js +61 -29
- package/src/sap/ui/mdc/field/ConditionsType.js +2 -1
- package/src/sap/ui/mdc/field/CustomFieldHelp.js +1 -1
- package/src/sap/ui/mdc/field/CustomFieldInfo.js +1 -1
- package/src/sap/ui/mdc/field/DefineConditionPanel.js +13 -2
- package/src/sap/ui/mdc/field/FieldBase.js +81 -35
- package/src/sap/ui/mdc/field/FieldBaseDelegate.js +9 -2
- package/src/sap/ui/mdc/field/FieldHelpBase.js +64 -4
- package/src/sap/ui/mdc/field/FieldInfoBase.js +1 -1
- package/src/sap/ui/mdc/field/FieldInput.js +1 -1
- package/src/sap/ui/mdc/field/FieldInputRenderUtil.js +1 -1
- package/src/sap/ui/mdc/field/FieldMultiInput.js +1 -1
- package/src/sap/ui/mdc/field/FieldValueHelp.js +7 -1
- package/src/sap/ui/mdc/field/FieldValueHelpContentWrapperBase.js +1 -1
- package/src/sap/ui/mdc/field/FieldValueHelpMTableWrapper.js +1 -1
- package/src/sap/ui/mdc/field/FieldValueHelpMdcTableWrapper.js +1 -1
- package/src/sap/ui/mdc/field/FieldValueHelpTableWrapperBase.js +1 -1
- package/src/sap/ui/mdc/field/FieldValueHelpUITableWrapper.js +1 -1
- package/src/sap/ui/mdc/field/InParameter.js +1 -1
- package/src/sap/ui/mdc/field/ListFieldHelp.js +1 -1
- package/src/sap/ui/mdc/field/ListFieldHelpItem.js +1 -1
- package/src/sap/ui/mdc/field/MultiValueFieldItem.js +1 -1
- package/src/sap/ui/mdc/field/OutParameter.js +1 -1
- package/src/sap/ui/mdc/field/ValueHelpPanel.js +1 -1
- package/src/sap/ui/mdc/filterbar/FilterBarBase.js +17 -9
- package/src/sap/ui/mdc/filterbar/PropertyHelper.js +1 -1
- package/src/sap/ui/mdc/filterbar/p13n/AdaptationFilterBar.js +1 -1
- package/src/sap/ui/mdc/filterbar/vh/FilterBar.js +1 -1
- package/src/sap/ui/mdc/flexibility/Chart.flexibility.js +1 -1
- package/src/sap/ui/mdc/flexibility/FilterBar.flexibility.js +1 -1
- package/src/sap/ui/mdc/flexibility/FilterItemFlex.js +1 -1
- package/src/sap/ui/mdc/flexibility/ItemBaseFlex.js +203 -197
- package/src/sap/ui/mdc/library.js +576 -4
- package/src/sap/ui/mdc/link/ContactDetails.js +1 -1
- package/src/sap/ui/mdc/link/ContactDetailsAddressItem.js +1 -1
- package/src/sap/ui/mdc/link/ContactDetailsEmailItem.js +1 -1
- package/src/sap/ui/mdc/link/ContactDetailsItem.js +1 -1
- package/src/sap/ui/mdc/link/ContactDetailsPhoneItem.js +1 -1
- package/src/sap/ui/mdc/link/Factory.js +1 -1
- package/src/sap/ui/mdc/link/FakeFlpConnector.js +1 -1
- package/src/sap/ui/mdc/link/LinkItem.js +1 -1
- package/src/sap/ui/mdc/link/Panel.js +1 -1
- package/src/sap/ui/mdc/link/PanelItem.js +1 -1
- package/src/sap/ui/mdc/link/PanelListItem.js +1 -1
- package/src/sap/ui/mdc/link/SelectionDialog.js +1 -1
- package/src/sap/ui/mdc/link/SelectionDialogItem.js +1 -1
- package/src/sap/ui/mdc/link/SemanticObjectMapping.js +1 -1
- package/src/sap/ui/mdc/link/SemanticObjectMappingItem.js +1 -1
- package/src/sap/ui/mdc/link/SemanticObjectUnavailableAction.js +1 -1
- package/src/sap/ui/mdc/messagebundle.properties +10 -3
- package/src/sap/ui/mdc/messagebundle_ar.properties +10 -3
- package/src/sap/ui/mdc/messagebundle_bg.properties +9 -2
- package/src/sap/ui/mdc/messagebundle_ca.properties +9 -2
- package/src/sap/ui/mdc/messagebundle_cs.properties +11 -4
- package/src/sap/ui/mdc/messagebundle_cy.properties +9 -2
- package/src/sap/ui/mdc/messagebundle_da.properties +9 -2
- package/src/sap/ui/mdc/messagebundle_de.properties +9 -2
- package/src/sap/ui/mdc/messagebundle_el.properties +10 -3
- package/src/sap/ui/mdc/messagebundle_en.properties +9 -2
- package/src/sap/ui/mdc/messagebundle_en_GB.properties +9 -2
- package/src/sap/ui/mdc/messagebundle_en_US_sappsd.properties +7 -2
- package/src/sap/ui/mdc/messagebundle_en_US_saptrc.properties +7 -2
- package/src/sap/ui/mdc/messagebundle_es.properties +33 -26
- package/src/sap/ui/mdc/messagebundle_es_MX.properties +9 -2
- package/src/sap/ui/mdc/messagebundle_et.properties +9 -2
- package/src/sap/ui/mdc/messagebundle_fi.properties +10 -3
- package/src/sap/ui/mdc/messagebundle_fr.properties +16 -9
- package/src/sap/ui/mdc/messagebundle_fr_CA.properties +9 -2
- package/src/sap/ui/mdc/messagebundle_hi.properties +9 -2
- package/src/sap/ui/mdc/messagebundle_hr.properties +9 -2
- package/src/sap/ui/mdc/messagebundle_hu.properties +10 -3
- package/src/sap/ui/mdc/messagebundle_id.properties +9 -2
- package/src/sap/ui/mdc/messagebundle_it.properties +32 -25
- package/src/sap/ui/mdc/messagebundle_iw.properties +9 -2
- package/src/sap/ui/mdc/messagebundle_ja.properties +9 -2
- package/src/sap/ui/mdc/messagebundle_kk.properties +9 -2
- package/src/sap/ui/mdc/messagebundle_ko.properties +9 -2
- package/src/sap/ui/mdc/messagebundle_lt.properties +9 -2
- package/src/sap/ui/mdc/messagebundle_lv.properties +9 -2
- package/src/sap/ui/mdc/messagebundle_ms.properties +9 -2
- package/src/sap/ui/mdc/messagebundle_nl.properties +10 -3
- package/src/sap/ui/mdc/messagebundle_no.properties +16 -9
- package/src/sap/ui/mdc/messagebundle_pl.properties +13 -6
- package/src/sap/ui/mdc/messagebundle_pt.properties +9 -2
- package/src/sap/ui/mdc/messagebundle_pt_PT.properties +9 -2
- package/src/sap/ui/mdc/messagebundle_ro.properties +12 -5
- package/src/sap/ui/mdc/messagebundle_ru.properties +9 -2
- package/src/sap/ui/mdc/messagebundle_sh.properties +9 -2
- package/src/sap/ui/mdc/messagebundle_sk.properties +10 -3
- package/src/sap/ui/mdc/messagebundle_sl.properties +9 -2
- package/src/sap/ui/mdc/messagebundle_sv.properties +10 -3
- package/src/sap/ui/mdc/messagebundle_th.properties +15 -8
- package/src/sap/ui/mdc/messagebundle_tr.properties +9 -2
- package/src/sap/ui/mdc/messagebundle_uk.properties +9 -2
- package/src/sap/ui/mdc/messagebundle_vi.properties +9 -2
- package/src/sap/ui/mdc/messagebundle_zh_CN.properties +9 -2
- package/src/sap/ui/mdc/messagebundle_zh_TW.properties +9 -2
- package/src/sap/ui/mdc/mixin/AdaptationMixin.js +1 -1
- package/src/sap/ui/mdc/mixin/DelegateMixin.js +1 -1
- package/src/sap/ui/mdc/mixin/FilterIntegrationMixin.js +1 -1
- package/src/sap/ui/mdc/mixin/PromiseMixin.js +94 -0
- package/src/sap/ui/mdc/odata/v4/ChartPropertyHelperNew.js +1 -1
- package/src/sap/ui/mdc/odata/v4/ValueHelpDelegate.js +94 -0
- package/src/sap/ui/mdc/p13n/DefaultProviderRegistry.js +1 -1
- package/src/sap/ui/mdc/p13n/Engine.js +1 -1
- package/src/sap/ui/mdc/p13n/PropertyHelper.js +1 -1
- package/src/sap/ui/mdc/p13n/UIManager.js +1 -1
- package/src/sap/ui/mdc/p13n/panels/BasePanel.js +2 -2
- package/src/sap/ui/mdc/p13n/panels/GroupPanel.js +1 -1
- package/src/sap/ui/mdc/p13n/panels/ListView.js +1 -1
- package/src/sap/ui/mdc/p13n/panels/QueryPanel.js +1 -1
- package/src/sap/ui/mdc/p13n/panels/SortQueryPanel.js +1 -1
- package/src/sap/ui/mdc/p13n/panels/Wrapper.js +1 -1
- package/src/sap/ui/mdc/p13n/subcontroller/BaseController.js +1 -1
- package/src/sap/ui/mdc/table/Column.js +20 -4
- package/src/sap/ui/mdc/table/CreationRow.js +1 -1
- package/src/sap/ui/mdc/table/PropertyHelper.js +176 -4
- package/src/sap/ui/mdc/table/RowSettings.js +1 -1
- package/src/sap/ui/mdc/table/V4AnalyticsPropertyHelper.js +1 -1
- package/src/sap/ui/mdc/themes/base/ValueHelpDialog.less +51 -21
- package/src/sap/ui/mdc/ui/Container.js +2 -2
- package/src/sap/ui/mdc/ui/ContainerItem.js +2 -2
- package/src/sap/ui/mdc/util/Common.js +26 -0
- package/src/sap/ui/mdc/util/PromiseCache.js +266 -0
- package/src/sap/ui/mdc/util/PropertyHelper.js +19 -1
- package/src/sap/ui/mdc/valuehelp/Dialog.js +475 -0
- package/src/sap/ui/mdc/valuehelp/Popover.js +346 -0
- package/src/sap/ui/mdc/valuehelp/base/Container.js +440 -0
- package/src/sap/ui/mdc/valuehelp/base/Content.js +442 -0
- package/src/sap/ui/mdc/valuehelp/base/DialogTab.js +96 -0
- package/src/sap/ui/mdc/valuehelp/base/FilterableListContent.js +537 -0
- package/src/sap/ui/mdc/valuehelp/base/ListContent.js +105 -0
- package/src/sap/ui/mdc/valuehelp/content/Bool.js +232 -0
- package/src/sap/ui/mdc/valuehelp/content/Conditions.js +250 -0
- package/src/sap/ui/mdc/valuehelp/content/FixedList.js +504 -0
- package/src/sap/ui/mdc/valuehelp/content/MDCTable.js +619 -0
- package/src/sap/ui/mdc/valuehelp/content/MTable.js +881 -0
- package/test/sap/ui/mdc/testutils/opa/TestLibrary.js +2 -2
- package/test/sap/ui/mdc/testutils/opa/filterbar/Actions.js +250 -0
- package/test/sap/ui/mdc/testutils/opa/filterbar/Assertions.js +91 -0
- package/test/sap/ui/mdc/testutils/opa/filterbar/TestObjects.js +137 -0
- package/test/sap/ui/mdc/testutils/opa/filterbar/Util.js +25 -0
- package/test/sap/ui/mdc/testutils/opa/p13n/Actions.js +239 -77
- package/test/sap/ui/mdc/testutils/opa/p13n/Util.js +2 -1
- package/test/sap/ui/mdc/testutils/opa/p13n/{waitForP13nButtonWithParentAndIcon.js → waitForP13nButtonWithMatchers.js} +5 -18
- package/test/sap/ui/mdc/testutils/opa/table/TestObjects.js +0 -1
|
@@ -0,0 +1,537 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* ! OpenUI5
|
|
3
|
+
* (c) Copyright 2009-2021 SAP SE or an SAP affiliate company.
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
sap.ui.define([
|
|
8
|
+
'sap/ui/mdc/util/loadModules',
|
|
9
|
+
'sap/ui/mdc/valuehelp/base/ListContent',
|
|
10
|
+
'sap/ui/mdc/condition/Condition',
|
|
11
|
+
'sap/ui/mdc/condition/FilterConverter',
|
|
12
|
+
'sap/ui/mdc/enum/ConditionValidated',
|
|
13
|
+
'sap/ui/model/FilterType',
|
|
14
|
+
'sap/base/Log',
|
|
15
|
+
'sap/base/util/deepEqual',
|
|
16
|
+
'sap/ui/mdc/util/Common',
|
|
17
|
+
'sap/ui/base/ManagedObjectObserver',
|
|
18
|
+
'sap/ui/model/base/ManagedObjectModel',
|
|
19
|
+
'sap/m/MessageToast'
|
|
20
|
+
], function(
|
|
21
|
+
loadModules,
|
|
22
|
+
ListContent,
|
|
23
|
+
Condition,
|
|
24
|
+
FilterConverter,
|
|
25
|
+
ConditionValidated,
|
|
26
|
+
FilterType,
|
|
27
|
+
Log,
|
|
28
|
+
deepEqual,
|
|
29
|
+
Common,
|
|
30
|
+
ManagedObjectObserver,
|
|
31
|
+
ManagedObjectModel,
|
|
32
|
+
MessageToast
|
|
33
|
+
) {
|
|
34
|
+
"use strict";
|
|
35
|
+
|
|
36
|
+
var FilterableListContent = ListContent.extend("sap.ui.mdc.valuehelp.base.FilterableListContent", /** @lends sap.ui.mdc.valuehelp.base.FilterableListContent.prototype */
|
|
37
|
+
{
|
|
38
|
+
metadata: {
|
|
39
|
+
library: "sap.ui.mdc",
|
|
40
|
+
properties: {
|
|
41
|
+
/**
|
|
42
|
+
* The fields based on which the table data is filtered. For filtering the value of the <code>filterValue</code> property is used.
|
|
43
|
+
*
|
|
44
|
+
* If set to <code>$search</code> and the used binding supports search requests, a $search request is used for filtering.
|
|
45
|
+
*
|
|
46
|
+
* If set to one or more properties, the filters for these properties are used for filtering.
|
|
47
|
+
* These filters are set on the <code>ListBinding</code> used.
|
|
48
|
+
* The properties need to be separated by commas and enclosed by "*" characters. (<code>"*Property1,Property2*"</code>)
|
|
49
|
+
*
|
|
50
|
+
* If it is empty, no suggestion is available.
|
|
51
|
+
*/
|
|
52
|
+
filterFields: {
|
|
53
|
+
type: "string",
|
|
54
|
+
defaultValue: ""
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* The path of the key field in the content binding.
|
|
59
|
+
* If a table is used as content, this is the binding path of the key of the items.
|
|
60
|
+
*
|
|
61
|
+
* If not set, the FieldPath of the assigned field is used.
|
|
62
|
+
*/
|
|
63
|
+
keyPath: {
|
|
64
|
+
type: "string",
|
|
65
|
+
defaultValue: ""
|
|
66
|
+
},
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* The path of the description field in the content binding.
|
|
70
|
+
* If a table is used as content, this is the binding path of the description of the items.
|
|
71
|
+
*/
|
|
72
|
+
descriptionPath: {
|
|
73
|
+
type: "string",
|
|
74
|
+
defaultValue: ""
|
|
75
|
+
},
|
|
76
|
+
/**
|
|
77
|
+
* Internal property to allow to bind the conditions created by InParameters to content
|
|
78
|
+
*/
|
|
79
|
+
_inConditions: {
|
|
80
|
+
type: "object",
|
|
81
|
+
defaultValue: {},
|
|
82
|
+
byValue: true//,
|
|
83
|
+
//visibility: "hidden"
|
|
84
|
+
},
|
|
85
|
+
/**
|
|
86
|
+
* Internal property to allow to bind the paths used by OutParameters to content
|
|
87
|
+
*/
|
|
88
|
+
_outParameters: {
|
|
89
|
+
type: "string[]",
|
|
90
|
+
defaultValue: [],
|
|
91
|
+
byValue: true//,
|
|
92
|
+
//visibility: "hidden"
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
aggregations: {
|
|
96
|
+
collectiveSearchItems: {
|
|
97
|
+
type: "sap.ui.core.Item",
|
|
98
|
+
multiple: true,
|
|
99
|
+
singularName : "collectiveSearchItem"
|
|
100
|
+
},
|
|
101
|
+
filterBar: {
|
|
102
|
+
type: "sap.ui.mdc.filterbar.FilterBarBase",
|
|
103
|
+
multiple: false
|
|
104
|
+
},
|
|
105
|
+
_defaultFilterBar: {
|
|
106
|
+
type: "sap.ui.mdc.filterbar.FilterBarBase",
|
|
107
|
+
multiple: false
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
events: {
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
FilterableListContent.prototype.init = function() {
|
|
116
|
+
|
|
117
|
+
ListContent.prototype.init.apply(this, arguments);
|
|
118
|
+
|
|
119
|
+
this._oResourceBundle = sap.ui.getCore().getLibraryResourceBundle("sap.ui.mdc");
|
|
120
|
+
|
|
121
|
+
this._oObserver.observe(this, {
|
|
122
|
+
aggregations: ["_defaultFilterBar", "filterBar"],
|
|
123
|
+
properties: ["_inConditions"]
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
this.bindProperty("_inConditions", { path: "/_inConditions", model: "$valueHelp"}); // inherit from ValueHelp
|
|
127
|
+
this.bindProperty("_outParameters", { path: "/_outParameters", model: "$valueHelp"}); // inherit from ValueHelp
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
FilterableListContent.prototype._handleFilterValueUpdate = function (oChanges) {
|
|
131
|
+
_addFilterValueToFilterBar.call(this, this._getPriorityFilterBar(), oChanges.current);
|
|
132
|
+
this.applyFilters(oChanges.current);
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
FilterableListContent.prototype.applyFilters = function (sSearch) {
|
|
136
|
+
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
FilterableListContent.prototype._prettyPrintFilters = function (oFilter) {
|
|
141
|
+
|
|
142
|
+
var sRes;
|
|
143
|
+
if (!oFilter) {
|
|
144
|
+
return "";
|
|
145
|
+
}
|
|
146
|
+
if (Array.isArray(oFilter)) {
|
|
147
|
+
sRes = "";
|
|
148
|
+
oFilter.forEach(function(oFilter, iIndex, aFilters) {
|
|
149
|
+
sRes += this._prettyPrintFilters(oFilter);
|
|
150
|
+
if (aFilters.length - 1 != iIndex) {
|
|
151
|
+
sRes += " or ";
|
|
152
|
+
}
|
|
153
|
+
}, this);
|
|
154
|
+
return "(" + sRes + ")";
|
|
155
|
+
} else if (oFilter._bMultiFilter) {
|
|
156
|
+
sRes = "";
|
|
157
|
+
var bAnd = oFilter.bAnd;
|
|
158
|
+
oFilter.aFilters.forEach(function(oFilter, iIndex, aFilters) {
|
|
159
|
+
sRes += this._prettyPrintFilters(oFilter);
|
|
160
|
+
if (aFilters.length - 1 != iIndex) {
|
|
161
|
+
sRes += bAnd ? " and " : " or ";
|
|
162
|
+
}
|
|
163
|
+
}, this);
|
|
164
|
+
return "(" + sRes + ")";
|
|
165
|
+
} else {
|
|
166
|
+
sRes = oFilter.sPath + " " + oFilter.sOperator + " '" + oFilter.oValue1 + "'";
|
|
167
|
+
if (oFilter.sOperator === "BT") {
|
|
168
|
+
sRes += "...'" + oFilter.oValue2 + "'";
|
|
169
|
+
}
|
|
170
|
+
return sRes;
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
FilterableListContent.prototype._getItemFromContext = function (oBindingContext, oOptions) {
|
|
175
|
+
|
|
176
|
+
var sKeyPath = (oOptions && oOptions.keyPath) || this.getKeyPath();
|
|
177
|
+
var sDescriptionPath = (oOptions && oOptions.descriptionPath) || this.getDescriptionPath();
|
|
178
|
+
var vKey;
|
|
179
|
+
var sDescription;
|
|
180
|
+
var sPath;
|
|
181
|
+
|
|
182
|
+
if (!sKeyPath) {
|
|
183
|
+
throw new Error("KeyPath missing"); // as we cannot determine key without keyPath
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
var aInParameters = oOptions && oOptions.inParameters || [];
|
|
187
|
+
if (aInParameters.length === 0) {
|
|
188
|
+
for (sPath in this.getProperty("_inConditions")) {
|
|
189
|
+
aInParameters.push(sPath);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
var aOutParameters = oOptions && oOptions.outParameters || this.getProperty("_outParameters");
|
|
194
|
+
var oInParameters = aInParameters.length > 0 ? {} : null;
|
|
195
|
+
var oOutParameters = aOutParameters.length > 0 ? {} : null;
|
|
196
|
+
|
|
197
|
+
if (oBindingContext) {
|
|
198
|
+
vKey = sKeyPath ? oBindingContext.getProperty(sKeyPath) : undefined;
|
|
199
|
+
sDescription = sDescriptionPath ? oBindingContext.getProperty(sDescriptionPath) : undefined;
|
|
200
|
+
var i = 0;
|
|
201
|
+
for (i = 0; i < aInParameters.length; i++) {
|
|
202
|
+
sPath = aInParameters[i];
|
|
203
|
+
oInParameters[sPath] = oBindingContext.getProperty(sPath);
|
|
204
|
+
}
|
|
205
|
+
for (i = 0; i < aOutParameters.length; i++) {
|
|
206
|
+
sPath = aOutParameters[i];
|
|
207
|
+
oOutParameters[sPath] = oBindingContext.getProperty(sPath);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
if (vKey === null || vKey === undefined) {
|
|
212
|
+
return false;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
return {key: vKey, description: sDescription, inParameters: oInParameters, outParameters: oOutParameters};
|
|
216
|
+
};
|
|
217
|
+
|
|
218
|
+
FilterableListContent.prototype._isItemSelected = function (oItem, aConditions) {
|
|
219
|
+
|
|
220
|
+
var oContext = oItem && oItem.getBindingContext();
|
|
221
|
+
var oItemData = this._getItemFromContext(oContext);
|
|
222
|
+
|
|
223
|
+
for (var i = 0; i < aConditions.length; i++) {
|
|
224
|
+
var oCondition = aConditions[i];
|
|
225
|
+
if (oCondition.validated === ConditionValidated.Validated && oItemData.key === oCondition.values[0]) { // TODO: check for specific EQ operator
|
|
226
|
+
//check for inParameters and outParameters
|
|
227
|
+
if (oCondition.inParameters && oItemData.inParameters && !deepEqual(oCondition.inParameters, oItemData.inParameters)) {
|
|
228
|
+
continue;
|
|
229
|
+
}
|
|
230
|
+
if (oCondition.outParameters && oItemData.outParameters && !deepEqual(oCondition.outParameters, oItemData.outParameters)) {
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
return true;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
return false;
|
|
238
|
+
|
|
239
|
+
};
|
|
240
|
+
|
|
241
|
+
FilterableListContent.prototype._createDefaultFilterBar = function() {
|
|
242
|
+
return loadModules([
|
|
243
|
+
"sap/ui/mdc/filterbar/vh/FilterBar"
|
|
244
|
+
]).then(function(aModules) {
|
|
245
|
+
var FilterBar = aModules[0];
|
|
246
|
+
var oFilterBar = new FilterBar(this.getId() + "-FB", {
|
|
247
|
+
liveMode: false, // !oWrapper.isSuspended(), // if suspended, no live search
|
|
248
|
+
showGoButton: false
|
|
249
|
+
});
|
|
250
|
+
this.set_defaultFilterBar(oFilterBar);
|
|
251
|
+
return oFilterBar;
|
|
252
|
+
}.bind(this));
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
FilterableListContent.prototype._assignCollectiveSearch = function(bInitializeKey) {
|
|
256
|
+
bInitializeKey = typeof bInitializeKey !== "undefined" ? bInitializeKey : !this._oCollectiveSearchSelect;
|
|
257
|
+
_createCollectiveSearch.call(this, bInitializeKey).then(function(oCollectiveSearchSelect) {
|
|
258
|
+
var oFilterBar = this._getPriorityFilterBar();
|
|
259
|
+
if (oFilterBar.setCollectiveSearch) {
|
|
260
|
+
oFilterBar.setCollectiveSearch(oCollectiveSearchSelect);
|
|
261
|
+
}
|
|
262
|
+
}.bind(this));
|
|
263
|
+
};
|
|
264
|
+
|
|
265
|
+
function _createCollectiveSearch(bInitializeKey) {
|
|
266
|
+
|
|
267
|
+
return loadModules([
|
|
268
|
+
"sap/ui/mdc/filterbar/vh/CollectiveSearchSelect",
|
|
269
|
+
"sap/ui/core/Item"
|
|
270
|
+
]).then(function(aModules) {
|
|
271
|
+
var CollectiveSearchSelect = aModules[0];
|
|
272
|
+
var Item = aModules[1];
|
|
273
|
+
|
|
274
|
+
_createCollectiveSearchSelect.call(this, CollectiveSearchSelect, Item);
|
|
275
|
+
|
|
276
|
+
var aCollectiveSearchItems = this.getCollectiveSearchItems();
|
|
277
|
+
if (aCollectiveSearchItems.length <= 1) {
|
|
278
|
+
return null;
|
|
279
|
+
} else {
|
|
280
|
+
if (bInitializeKey) {
|
|
281
|
+
this._oCollectiveSearchSelect.setSelectedItemKey(aCollectiveSearchItems[0].getKey());
|
|
282
|
+
}
|
|
283
|
+
return this._oCollectiveSearchSelect;
|
|
284
|
+
}
|
|
285
|
+
}.bind(this));
|
|
286
|
+
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
function _handleCollectiveSearchSelect(oEvent) {
|
|
290
|
+
|
|
291
|
+
var sKey = oEvent.getParameter("key");
|
|
292
|
+
MessageToast.show("ColSearch: " + sKey);
|
|
293
|
+
|
|
294
|
+
this.fireRequestDelegateContent();
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
function _createCollectiveSearchSelect(CollectiveSearchSelect, Item) {
|
|
298
|
+
|
|
299
|
+
if (!this._oCollectiveSearchSelect) {
|
|
300
|
+
|
|
301
|
+
this._oObserver.observe(this, {
|
|
302
|
+
properties: ["filterFields"],
|
|
303
|
+
aggregations: ["collectiveSearchItems"]
|
|
304
|
+
});
|
|
305
|
+
|
|
306
|
+
this._oManagedObjectModel = new ManagedObjectModel(this);
|
|
307
|
+
this.setModel(this._oManagedObjectModel, "$contenthelp");
|
|
308
|
+
|
|
309
|
+
var oItemTemplate = new Item(this.getId() + "-collSearchItem", {
|
|
310
|
+
key: "{$contenthelp>key}",
|
|
311
|
+
text: "{$contenthelp>text}",
|
|
312
|
+
enabled: "{$contenthelp>enabled}",
|
|
313
|
+
textDirection: "{$contenthelp>textDirection}"
|
|
314
|
+
});
|
|
315
|
+
|
|
316
|
+
this._oCollectiveSearchSelect = new CollectiveSearchSelect(this.getId() + "-collSearch", {
|
|
317
|
+
title: "{$i18n>COL_SEARCH_SEL_TITLE}",
|
|
318
|
+
items: {path: "$contenthelp>/collectiveSearchItems", template: oItemTemplate},
|
|
319
|
+
select: _handleCollectiveSearchSelect.bind(this)
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
return this._oCollectiveSearchSelect;
|
|
324
|
+
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
FilterableListContent.prototype.onShow = function () {
|
|
328
|
+
ListContent.prototype.onShow.apply(this, arguments);
|
|
329
|
+
|
|
330
|
+
var oListBinding = this._getListBinding();
|
|
331
|
+
var oListBindingInfo = this._getListBindingInfo();
|
|
332
|
+
|
|
333
|
+
var bBindingSuspended = oListBinding && oListBinding.isSuspended();
|
|
334
|
+
var bBindingWillBeSuspended = !oListBinding && oListBindingInfo && oListBindingInfo.suspended;
|
|
335
|
+
|
|
336
|
+
if (bBindingSuspended || bBindingWillBeSuspended) {
|
|
337
|
+
return;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
this.applyFilters(this.get_filterValue());
|
|
341
|
+
};
|
|
342
|
+
|
|
343
|
+
FilterableListContent.prototype._formatConditions = function(aConditions) {
|
|
344
|
+
// map in/outParameters to help paths
|
|
345
|
+
|
|
346
|
+
var aInParameters = this.getModel("$valueHelp").getProperty("/inParameters");
|
|
347
|
+
var aOutParameters = this.getModel("$valueHelp").getProperty("/outParameters");
|
|
348
|
+
|
|
349
|
+
for (var i = 0; i < aConditions.length; i++) {
|
|
350
|
+
var oCondition = aConditions[i];
|
|
351
|
+
if (oCondition.inParameters) {
|
|
352
|
+
oCondition.inParameters = _mapParametersToHelp.call(this, oCondition.inParameters, aInParameters);
|
|
353
|
+
}
|
|
354
|
+
if (oCondition.outParameters) {
|
|
355
|
+
oCondition.outParameters = _mapParametersToHelp.call(this, oCondition.outParameters, aOutParameters);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
return aConditions;
|
|
360
|
+
|
|
361
|
+
};
|
|
362
|
+
|
|
363
|
+
function _mapParametersToHelp(oParameters, aParameters) {
|
|
364
|
+
|
|
365
|
+
var oHelpParameters;
|
|
366
|
+
|
|
367
|
+
if (aParameters.length > 0) {
|
|
368
|
+
for (var sMyFieldPath in oParameters) {
|
|
369
|
+
for (var i = 0; i < aParameters.length; i++) {
|
|
370
|
+
var oParameter = aParameters[i];
|
|
371
|
+
var sHelpPath = oParameter.getHelpPath();
|
|
372
|
+
var sFieldPath = oParameter.getFieldPath();
|
|
373
|
+
if (sFieldPath && (sFieldPath === sMyFieldPath || sFieldPath === "conditions/" + sMyFieldPath) && sHelpPath) { // support also old saved conditions without "conditions/" in name
|
|
374
|
+
if (!oHelpParameters) {
|
|
375
|
+
oHelpParameters = {};
|
|
376
|
+
}
|
|
377
|
+
oHelpParameters[sHelpPath] = oParameters[sMyFieldPath];
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
return oHelpParameters;
|
|
384
|
+
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
FilterableListContent.prototype._getPriorityFilterBar = function () {
|
|
388
|
+
return this.getFilterBar() || this.get_defaultFilterBar();
|
|
389
|
+
};
|
|
390
|
+
|
|
391
|
+
FilterableListContent.prototype._observeChanges = function (oChanges) {
|
|
392
|
+
if (oChanges.object == this) {
|
|
393
|
+
|
|
394
|
+
if (oChanges.name === "collectiveSearchItems") {
|
|
395
|
+
this._assignCollectiveSearch(true);
|
|
396
|
+
}
|
|
397
|
+
if (oChanges.name === "_inConditions") {
|
|
398
|
+
_addInParameterToFilterBar.call(this, this._getPriorityFilterBar(), oChanges.current);
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
if (["_defaultFilterBar", "filterBar"].indexOf(oChanges.name) !== -1) {
|
|
402
|
+
var oFilterBar = oChanges.child;
|
|
403
|
+
if (oChanges.mutation === "insert") {
|
|
404
|
+
var sFilterFields = this.getFilterFields();
|
|
405
|
+
var oExistingBasicSearchField = oFilterBar.getBasicSearchField();
|
|
406
|
+
if (!oExistingBasicSearchField && sFilterFields) {
|
|
407
|
+
return loadModules([
|
|
408
|
+
"sap/ui/mdc/FilterField"
|
|
409
|
+
]).then(function (aModules){
|
|
410
|
+
var FilterField = aModules[0];
|
|
411
|
+
oFilterBar.setBasicSearchField(new FilterField(this.getId() + "-search", {
|
|
412
|
+
conditions: "{$filters>/conditions/" + sFilterFields + "}",
|
|
413
|
+
placeholder:"{$i18n>filterbar.SEARCH}",
|
|
414
|
+
label:"{$i18n>filterbar.SEARCH}", // TODO: do we want a label?
|
|
415
|
+
maxConditions: 1,
|
|
416
|
+
width: "50%"
|
|
417
|
+
}));
|
|
418
|
+
}.bind(this));
|
|
419
|
+
} else if (oExistingBasicSearchField) {
|
|
420
|
+
oExistingBasicSearchField.setConditions([]);
|
|
421
|
+
}
|
|
422
|
+
this._assignCollectiveSearch();
|
|
423
|
+
_addInParameterToFilterBar.call(this, oFilterBar, this.getProperty("_inConditions"));
|
|
424
|
+
_addFilterValueToFilterBar.call(this, oFilterBar, this.getProperty("_filterValue"));
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
ListContent.prototype._observeChanges.apply(this, arguments);
|
|
429
|
+
};
|
|
430
|
+
|
|
431
|
+
FilterableListContent.prototype.exit = function () {
|
|
432
|
+
|
|
433
|
+
Common.cleanup(this, [
|
|
434
|
+
"_oCollectiveSearchSelect","_oManagedObjectModel"
|
|
435
|
+
]);
|
|
436
|
+
|
|
437
|
+
ListContent.prototype.exit.apply(this, arguments);
|
|
438
|
+
};
|
|
439
|
+
|
|
440
|
+
FilterableListContent.prototype.getCollectiveSearchKey = function () {
|
|
441
|
+
return this._oCollectiveSearchSelect && this._oCollectiveSearchSelect.getSelectedItemKey();
|
|
442
|
+
};
|
|
443
|
+
|
|
444
|
+
FilterableListContent.prototype._getFiltersForFilterBar = function () {
|
|
445
|
+
var oFilterBar = this._getPriorityFilterBar();
|
|
446
|
+
var oCurrentFilterBarConditions = oFilterBar.getConditions();
|
|
447
|
+
var oConditionTypes = this._getTypesForConditions(oCurrentFilterBarConditions);
|
|
448
|
+
var oCreatedFBFilters = oCurrentFilterBarConditions && oConditionTypes && FilterConverter.createFilters(oCurrentFilterBarConditions, oConditionTypes, undefined, this.getCaseSensitive());
|
|
449
|
+
return oCreatedFBFilters ? [].concat(oCreatedFBFilters) : [];
|
|
450
|
+
};
|
|
451
|
+
|
|
452
|
+
FilterableListContent.prototype._getListBinding = function () {
|
|
453
|
+
throw new Error("FilterableListContent: Every filterable listcontent must implement this method.");
|
|
454
|
+
};
|
|
455
|
+
|
|
456
|
+
FilterableListContent.prototype._getListBindingInfo = function () {
|
|
457
|
+
throw new Error("FilterableListContent: Every filterable listcontent must implement this method.");
|
|
458
|
+
};
|
|
459
|
+
|
|
460
|
+
FilterableListContent.prototype._getTypesForConditions = function (oConditions) {
|
|
461
|
+
|
|
462
|
+
var oFilterBar = this._getPriorityFilterBar();
|
|
463
|
+
var aInParameters = this.getInParameters();
|
|
464
|
+
var oConditionTypes;
|
|
465
|
+
var sFieldPath;
|
|
466
|
+
|
|
467
|
+
if (oFilterBar) {
|
|
468
|
+
oConditionTypes = FilterConverter.createConditionTypesMapFromFilterBar( oConditions, oFilterBar);
|
|
469
|
+
} else {
|
|
470
|
+
// collect condition Fieldpaths here
|
|
471
|
+
oConditionTypes = {};
|
|
472
|
+
for (sFieldPath in oConditions) {
|
|
473
|
+
oConditionTypes[sFieldPath] = {type: null};
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
// try to find missing type from InParameter
|
|
478
|
+
for (sFieldPath in oConditionTypes) {
|
|
479
|
+
if (!oConditionTypes[sFieldPath].type) {
|
|
480
|
+
for (var i = 0; i < aInParameters.length; i++) {
|
|
481
|
+
var oInParameter = aInParameters[i];
|
|
482
|
+
if (oInParameter.getHelpPath() === sFieldPath) {
|
|
483
|
+
oConditionTypes[sFieldPath].type = oInParameter.getDataType();
|
|
484
|
+
break;
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
return oConditionTypes;
|
|
491
|
+
|
|
492
|
+
};
|
|
493
|
+
|
|
494
|
+
function _addInParameterToFilterBar(oFilterBar, oInConditions) {
|
|
495
|
+
if (oFilterBar) {
|
|
496
|
+
// add inParameters to FilterBar
|
|
497
|
+
var oConditions = oFilterBar.getInternalConditions();
|
|
498
|
+
for ( var sFilterPath in oInConditions) {
|
|
499
|
+
oConditions[sFilterPath] = oInConditions[sFilterPath];
|
|
500
|
+
}
|
|
501
|
+
oFilterBar.setInternalConditions(oConditions); // TODO: remove on hide?
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
function _addFilterValueToFilterBar(oFilterBar, sFilterValue) {
|
|
507
|
+
var sFilterFields = this.getFilterFields();
|
|
508
|
+
|
|
509
|
+
if (oFilterBar && sFilterFields) {
|
|
510
|
+
var oConditions = oFilterBar.getInternalConditions();
|
|
511
|
+
var oCondition = Condition.createCondition("StartsWith", [sFilterValue], undefined, undefined, ConditionValidated.NotValidated);
|
|
512
|
+
oConditions[sFilterFields] = [oCondition];
|
|
513
|
+
oFilterBar.setInternalConditions(oConditions);
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
FilterableListContent.prototype.getFormattedTitle = function(iCount) {
|
|
519
|
+
var sTitle = ListContent.prototype.getFormattedTitle.apply(this, arguments);
|
|
520
|
+
if (!sTitle) {
|
|
521
|
+
sTitle = this._oResourceBundle.getText(iCount ? "valuehelp.SELECTFROMLIST" : "valuehelp.SELECTFROMLISTNONUMBER", iCount);
|
|
522
|
+
}
|
|
523
|
+
return sTitle;
|
|
524
|
+
};
|
|
525
|
+
|
|
526
|
+
FilterableListContent.prototype.getFormattedSubTitle = function() {
|
|
527
|
+
var sSubTitle = this.getSubTitle();
|
|
528
|
+
if (!sSubTitle) {
|
|
529
|
+
sSubTitle = this._oResourceBundle.getText("valuehelp.SELECTFROMLIST.Subtitle");
|
|
530
|
+
}
|
|
531
|
+
return sSubTitle;
|
|
532
|
+
};
|
|
533
|
+
|
|
534
|
+
|
|
535
|
+
return FilterableListContent;
|
|
536
|
+
|
|
537
|
+
});
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* ! OpenUI5
|
|
3
|
+
* (c) Copyright 2009-2021 SAP SE or an SAP affiliate company.
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
sap.ui.define([
|
|
8
|
+
'sap/ui/mdc/valuehelp/base/Content',
|
|
9
|
+
'sap/ui/mdc/enum/ConditionValidated'
|
|
10
|
+
], function(
|
|
11
|
+
Content,
|
|
12
|
+
ConditionValidated
|
|
13
|
+
) {
|
|
14
|
+
"use strict";
|
|
15
|
+
|
|
16
|
+
var ListContent = Content.extend("sap.ui.mdc.valuehelp.base.ListContent", /** @lends sap.ui.mdc.valuehelp.base.ListContent.prototype */
|
|
17
|
+
{
|
|
18
|
+
metadata: {
|
|
19
|
+
library: "sap.ui.mdc",
|
|
20
|
+
properties: {
|
|
21
|
+
/**
|
|
22
|
+
* If this property is set to <code>true</code>, the filtering for user input is always case-sensitive.
|
|
23
|
+
* Otherwise user input is checked case-insensitively.
|
|
24
|
+
* If <code>$search</code> is used, this property has no effect on the <code>$search</code> request.
|
|
25
|
+
*
|
|
26
|
+
* If the used back-end service supports a case-insensitive search, set this property to <code>false</code>.
|
|
27
|
+
*
|
|
28
|
+
* @since 1.89.0
|
|
29
|
+
*/
|
|
30
|
+
caseSensitive: {
|
|
31
|
+
type: "boolean",
|
|
32
|
+
defaultValue: false
|
|
33
|
+
},
|
|
34
|
+
|
|
35
|
+
// _filterValue: { // Bind to ManagedObjectModel of ValueHelp
|
|
36
|
+
// type: "string",
|
|
37
|
+
// visibility: "hidden"
|
|
38
|
+
// },
|
|
39
|
+
/**
|
|
40
|
+
* If set, <code>getKeyForText</code> returns the first item that matches the text.
|
|
41
|
+
*
|
|
42
|
+
* This is the case if the text of the item starts with the text entered.
|
|
43
|
+
*/
|
|
44
|
+
useFirstMatch: {
|
|
45
|
+
type: "boolean",
|
|
46
|
+
group: "Behavior",
|
|
47
|
+
defaultValue: true
|
|
48
|
+
},
|
|
49
|
+
/**
|
|
50
|
+
* If set, the List is also opened if the ValueHelp icon is pressed.
|
|
51
|
+
*/
|
|
52
|
+
useAsValueHelp: {
|
|
53
|
+
type: "boolean",
|
|
54
|
+
group: "Behavior",
|
|
55
|
+
defaultValue: true // TODO - right default?
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
aggregations: {
|
|
59
|
+
/**
|
|
60
|
+
* Sets the in parameters of a field help.
|
|
61
|
+
*
|
|
62
|
+
* If set, the field help reads the data of these entities in the model and uses it to filter in the value help.
|
|
63
|
+
* @since 1.66.0
|
|
64
|
+
*/
|
|
65
|
+
inParameters: {
|
|
66
|
+
type: "sap.ui.mdc.field.InParameter",
|
|
67
|
+
group: "Data",
|
|
68
|
+
multiple: true
|
|
69
|
+
},
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Sets the out parameters of a field help.
|
|
73
|
+
*
|
|
74
|
+
* If set, the fields sets the data of these entities in the model based to the selected values.
|
|
75
|
+
* @since 1.66.0
|
|
76
|
+
*/
|
|
77
|
+
outParameters: {
|
|
78
|
+
type: "sap.ui.mdc.field.OutParameter",
|
|
79
|
+
group: "Data",
|
|
80
|
+
multiple: true
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
events: {
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
ListContent.prototype.getCount = function (aConditions) {
|
|
89
|
+
var iCount = 0;
|
|
90
|
+
// var aConditions = arguments[0] || this.get_conditions();
|
|
91
|
+
for (var i = 0; i < aConditions.length; i++) {
|
|
92
|
+
var oCondition = aConditions[i];
|
|
93
|
+
if (oCondition.isEmpty !== true && oCondition.validated === ConditionValidated.Validated) {
|
|
94
|
+
iCount++;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return iCount;
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
// has navigate method ?
|
|
102
|
+
|
|
103
|
+
return ListContent;
|
|
104
|
+
|
|
105
|
+
});
|