@refinitiv-ui/efx-grid 6.0.126 → 6.0.128
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/lib/core/dist/core.js +62 -347
- package/lib/core/dist/core.min.js +1 -1
- package/lib/core/es6/data/DataCache.d.ts +0 -18
- package/lib/core/es6/data/DataCache.js +61 -346
- package/lib/core/es6/grid/Core.js +1 -1
- package/lib/grid/index.js +1 -1
- package/lib/rt-grid/dist/rt-grid.js +574 -753
- package/lib/rt-grid/dist/rt-grid.min.js +1 -1
- package/lib/rt-grid/es6/Grid.js +150 -119
- package/lib/rt-grid/es6/RowDefinition.d.ts +14 -8
- package/lib/rt-grid/es6/RowDefinition.js +220 -208
- package/lib/tr-grid-conditional-coloring/es6/ConditionalColoring.d.ts +2 -2
- package/lib/tr-grid-conditional-coloring/es6/ConditionalColoring.js +12 -18
- package/lib/tr-grid-filter-input/es6/FilterInput.js +685 -888
- package/lib/tr-grid-util/es6/CellPainter.d.ts +4 -0
- package/lib/tr-grid-util/es6/CellPainter.js +75 -17
- package/lib/types/es6/ConditionalColoring.d.ts +2 -2
- package/lib/types/es6/Core/data/DataCache.d.ts +0 -18
- package/lib/types/es6/RealtimeGrid/RowDefinition.d.ts +14 -8
- package/lib/versions.json +3 -3
- package/package.json +1 -1
@@ -1,8 +1,9 @@
|
|
1
|
-
import {
|
2
|
-
import {
|
3
|
-
import {
|
4
|
-
import {
|
1
|
+
import {Ext} from '../../tr-grid-util/es6/Ext.js';
|
2
|
+
import {GridPlugin} from '../../tr-grid-util/es6/GridPlugin.js';
|
3
|
+
import {ElfUtil} from '../../tr-grid-util/es6/ElfUtil.js';
|
4
|
+
import {ElfDate} from '../../tr-grid-util/es6/ElfDate.js';
|
5
5
|
import { CoralItems } from '../../tr-grid-util/es6/CoralItems.js';
|
6
|
+
|
6
7
|
/** @typedef {Object} FilterInputPlugin~GridColumn
|
7
8
|
* @description FilterInputPlugin options available in each individual grid's column
|
8
9
|
* @property {FilterInputPlugin~ColumnOptions=} filterInput=null
|
@@ -51,141 +52,120 @@ import { CoralItems } from '../../tr-grid-util/es6/CoralItems.js';
|
|
51
52
|
* @param {string} str
|
52
53
|
* @return {string}
|
53
54
|
*/
|
54
|
-
|
55
55
|
function convertToLowerCase(str) {
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
return "";
|
56
|
+
if(typeof str === "string") {
|
57
|
+
return str.toLowerCase();
|
58
|
+
}
|
59
|
+
return "";
|
61
60
|
}
|
61
|
+
|
62
62
|
/** @constructor
|
63
63
|
* @extends {GridPlugin}
|
64
64
|
* @param {FilterInputPlugin~Options=} options
|
65
65
|
*/
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
this.config({
|
83
|
-
"filterInput": options
|
84
|
-
});
|
85
|
-
}
|
66
|
+
var FilterInputPlugin = function (options) {
|
67
|
+
this._onInputChanged = this._onInputChanged.bind(this);
|
68
|
+
this._onOpenedChanged = this._onOpenedChanged.bind(this);
|
69
|
+
this._onDateChanged = this._onDateChanged.bind(this);
|
70
|
+
this._onPostDataSourceChanged = this._onPostDataSourceChanged.bind(this);
|
71
|
+
this._onColumnAdded = this._onColumnAdded.bind(this);
|
72
|
+
this._onRowFilteringRetrieved = this._onRowFilteringRetrieved.bind(this);
|
73
|
+
this._onRowFilteringFailed = this._onRowFilteringFailed.bind(this);
|
74
|
+
this._onColumnFilterFailed = this._onColumnFilterFailed.bind(this);
|
75
|
+
this.refresh = this.refresh.bind(this);
|
76
|
+
this._updateUIs = this._updateUIs.bind(this);
|
77
|
+
|
78
|
+
this._hosts = [];
|
79
|
+
if(options) {
|
80
|
+
this.config({"filterInput": options});
|
81
|
+
}
|
86
82
|
};
|
87
|
-
|
88
83
|
Ext.inherits(FilterInputPlugin, GridPlugin);
|
84
|
+
|
89
85
|
/** Filter Processor used to perform actual filtering (This extension provides only UIs).
|
90
86
|
* @type {*}
|
91
87
|
* @private
|
92
88
|
*/
|
93
|
-
|
94
89
|
FilterInputPlugin.prototype._filterProc = null;
|
95
90
|
/** @type {Object}
|
96
91
|
* @private
|
97
92
|
*/
|
98
|
-
|
99
93
|
FilterInputPlugin.prototype._gridConfig = null;
|
94
|
+
|
100
95
|
/** Array of grid sections
|
101
96
|
* @type {Array.<Object>}
|
102
97
|
* @private
|
103
98
|
*/
|
104
|
-
|
105
99
|
FilterInputPlugin.prototype._inputSects = null;
|
100
|
+
|
106
101
|
/** @type {number}
|
107
102
|
* @private
|
108
103
|
*/
|
109
|
-
|
110
104
|
FilterInputPlugin.prototype._refreshTimer = 0;
|
111
105
|
/** @type {number}
|
112
106
|
* @private
|
113
107
|
*/
|
114
|
-
|
115
108
|
FilterInputPlugin.prototype._uiTimer = 0;
|
116
109
|
/** @type {boolean}
|
117
110
|
* @private
|
118
111
|
*/
|
119
|
-
|
120
112
|
FilterInputPlugin.prototype._freezeInputValue = false;
|
121
113
|
/** @type {string|boolean}
|
122
114
|
* @private
|
123
115
|
*/
|
124
|
-
|
125
116
|
FilterInputPlugin.prototype._inputTrigger = "keyup";
|
117
|
+
|
126
118
|
/** @public
|
127
119
|
* @return {string}
|
128
120
|
*/
|
129
|
-
|
130
121
|
FilterInputPlugin.prototype.getName = function () {
|
131
|
-
|
122
|
+
return "FilterInputPlugin"; // Read Only
|
132
123
|
};
|
133
124
|
/** @public
|
134
125
|
* @param {Object} host core grid object
|
135
126
|
* @param {Object=} options
|
136
127
|
*/
|
137
|
-
|
138
|
-
|
139
128
|
FilterInputPlugin.prototype.initialize = function (host, options) {
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
// }
|
129
|
+
if(this._hosts.indexOf(host) >= 0) { return; }
|
130
|
+
this._hosts.push(host);
|
131
|
+
|
132
|
+
host.listen("postDataSourceChanged", this._onPostDataSourceChanged);
|
133
|
+
host.listen("columnAdded", this._onColumnAdded);
|
134
|
+
|
135
|
+
this.config(options);
|
136
|
+
// In case of lazy loading
|
137
|
+
// var title = host.getSection("title");
|
138
|
+
// if(title) {
|
139
|
+
// this._onPostDataSourceChanged();
|
140
|
+
// }
|
153
141
|
};
|
154
142
|
/** @public
|
155
143
|
* @param {Object} host core grid object
|
156
144
|
*/
|
157
|
-
|
158
|
-
|
159
145
|
FilterInputPlugin.prototype.unload = function (host) {
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
}
|
182
|
-
|
183
|
-
if (this._uiTimer) {
|
184
|
-
clearTimeout(this._uiTimer);
|
185
|
-
this._uiTimer = 0;
|
186
|
-
}
|
187
|
-
}
|
146
|
+
var at = this._hosts.indexOf(host);
|
147
|
+
if(at < 0) { return; }
|
148
|
+
|
149
|
+
host.unlisten("postDataSourceChanged", this._onPostDataSourceChanged);
|
150
|
+
this._hosts.splice(at, 1);
|
151
|
+
if(this._inputSects && at < this._inputSects.length) {
|
152
|
+
this._inputSects.splice(at, 1);
|
153
|
+
}
|
154
|
+
if(!this._hosts.length) {
|
155
|
+
this._compositeGrid = this._realTimeGrid = this._filterBuilder = null;
|
156
|
+
this._filterProc = this._gridConfig = this._inputSects = null;
|
157
|
+
|
158
|
+
if(this._refreshTimer) {
|
159
|
+
clearTimeout(this._refreshTimer);
|
160
|
+
this._refreshTimer = 0;
|
161
|
+
}
|
162
|
+
if(this._uiTimer) {
|
163
|
+
clearTimeout(this._uiTimer);
|
164
|
+
this._uiTimer = 0;
|
165
|
+
}
|
166
|
+
}
|
188
167
|
};
|
168
|
+
|
189
169
|
/** Prevent built-in config
|
190
170
|
* @public
|
191
171
|
* @ignore
|
@@ -193,758 +173,636 @@ FilterInputPlugin.prototype.unload = function (host) {
|
|
193
173
|
* @param {Object} options
|
194
174
|
* @return {*}
|
195
175
|
*/
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
}
|
202
|
-
|
203
|
-
return; // eslint-disable-line
|
176
|
+
FilterInputPlugin.prototype.beforeProcessOption = function(optionName, options) {
|
177
|
+
if (optionName === 'filterRow' || optionName === 'FilterRow') {
|
178
|
+
return false; // eslint-disable-line
|
179
|
+
}
|
180
|
+
return; // eslint-disable-line
|
204
181
|
};
|
205
182
|
/** @private
|
206
183
|
* @param {string} optionName
|
207
184
|
* @param {Object} options
|
208
185
|
*/
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
186
|
+
FilterInputPlugin.prototype._afterInit = function() {
|
187
|
+
// Retrieve RowFilteringPlugin is async operation
|
188
|
+
// onPostDataSourceChange has logic to apply default filter, which need to be done after RowFilteringPlugin is loaded
|
189
|
+
this._requestPlugin(this._hosts[0], "RowFilteringPlugin", this._gridConfig)
|
190
|
+
.then(this._onRowFilteringRetrieved)
|
191
|
+
.catch(this._onRowFilteringFailed)
|
192
|
+
.finally(this._onPostDataSourceChanged);
|
215
193
|
};
|
194
|
+
|
216
195
|
/** @public
|
217
196
|
* @param {Object=} options
|
218
197
|
*/
|
219
|
-
|
220
|
-
|
221
198
|
FilterInputPlugin.prototype.config = function (options) {
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
for (var c = 0; c < len; ++c) {
|
241
|
-
this._retrieveColumnOption(c, columns[c]);
|
242
|
-
}
|
199
|
+
if(!options) { return; }
|
200
|
+
this._gridConfig = options; // For loading dependency
|
201
|
+
|
202
|
+
var filterInputOptions = options["filterInput"];
|
203
|
+
this.addListener(filterInputOptions, "inputCreated");
|
204
|
+
|
205
|
+
if(filterInputOptions){
|
206
|
+
if(filterInputOptions["trigger"] != null){
|
207
|
+
this._inputTrigger = filterInputOptions["trigger"];
|
208
|
+
}
|
209
|
+
}
|
210
|
+
|
211
|
+
var columns = options["columns"];
|
212
|
+
var len = columns ? columns.length : 0;
|
213
|
+
for(var c = 0; c < len; ++c) {
|
214
|
+
this._retrieveColumnOption(c, columns[c]);
|
215
|
+
}
|
243
216
|
};
|
217
|
+
|
244
218
|
/** Get a current state of grid and extension config
|
245
219
|
* @public
|
246
220
|
* @param {Object=} out_obj
|
247
221
|
* @returns {!Object}
|
248
222
|
*/
|
249
|
-
|
250
|
-
|
251
223
|
FilterInputPlugin.prototype.getConfigObject = function (out_obj) {
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
filterInput.defaultValue = opt.defaultValue;
|
294
|
-
}
|
295
|
-
|
296
|
-
if (opt.trigger != null) {
|
297
|
-
filterInput.trigger = opt.trigger;
|
298
|
-
}
|
299
|
-
}
|
300
|
-
|
301
|
-
return obj;
|
224
|
+
var obj = out_obj || {};
|
225
|
+
|
226
|
+
var columns = obj.columns;
|
227
|
+
if (!columns) {
|
228
|
+
columns = obj.columns = [];
|
229
|
+
}
|
230
|
+
|
231
|
+
var len = this.getColumnCount();
|
232
|
+
for(var i = 0; i < len; ++i) {
|
233
|
+
var col = columns[i];
|
234
|
+
if (!col) {
|
235
|
+
col = columns[i] = {};
|
236
|
+
}
|
237
|
+
|
238
|
+
var filterInput = col.filterInput = {};
|
239
|
+
|
240
|
+
var opt = this._getExtColumnOption(i);
|
241
|
+
|
242
|
+
if (!opt) { continue; }
|
243
|
+
if (opt.disabled != null) {
|
244
|
+
filterInput.disabled = opt.disabled;
|
245
|
+
}
|
246
|
+
if (opt.placeholder != null) {
|
247
|
+
filterInput.placeholder = opt.placeholder;
|
248
|
+
}
|
249
|
+
if (opt.type != null) {
|
250
|
+
filterInput.type = opt.type;
|
251
|
+
}
|
252
|
+
if (opt.entries != null) {
|
253
|
+
filterInput.entries = opt.entries;
|
254
|
+
}
|
255
|
+
|
256
|
+
if (opt.defaultValue != null) {
|
257
|
+
filterInput.defaultValue = opt.defaultValue;
|
258
|
+
}
|
259
|
+
|
260
|
+
if (opt.trigger != null) {
|
261
|
+
filterInput.trigger = opt.trigger;
|
262
|
+
}
|
263
|
+
}
|
264
|
+
return obj;
|
302
265
|
};
|
266
|
+
|
303
267
|
/** @private
|
304
268
|
* @param {*} proc Filter Processor
|
305
269
|
*/
|
306
|
-
|
307
|
-
|
308
270
|
FilterInputPlugin.prototype._onRowFilteringRetrieved = function (proc) {
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
}
|
271
|
+
this._gridConfig = null;
|
272
|
+
if(proc) {
|
273
|
+
this._filterProc = proc;
|
274
|
+
this.refresh();
|
275
|
+
}
|
315
276
|
};
|
316
277
|
/** @private
|
317
278
|
* @param {*} proc Filter Processor
|
318
279
|
* @returns {*}
|
319
280
|
*/
|
320
|
-
|
321
|
-
|
322
281
|
FilterInputPlugin.prototype._onRowFilteringFailed = function () {
|
323
|
-
|
282
|
+
return this._requestPlugin(this._hosts[0], "ColumnFilterPlugin", this._gridConfig)
|
283
|
+
.then(this._onRowFilteringRetrieved)
|
284
|
+
.catch(this._onColumnFilterFailed); // Gracefully resolve if we fail this time
|
324
285
|
};
|
325
286
|
/** @private */
|
326
|
-
|
327
|
-
|
328
287
|
FilterInputPlugin.prototype._onColumnFilterFailed = function () {
|
329
|
-
|
288
|
+
this._gridConfig = null;
|
330
289
|
};
|
290
|
+
|
331
291
|
/** @private
|
332
292
|
* @param {Object=} e
|
333
293
|
*/
|
334
|
-
|
335
|
-
|
336
294
|
FilterInputPlugin.prototype._onColumnAdded = function (e) {
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
this._requestUIUpdate();
|
295
|
+
if(e.context && e.colIndex != null) {
|
296
|
+
this._retrieveColumnOption(e.colIndex, e.context);
|
297
|
+
}
|
298
|
+
this._requestUIUpdate();
|
342
299
|
};
|
343
|
-
/** @private */
|
344
|
-
|
345
300
|
|
301
|
+
/** @private */
|
346
302
|
FilterInputPlugin.prototype._requestUIUpdate = function () {
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
}
|
303
|
+
if(!this._uiTimer) { // HACK: To wait for other plugins receive columnAdded and avoid removing the wrong column filter
|
304
|
+
this._uiTimer = setTimeout(this._updateUIs, 50);
|
305
|
+
}
|
351
306
|
};
|
352
307
|
/** @private */
|
353
|
-
|
354
|
-
|
355
308
|
FilterInputPlugin.prototype._updateUIs = function () {
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
}
|
364
|
-
}
|
309
|
+
this._uiTimer = 0;
|
310
|
+
if(this._inputSects) {
|
311
|
+
var len = this._inputSects.length;
|
312
|
+
for(var i = 0; i < len; ++i) {
|
313
|
+
this._createColumnInputs(this._inputSects[i], this._hosts[i]);
|
314
|
+
}
|
315
|
+
}
|
365
316
|
};
|
366
317
|
/** @private
|
367
318
|
* @param {Object=} e
|
368
319
|
*/
|
369
|
-
|
370
|
-
|
371
320
|
FilterInputPlugin.prototype._onPostDataSourceChanged = function (e) {
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
}
|
321
|
+
if(this._inputSects) { // TODO: Handle multiple hosts
|
322
|
+
return;
|
323
|
+
}
|
376
324
|
|
377
|
-
|
325
|
+
var len = this._hosts.length;
|
326
|
+
if (!len) {
|
327
|
+
return;
|
328
|
+
}
|
378
329
|
|
379
|
-
|
380
|
-
return;
|
381
|
-
}
|
330
|
+
this._inputSects = [];
|
382
331
|
|
383
|
-
|
384
|
-
|
332
|
+
var rowHeight = window.getComputedStyle(this._hosts[0].getElement()).getPropertyValue('--grid-row-height'); // TODO: This should be retrieved from core grid
|
333
|
+
if (rowHeight) {
|
334
|
+
rowHeight = parseInt(rowHeight, 10);
|
335
|
+
}
|
385
336
|
|
386
|
-
|
387
|
-
rowHeight = parseInt(rowHeight, 10);
|
388
|
-
}
|
337
|
+
var host;
|
389
338
|
|
390
|
-
|
339
|
+
for(var i = 0; i < len; ++i) {
|
340
|
+
host = this._hosts[i];
|
341
|
+
var titles = host.getAllSections("title");
|
342
|
+
var lastTitle = titles[titles.length - 1];
|
343
|
+
var at = lastTitle ? lastTitle.getIndex() + 1 : 0;
|
344
|
+
var section = this._inputSects[i] = host.addSectionAt(at, "title", "filterInputs");
|
391
345
|
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
var lastTitle = titles[titles.length - 1];
|
396
|
-
var at = lastTitle ? lastTitle.getIndex() + 1 : 0;
|
397
|
-
var section = this._inputSects[i] = host.addSectionAt(at, "title", "filterInputs");
|
346
|
+
if (rowHeight) {
|
347
|
+
section.setDefaultRowHeight(rowHeight);
|
348
|
+
}
|
398
349
|
|
399
|
-
|
400
|
-
|
401
|
-
|
350
|
+
section.enableClass("filter-inputs");
|
351
|
+
section.addRow(1);
|
352
|
+
}
|
402
353
|
|
403
|
-
|
404
|
-
|
405
|
-
|
354
|
+
if(!host.getVScrollStartIndex || host.getVScrollStartIndex() >= 0) {
|
355
|
+
host.freezeSection(at);
|
356
|
+
}
|
406
357
|
|
407
|
-
|
408
|
-
host.freezeSection(at);
|
409
|
-
}
|
410
|
-
|
411
|
-
this._requestUIUpdate();
|
358
|
+
this._requestUIUpdate();
|
412
359
|
};
|
360
|
+
|
413
361
|
/** @private
|
414
362
|
* @param {Object=} e
|
415
363
|
*/
|
416
|
-
|
417
|
-
|
418
364
|
FilterInputPlugin.prototype._onDateChanged = function (e) {
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
365
|
+
var host = this.getRelativeGrid(e);
|
366
|
+
|
367
|
+
if(host) {
|
368
|
+
var pos = host.getRelativePosition(e);
|
369
|
+
var colIndex = pos.colIndex;
|
370
|
+
var dateObj = ElfDate.getDate(e.detail) || e.target.value;
|
371
|
+
// TODO: Date object should be used for filtering instead of string
|
372
|
+
var dateStr = dateObj ? dateObj.toDateString().substr(4) : "";
|
373
|
+
this.filterColumn(colIndex, dateStr);
|
374
|
+
}
|
429
375
|
};
|
376
|
+
|
430
377
|
/** @private
|
431
378
|
* @param {Object} section ILayoutGrid
|
432
379
|
* @param {Object} host core grid object
|
433
380
|
*/
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
var textMap = FilterInputPlugin._createMapObject(defaultValue);
|
490
|
-
|
491
|
-
this.filterColumn(c, "", textMap);
|
492
|
-
} else {
|
493
|
-
this.filterColumn(c, defaultValue);
|
494
|
-
}
|
495
|
-
}
|
496
|
-
}
|
381
|
+
FilterInputPlugin.prototype._createColumnInputs = function(section, host) {
|
382
|
+
var colCount = section.getColumnCount();
|
383
|
+
|
384
|
+
for(var c = 0; c < colCount; ++c) {
|
385
|
+
var cell = section.getCell(c, 0);
|
386
|
+
var elem = cell.getContent();
|
387
|
+
if(elem) {
|
388
|
+
continue;
|
389
|
+
}
|
390
|
+
cell.enableClass("no-sort"); // Prevent sorting
|
391
|
+
var colOpt = this._newExtColumnOption(c);
|
392
|
+
if(colOpt["disabled"]) {
|
393
|
+
continue;
|
394
|
+
}
|
395
|
+
elem = this._createFilterUI(colOpt);
|
396
|
+
|
397
|
+
cell.setContent(elem);
|
398
|
+
|
399
|
+
var arg = colOpt._filterArguments = {};
|
400
|
+
arg.input = elem;
|
401
|
+
arg.field = this._getField(c);
|
402
|
+
arg.cell = cell;
|
403
|
+
arg.grid = host;
|
404
|
+
|
405
|
+
var inputArgs = {
|
406
|
+
"input": elem,
|
407
|
+
"cell": cell,
|
408
|
+
"colIndex": c,
|
409
|
+
"rowIndex": 0,
|
410
|
+
"grid": host,
|
411
|
+
"section": section
|
412
|
+
};
|
413
|
+
if (this._compositeGrid) {
|
414
|
+
inputArgs['colId'] = this._compositeGrid.getColumnId(c);
|
415
|
+
}
|
416
|
+
|
417
|
+
this._dispatch("inputCreated", inputArgs);
|
418
|
+
|
419
|
+
// To apply default filter, colOpt._filterArguments needs to be initailzed
|
420
|
+
var defaultValue = colOpt.defaultValue;
|
421
|
+
if(defaultValue){
|
422
|
+
var elemType = convertToLowerCase(colOpt.type);
|
423
|
+
if(elemType === "date"){
|
424
|
+
var dateObj = ElfDate.from(defaultValue);
|
425
|
+
defaultValue = dateObj ? dateObj.toDateString().substr(4) : "";
|
426
|
+
}
|
427
|
+
|
428
|
+
if(elemType === "multiselect"){
|
429
|
+
var textMap = FilterInputPlugin._createMapObject(defaultValue);
|
430
|
+
this.filterColumn(c, "", textMap);
|
431
|
+
} else {
|
432
|
+
this.filterColumn(c, defaultValue);
|
433
|
+
}
|
434
|
+
}
|
435
|
+
}
|
497
436
|
};
|
437
|
+
|
498
438
|
/** @type {Object.<string, string>=}
|
499
439
|
* @private
|
500
440
|
*/
|
501
|
-
|
502
|
-
|
503
441
|
FilterInputPlugin._uiMap = {
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
442
|
+
number: "ef-input",
|
443
|
+
select: "ef-select",
|
444
|
+
multiselect: "ef-combo-box",
|
445
|
+
dropdown: "ef-select",
|
446
|
+
date: "ef-datetime-picker"
|
509
447
|
};
|
448
|
+
|
510
449
|
/** @private
|
511
450
|
* @param {Object} colOpt
|
512
451
|
* @return {!Element}
|
513
452
|
*/
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
|
545
|
-
|
546
|
-
|
547
|
-
|
548
|
-
|
549
|
-
|
550
|
-
|
551
|
-
|
552
|
-
|
553
|
-
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
|
560
|
-
|
561
|
-
|
562
|
-
|
563
|
-
|
564
|
-
|
565
|
-
|
566
|
-
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
|
571
|
-
|
572
|
-
|
573
|
-
|
574
|
-
|
575
|
-
|
576
|
-
|
577
|
-
|
578
|
-
|
579
|
-
|
580
|
-
|
581
|
-
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
|
589
|
-
|
590
|
-
|
591
|
-
|
592
|
-
|
593
|
-
|
594
|
-
|
595
|
-
|
596
|
-
|
597
|
-
|
598
|
-
|
599
|
-
|
600
|
-
|
601
|
-
|
602
|
-
|
603
|
-
|
604
|
-
|
605
|
-
|
606
|
-
|
607
|
-
|
608
|
-
|
609
|
-
|
610
|
-
|
611
|
-
|
612
|
-
|
613
|
-
|
614
|
-
fip._onInputChanged(e);
|
615
|
-
}
|
616
|
-
}, false);
|
617
|
-
} else {
|
618
|
-
elem.addEventListener("keyup", this._onInputChanged, false);
|
619
|
-
}
|
620
|
-
}
|
621
|
-
|
622
|
-
break;
|
623
|
-
}
|
624
|
-
|
625
|
-
if (defaultValue) {
|
626
|
-
if (elemType === "multiselect") {
|
627
|
-
elem.values = defaultValue;
|
628
|
-
} else {
|
629
|
-
elem.value = defaultValue;
|
630
|
-
}
|
631
|
-
}
|
632
|
-
|
633
|
-
return elem;
|
453
|
+
FilterInputPlugin.prototype._createFilterUI = function(colOpt) {
|
454
|
+
var elemType = convertToLowerCase(colOpt.type);
|
455
|
+
var defaultValue = colOpt.defaultValue;
|
456
|
+
var elemTrigger = colOpt.trigger != null ? colOpt.trigger : this._inputTrigger;
|
457
|
+
var uiTag = FilterInputPlugin._uiMap[elemType] || "input";
|
458
|
+
if (uiTag == "ef-input") {
|
459
|
+
if(ElfUtil.hasComponent("ef-number-field")) {
|
460
|
+
uiTag = "ef-number-field";
|
461
|
+
}
|
462
|
+
} else if (uiTag == "input") {
|
463
|
+
if (ElfUtil.hasComponent("ef-search-field")) {
|
464
|
+
uiTag = "ef-search-field";
|
465
|
+
}
|
466
|
+
}
|
467
|
+
|
468
|
+
var elem = document.createElement(uiTag);
|
469
|
+
elem.className = "filter-input";
|
470
|
+
elem.style.width = "100%";
|
471
|
+
elem.style.margin = "0";
|
472
|
+
elem.setAttribute("aria-label", "column filtering");
|
473
|
+
var placeholder = colOpt["placeholder"];
|
474
|
+
if(placeholder) {
|
475
|
+
elem.setAttribute("placeholder", placeholder);
|
476
|
+
}
|
477
|
+
|
478
|
+
// Prevent trigering other actions when a user interacts with filter input
|
479
|
+
elem.addEventListener("keydown", FilterInputPlugin._stopPropagation, false);
|
480
|
+
elem.addEventListener("click", FilterInputPlugin._stopPropagation, false);
|
481
|
+
|
482
|
+
switch(uiTag) {
|
483
|
+
case "ef-input":
|
484
|
+
elem.setAttribute("type", "number");
|
485
|
+
if(elemTrigger != false && elemTrigger != ""){
|
486
|
+
elem.addEventListener("value-changed", this._onInputChanged, false);
|
487
|
+
}
|
488
|
+
break;
|
489
|
+
case "ef-number-field":
|
490
|
+
if(elemTrigger != false && elemTrigger != ""){
|
491
|
+
elem.addEventListener("value-changed", this._onInputChanged, false);
|
492
|
+
}
|
493
|
+
break;
|
494
|
+
case "ef-select":
|
495
|
+
elem.data = CoralItems.create(colOpt.entries);
|
496
|
+
elem.addEventListener("opened-changed", this._onOpenedChanged, false);
|
497
|
+
if(elemTrigger != false && elemTrigger != ""){
|
498
|
+
elem.addEventListener("value-changed", this._onInputChanged, false);
|
499
|
+
}
|
500
|
+
break;
|
501
|
+
case "ef-combo-box":
|
502
|
+
elem.multiple = true;
|
503
|
+
elem.data = CoralItems.create(colOpt.entries);
|
504
|
+
if(elemTrigger != false && elemTrigger != ""){
|
505
|
+
elem.addEventListener("value-changed", this._onInputChanged, false);
|
506
|
+
}
|
507
|
+
break;
|
508
|
+
case "ef-datetime-picker":
|
509
|
+
if(elemTrigger != false && elemTrigger != ""){
|
510
|
+
elem.addEventListener("value-changed", this._onDateChanged, false);
|
511
|
+
}
|
512
|
+
break;
|
513
|
+
case "ef-search-field":
|
514
|
+
if(elemTrigger != false && elemTrigger != ""){
|
515
|
+
if(elemTrigger == "enter"){
|
516
|
+
var plugin = this;
|
517
|
+
elem.addEventListener("keyup", function(e){
|
518
|
+
if(e.key == "Enter"){
|
519
|
+
plugin._onInputChanged(e);
|
520
|
+
}
|
521
|
+
}, false);
|
522
|
+
} else {
|
523
|
+
elem.addEventListener("value-changed", this._onInputChanged, false);
|
524
|
+
}
|
525
|
+
}
|
526
|
+
break;
|
527
|
+
default:
|
528
|
+
elem.setAttribute("type", "search");
|
529
|
+
if(elemTrigger != false && elemTrigger != ""){
|
530
|
+
if(elemTrigger == "enter"){
|
531
|
+
var fip = this;
|
532
|
+
elem.addEventListener("keyup", function(e){
|
533
|
+
if(e.key == "Enter"){
|
534
|
+
fip._onInputChanged(e);
|
535
|
+
}
|
536
|
+
}, false);
|
537
|
+
} else {
|
538
|
+
elem.addEventListener("keyup", this._onInputChanged, false);
|
539
|
+
}
|
540
|
+
}
|
541
|
+
break;
|
542
|
+
}
|
543
|
+
|
544
|
+
if(defaultValue){
|
545
|
+
if(elemType === "multiselect"){
|
546
|
+
elem.values = defaultValue;
|
547
|
+
} else {
|
548
|
+
elem.value = defaultValue;
|
549
|
+
}
|
550
|
+
}
|
551
|
+
|
552
|
+
return elem;
|
634
553
|
};
|
554
|
+
|
635
555
|
/** @private
|
636
556
|
* @param {number} colIndex
|
637
557
|
* @return {Object}
|
638
558
|
*/
|
639
|
-
|
640
|
-
|
641
|
-
FilterInputPlugin.prototype._getExtColumnOption = function (colIndex) {
|
642
|
-
return this._getColumnOption(colIndex, "filterInputOption") || null;
|
559
|
+
FilterInputPlugin.prototype._getExtColumnOption = function(colIndex) {
|
560
|
+
return this._getColumnOption(colIndex, "filterInputOption") || null;
|
643
561
|
};
|
644
562
|
/** @private
|
645
563
|
* @param {number} colIndex
|
646
564
|
* @return {!Object}
|
647
565
|
*/
|
648
|
-
|
649
|
-
|
650
|
-
|
651
|
-
|
652
|
-
|
653
|
-
|
654
|
-
|
655
|
-
|
656
|
-
option = colData["filterInputOption"] = {};
|
657
|
-
option._comparingLogic = FilterInputPlugin._containingFilter;
|
658
|
-
}
|
659
|
-
|
660
|
-
return option;
|
566
|
+
FilterInputPlugin.prototype._newExtColumnOption = function(colIndex) {
|
567
|
+
var colData = this._newColumnData(colIndex);
|
568
|
+
var option = colData["filterInputOption"];
|
569
|
+
if(!option) {
|
570
|
+
option = colData["filterInputOption"] = {};
|
571
|
+
option._comparingLogic = FilterInputPlugin._containingFilter;
|
572
|
+
}
|
573
|
+
return option;
|
661
574
|
};
|
662
575
|
/** @private
|
663
576
|
* @param {number} colIndex
|
664
577
|
* @param {Object} colDef
|
665
578
|
*/
|
666
|
-
|
667
|
-
|
668
|
-
|
669
|
-
|
670
|
-
|
671
|
-
|
672
|
-
|
673
|
-
|
674
|
-
|
675
|
-
|
676
|
-
|
677
|
-
|
678
|
-
|
679
|
-
|
680
|
-
|
681
|
-
|
682
|
-
|
683
|
-
|
684
|
-
|
685
|
-
|
686
|
-
|
687
|
-
|
688
|
-
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
|
693
|
-
|
694
|
-
|
695
|
-
|
696
|
-
|
697
|
-
|
698
|
-
|
699
|
-
|
700
|
-
|
701
|
-
|
702
|
-
|
703
|
-
|
704
|
-
|
705
|
-
|
706
|
-
|
707
|
-
|
708
|
-
|
709
|
-
|
710
|
-
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
|
715
|
-
|
716
|
-
|
717
|
-
|
718
|
-
|
719
|
-
|
720
|
-
|
721
|
-
|
722
|
-
|
723
|
-
|
724
|
-
|
725
|
-
}
|
726
|
-
|
727
|
-
var trigger = filterOption["trigger"];
|
728
|
-
|
729
|
-
if (typeof trigger == "string" || trigger == false) {
|
730
|
-
option["trigger"] = trigger;
|
731
|
-
}
|
732
|
-
} else {
|
733
|
-
option["disabled"] = true;
|
734
|
-
}
|
735
|
-
} else if (this._getExtColumnOption(colIndex)) {
|
736
|
-
// Reset everything to default
|
737
|
-
this._getColumnData(colIndex)["filterInputOption"] = null;
|
738
|
-
}
|
579
|
+
FilterInputPlugin.prototype._retrieveColumnOption = function(colIndex, colDef) {
|
580
|
+
var filterOption = colDef ? colDef["filterInput"] : null;
|
581
|
+
if(filterOption != null) {
|
582
|
+
var option = this._newExtColumnOption(colIndex);
|
583
|
+
if(filterOption) {
|
584
|
+
var elemType = convertToLowerCase(filterOption["type"]);
|
585
|
+
if(elemType) {
|
586
|
+
option["type"] = elemType;
|
587
|
+
}
|
588
|
+
|
589
|
+
var defaultLogic = filterOption["filterLogic"] || filterOption["defaultLogic"];
|
590
|
+
if(defaultLogic != null) {
|
591
|
+
if(typeof defaultLogic === "function") {
|
592
|
+
option._comparingLogic = defaultLogic;
|
593
|
+
} else if(!defaultLogic) {
|
594
|
+
option._comparingLogic = null;
|
595
|
+
}
|
596
|
+
}
|
597
|
+
if(elemType === "multiselect" && option._comparingLogic === FilterInputPlugin._containingFilter){
|
598
|
+
option._comparingLogic = FilterInputPlugin._multiSelectionFilter;
|
599
|
+
}
|
600
|
+
|
601
|
+
var disabled = filterOption["disabled"];
|
602
|
+
if(disabled != null) {
|
603
|
+
option["disabled"] = disabled ? true : false;
|
604
|
+
}
|
605
|
+
var placeholder = filterOption["placeholder"];
|
606
|
+
if(typeof placeholder == "string") {
|
607
|
+
option["placeholder"] = placeholder;
|
608
|
+
}
|
609
|
+
|
610
|
+
var entries = filterOption["entries"];
|
611
|
+
if (Array.isArray(entries)) {
|
612
|
+
// Add Clear filter option
|
613
|
+
if(elemType === "select") {
|
614
|
+
entries.push({
|
615
|
+
label: 'No Filter',
|
616
|
+
value: 'No Filter'
|
617
|
+
});
|
618
|
+
}
|
619
|
+
option["entries"] = entries;
|
620
|
+
}
|
621
|
+
|
622
|
+
var defaultValue = filterOption["defaultValue"];
|
623
|
+
if(defaultValue) {
|
624
|
+
option["defaultValue"] = defaultValue;
|
625
|
+
}
|
626
|
+
|
627
|
+
var trigger = filterOption["trigger"];
|
628
|
+
if(typeof trigger == "string" || trigger == false) {
|
629
|
+
option["trigger"] = trigger;
|
630
|
+
}
|
631
|
+
} else {
|
632
|
+
option["disabled"] = true;
|
633
|
+
}
|
634
|
+
} else if(this._getExtColumnOption(colIndex)) {
|
635
|
+
// Reset everything to default
|
636
|
+
this._getColumnData(colIndex)["filterInputOption"] = null;
|
637
|
+
}
|
739
638
|
};
|
639
|
+
|
740
640
|
/** @public
|
741
641
|
* @ignore
|
742
642
|
* @param {number} colIndex
|
743
643
|
* @param {string} text
|
744
644
|
*/
|
745
|
-
|
746
|
-
|
747
645
|
FilterInputPlugin.prototype.updateUI = function (colIndex, text) {
|
748
|
-
|
749
|
-
var input = this.getColumnInput(colIndex);
|
646
|
+
if (this._freezeInputValue) return;
|
750
647
|
|
751
|
-
|
752
|
-
|
753
|
-
|
648
|
+
var input = this.getColumnInput(colIndex);
|
649
|
+
if (input) {
|
650
|
+
input.value = text;
|
651
|
+
}
|
754
652
|
|
755
|
-
|
653
|
+
this._updateColumnOption(colIndex, text);
|
756
654
|
};
|
655
|
+
|
757
656
|
/** @private
|
758
657
|
* @param {number} colIndex
|
759
658
|
* @param {string|number} text
|
760
659
|
* @param {Object=} textMap
|
761
660
|
* @return {Object} Column option
|
762
661
|
*/
|
763
|
-
|
764
|
-
|
765
662
|
FilterInputPlugin.prototype._updateColumnOption = function (colIndex, text, textMap) {
|
766
|
-
|
767
|
-
|
768
|
-
|
769
|
-
|
770
|
-
|
771
|
-
|
772
|
-
|
773
|
-
|
774
|
-
|
775
|
-
|
776
|
-
|
777
|
-
|
778
|
-
|
779
|
-
|
780
|
-
|
781
|
-
|
782
|
-
|
783
|
-
|
784
|
-
|
785
|
-
if (textMap && !Object.keys(textMap).length) {
|
786
|
-
textMap = null;
|
787
|
-
}
|
788
|
-
|
789
|
-
arg.textMap = option.textMap = textMap;
|
790
|
-
}
|
791
|
-
|
792
|
-
return option;
|
663
|
+
var option = this._getExtColumnOption(colIndex);
|
664
|
+
if (!option) { return null; }
|
665
|
+
|
666
|
+
var inputText = "";
|
667
|
+
if (text || text === 0) {
|
668
|
+
inputText = typeof text !== "string" ? text + "" : text;
|
669
|
+
}
|
670
|
+
var arg = option._filterArguments;
|
671
|
+
if (arg) {
|
672
|
+
arg.inputText = option.inputText = inputText;
|
673
|
+
arg.lowerCasedText = inputText.toLowerCase();
|
674
|
+
arg.colIndex = colIndex;
|
675
|
+
if(textMap && !Object.keys(textMap).length){
|
676
|
+
textMap = null;
|
677
|
+
}
|
678
|
+
arg.textMap = option.textMap = textMap;
|
679
|
+
}
|
680
|
+
return option;
|
793
681
|
};
|
682
|
+
|
794
683
|
/** @public
|
795
684
|
* @param {number} colIndex
|
796
685
|
* @return {Element} Input element
|
797
686
|
*/
|
798
|
-
|
799
|
-
|
800
|
-
|
801
|
-
|
802
|
-
|
803
|
-
|
804
|
-
|
805
|
-
|
806
|
-
|
807
|
-
return cell.getContent();
|
808
|
-
}
|
809
|
-
}
|
810
|
-
|
811
|
-
return null;
|
687
|
+
FilterInputPlugin.prototype.getColumnInput = function(colIndex) {
|
688
|
+
if(this._inputSects) {
|
689
|
+
var sect = this._inputSects[0]; // TODO: Handle multi-grids
|
690
|
+
var cell = sect.getCell(colIndex, 0);
|
691
|
+
if(cell && cell.getElement()) {
|
692
|
+
return cell.getContent();
|
693
|
+
}
|
694
|
+
}
|
695
|
+
return null;
|
812
696
|
};
|
697
|
+
|
813
698
|
/** Clear input UI and remove all filters from the specified column
|
814
699
|
* @public
|
815
700
|
* @param {(null|number)=} colIndex=null clear filter input at specific colIndex, if null then all input will be clear.
|
816
701
|
*/
|
817
|
-
|
818
|
-
|
819
702
|
FilterInputPlugin.prototype.removeColumnFilters = function (colIndex) {
|
820
|
-
|
821
|
-
|
822
|
-
|
823
|
-
|
824
|
-
|
825
|
-
|
826
|
-
|
827
|
-
|
828
|
-
|
829
|
-
|
830
|
-
|
831
|
-
|
832
|
-
|
833
|
-
|
834
|
-
this._freezeInputValue = true;
|
835
|
-
|
836
|
-
this._filterProc.removeColumnFilters(colIndex);
|
837
|
-
|
838
|
-
this._freezeInputValue = false;
|
703
|
+
var sect = this._inputSects && this._inputSects[0]; // TODO: Handle multi-grids
|
704
|
+
if (sect) {
|
705
|
+
if (colIndex != null) {
|
706
|
+
this.updateUI(colIndex, '');
|
707
|
+
} else {
|
708
|
+
var count = this.getColumnCount();
|
709
|
+
for (var index = 0; index < count; index++) {
|
710
|
+
this.updateUI(index, '');
|
711
|
+
}
|
712
|
+
}
|
713
|
+
}
|
714
|
+
this._freezeInputValue = true;
|
715
|
+
this._filterProc.removeColumnFilters(colIndex);
|
716
|
+
this._freezeInputValue = false;
|
839
717
|
};
|
718
|
+
|
840
719
|
/** Alias to {@link FilterInputPlugin#removeColumnFilters} Clear input UI and remove all filters from the specified column
|
841
720
|
* @public
|
842
721
|
* @function
|
843
722
|
* @param {(null|number)=} colIndex=null clear filter input at specific colIndex, if null then all input will be clear.
|
844
723
|
*/
|
845
|
-
|
846
|
-
|
847
724
|
FilterInputPlugin.prototype.removeColumnFilter = FilterInputPlugin.prototype.removeColumnFilters;
|
725
|
+
|
848
726
|
/** @public
|
849
727
|
* @param {number} colIndex
|
850
728
|
* @param {*} value
|
851
729
|
*/
|
730
|
+
FilterInputPlugin.prototype.setInputValue = function(colIndex, value) {
|
731
|
+
var inputElem = this.getColumnInput(colIndex);
|
732
|
+
if(!inputElem){
|
733
|
+
return;
|
734
|
+
}
|
735
|
+
var colOpt = this._getExtColumnOption(colIndex);
|
736
|
+
var elemType = convertToLowerCase(colOpt.type);
|
737
|
+
|
738
|
+
var dateValue;
|
739
|
+
if(elemType === "date"){
|
740
|
+
var dateObj = ElfDate.from(value);
|
741
|
+
dateValue = dateObj ? dateObj.toDateString().substr(4) : "";
|
742
|
+
}
|
743
|
+
|
744
|
+
if(elemType === "multiselect"){
|
745
|
+
inputElem.values = value;
|
746
|
+
var textMap = FilterInputPlugin._createMapObject(value);
|
747
|
+
this.filterColumn(colIndex, "", textMap);
|
748
|
+
} else {
|
749
|
+
inputElem.value = value;
|
750
|
+
this.filterColumn(colIndex, elemType === "date" ? dateValue : value);
|
751
|
+
}
|
852
752
|
|
853
|
-
FilterInputPlugin.prototype.setInputValue = function (colIndex, value) {
|
854
|
-
var inputElem = this.getColumnInput(colIndex);
|
855
|
-
|
856
|
-
if (!inputElem) {
|
857
|
-
return;
|
858
|
-
}
|
859
|
-
|
860
|
-
var colOpt = this._getExtColumnOption(colIndex);
|
861
|
-
|
862
|
-
var elemType = convertToLowerCase(colOpt.type);
|
863
|
-
var dateValue;
|
864
|
-
|
865
|
-
if (elemType === "date") {
|
866
|
-
var dateObj = ElfDate.from(value);
|
867
|
-
dateValue = dateObj ? dateObj.toDateString().substr(4) : "";
|
868
|
-
}
|
869
|
-
|
870
|
-
if (elemType === "multiselect") {
|
871
|
-
inputElem.values = value;
|
872
|
-
|
873
|
-
var textMap = FilterInputPlugin._createMapObject(value);
|
874
|
-
|
875
|
-
this.filterColumn(colIndex, "", textMap);
|
876
|
-
} else {
|
877
|
-
inputElem.value = value;
|
878
|
-
this.filterColumn(colIndex, elemType === "date" ? dateValue : value);
|
879
|
-
}
|
880
753
|
};
|
881
754
|
/** @public
|
882
755
|
* @param {number} colIndex
|
883
756
|
* @param {boolean=} disabled
|
884
757
|
*/
|
885
|
-
|
886
|
-
|
887
|
-
|
888
|
-
|
889
|
-
|
890
|
-
|
891
|
-
|
892
|
-
|
893
|
-
|
894
|
-
|
895
|
-
} else {
|
896
|
-
inputElem.removeAttribute("disabled");
|
897
|
-
}
|
898
|
-
}
|
758
|
+
FilterInputPlugin.prototype.disableColumnInput = function(colIndex, disabled) {
|
759
|
+
var inputElem = this.getColumnInput(colIndex);
|
760
|
+
if(inputElem) {
|
761
|
+
disabled = disabled != null ? disabled : true;
|
762
|
+
if(disabled) {
|
763
|
+
inputElem.setAttribute("disabled", "");
|
764
|
+
} else {
|
765
|
+
inputElem.removeAttribute("disabled");
|
766
|
+
}
|
767
|
+
}
|
899
768
|
};
|
900
769
|
/** @public
|
901
770
|
* @ignore
|
902
771
|
* @param {number} colIndex
|
903
772
|
* @return {Object}
|
904
773
|
*/
|
905
|
-
|
906
|
-
|
907
|
-
|
908
|
-
|
909
|
-
|
910
|
-
|
911
|
-
return proc.getColumnFilterState(colIndex);
|
912
|
-
}
|
913
|
-
|
914
|
-
return null;
|
774
|
+
FilterInputPlugin.prototype.getColumnFilter = function(colIndex) {
|
775
|
+
var proc = this._filterProc;
|
776
|
+
if(proc){
|
777
|
+
return proc.getColumnFilterState(colIndex);
|
778
|
+
}
|
779
|
+
return null;
|
915
780
|
};
|
916
781
|
/** @public
|
917
782
|
* @ignore
|
918
783
|
* @param {number} colIndex
|
919
784
|
* @return {Function}
|
920
785
|
*/
|
921
|
-
|
922
|
-
|
923
|
-
|
924
|
-
var option = this._getExtColumnOption(colIndex);
|
925
|
-
|
926
|
-
return option._comparingLogic;
|
786
|
+
FilterInputPlugin.prototype.getFilterLogic = function(colIndex) {
|
787
|
+
var option = this._getExtColumnOption(colIndex);
|
788
|
+
return option._comparingLogic;
|
927
789
|
};
|
928
790
|
/** Force filtering for every column
|
929
791
|
* @public
|
930
792
|
* @param {number=} delayMs=0 Set delay in millisecond to avoid repeatedly filtering
|
931
793
|
*/
|
932
|
-
|
933
|
-
|
934
|
-
|
935
|
-
|
936
|
-
|
937
|
-
|
938
|
-
|
939
|
-
|
940
|
-
|
941
|
-
|
942
|
-
|
943
|
-
|
944
|
-
|
945
|
-
if (this._filterProc) {
|
946
|
-
this._filterProc.refresh();
|
947
|
-
}
|
794
|
+
FilterInputPlugin.prototype.refresh = function(delayMs) {
|
795
|
+
if(delayMs) {
|
796
|
+
if(!this._refreshTimer) {
|
797
|
+
this._refreshTimer = setTimeout(this.refresh, delayMs);
|
798
|
+
}
|
799
|
+
return;
|
800
|
+
}
|
801
|
+
this._refreshTimer = 0;
|
802
|
+
|
803
|
+
if(this._filterProc) {
|
804
|
+
this._filterProc.refresh();
|
805
|
+
}
|
948
806
|
};
|
949
807
|
/** Change filter logic or context
|
950
808
|
* @public
|
@@ -952,216 +810,166 @@ FilterInputPlugin.prototype.refresh = function (delayMs) {
|
|
952
810
|
* @param {Function} func
|
953
811
|
* @param {*=} ctx Context object that will be provided as the first parameter of the filter function
|
954
812
|
*/
|
955
|
-
|
956
|
-
|
957
|
-
|
958
|
-
|
959
|
-
|
960
|
-
|
961
|
-
|
962
|
-
|
963
|
-
|
964
|
-
|
965
|
-
|
966
|
-
|
967
|
-
|
968
|
-
|
969
|
-
|
970
|
-
|
971
|
-
|
972
|
-
|
973
|
-
}
|
974
|
-
|
975
|
-
option._comparingLogic = func;
|
976
|
-
|
977
|
-
if (inputText || textMap) {
|
978
|
-
this.filterColumn(colIndex, inputText, textMap);
|
979
|
-
}
|
813
|
+
FilterInputPlugin.prototype.setFilterLogic = function(colIndex, func, ctx) {
|
814
|
+
if(colIndex < 0) { return; }
|
815
|
+
|
816
|
+
var option = this._newExtColumnOption(colIndex);
|
817
|
+
var inputText = option.inputText;
|
818
|
+
var textMap = option.textMap;
|
819
|
+
|
820
|
+
if(func) {
|
821
|
+
if(ctx != null) {
|
822
|
+
option._filterArguments = ctx; // WARNING: This replaces all existing argument
|
823
|
+
}
|
824
|
+
} else {
|
825
|
+
func = null;
|
826
|
+
}
|
827
|
+
option._comparingLogic = func;
|
828
|
+
if(inputText || textMap) {
|
829
|
+
this.filterColumn(colIndex, inputText, textMap);
|
830
|
+
}
|
980
831
|
};
|
832
|
+
|
981
833
|
/** Force filtering for a single column by changing filtering text
|
982
834
|
* @public
|
983
835
|
* @param {number} colIndex
|
984
836
|
* @param {string} text
|
985
837
|
* @param {Object=} textMap
|
986
838
|
*/
|
987
|
-
|
988
|
-
|
989
839
|
FilterInputPlugin.prototype.filterColumn = function (colIndex, text, textMap) {
|
990
|
-
|
991
|
-
|
992
|
-
if (!option) {
|
993
|
-
return;
|
994
|
-
} // This is because we need to toggle the icon
|
995
|
-
|
840
|
+
var option = this._updateColumnOption(colIndex, text, textMap);
|
841
|
+
if (!option) { return; }
|
996
842
|
|
997
|
-
|
843
|
+
// This is because we need to toggle the icon
|
844
|
+
this._setColumnFilter(colIndex, option);
|
998
845
|
};
|
999
846
|
/** @private
|
1000
847
|
* @param {number} colIndex
|
1001
848
|
* @param {Object} filterOptions
|
1002
849
|
*/
|
850
|
+
FilterInputPlugin.prototype._setColumnFilter = function(colIndex, filterOptions) {
|
851
|
+
var proc = this._filterProc;
|
852
|
+
if (proc) {
|
853
|
+
this._freezeInputValue = true;
|
854
|
+
if (proc.hasColumnFilter()) { // TODO: There should be a way to get column filters
|
855
|
+
proc.removeColumnFilters(colIndex); // TODO: this is slow
|
856
|
+
}
|
857
|
+
var hasFilterContent = filterOptions.inputText || filterOptions.textMap;
|
858
|
+
if(filterOptions._comparingLogic && hasFilterContent) {
|
859
|
+
var columnFilter = filterOptions._columnFilter;
|
860
|
+
if(!columnFilter) {
|
861
|
+
// The given rowData for the filter function has already been converted by RowFiltering Extension
|
862
|
+
columnFilter = filterOptions._columnFilter = FilterInputPlugin._compareRow.bind(null, filterOptions);
|
863
|
+
}
|
864
|
+
|
865
|
+
proc.addColumnFilter(colIndex, columnFilter);
|
866
|
+
}
|
867
|
+
this._freezeInputValue = false;
|
868
|
+
}
|
869
|
+
};
|
1003
870
|
|
1004
871
|
|
1005
|
-
FilterInputPlugin.prototype._setColumnFilter = function (colIndex, filterOptions) {
|
1006
|
-
var proc = this._filterProc;
|
1007
|
-
|
1008
|
-
if (proc) {
|
1009
|
-
this._freezeInputValue = true;
|
1010
|
-
|
1011
|
-
if (proc.hasColumnFilter()) {
|
1012
|
-
// TODO: There should be a way to get column filters
|
1013
|
-
proc.removeColumnFilters(colIndex); // TODO: this is slow
|
1014
|
-
}
|
1015
|
-
|
1016
|
-
var hasFilterContent = filterOptions.inputText || filterOptions.textMap;
|
1017
|
-
|
1018
|
-
if (filterOptions._comparingLogic && hasFilterContent) {
|
1019
|
-
var columnFilter = filterOptions._columnFilter;
|
1020
|
-
|
1021
|
-
if (!columnFilter) {
|
1022
|
-
columnFilter = this._realTimeGrid ? FilterInputPlugin._rtCompareRow : FilterInputPlugin._compareRow;
|
1023
|
-
columnFilter = filterOptions._columnFilter = columnFilter.bind(null, filterOptions);
|
1024
|
-
}
|
1025
|
-
|
1026
|
-
proc.addColumnFilter(colIndex, columnFilter);
|
1027
|
-
}
|
1028
|
-
|
1029
|
-
this._freezeInputValue = false;
|
1030
|
-
}
|
1031
|
-
};
|
1032
872
|
/** @private
|
1033
873
|
* @param {Object=} e
|
1034
874
|
*/
|
1035
|
-
|
1036
|
-
|
1037
875
|
FilterInputPlugin.prototype._onInputChanged = function (e) {
|
1038
|
-
|
1039
|
-
|
1040
|
-
|
1041
|
-
|
1042
|
-
|
1043
|
-
|
1044
|
-
|
1045
|
-
|
1046
|
-
|
1047
|
-
|
1048
|
-
|
1049
|
-
|
1050
|
-
|
1051
|
-
|
1052
|
-
|
1053
|
-
|
1054
|
-
|
1055
|
-
|
1056
|
-
|
1057
|
-
|
1058
|
-
}
|
1059
|
-
|
1060
|
-
this.filterColumn(colIndex, filterValue, textMap);
|
876
|
+
FilterInputPlugin._stopPropagation(e);
|
877
|
+
|
878
|
+
var host = this.getRelativeGrid(e);
|
879
|
+
if(!host) { return; }
|
880
|
+
var pos = host.getRelativePosition(e);
|
881
|
+
var colIndex = pos.colIndex;
|
882
|
+
|
883
|
+
var input = /** @type{Element} */(e.currentTarget);
|
884
|
+
var filterValue = input.value;
|
885
|
+
var textMap;
|
886
|
+
|
887
|
+
// If selected No Filter option - remove select filter
|
888
|
+
if (filterValue === "No Filter" && input.tagName.indexOf("SELECT") >= 0) {
|
889
|
+
filterValue = null;
|
890
|
+
}
|
891
|
+
else if(input.tagName.indexOf("COMBO-BOX") >= 0){
|
892
|
+
textMap = FilterInputPlugin._createMapObject(input.values);
|
893
|
+
}
|
894
|
+
|
895
|
+
this.filterColumn(colIndex, filterValue, textMap);
|
1061
896
|
};
|
1062
897
|
/** @private
|
1063
898
|
* @param {Object=} e
|
1064
899
|
* @description WORKAROUND:: set pointer events none to ef-select when options popup opened.
|
1065
900
|
* this will make ef-select can close popup when click at ef-select
|
1066
901
|
*/
|
1067
|
-
|
1068
|
-
|
1069
902
|
FilterInputPlugin.prototype._onOpenedChanged = function (e) {
|
1070
|
-
|
1071
|
-
|
1072
|
-
|
1073
|
-
|
1074
|
-
|
1075
|
-
|
1076
|
-
|
1077
|
-
|
1078
|
-
});
|
1079
|
-
}
|
903
|
+
if (e.detail.value) { //open
|
904
|
+
e.currentTarget.style.pointerEvents = "none";
|
905
|
+
} else { //close
|
906
|
+
var ect = e.currentTarget;
|
907
|
+
setTimeout(function(){
|
908
|
+
ect.style.pointerEvents = "";
|
909
|
+
});
|
910
|
+
}
|
1080
911
|
};
|
912
|
+
|
1081
913
|
/** @private
|
1082
914
|
* @param {Object=} e
|
1083
915
|
*/
|
1084
|
-
|
1085
|
-
|
1086
916
|
FilterInputPlugin._stopPropagation = function (e) {
|
1087
|
-
|
1088
|
-
|
1089
|
-
|
917
|
+
if(e) {
|
918
|
+
e.stopPropagation();
|
919
|
+
}
|
1090
920
|
};
|
1091
|
-
/** @private
|
1092
|
-
* @function
|
1093
|
-
* @param {Object} filterOptions
|
1094
|
-
* @param {Object} rowData
|
1095
|
-
* @param {string|number} rid
|
1096
|
-
* @return {boolean}
|
1097
|
-
*/
|
1098
921
|
|
1099
|
-
|
1100
|
-
FilterInputPlugin._compareRow = function (filterOptions, rowData, rid) {
|
1101
|
-
return filterOptions._comparingLogic(filterOptions._filterArguments, rowData);
|
1102
|
-
};
|
1103
922
|
/** @private
|
1104
923
|
* @function
|
1105
924
|
* @param {Object} filterOptions
|
1106
|
-
* @param {Object} rowData
|
925
|
+
* @param {Object} rowData The given rowData has already been converted by RowFiltering Extension
|
1107
926
|
* @param {string|number} rid
|
1108
927
|
* @return {boolean}
|
1109
928
|
*/
|
1110
|
-
|
1111
|
-
|
1112
|
-
FilterInputPlugin._rtCompareRow = function (filterOptions, rowData, rid) {
|
1113
|
-
return filterOptions._comparingLogic(filterOptions._filterArguments, rowData["ROW_DEF"].getRowData());
|
929
|
+
FilterInputPlugin._compareRow = function(filterOptions, rowData, rid) {
|
930
|
+
return filterOptions._comparingLogic(filterOptions._filterArguments, rowData);
|
1114
931
|
};
|
932
|
+
|
1115
933
|
/** @private
|
1116
934
|
* @function
|
1117
935
|
* @param {Array<string|number>} ary
|
1118
936
|
* @return {Object}
|
1119
937
|
*/
|
1120
|
-
|
1121
|
-
|
1122
|
-
|
1123
|
-
|
1124
|
-
|
1125
|
-
|
1126
|
-
|
1127
|
-
|
1128
|
-
|
1129
|
-
|
1130
|
-
|
1131
|
-
|
1132
|
-
|
1133
|
-
|
1134
|
-
|
1135
|
-
var str = FilterInputPlugin._transformToLowercaseString(key);
|
1136
|
-
|
1137
|
-
textMap[str] = true;
|
1138
|
-
}
|
1139
|
-
}
|
1140
|
-
|
1141
|
-
return textMap;
|
938
|
+
FilterInputPlugin._createMapObject = function(ary) {
|
939
|
+
var textMap = {};
|
940
|
+
if(ary){
|
941
|
+
var count = ary.length;
|
942
|
+
for(var i = 0; i < count; i++){
|
943
|
+
var key = ary[i];
|
944
|
+
if(key == null || key === ""){
|
945
|
+
continue;
|
946
|
+
}
|
947
|
+
var str = FilterInputPlugin._transformToLowercaseString(key);
|
948
|
+
textMap[str] = true;
|
949
|
+
}
|
950
|
+
}
|
951
|
+
return textMap;
|
1142
952
|
};
|
953
|
+
|
1143
954
|
/** @private
|
1144
955
|
* @function
|
1145
956
|
* @param {Object} data
|
1146
957
|
* @return {string}
|
1147
958
|
*/
|
1148
|
-
|
1149
|
-
|
1150
|
-
|
1151
|
-
|
1152
|
-
|
1153
|
-
|
1154
|
-
|
1155
|
-
|
1156
|
-
|
1157
|
-
|
1158
|
-
|
1159
|
-
|
1160
|
-
dataStr = data.toLowerCase();
|
1161
|
-
}
|
1162
|
-
|
1163
|
-
return dataStr;
|
959
|
+
FilterInputPlugin._transformToLowercaseString = function(data) {
|
960
|
+
var dataStr = "";
|
961
|
+
if(typeof data != "string") {
|
962
|
+
if(data instanceof Date) {
|
963
|
+
dataStr = data.toDateString().toLowerCase();
|
964
|
+
} else {
|
965
|
+
dataStr = (data + "").toLocaleLowerCase();
|
966
|
+
}
|
967
|
+
} else if(data) {
|
968
|
+
dataStr = data.toLowerCase();
|
969
|
+
}
|
970
|
+
return dataStr;
|
1164
971
|
};
|
972
|
+
|
1165
973
|
/** Default Filter Logic
|
1166
974
|
* @private
|
1167
975
|
* @function
|
@@ -1169,34 +977,28 @@ FilterInputPlugin._transformToLowercaseString = function (data) {
|
|
1169
977
|
* @param {Object} rowData
|
1170
978
|
* @return {boolean}
|
1171
979
|
*/
|
1172
|
-
|
1173
|
-
|
1174
|
-
|
1175
|
-
|
1176
|
-
|
1177
|
-
|
1178
|
-
|
1179
|
-
|
1180
|
-
|
1181
|
-
|
1182
|
-
|
1183
|
-
|
1184
|
-
|
1185
|
-
|
1186
|
-
|
1187
|
-
|
1188
|
-
|
1189
|
-
|
1190
|
-
|
1191
|
-
|
1192
|
-
}
|
1193
|
-
}
|
1194
|
-
|
1195
|
-
return false;
|
1196
|
-
}
|
1197
|
-
|
1198
|
-
return true;
|
980
|
+
FilterInputPlugin._containingFilter = function(e, rowData) {
|
981
|
+
var str = e.lowerCasedText || e.inputText;
|
982
|
+
var eventType = e.input && e.input.type;
|
983
|
+
if(str) {
|
984
|
+
var data = rowData[e.field];
|
985
|
+
if(data != null) {
|
986
|
+
var dataStr = FilterInputPlugin._transformToLowercaseString(data);
|
987
|
+
if (dataStr) {
|
988
|
+
if (eventType === "number") {
|
989
|
+
// Custom check if type is number
|
990
|
+
return Number(dataStr) === Number(str);
|
991
|
+
} else {
|
992
|
+
// Normal check if type is not a number
|
993
|
+
return dataStr.indexOf(str) >= 0;
|
994
|
+
}
|
995
|
+
}
|
996
|
+
}
|
997
|
+
return false;
|
998
|
+
}
|
999
|
+
return true;
|
1199
1000
|
};
|
1001
|
+
|
1200
1002
|
/** Filter Logic for multi selection input
|
1201
1003
|
* @private
|
1202
1004
|
* @function
|
@@ -1204,27 +1006,22 @@ FilterInputPlugin._containingFilter = function (e, rowData) {
|
|
1204
1006
|
* @param {Object} rowData
|
1205
1007
|
* @return {boolean}
|
1206
1008
|
*/
|
1009
|
+
FilterInputPlugin._multiSelectionFilter = function(e, rowData) {
|
1010
|
+
var inputMap = e.textMap;
|
1011
|
+
if(inputMap) {
|
1012
|
+
var data = rowData[e.field];
|
1013
|
+
if(data != null) {
|
1014
|
+
var dataStr = FilterInputPlugin._transformToLowercaseString(data);
|
1015
|
+
if (dataStr) {
|
1016
|
+
return inputMap[dataStr] ? true : false;
|
1017
|
+
}
|
1018
|
+
}
|
1019
|
+
return false;
|
1020
|
+
}
|
1021
|
+
return true;
|
1022
|
+
};
|
1207
1023
|
|
1208
1024
|
|
1209
|
-
FilterInputPlugin._multiSelectionFilter = function (e, rowData) {
|
1210
|
-
var inputMap = e.textMap;
|
1211
|
-
|
1212
|
-
if (inputMap) {
|
1213
|
-
var data = rowData[e.field];
|
1214
|
-
|
1215
|
-
if (data != null) {
|
1216
|
-
var dataStr = FilterInputPlugin._transformToLowercaseString(data);
|
1217
|
-
|
1218
|
-
if (dataStr) {
|
1219
|
-
return inputMap[dataStr] ? true : false;
|
1220
|
-
}
|
1221
|
-
}
|
1222
|
-
|
1223
|
-
return false;
|
1224
|
-
}
|
1225
|
-
|
1226
|
-
return true;
|
1227
|
-
};
|
1228
1025
|
|
1229
1026
|
export default FilterInputPlugin;
|
1230
|
-
export { FilterInputPlugin, FilterInputPlugin as FilterInput, FilterInputPlugin as FilterInputExtension };
|
1027
|
+
export { FilterInputPlugin, FilterInputPlugin as FilterInput, FilterInputPlugin as FilterInputExtension };
|