This is an automated email from the ASF dual-hosted git repository.
elizabeth pushed a commit to branch elizabeth/fix-resize-bug
in repository https://gitbox.apache.org/repos/asf/superset.git
commit a58857ebc1ec3a64b855850752e62295e4a187ce
Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
AuthorDate: Wed Jul 30 08:54:58 2025 -0700
build(deps): bump reselect from 4.1.7 to 5.1.1 in /superset-frontend
(#30119)
Signed-off-by: dependabot[bot] <[email protected]>
Signed-off-by: hainenber <[email protected]>
Co-authored-by: dependabot[bot]
<49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: hainenber <[email protected]>
---
superset-frontend/package-lock.json | 20 +++++++++++++----
.../packages/superset-ui-core/package.json | 2 +-
.../src/chart/models/ChartProps.ts | 26 +++++++++++++++++-----
.../test/chart/models/ChartProps.test.ts | 4 ++--
4 files changed, 39 insertions(+), 13 deletions(-)
diff --git a/superset-frontend/package-lock.json
b/superset-frontend/package-lock.json
index 38285785c7..e52430bcfc 100644
--- a/superset-frontend/package-lock.json
+++ b/superset-frontend/package-lock.json
@@ -10877,6 +10877,12 @@
"url": "https://opencollective.com/immer"
}
},
+ "node_modules/@reduxjs/toolkit/node_modules/reselect": {
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz",
+ "integrity":
"sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==",
+ "license": "MIT"
+ },
"node_modules/@rjsf/core": {
"version": "5.24.1",
"resolved": "https://registry.npmjs.org/@rjsf/core/-/core-5.24.1.tgz",
@@ -24605,6 +24611,12 @@
"d3-time": "1 - 2"
}
},
+ "node_modules/encodable/node_modules/reselect": {
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz",
+ "integrity":
"sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==",
+ "license": "MIT"
+ },
"node_modules/encodeurl": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
@@ -50629,9 +50641,9 @@
"license": "MIT"
},
"node_modules/reselect": {
- "version": "4.1.8",
- "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz",
- "integrity":
"sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz",
+ "integrity":
"sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==",
"license": "MIT"
},
"node_modules/resize-observer-polyfill": {
@@ -59108,7 +59120,7 @@
"rehype-raw": "^7.0.0",
"rehype-sanitize": "^6.0.0",
"remark-gfm": "^4.0.1",
- "reselect": "^4.0.0",
+ "reselect": "^5.1.1",
"rison": "^0.1.1",
"seedrandom": "^3.0.5",
"xss": "^1.0.14"
diff --git a/superset-frontend/packages/superset-ui-core/package.json
b/superset-frontend/packages/superset-ui-core/package.json
index 0c38971a55..8de5513a2e 100644
--- a/superset-frontend/packages/superset-ui-core/package.json
+++ b/superset-frontend/packages/superset-ui-core/package.json
@@ -59,7 +59,7 @@
"rehype-raw": "^7.0.0",
"rehype-sanitize": "^6.0.0",
"remark-gfm": "^4.0.1",
- "reselect": "^4.0.0",
+ "reselect": "^5.1.1",
"rison": "^0.1.1",
"seedrandom": "^3.0.5",
"@visx/responsive": "^3.12.0",
diff --git
a/superset-frontend/packages/superset-ui-core/src/chart/models/ChartProps.ts
b/superset-frontend/packages/superset-ui-core/src/chart/models/ChartProps.ts
index a886dacdb9..c9bc2bea66 100644
--- a/superset-frontend/packages/superset-ui-core/src/chart/models/ChartProps.ts
+++ b/superset-frontend/packages/superset-ui-core/src/chart/models/ChartProps.ts
@@ -17,11 +17,8 @@
* under the License.
*/
-/** Type checking is disabled for this file due to reselect only supporting
- * TS declarations for selectors with up to 12 arguments. */
-// @ts-nocheck
import { RefObject } from 'react';
-import { createSelector } from 'reselect';
+import { createSelector, lruMemoize } from 'reselect';
import {
AppSection,
Behavior,
@@ -37,7 +34,7 @@ import {
SetDataMaskHook,
} from '../types/Base';
import { QueryData, DataRecordFilters } from '..';
-import { SupersetTheme } from '../../theme';
+import { supersetTheme, SupersetTheme } from '../../theme';
// TODO: more specific typing for these fields of ChartProps
type AnnotationData = PlainObject;
@@ -109,6 +106,8 @@ export interface ChartPropsConfig {
theme: SupersetTheme;
/* legend index */
legendIndex?: number;
+ inContextMenu?: boolean;
+ emitCrossFilters?: boolean;
}
const DEFAULT_WIDTH = 800;
@@ -161,7 +160,11 @@ export default class ChartProps<FormData extends
RawFormData = RawFormData> {
theme: SupersetTheme;
- constructor(config: ChartPropsConfig & { formData?: FormData } = {}) {
+ constructor(
+ config: ChartPropsConfig & { formData?: FormData } = {
+ theme: supersetTheme,
+ },
+ ) {
const {
annotationData = {},
datasource = {},
@@ -276,5 +279,16 @@ ChartProps.createSelector = function create():
ChartPropsSelector {
emitCrossFilters,
theme,
}),
+ // Below config is to retain usage of 1-sized `lruMemoize` object in
Reselect v4
+ // Reselect v5 introduces `weakMapMemoize` which is more performant but
potentially memory-leaky
+ // due to infinite cache size.
+ // Source: https://github.com/reduxjs/reselect/releases/tag/v5.0.1
+ {
+ memoize: lruMemoize,
+ argsMemoize: lruMemoize,
+ memoizeOptions: {
+ maxSize: 10,
+ },
+ },
);
};
diff --git
a/superset-frontend/packages/superset-ui-core/test/chart/models/ChartProps.test.ts
b/superset-frontend/packages/superset-ui-core/test/chart/models/ChartProps.test.ts
index f9bd7d76a3..a487b797a3 100644
---
a/superset-frontend/packages/superset-ui-core/test/chart/models/ChartProps.test.ts
+++
b/superset-frontend/packages/superset-ui-core/test/chart/models/ChartProps.test.ts
@@ -119,7 +119,7 @@ describe('ChartProps', () => {
});
expect(props1).not.toBe(props2);
});
- it('selector returns a new chartProps if some input fields change', () => {
+ it('selector returns a new chartProps if some input fields change and
returns memoized chart props', () => {
const props1 = selector({
width: 800,
height: 600,
@@ -145,7 +145,7 @@ describe('ChartProps', () => {
theme: supersetTheme,
});
expect(props1).not.toBe(props2);
- expect(props1).not.toBe(props3);
+ expect(props1).toBe(props3);
});
});
});