@univerjs/sheets-filter 0.6.7 → 0.6.9

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.
Files changed (3) hide show
  1. package/lib/facade.js +445 -0
  2. package/lib/index.js +1386 -0
  3. package/package.json +6 -6
package/lib/facade.js ADDED
@@ -0,0 +1,445 @@
1
+ import { Inject as k, Injector as S, ICommandService as m } from "@univerjs/core";
2
+ import { SetSheetsFilterCriteriaCommand as o, ClearSheetsFilterCriteriaCommand as l, RemoveSheetFilterCommand as v, SetSheetFilterRangeCommand as f, SheetsFilterService as F, CustomFilterOperator as C } from "@univerjs/sheets-filter";
3
+ import { FRange as h, FWorksheet as u, FSheetEventName as w } from "@univerjs/sheets/facade";
4
+ import { FEnum as b, FEventName as d, FUniver as _ } from "@univerjs/core/facade";
5
+ var E = Object.getOwnPropertyDescriptor, R = (i, e, t, r) => {
6
+ for (var n = r > 1 ? void 0 : r ? E(e, t) : e, a = i.length - 1, c; a >= 0; a--)
7
+ (c = i[a]) && (n = c(n) || n);
8
+ return n;
9
+ }, g = (i, e) => (t, r) => e(t, r, i);
10
+ let s = class {
11
+ constructor(i, e, t, r, n) {
12
+ this._workbook = i, this._worksheet = e, this._filterModel = t, this._injector = r, this._commandSrv = n;
13
+ }
14
+ /**
15
+ * Get the filtered out rows by this filter.
16
+ * @returns {number[]} Filtered out rows by this filter.
17
+ * @example
18
+ * ```typescript
19
+ * const fWorkbook = univerAPI.getActiveWorkbook();
20
+ * const fWorksheet = fWorkbook.getActiveSheet();
21
+ *
22
+ * // Set some values of the range C1:F10
23
+ * const fRange = fWorksheet.getRange('C1:F10');
24
+ * fRange.setValues([
25
+ * [1, 2, 3, 4],
26
+ * [2, 3, 4, 5],
27
+ * [3, 4, 5, 6],
28
+ * [4, 5, 6, 7],
29
+ * [5, 6, 7, 8],
30
+ * [6, 7, 8, 9],
31
+ * [7, 8, 9, 10],
32
+ * [8, 9, 10, 11],
33
+ * [9, 10, 11, 12],
34
+ * [10, 11, 12, 13],
35
+ * ]);
36
+ *
37
+ * // Create a filter on the range C1:F10
38
+ * let fFilter = fRange.createFilter();
39
+ *
40
+ * // If the filter already exists, remove it and create a new one
41
+ * if (!fFilter) {
42
+ * fRange.getFilter().remove();
43
+ * fFilter = fRange.createFilter();
44
+ * }
45
+ *
46
+ * // Set the filter criteria of the column C, filter out the rows that are not 1, 5, 9
47
+ * const column = fWorksheet.getRange('C:C').getColumn();
48
+ * fFilter.setColumnFilterCriteria(column, {
49
+ * colId: 0,
50
+ * filters: {
51
+ * filters: ['1', '5', '9'],
52
+ * },
53
+ * });
54
+ *
55
+ * // Get the filtered out rows
56
+ * console.log(fFilter.getFilteredOutRows()); // [1, 2, 3, 5, 6, 7, 9]
57
+ * ```
58
+ */
59
+ getFilteredOutRows() {
60
+ return Array.from(this._filterModel.filteredOutRows).sort();
61
+ }
62
+ /**
63
+ * Get the filter criteria of a column.
64
+ * @param {number} column - The column index.
65
+ * @returns {Nullable<IFilterColumn>} The filter criteria of the column.
66
+ * @example
67
+ * ```typescript
68
+ * const fWorkbook = univerAPI.getActiveWorkbook();
69
+ * const fWorksheet = fWorkbook.getActiveSheet();
70
+ *
71
+ * // Set some values of the range C1:F10
72
+ * const fRange = fWorksheet.getRange('C1:F10');
73
+ * fRange.setValues([
74
+ * [1, 2, 3, 4],
75
+ * [2, 3, 4, 5],
76
+ * [3, 4, 5, 6],
77
+ * [4, 5, 6, 7],
78
+ * [5, 6, 7, 8],
79
+ * [6, 7, 8, 9],
80
+ * [7, 8, 9, 10],
81
+ * [8, 9, 10, 11],
82
+ * [9, 10, 11, 12],
83
+ * [10, 11, 12, 13],
84
+ * ]);
85
+ *
86
+ * // Create a filter on the range C1:F10
87
+ * let fFilter = fRange.createFilter();
88
+ *
89
+ * // If the filter already exists, remove it and create a new one
90
+ * if (!fFilter) {
91
+ * fRange.getFilter().remove();
92
+ * fFilter = fRange.createFilter();
93
+ * }
94
+ *
95
+ * // Set the filter criteria of the column C, filter out the rows that are not 1, 5, 9
96
+ * const column = fWorksheet.getRange('C:C').getColumn();
97
+ * fFilter.setColumnFilterCriteria(column, {
98
+ * colId: 0,
99
+ * filters: {
100
+ * filters: ['1', '5', '9'],
101
+ * },
102
+ * });
103
+ *
104
+ * // Print the filter criteria of the column C and D
105
+ * console.log(fFilter.getColumnFilterCriteria(column)); // { colId: 0, filters: { filters: ['1', '5', '9'] } }
106
+ * console.log(fFilter.getColumnFilterCriteria(column + 1)); // undefined
107
+ * ```
108
+ */
109
+ getColumnFilterCriteria(i) {
110
+ var e;
111
+ return (e = this._filterModel.getFilterColumn(i)) == null ? void 0 : e.getColumnData();
112
+ }
113
+ /**
114
+ * Clear the filter criteria of a column.
115
+ * @param {number} column - The column index.
116
+ * @returns {FFilter} The FFilter instance for chaining.
117
+ * @example
118
+ * ```typescript
119
+ * const fWorkbook = univerAPI.getActiveWorkbook();
120
+ * const fWorksheet = fWorkbook.getActiveSheet();
121
+ *
122
+ * // Set some values of the range C1:F10
123
+ * const fRange = fWorksheet.getRange('C1:F10');
124
+ * fRange.setValues([
125
+ * [1, 2, 3, 4],
126
+ * [2, 3, 4, 5],
127
+ * [3, 4, 5, 6],
128
+ * [4, 5, 6, 7],
129
+ * [5, 6, 7, 8],
130
+ * [6, 7, 8, 9],
131
+ * [7, 8, 9, 10],
132
+ * [8, 9, 10, 11],
133
+ * [9, 10, 11, 12],
134
+ * [10, 11, 12, 13],
135
+ * ]);
136
+ *
137
+ * // Create a filter on the range C1:F10
138
+ * let fFilter = fRange.createFilter();
139
+ *
140
+ * // If the filter already exists, remove it and create a new one
141
+ * if (!fFilter) {
142
+ * fRange.getFilter().remove();
143
+ * fFilter = fRange.createFilter();
144
+ * }
145
+ *
146
+ * // Set the filter criteria of the column C, filter out the rows that are not 1, 5, 9
147
+ * const column = fWorksheet.getRange('C:C').getColumn();
148
+ * fFilter.setColumnFilterCriteria(column, {
149
+ * colId: 0,
150
+ * filters: {
151
+ * filters: ['1', '5', '9'],
152
+ * },
153
+ * });
154
+ *
155
+ * // Clear the filter criteria of the column C after 3 seconds
156
+ * setTimeout(() => {
157
+ * fFilter.removeColumnFilterCriteria(column);
158
+ * }, 3000);
159
+ * ```
160
+ */
161
+ removeColumnFilterCriteria(i) {
162
+ return this._commandSrv.syncExecuteCommand(o.id, {
163
+ unitId: this._workbook.getUnitId(),
164
+ subUnitId: this._worksheet.getSheetId(),
165
+ col: i,
166
+ criteria: null
167
+ }), this;
168
+ }
169
+ /**
170
+ * Set the filter criteria of a column.
171
+ * @param {number} column - The column index.
172
+ * @param {ISetSheetsFilterCriteriaCommandParams['criteria']} criteria - The new filter criteria.
173
+ * @returns {FFilter} The FFilter instance for chaining.
174
+ * @example
175
+ * ```typescript
176
+ * const fWorkbook = univerAPI.getActiveWorkbook();
177
+ * const fWorksheet = fWorkbook.getActiveSheet();
178
+ *
179
+ * // Set some values of the range C1:F10
180
+ * const fRange = fWorksheet.getRange('C1:F10');
181
+ * fRange.setValues([
182
+ * [1, 2, 3, 4],
183
+ * [2, 3, 4, 5],
184
+ * [3, 4, 5, 6],
185
+ * [4, 5, 6, 7],
186
+ * [5, 6, 7, 8],
187
+ * [6, 7, 8, 9],
188
+ * [7, 8, 9, 10],
189
+ * [8, 9, 10, 11],
190
+ * [9, 10, 11, 12],
191
+ * [10, 11, 12, 13],
192
+ * ]);
193
+ *
194
+ * // Create a filter on the range C1:F10
195
+ * let fFilter = fRange.createFilter();
196
+ *
197
+ * // If the filter already exists, remove it and create a new one
198
+ * if (!fFilter) {
199
+ * fRange.getFilter().remove();
200
+ * fFilter = fRange.createFilter();
201
+ * }
202
+ *
203
+ * // Set the filter criteria of the column C, filter out the rows that are not 1, 5, 9
204
+ * const column = fWorksheet.getRange('C:C').getColumn();
205
+ * fFilter.setColumnFilterCriteria(column, {
206
+ * colId: 0,
207
+ * filters: {
208
+ * filters: ['1', '5', '9'],
209
+ * },
210
+ * });
211
+ * ```
212
+ */
213
+ setColumnFilterCriteria(i, e) {
214
+ return this._commandSrv.syncExecuteCommand(o.id, {
215
+ unitId: this._workbook.getUnitId(),
216
+ subUnitId: this._worksheet.getSheetId(),
217
+ col: i,
218
+ criteria: e
219
+ }), this;
220
+ }
221
+ /**
222
+ * Get the range of the filter.
223
+ * @returns {FRange} The range of the filter.
224
+ * @example
225
+ * ```typescript
226
+ * const fWorkbook = univerAPI.getActiveWorkbook();
227
+ * const fWorksheet = fWorkbook.getActiveSheet();
228
+ * const fFilter = fWorksheet.getFilter();
229
+ * console.log(fFilter?.getRange().getA1Notation());
230
+ * ```
231
+ */
232
+ getRange() {
233
+ const i = this._filterModel.getRange();
234
+ return this._injector.createInstance(h, this._workbook, this._worksheet, i);
235
+ }
236
+ /**
237
+ * Remove the filter criteria of all columns.
238
+ * @returns {FFilter} The FFilter instance for chaining.
239
+ * @example
240
+ * ```typescript
241
+ * const fWorkbook = univerAPI.getActiveWorkbook();
242
+ * const fWorksheet = fWorkbook.getActiveSheet();
243
+ *
244
+ * // Set some values of the range C1:F10
245
+ * const fRange = fWorksheet.getRange('C1:F10');
246
+ * fRange.setValues([
247
+ * [1, 2, 3, 4],
248
+ * [2, 3, 4, 5],
249
+ * [3, 4, 5, 6],
250
+ * [4, 5, 6, 7],
251
+ * [5, 6, 7, 8],
252
+ * [6, 7, 8, 9],
253
+ * [7, 8, 9, 10],
254
+ * [8, 9, 10, 11],
255
+ * [9, 10, 11, 12],
256
+ * [10, 11, 12, 13],
257
+ * ]);
258
+ *
259
+ * // Create a filter on the range C1:F10
260
+ * let fFilter = fRange.createFilter();
261
+ *
262
+ * // If the filter already exists, remove it and create a new one
263
+ * if (!fFilter) {
264
+ * fRange.getFilter().remove();
265
+ * fFilter = fRange.createFilter();
266
+ * }
267
+ *
268
+ * // Set the filter criteria of the column C, filter out the rows that are not 1, 5, 9
269
+ * const column = fWorksheet.getRange('C:C').getColumn();
270
+ * fFilter.setColumnFilterCriteria(column, {
271
+ * colId: 0,
272
+ * filters: {
273
+ * filters: ['1', '5', '9'],
274
+ * },
275
+ * });
276
+ *
277
+ * // Clear the filter criteria of all columns after 3 seconds
278
+ * setTimeout(() => {
279
+ * fFilter.removeFilterCriteria();
280
+ * }, 3000);
281
+ * ```
282
+ */
283
+ removeFilterCriteria() {
284
+ return this._commandSrv.syncExecuteCommand(l.id), this;
285
+ }
286
+ /**
287
+ * Remove the filter from the worksheet.
288
+ * @returns {boolean} True if the filter is removed successfully; otherwise, false.
289
+ * @example
290
+ * ```typescript
291
+ * const fWorkbook = univerAPI.getActiveWorkbook();
292
+ * const fWorksheet = fWorkbook.getActiveSheet();
293
+ * const fRange = fWorksheet.getRange('A1:D14');
294
+ * let fFilter = fRange.createFilter();
295
+ *
296
+ * // If the worksheet already has a filter, remove it and create a new filter.
297
+ * if (!fFilter) {
298
+ * fWorksheet.getFilter().remove();
299
+ * fFilter = fRange.createFilter();
300
+ * }
301
+ * console.log(fFilter);
302
+ * ```
303
+ */
304
+ remove() {
305
+ return this._commandSrv.syncExecuteCommand(v.id, {
306
+ unitId: this._workbook.getUnitId(),
307
+ subUnitId: this._worksheet.getSheetId()
308
+ });
309
+ }
310
+ };
311
+ s = R([
312
+ g(3, k(S)),
313
+ g(4, m)
314
+ ], s);
315
+ class I extends h {
316
+ createFilter() {
317
+ return this._getFilterModel() || !this._commandService.syncExecuteCommand(f.id, {
318
+ unitId: this._workbook.getUnitId(),
319
+ subUnitId: this._worksheet.getSheetId(),
320
+ range: this._range
321
+ }) ? null : this.getFilter();
322
+ }
323
+ /**
324
+ * Get the filter for the current range's worksheet.
325
+ * @returns {FFilter | null} The interface class to handle the filter. If the worksheet does not have a filter,
326
+ * this method would return `null`.
327
+ */
328
+ getFilter() {
329
+ const e = this._getFilterModel();
330
+ return e ? this._injector.createInstance(s, this._workbook, this._worksheet, e) : null;
331
+ }
332
+ _getFilterModel() {
333
+ return this._injector.get(F).getFilterModel(
334
+ this._workbook.getUnitId(),
335
+ this._worksheet.getSheetId()
336
+ );
337
+ }
338
+ }
339
+ h.extend(I);
340
+ class x extends u {
341
+ getFilter() {
342
+ const e = this._getFilterModel();
343
+ return e ? this._injector.createInstance(s, this._workbook, this._worksheet, e) : null;
344
+ }
345
+ _getFilterModel() {
346
+ return this._injector.get(F).getFilterModel(
347
+ this._workbook.getUnitId(),
348
+ this._worksheet.getSheetId()
349
+ );
350
+ }
351
+ }
352
+ u.extend(x);
353
+ class U {
354
+ get CustomFilterOperator() {
355
+ return C;
356
+ }
357
+ }
358
+ b.extend(U);
359
+ class M extends d {
360
+ get SheetBeforeRangeFilter() {
361
+ return "SheetBeforeRangeFilter";
362
+ }
363
+ get SheetRangeFiltered() {
364
+ return "SheetRangeFiltered";
365
+ }
366
+ get SheetRangeFilterCleared() {
367
+ return "SheetRangeFilterCleared";
368
+ }
369
+ get SheetBeforeRangeFilterClear() {
370
+ return "SheetBeforeRangeFilterClear";
371
+ }
372
+ }
373
+ d.extend(M);
374
+ d.extend(w);
375
+ class p extends _ {
376
+ /**
377
+ * @ignore
378
+ */
379
+ _initialize(e) {
380
+ const t = e.get(m);
381
+ this.registerEventHandler(
382
+ this.Event.SheetBeforeRangeFilter,
383
+ () => t.beforeCommandExecuted((r) => {
384
+ r.id === o.id && this._beforeRangeFilter(r);
385
+ })
386
+ ), this.registerEventHandler(
387
+ this.Event.SheetBeforeRangeFilterClear,
388
+ () => t.beforeCommandExecuted((r) => {
389
+ r.id === l.id && this._beforeRangeFilterClear();
390
+ })
391
+ ), this.registerEventHandler(
392
+ this.Event.SheetRangeFiltered,
393
+ () => t.onCommandExecuted((r) => {
394
+ r.id === o.id && this._onRangeFiltered(r);
395
+ })
396
+ ), this.registerEventHandler(
397
+ this.Event.SheetRangeFilterCleared,
398
+ () => t.onCommandExecuted((r) => {
399
+ r.id === l.id && this._onRangeFilterCleared();
400
+ })
401
+ );
402
+ }
403
+ _beforeRangeFilter(e) {
404
+ const t = e.params, r = this.getUniverSheet(t.unitId), n = {
405
+ workbook: r,
406
+ worksheet: r.getSheetBySheetId(t.subUnitId),
407
+ col: t.col,
408
+ criteria: t.criteria
409
+ };
410
+ if (this.fireEvent(this.Event.SheetBeforeRangeFilter, n), n.cancel)
411
+ throw new Error("SetSheetsFilterCriteriaCommand canceled.");
412
+ }
413
+ _onRangeFiltered(e) {
414
+ const t = e.params, r = this.getUniverSheet(t.unitId), n = {
415
+ workbook: r,
416
+ worksheet: r.getSheetBySheetId(t.subUnitId),
417
+ col: t.col,
418
+ criteria: t.criteria
419
+ };
420
+ this.fireEvent(this.Event.SheetRangeFiltered, n);
421
+ }
422
+ _beforeRangeFilterClear() {
423
+ const e = this.getActiveWorkbook();
424
+ if (!e) return;
425
+ const t = {
426
+ workbook: e,
427
+ worksheet: e.getActiveSheet()
428
+ };
429
+ if (this.fireEvent(this.Event.SheetBeforeRangeFilterClear, t), t.cancel)
430
+ throw new Error("SetSheetsFilterCriteriaCommand canceled.");
431
+ }
432
+ _onRangeFilterCleared() {
433
+ const e = this.getActiveWorkbook();
434
+ if (!e) return;
435
+ const t = {
436
+ workbook: e,
437
+ worksheet: e.getActiveSheet()
438
+ };
439
+ this.fireEvent(this.Event.SheetRangeFilterCleared, t);
440
+ }
441
+ }
442
+ _.extend(p);
443
+ export {
444
+ s as FFilter
445
+ };