handsontable 0.0.0-next-a4bd0c0-20250307 → 0.0.0-next-b209352-20250310
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.
Potentially problematic release.
This version of handsontable might be problematic. Click here for more details.
- package/base.js +2 -2
- package/base.mjs +2 -2
- package/dist/handsontable.css +2 -2
- package/dist/handsontable.full.css +2 -2
- package/dist/handsontable.full.js +86 -44
- package/dist/handsontable.full.min.css +2 -2
- package/dist/handsontable.full.min.js +10 -10
- package/dist/handsontable.js +86 -44
- package/dist/handsontable.min.css +2 -2
- package/dist/handsontable.min.js +8 -8
- package/helpers/mixed.js +1 -1
- package/helpers/mixed.mjs +1 -1
- package/package.json +1 -1
- package/plugins/filters/conditionCollection.js +0 -26
- package/plugins/filters/conditionCollection.mjs +0 -26
- package/plugins/filters/filters.d.ts +2 -0
- package/plugins/filters/filters.js +77 -8
- package/plugins/filters/filters.mjs +77 -8
- package/plugins/mergeCells/mergeCells.js +2 -3
- package/plugins/mergeCells/mergeCells.mjs +2 -3
- package/plugins/undoRedo/actions/filters.js +2 -2
- package/plugins/undoRedo/actions/filters.mjs +2 -2
- package/styles/handsontable.css +2 -2
- package/styles/handsontable.min.css +2 -2
- package/styles/ht-theme-horizon.css +2 -2
- package/styles/ht-theme-horizon.min.css +2 -2
- package/styles/ht-theme-main.css +2 -2
- package/styles/ht-theme-main.min.css +2 -2
package/helpers/mixed.js
CHANGED
|
@@ -134,7 +134,7 @@ const domMessages = {
|
|
|
134
134
|
function _injectProductInfo(key, element) {
|
|
135
135
|
const hasValidType = !isEmpty(key);
|
|
136
136
|
const isNonCommercial = typeof key === 'string' && key.toLowerCase() === 'non-commercial-and-evaluation';
|
|
137
|
-
const hotVersion = "0.0.0-next-
|
|
137
|
+
const hotVersion = "0.0.0-next-b209352-20250310";
|
|
138
138
|
let keyValidityDate;
|
|
139
139
|
let consoleMessageState = 'invalid';
|
|
140
140
|
let domMessageState = 'invalid';
|
package/helpers/mixed.mjs
CHANGED
|
@@ -124,7 +124,7 @@ const domMessages = {
|
|
|
124
124
|
export function _injectProductInfo(key, element) {
|
|
125
125
|
const hasValidType = !isEmpty(key);
|
|
126
126
|
const isNonCommercial = typeof key === 'string' && key.toLowerCase() === 'non-commercial-and-evaluation';
|
|
127
|
-
const hotVersion = "0.0.0-next-
|
|
127
|
+
const hotVersion = "0.0.0-next-b209352-20250310";
|
|
128
128
|
let keyValidityDate;
|
|
129
129
|
let consoleMessageState = 'invalid';
|
|
130
130
|
let domMessageState = 'invalid';
|
package/package.json
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"url": "https://github.com/handsontable/handsontable/issues"
|
|
11
11
|
},
|
|
12
12
|
"author": "Handsoncode <hello@handsontable.com>",
|
|
13
|
-
"version": "0.0.0-next-
|
|
13
|
+
"version": "0.0.0-next-b209352-20250310",
|
|
14
14
|
"main": "index",
|
|
15
15
|
"module": "index.mjs",
|
|
16
16
|
"jsnext:main": "index.mjs",
|
|
@@ -49,13 +49,6 @@ class ConditionCollection {
|
|
|
49
49
|
* @type {LinkedPhysicalIndexToValueMap}
|
|
50
50
|
*/
|
|
51
51
|
_defineProperty(this, "filteringStates", new _translations.LinkedPhysicalIndexToValueMap());
|
|
52
|
-
/**
|
|
53
|
-
* Stores the previous state of the condition stack before the latest filter operation.
|
|
54
|
-
* This is used in the `beforeFilter` plugin to allow performing the undo operation.
|
|
55
|
-
*
|
|
56
|
-
* @type {null|Array}
|
|
57
|
-
*/
|
|
58
|
-
_defineProperty(this, "previousConditionStack", null);
|
|
59
52
|
this.hot = hot;
|
|
60
53
|
this.isMapRegistrable = isMapRegistrable;
|
|
61
54
|
if (this.isMapRegistrable === true) {
|
|
@@ -124,13 +117,6 @@ class ConditionCollection {
|
|
|
124
117
|
const localeForColumn = this.hot.getCellMeta(0, column).locale;
|
|
125
118
|
const args = conditionDefinition.args.map(v => typeof v === 'string' ? v.toLocaleLowerCase(localeForColumn) : v);
|
|
126
119
|
const name = conditionDefinition.name || conditionDefinition.command.key;
|
|
127
|
-
|
|
128
|
-
// If there's no previous condition stack defined (which means the condition stack was not cleared after the
|
|
129
|
-
// previous filter operation or that there was no filter operation performed yet), store the current conditions as
|
|
130
|
-
// the previous condition stack.
|
|
131
|
-
if (this.previousConditionStack === null) {
|
|
132
|
-
this.setPreviousConditionStack(this.exportAllConditions());
|
|
133
|
-
}
|
|
134
120
|
this.runLocalHooks('beforeAdd', column);
|
|
135
121
|
const columnType = this.getOperation(column);
|
|
136
122
|
if (columnType) {
|
|
@@ -259,8 +245,6 @@ class ConditionCollection {
|
|
|
259
245
|
* @fires ConditionCollection#afterRemove
|
|
260
246
|
*/
|
|
261
247
|
removeConditions(column) {
|
|
262
|
-
// Store the current conditions as the previous condition stack before it's cleared.
|
|
263
|
-
this.setPreviousConditionStack(this.exportAllConditions());
|
|
264
248
|
this.runLocalHooks('beforeRemove', column);
|
|
265
249
|
this.filteringStates.clearValue(column);
|
|
266
250
|
this.runLocalHooks('afterRemove', column);
|
|
@@ -294,16 +278,6 @@ class ConditionCollection {
|
|
|
294
278
|
return conditions.length > 0;
|
|
295
279
|
}
|
|
296
280
|
|
|
297
|
-
/**
|
|
298
|
-
* Updates the `previousConditionStack` property with the provided stack.
|
|
299
|
-
* It is used to store the current conditions before they are modified, allowing for undo operations.
|
|
300
|
-
*
|
|
301
|
-
* @param {Array|null} previousConditionStack The stack of previous conditions.
|
|
302
|
-
*/
|
|
303
|
-
setPreviousConditionStack(previousConditionStack) {
|
|
304
|
-
this.previousConditionStack = previousConditionStack;
|
|
305
|
-
}
|
|
306
|
-
|
|
307
281
|
/**
|
|
308
282
|
* Destroy object.
|
|
309
283
|
*/
|
|
@@ -45,13 +45,6 @@ class ConditionCollection {
|
|
|
45
45
|
* @type {LinkedPhysicalIndexToValueMap}
|
|
46
46
|
*/
|
|
47
47
|
_defineProperty(this, "filteringStates", new IndexToValueMap());
|
|
48
|
-
/**
|
|
49
|
-
* Stores the previous state of the condition stack before the latest filter operation.
|
|
50
|
-
* This is used in the `beforeFilter` plugin to allow performing the undo operation.
|
|
51
|
-
*
|
|
52
|
-
* @type {null|Array}
|
|
53
|
-
*/
|
|
54
|
-
_defineProperty(this, "previousConditionStack", null);
|
|
55
48
|
this.hot = hot;
|
|
56
49
|
this.isMapRegistrable = isMapRegistrable;
|
|
57
50
|
if (this.isMapRegistrable === true) {
|
|
@@ -120,13 +113,6 @@ class ConditionCollection {
|
|
|
120
113
|
const localeForColumn = this.hot.getCellMeta(0, column).locale;
|
|
121
114
|
const args = conditionDefinition.args.map(v => typeof v === 'string' ? v.toLocaleLowerCase(localeForColumn) : v);
|
|
122
115
|
const name = conditionDefinition.name || conditionDefinition.command.key;
|
|
123
|
-
|
|
124
|
-
// If there's no previous condition stack defined (which means the condition stack was not cleared after the
|
|
125
|
-
// previous filter operation or that there was no filter operation performed yet), store the current conditions as
|
|
126
|
-
// the previous condition stack.
|
|
127
|
-
if (this.previousConditionStack === null) {
|
|
128
|
-
this.setPreviousConditionStack(this.exportAllConditions());
|
|
129
|
-
}
|
|
130
116
|
this.runLocalHooks('beforeAdd', column);
|
|
131
117
|
const columnType = this.getOperation(column);
|
|
132
118
|
if (columnType) {
|
|
@@ -255,8 +241,6 @@ class ConditionCollection {
|
|
|
255
241
|
* @fires ConditionCollection#afterRemove
|
|
256
242
|
*/
|
|
257
243
|
removeConditions(column) {
|
|
258
|
-
// Store the current conditions as the previous condition stack before it's cleared.
|
|
259
|
-
this.setPreviousConditionStack(this.exportAllConditions());
|
|
260
244
|
this.runLocalHooks('beforeRemove', column);
|
|
261
245
|
this.filteringStates.clearValue(column);
|
|
262
246
|
this.runLocalHooks('afterRemove', column);
|
|
@@ -290,16 +274,6 @@ class ConditionCollection {
|
|
|
290
274
|
return conditions.length > 0;
|
|
291
275
|
}
|
|
292
276
|
|
|
293
|
-
/**
|
|
294
|
-
* Updates the `previousConditionStack` property with the provided stack.
|
|
295
|
-
* It is used to store the current conditions before they are modified, allowing for undo operations.
|
|
296
|
-
*
|
|
297
|
-
* @param {Array|null} previousConditionStack The stack of previous conditions.
|
|
298
|
-
*/
|
|
299
|
-
setPreviousConditionStack(previousConditionStack) {
|
|
300
|
-
this.previousConditionStack = previousConditionStack;
|
|
301
|
-
}
|
|
302
|
-
|
|
303
277
|
/**
|
|
304
278
|
* Destroy object.
|
|
305
279
|
*/
|
|
@@ -48,6 +48,8 @@ export declare class Filters extends BasePlugin {
|
|
|
48
48
|
addCondition(column: number, name: string, args: any[], operationId?: OperationType): void;
|
|
49
49
|
removeConditions(column: number): void;
|
|
50
50
|
clearConditions(column?: number): void;
|
|
51
|
+
importConditions(conditions: ColumnConditions[]): void;
|
|
52
|
+
exportConditions(): ColumnConditions[];
|
|
51
53
|
filter(): void;
|
|
52
54
|
getSelectedColumn(): { physicalIndex: number, visualIndex: number } | null;
|
|
53
55
|
getDataMapAtColumn(column?: number): CellLikeData[];
|
|
@@ -81,6 +81,7 @@ const SHORTCUTS_GROUP = PLUGIN_KEY;
|
|
|
81
81
|
*/
|
|
82
82
|
var _menuFocusNavigator = /*#__PURE__*/new WeakMap();
|
|
83
83
|
var _dropdownMenuTraces = /*#__PURE__*/new WeakMap();
|
|
84
|
+
var _previousConditionStack = /*#__PURE__*/new WeakMap();
|
|
84
85
|
var _Filters_brand = /*#__PURE__*/new WeakSet();
|
|
85
86
|
class Filters extends _base.BasePlugin {
|
|
86
87
|
static get PLUGIN_KEY() {
|
|
@@ -152,6 +153,13 @@ class Filters extends _base.BasePlugin {
|
|
|
152
153
|
* @type {WeakSet<Menu>}
|
|
153
154
|
*/
|
|
154
155
|
_classPrivateFieldInitSpec(this, _dropdownMenuTraces, new WeakSet());
|
|
156
|
+
/**
|
|
157
|
+
* Stores the previous state of the condition stack before the latest filter operation.
|
|
158
|
+
* This is used in the `beforeFilter` plugin to allow performing the undo operation.
|
|
159
|
+
*
|
|
160
|
+
* @type {Array}
|
|
161
|
+
*/
|
|
162
|
+
_classPrivateFieldInitSpec(this, _previousConditionStack, []);
|
|
155
163
|
this.hot.addHook('afterGetColHeader', function () {
|
|
156
164
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
157
165
|
args[_key] = arguments[_key];
|
|
@@ -494,6 +502,51 @@ class Filters extends _base.BasePlugin {
|
|
|
494
502
|
}
|
|
495
503
|
}
|
|
496
504
|
|
|
505
|
+
/**
|
|
506
|
+
* Imports filter conditions to all columns to the plugin. The method accepts
|
|
507
|
+
* the array of conditions with the same structure as the {@link Filters#exportConditions} method returns.
|
|
508
|
+
* Importing conditions will replace the current conditions. Once replaced, the state of the condition
|
|
509
|
+
* will be reflected in the UI. To apply the changes and filter the table, call
|
|
510
|
+
* the {@link Filters#filter} method eventually.
|
|
511
|
+
*
|
|
512
|
+
* @param {Array} conditions Array of conditions.
|
|
513
|
+
*/
|
|
514
|
+
importConditions(conditions) {
|
|
515
|
+
this.conditionCollection.importAllConditions(conditions);
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
/* eslint-disable jsdoc/require-description-complete-sentence */
|
|
519
|
+
/**
|
|
520
|
+
* Exports filter conditions for all columns from the plugin.
|
|
521
|
+
* The array represents the filter state for each column. For example:
|
|
522
|
+
*
|
|
523
|
+
* ```js
|
|
524
|
+
* [
|
|
525
|
+
* {
|
|
526
|
+
* column: 1,
|
|
527
|
+
* operation: 'conjunction',
|
|
528
|
+
* conditions: [
|
|
529
|
+
* { name: 'gt', args: [95] },
|
|
530
|
+
* ]
|
|
531
|
+
* },
|
|
532
|
+
* {
|
|
533
|
+
* column: 7,
|
|
534
|
+
* operation: 'conjunction',
|
|
535
|
+
* conditions: [
|
|
536
|
+
* { name: 'contains', args: ['mike'] },
|
|
537
|
+
* { name: 'begins_with', args: ['m'] },
|
|
538
|
+
* ]
|
|
539
|
+
* },
|
|
540
|
+
* ]
|
|
541
|
+
* ```
|
|
542
|
+
*
|
|
543
|
+
* @returns {Array}
|
|
544
|
+
*/
|
|
545
|
+
/* eslint-enable jsdoc/require-description-complete-sentence */
|
|
546
|
+
exportConditions() {
|
|
547
|
+
return this.conditionCollection.exportAllConditions();
|
|
548
|
+
}
|
|
549
|
+
|
|
497
550
|
/**
|
|
498
551
|
* Filters data based on added filter conditions.
|
|
499
552
|
*
|
|
@@ -507,8 +560,8 @@ class Filters extends _base.BasePlugin {
|
|
|
507
560
|
const dataFilter = this._createDataFilter();
|
|
508
561
|
const needToFilter = !this.conditionCollection.isEmpty();
|
|
509
562
|
let visibleVisualRows = [];
|
|
510
|
-
const conditions = this.
|
|
511
|
-
const allowFiltering = this.hot.runHooks('beforeFilter', conditions, this
|
|
563
|
+
const conditions = this.exportConditions();
|
|
564
|
+
const allowFiltering = this.hot.runHooks('beforeFilter', conditions, _classPrivateFieldGet(_previousConditionStack, this));
|
|
512
565
|
if (allowFiltering !== false) {
|
|
513
566
|
if (needToFilter) {
|
|
514
567
|
const trimmedRows = [];
|
|
@@ -531,11 +584,13 @@ class Filters extends _base.BasePlugin {
|
|
|
531
584
|
} else {
|
|
532
585
|
this.filtersRowsMap.clear();
|
|
533
586
|
}
|
|
587
|
+
_classPrivateFieldSet(_previousConditionStack, this, this.exportConditions());
|
|
588
|
+
this.hot.runHooks('afterFilter', conditions);
|
|
589
|
+
this.hot.view.adjustElementsSize();
|
|
590
|
+
this.hot.render();
|
|
591
|
+
} else {
|
|
592
|
+
this.importConditions(_classPrivateFieldGet(_previousConditionStack, this));
|
|
534
593
|
}
|
|
535
|
-
this.hot.runHooks('afterFilter', conditions);
|
|
536
|
-
this.conditionCollection.setPreviousConditionStack(null);
|
|
537
|
-
this.hot.view.adjustElementsSize();
|
|
538
|
-
this.hot.render();
|
|
539
594
|
if (this.hot.selection.isSelected()) {
|
|
540
595
|
this.hot.selectCell(navigableHeaders ? -1 : 0, this.hot.getSelectedRangeLast().highlight.col);
|
|
541
596
|
}
|
|
@@ -898,7 +953,6 @@ function _onActionBarSubmit(submitType) {
|
|
|
898
953
|
}
|
|
899
954
|
this.conditionUpdateObserver.flush();
|
|
900
955
|
this.components.forEach(component => component.saveState(physicalIndex));
|
|
901
|
-
this.filtersRowsMap.clear();
|
|
902
956
|
this.filter();
|
|
903
957
|
}
|
|
904
958
|
(_this$dropdownMenuPlu3 = this.dropdownMenuPlugin) === null || _this$dropdownMenuPlu3 === void 0 || _this$dropdownMenuPlu3.close();
|
|
@@ -940,8 +994,23 @@ function _updateComponents(conditionsState) {
|
|
|
940
994
|
editedConditionStack: {
|
|
941
995
|
conditions,
|
|
942
996
|
column
|
|
943
|
-
}
|
|
997
|
+
},
|
|
998
|
+
conditionArgsChange
|
|
944
999
|
} = conditionsState;
|
|
1000
|
+
if (Array.isArray(conditionArgsChange)) {
|
|
1001
|
+
// update the previous condition stack (only for 'by_value' condition) on each dataset
|
|
1002
|
+
// change to make the undo/redo work properly
|
|
1003
|
+
_classPrivateFieldSet(_previousConditionStack, this, _classPrivateFieldGet(_previousConditionStack, this).map(stack => {
|
|
1004
|
+
if (stack.column === column && conditions.length > 0) {
|
|
1005
|
+
stack.conditions.forEach(condition => {
|
|
1006
|
+
if (condition.name === 'by_value') {
|
|
1007
|
+
condition.args = [[...conditionArgsChange]];
|
|
1008
|
+
}
|
|
1009
|
+
});
|
|
1010
|
+
}
|
|
1011
|
+
return stack;
|
|
1012
|
+
}));
|
|
1013
|
+
}
|
|
945
1014
|
const conditionsByValue = conditions.filter(condition => condition.name === _constants2.CONDITION_BY_VALUE);
|
|
946
1015
|
const conditionsWithoutByValue = conditions.filter(condition => condition.name !== _constants2.CONDITION_BY_VALUE);
|
|
947
1016
|
if (conditionsByValue.length >= 2 || conditionsWithoutByValue.length >= 3) {
|
|
@@ -75,6 +75,7 @@ const SHORTCUTS_GROUP = PLUGIN_KEY;
|
|
|
75
75
|
*/
|
|
76
76
|
var _menuFocusNavigator = /*#__PURE__*/new WeakMap();
|
|
77
77
|
var _dropdownMenuTraces = /*#__PURE__*/new WeakMap();
|
|
78
|
+
var _previousConditionStack = /*#__PURE__*/new WeakMap();
|
|
78
79
|
var _Filters_brand = /*#__PURE__*/new WeakSet();
|
|
79
80
|
export class Filters extends BasePlugin {
|
|
80
81
|
static get PLUGIN_KEY() {
|
|
@@ -146,6 +147,13 @@ export class Filters extends BasePlugin {
|
|
|
146
147
|
* @type {WeakSet<Menu>}
|
|
147
148
|
*/
|
|
148
149
|
_classPrivateFieldInitSpec(this, _dropdownMenuTraces, new WeakSet());
|
|
150
|
+
/**
|
|
151
|
+
* Stores the previous state of the condition stack before the latest filter operation.
|
|
152
|
+
* This is used in the `beforeFilter` plugin to allow performing the undo operation.
|
|
153
|
+
*
|
|
154
|
+
* @type {Array}
|
|
155
|
+
*/
|
|
156
|
+
_classPrivateFieldInitSpec(this, _previousConditionStack, []);
|
|
149
157
|
this.hot.addHook('afterGetColHeader', function () {
|
|
150
158
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
151
159
|
args[_key] = arguments[_key];
|
|
@@ -488,6 +496,51 @@ export class Filters extends BasePlugin {
|
|
|
488
496
|
}
|
|
489
497
|
}
|
|
490
498
|
|
|
499
|
+
/**
|
|
500
|
+
* Imports filter conditions to all columns to the plugin. The method accepts
|
|
501
|
+
* the array of conditions with the same structure as the {@link Filters#exportConditions} method returns.
|
|
502
|
+
* Importing conditions will replace the current conditions. Once replaced, the state of the condition
|
|
503
|
+
* will be reflected in the UI. To apply the changes and filter the table, call
|
|
504
|
+
* the {@link Filters#filter} method eventually.
|
|
505
|
+
*
|
|
506
|
+
* @param {Array} conditions Array of conditions.
|
|
507
|
+
*/
|
|
508
|
+
importConditions(conditions) {
|
|
509
|
+
this.conditionCollection.importAllConditions(conditions);
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
/* eslint-disable jsdoc/require-description-complete-sentence */
|
|
513
|
+
/**
|
|
514
|
+
* Exports filter conditions for all columns from the plugin.
|
|
515
|
+
* The array represents the filter state for each column. For example:
|
|
516
|
+
*
|
|
517
|
+
* ```js
|
|
518
|
+
* [
|
|
519
|
+
* {
|
|
520
|
+
* column: 1,
|
|
521
|
+
* operation: 'conjunction',
|
|
522
|
+
* conditions: [
|
|
523
|
+
* { name: 'gt', args: [95] },
|
|
524
|
+
* ]
|
|
525
|
+
* },
|
|
526
|
+
* {
|
|
527
|
+
* column: 7,
|
|
528
|
+
* operation: 'conjunction',
|
|
529
|
+
* conditions: [
|
|
530
|
+
* { name: 'contains', args: ['mike'] },
|
|
531
|
+
* { name: 'begins_with', args: ['m'] },
|
|
532
|
+
* ]
|
|
533
|
+
* },
|
|
534
|
+
* ]
|
|
535
|
+
* ```
|
|
536
|
+
*
|
|
537
|
+
* @returns {Array}
|
|
538
|
+
*/
|
|
539
|
+
/* eslint-enable jsdoc/require-description-complete-sentence */
|
|
540
|
+
exportConditions() {
|
|
541
|
+
return this.conditionCollection.exportAllConditions();
|
|
542
|
+
}
|
|
543
|
+
|
|
491
544
|
/**
|
|
492
545
|
* Filters data based on added filter conditions.
|
|
493
546
|
*
|
|
@@ -501,8 +554,8 @@ export class Filters extends BasePlugin {
|
|
|
501
554
|
const dataFilter = this._createDataFilter();
|
|
502
555
|
const needToFilter = !this.conditionCollection.isEmpty();
|
|
503
556
|
let visibleVisualRows = [];
|
|
504
|
-
const conditions = this.
|
|
505
|
-
const allowFiltering = this.hot.runHooks('beforeFilter', conditions, this
|
|
557
|
+
const conditions = this.exportConditions();
|
|
558
|
+
const allowFiltering = this.hot.runHooks('beforeFilter', conditions, _classPrivateFieldGet(_previousConditionStack, this));
|
|
506
559
|
if (allowFiltering !== false) {
|
|
507
560
|
if (needToFilter) {
|
|
508
561
|
const trimmedRows = [];
|
|
@@ -525,11 +578,13 @@ export class Filters extends BasePlugin {
|
|
|
525
578
|
} else {
|
|
526
579
|
this.filtersRowsMap.clear();
|
|
527
580
|
}
|
|
581
|
+
_classPrivateFieldSet(_previousConditionStack, this, this.exportConditions());
|
|
582
|
+
this.hot.runHooks('afterFilter', conditions);
|
|
583
|
+
this.hot.view.adjustElementsSize();
|
|
584
|
+
this.hot.render();
|
|
585
|
+
} else {
|
|
586
|
+
this.importConditions(_classPrivateFieldGet(_previousConditionStack, this));
|
|
528
587
|
}
|
|
529
|
-
this.hot.runHooks('afterFilter', conditions);
|
|
530
|
-
this.conditionCollection.setPreviousConditionStack(null);
|
|
531
|
-
this.hot.view.adjustElementsSize();
|
|
532
|
-
this.hot.render();
|
|
533
588
|
if (this.hot.selection.isSelected()) {
|
|
534
589
|
this.hot.selectCell(navigableHeaders ? -1 : 0, this.hot.getSelectedRangeLast().highlight.col);
|
|
535
590
|
}
|
|
@@ -891,7 +946,6 @@ function _onActionBarSubmit(submitType) {
|
|
|
891
946
|
}
|
|
892
947
|
this.conditionUpdateObserver.flush();
|
|
893
948
|
this.components.forEach(component => component.saveState(physicalIndex));
|
|
894
|
-
this.filtersRowsMap.clear();
|
|
895
949
|
this.filter();
|
|
896
950
|
}
|
|
897
951
|
(_this$dropdownMenuPlu3 = this.dropdownMenuPlugin) === null || _this$dropdownMenuPlu3 === void 0 || _this$dropdownMenuPlu3.close();
|
|
@@ -933,8 +987,23 @@ function _updateComponents(conditionsState) {
|
|
|
933
987
|
editedConditionStack: {
|
|
934
988
|
conditions,
|
|
935
989
|
column
|
|
936
|
-
}
|
|
990
|
+
},
|
|
991
|
+
conditionArgsChange
|
|
937
992
|
} = conditionsState;
|
|
993
|
+
if (Array.isArray(conditionArgsChange)) {
|
|
994
|
+
// update the previous condition stack (only for 'by_value' condition) on each dataset
|
|
995
|
+
// change to make the undo/redo work properly
|
|
996
|
+
_classPrivateFieldSet(_previousConditionStack, this, _classPrivateFieldGet(_previousConditionStack, this).map(stack => {
|
|
997
|
+
if (stack.column === column && conditions.length > 0) {
|
|
998
|
+
stack.conditions.forEach(condition => {
|
|
999
|
+
if (condition.name === 'by_value') {
|
|
1000
|
+
condition.args = [[...conditionArgsChange]];
|
|
1001
|
+
}
|
|
1002
|
+
});
|
|
1003
|
+
}
|
|
1004
|
+
return stack;
|
|
1005
|
+
}));
|
|
1006
|
+
}
|
|
938
1007
|
const conditionsByValue = conditions.filter(condition => condition.name === CONDITION_BY_VALUE);
|
|
939
1008
|
const conditionsWithoutByValue = conditions.filter(condition => condition.name !== CONDITION_BY_VALUE);
|
|
940
1009
|
if (conditionsByValue.length >= 2 || conditionsWithoutByValue.length >= 3) {
|
|
@@ -1497,12 +1497,11 @@ function _sumCellsHeights(row, rowspan) {
|
|
|
1497
1497
|
} = this.hot;
|
|
1498
1498
|
const stylesHandler = view.getStylesHandler();
|
|
1499
1499
|
const defaultHeight = view.getDefaultRowHeight();
|
|
1500
|
-
const autoRowSizePlugin = this.hot.getPlugin('autoRowSize');
|
|
1501
1500
|
let height = 0;
|
|
1502
1501
|
for (let i = row; i < row + rowspan; i++) {
|
|
1503
1502
|
if (!rowIndexMapper.isHidden(i)) {
|
|
1504
|
-
var
|
|
1505
|
-
height += (
|
|
1503
|
+
var _this$hot$getRowHeigh;
|
|
1504
|
+
height += (_this$hot$getRowHeigh = this.hot.getRowHeight(i)) !== null && _this$hot$getRowHeigh !== void 0 ? _this$hot$getRowHeigh : defaultHeight;
|
|
1506
1505
|
if (i === 0 && !stylesHandler.isClassicTheme()) {
|
|
1507
1506
|
height += 1; // border-top-width
|
|
1508
1507
|
}
|
|
@@ -1492,12 +1492,11 @@ function _sumCellsHeights(row, rowspan) {
|
|
|
1492
1492
|
} = this.hot;
|
|
1493
1493
|
const stylesHandler = view.getStylesHandler();
|
|
1494
1494
|
const defaultHeight = view.getDefaultRowHeight();
|
|
1495
|
-
const autoRowSizePlugin = this.hot.getPlugin('autoRowSize');
|
|
1496
1495
|
let height = 0;
|
|
1497
1496
|
for (let i = row; i < row + rowspan; i++) {
|
|
1498
1497
|
if (!rowIndexMapper.isHidden(i)) {
|
|
1499
|
-
var
|
|
1500
|
-
height += (
|
|
1498
|
+
var _this$hot$getRowHeigh;
|
|
1499
|
+
height += (_this$hot$getRowHeigh = this.hot.getRowHeight(i)) !== null && _this$hot$getRowHeigh !== void 0 ? _this$hot$getRowHeigh : defaultHeight;
|
|
1501
1500
|
if (i === 0 && !stylesHandler.isClassicTheme()) {
|
|
1502
1501
|
height += 1; // border-top-width
|
|
1503
1502
|
}
|
|
@@ -48,7 +48,7 @@ class FiltersAction extends _base.BaseAction {
|
|
|
48
48
|
undo(hot, undoneCallback) {
|
|
49
49
|
const filters = hot.getPlugin('filters');
|
|
50
50
|
hot.addHookOnce('afterViewRender', undoneCallback);
|
|
51
|
-
filters.
|
|
51
|
+
filters.importConditions(this.previousConditionsStack);
|
|
52
52
|
filters.filter();
|
|
53
53
|
}
|
|
54
54
|
|
|
@@ -59,7 +59,7 @@ class FiltersAction extends _base.BaseAction {
|
|
|
59
59
|
redo(hot, redoneCallback) {
|
|
60
60
|
const filters = hot.getPlugin('filters');
|
|
61
61
|
hot.addHookOnce('afterViewRender', redoneCallback);
|
|
62
|
-
filters.
|
|
62
|
+
filters.importConditions(this.conditionsStack);
|
|
63
63
|
filters.filter();
|
|
64
64
|
}
|
|
65
65
|
}
|
|
@@ -45,7 +45,7 @@ export class FiltersAction extends BaseAction {
|
|
|
45
45
|
undo(hot, undoneCallback) {
|
|
46
46
|
const filters = hot.getPlugin('filters');
|
|
47
47
|
hot.addHookOnce('afterViewRender', undoneCallback);
|
|
48
|
-
filters.
|
|
48
|
+
filters.importConditions(this.previousConditionsStack);
|
|
49
49
|
filters.filter();
|
|
50
50
|
}
|
|
51
51
|
|
|
@@ -56,7 +56,7 @@ export class FiltersAction extends BaseAction {
|
|
|
56
56
|
redo(hot, redoneCallback) {
|
|
57
57
|
const filters = hot.getPlugin('filters');
|
|
58
58
|
hot.addHookOnce('afterViewRender', redoneCallback);
|
|
59
|
-
filters.
|
|
59
|
+
filters.importConditions(this.conditionsStack);
|
|
60
60
|
filters.filter();
|
|
61
61
|
}
|
|
62
62
|
}
|
package/styles/handsontable.css
CHANGED
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
* INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING FROM
|
|
26
26
|
* USE OR INABILITY TO USE THIS SOFTWARE.
|
|
27
27
|
*
|
|
28
|
-
* Version: 0.0.0-next-
|
|
29
|
-
* Release date: 20/02/2025 (built at
|
|
28
|
+
* Version: 0.0.0-next-b209352-20250310
|
|
29
|
+
* Release date: 20/02/2025 (built at 10/03/2025 12:40:00)
|
|
30
30
|
*/
|
|
31
31
|
.ht-wrapper:not([class*=ht-theme]) {
|
|
32
32
|
--ht-gap-size: 4px;
|