You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by di...@apache.org on 2023/03/09 14:38:13 UTC

[superset] 01/01: Fix table and move hooks

This is an automated email from the ASF dual-hosted git repository.

diegopucci pushed a commit to branch fix/cross-filtering-table-sort
in repository https://gitbox.apache.org/repos/asf/superset.git

commit f0a86868a4f42b8de2f9529bcb5f0e53c4f6d8d9
Author: geido <di...@gmail.com>
AuthorDate: Thu Mar 9 15:37:18 2023 +0100

    Fix table and move hooks
---
 superset-frontend/package-lock.json                | 67 ++++++++++++++++++++++
 .../packages/superset-ui-core/package.json         |  1 +
 .../superset-ui-core/src/hooks}/index.ts           |  5 ++
 .../src/hooks/useChangeEffect/index.ts             |  0
 .../hooks/useChangeEffect/useChangeEffect.test.ts  |  0
 .../src/hooks/useChangeEffect/useChangeEffect.ts   |  0
 .../src/hooks/useComponentDidMount/index.ts        |  0
 .../useComponentDidMount.test.ts                   |  0
 .../useComponentDidMount/useComponentDidMount.ts   |  0
 .../src/hooks/useComponentDidUpdate/index.ts       |  0
 .../useComponentDidUpdate.test.ts                  |  0
 .../useComponentDidUpdate/useComponentDidUpdate.ts |  0
 .../src/hooks/useElementOnScreen/index.ts          |  0
 .../src/hooks/usePrevious/index.ts                 |  0
 .../src/hooks/usePrevious/usePrevious.test.ts      |  0
 .../src/hooks/usePrevious/usePrevious.ts           |  0
 .../src/hooks/useTruncation/index.ts               |  0
 .../hooks/useTruncation/useCSSTextTruncation.ts    |  0
 .../useTruncation/useChildElementTruncation.ts     |  0
 .../packages/superset-ui-core/src/index.ts         |  1 +
 .../packages/superset-ui-core/tsconfig.json        |  2 +-
 .../plugins/plugin-chart-table/package.json        |  1 +
 .../plugin-chart-table/src/DataTable/DataTable.tsx |  6 +-
 .../SqlLab/components/AceEditorWrapper/index.tsx   |  3 +-
 .../src/SqlLab/components/ResultSet/index.tsx      |  2 +-
 .../src/components/DropdownContainer/index.tsx     |  3 +-
 .../src/components/FaveStar/index.tsx              |  3 +-
 .../src/components/FlashProvider/index.tsx         |  2 +-
 .../src/components/ListView/CrossLinks.tsx         |  3 +-
 .../ReportModal/HeaderReportDropdown/index.tsx     |  2 +-
 .../src/components/Select/CustomTag.tsx            |  3 +-
 .../src/components/TruncatedList/index.tsx         |  3 +-
 .../DashboardBuilder/DashboardBuilder.tsx          |  2 +-
 .../DashboardBuilder/DashboardContainer.tsx        |  2 +-
 .../dashboard/components/FiltersBadge/index.tsx    |  3 +-
 .../FilterBar/CrossFilters/CrossFilterTag.tsx      |  9 ++-
 .../FilterBar/CrossFilters/CrossFilterTitle.tsx    |  9 ++-
 .../FilterBar/FilterControls/FilterControl.tsx     |  3 +-
 .../FilterBar/FilterControls/FilterDivider.tsx     |  8 ++-
 .../components/nativeFilters/FilterBar/index.tsx   |  2 +-
 .../nativeFilters/FilterCard/DependenciesRow.tsx   |  3 +-
 .../nativeFilters/FilterCard/NameRow.tsx           |  3 +-
 .../nativeFilters/FilterCard/ScopeRow.tsx          |  3 +-
 .../FiltersConfigForm/ColumnSelect.tsx             |  9 ++-
 .../FiltersConfigForm/FilterScope/FilterScope.tsx  |  8 ++-
 .../nativeFilters/FiltersConfigModal/state.ts      |  3 +-
 .../src/explore/components/Control.tsx             |  8 ++-
 .../explore/components/ControlPanelsContainer.tsx  |  2 +-
 .../components/ExploreViewContainer/index.jsx      | 14 +++--
 .../ConditionalFormattingControl.tsx               |  9 ++-
 .../controls/DateFilterControl/DateFilterLabel.tsx |  2 +-
 .../controls/MetricControl/MetricsControl.jsx      |  3 +-
 52 files changed, 158 insertions(+), 54 deletions(-)

diff --git a/superset-frontend/package-lock.json b/superset-frontend/package-lock.json
index 76d74c18cb..0eff1db60e 100644
--- a/superset-frontend/package-lock.json
+++ b/superset-frontend/package-lock.json
@@ -59913,6 +59913,7 @@
       "license": "Apache-2.0",
       "dependencies": {
         "@babel/runtime": "^7.1.2",
+        "@testing-library/react-hooks": "^8.0.1",
         "@types/d3-format": "^1.3.0",
         "@types/d3-interpolate": "^1.3.1",
         "@types/d3-scale": "^2.1.1",
@@ -59966,6 +59967,50 @@
         "tinycolor2": "*"
       }
     },
+    "packages/superset-ui-core/node_modules/@testing-library/react-hooks": {
+      "version": "8.0.1",
+      "resolved": "https://registry.npmjs.org/@testing-library/react-hooks/-/react-hooks-8.0.1.tgz",
+      "integrity": "sha512-Aqhl2IVmLt8IovEVarNDFuJDVWVvhnr9/GCU6UUnrYXwgDFF9h2L2o2P9KBni1AST5sT6riAyoukFLyjQUgD/g==",
+      "dependencies": {
+        "@babel/runtime": "^7.12.5",
+        "react-error-boundary": "^3.1.0"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "peerDependencies": {
+        "@types/react": "^16.9.0 || ^17.0.0",
+        "react": "^16.9.0 || ^17.0.0",
+        "react-dom": "^16.9.0 || ^17.0.0",
+        "react-test-renderer": "^16.9.0 || ^17.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "react-dom": {
+          "optional": true
+        },
+        "react-test-renderer": {
+          "optional": true
+        }
+      }
+    },
+    "packages/superset-ui-core/node_modules/@testing-library/react-hooks/node_modules/react-error-boundary": {
+      "version": "3.1.4",
+      "resolved": "https://registry.npmjs.org/react-error-boundary/-/react-error-boundary-3.1.4.tgz",
+      "integrity": "sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==",
+      "dependencies": {
+        "@babel/runtime": "^7.12.5"
+      },
+      "engines": {
+        "node": ">=10",
+        "npm": ">=6"
+      },
+      "peerDependencies": {
+        "react": ">=16.13.1"
+      }
+    },
     "packages/superset-ui-core/node_modules/@types/d3-time": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.0.tgz",
@@ -61393,6 +61438,7 @@
         "@types/react-table": "^7.0.29",
         "classnames": "^2.3.2",
         "d3-array": "^2.4.0",
+        "lodash": "^4.17.21",
         "match-sorter": "^6.3.0",
         "memoize-one": "^5.1.1",
         "react-table": "^7.6.3",
@@ -76220,6 +76266,7 @@
       "requires": {
         "@babel/runtime": "^7.1.2",
         "@emotion/styled": "^11.3.0",
+        "@testing-library/react-hooks": "*",
         "@types/d3-format": "^1.3.0",
         "@types/d3-interpolate": "^1.3.1",
         "@types/d3-scale": "^2.1.1",
@@ -76259,6 +76306,25 @@
         "whatwg-fetch": "^3.0.0"
       },
       "dependencies": {
+        "@testing-library/react-hooks": {
+          "version": "8.0.1",
+          "resolved": "https://registry.npmjs.org/@testing-library/react-hooks/-/react-hooks-8.0.1.tgz",
+          "integrity": "sha512-Aqhl2IVmLt8IovEVarNDFuJDVWVvhnr9/GCU6UUnrYXwgDFF9h2L2o2P9KBni1AST5sT6riAyoukFLyjQUgD/g==",
+          "requires": {
+            "@babel/runtime": "^7.12.5",
+            "react-error-boundary": "^3.1.0"
+          },
+          "dependencies": {
+            "react-error-boundary": {
+              "version": "3.1.4",
+              "resolved": "https://registry.npmjs.org/react-error-boundary/-/react-error-boundary-3.1.4.tgz",
+              "integrity": "sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==",
+              "requires": {
+                "@babel/runtime": "^7.12.5"
+              }
+            }
+          }
+        },
         "@types/d3-time": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.0.tgz",
@@ -77259,6 +77325,7 @@
         "@types/react-table": "^7.0.29",
         "classnames": "^2.3.2",
         "d3-array": "^2.4.0",
+        "lodash": "^4.17.21",
         "match-sorter": "^6.3.0",
         "memoize-one": "^5.1.1",
         "react-table": "^7.6.3",
diff --git a/superset-frontend/packages/superset-ui-core/package.json b/superset-frontend/packages/superset-ui-core/package.json
index 2ccb9877fd..6107945900 100644
--- a/superset-frontend/packages/superset-ui-core/package.json
+++ b/superset-frontend/packages/superset-ui-core/package.json
@@ -24,6 +24,7 @@
   ],
   "dependencies": {
     "@babel/runtime": "^7.1.2",
+    "@testing-library/react-hooks": "^8.0.1",
     "@types/d3-format": "^1.3.0",
     "@types/d3-interpolate": "^1.3.1",
     "@types/d3-scale": "^2.1.1",
diff --git a/superset-frontend/src/hooks/useComponentDidUpdate/index.ts b/superset-frontend/packages/superset-ui-core/src/hooks/index.ts
similarity index 82%
copy from superset-frontend/src/hooks/useComponentDidUpdate/index.ts
copy to superset-frontend/packages/superset-ui-core/src/hooks/index.ts
index fa0105807c..b27759b492 100644
--- a/superset-frontend/src/hooks/useComponentDidUpdate/index.ts
+++ b/superset-frontend/packages/superset-ui-core/src/hooks/index.ts
@@ -17,4 +17,9 @@
  * under the License.
  */
 
+export * from './useChangeEffect';
+export * from './useComponentDidMount';
 export * from './useComponentDidUpdate';
+export * from './useElementOnScreen';
+export * from './usePrevious';
+export * from './useTruncation';
diff --git a/superset-frontend/src/hooks/useChangeEffect/index.ts b/superset-frontend/packages/superset-ui-core/src/hooks/useChangeEffect/index.ts
similarity index 100%
rename from superset-frontend/src/hooks/useChangeEffect/index.ts
rename to superset-frontend/packages/superset-ui-core/src/hooks/useChangeEffect/index.ts
diff --git a/superset-frontend/src/hooks/useChangeEffect/useChangeEffect.test.ts b/superset-frontend/packages/superset-ui-core/src/hooks/useChangeEffect/useChangeEffect.test.ts
similarity index 100%
rename from superset-frontend/src/hooks/useChangeEffect/useChangeEffect.test.ts
rename to superset-frontend/packages/superset-ui-core/src/hooks/useChangeEffect/useChangeEffect.test.ts
diff --git a/superset-frontend/src/hooks/useChangeEffect/useChangeEffect.ts b/superset-frontend/packages/superset-ui-core/src/hooks/useChangeEffect/useChangeEffect.ts
similarity index 100%
rename from superset-frontend/src/hooks/useChangeEffect/useChangeEffect.ts
rename to superset-frontend/packages/superset-ui-core/src/hooks/useChangeEffect/useChangeEffect.ts
diff --git a/superset-frontend/src/hooks/useComponentDidMount/index.ts b/superset-frontend/packages/superset-ui-core/src/hooks/useComponentDidMount/index.ts
similarity index 100%
rename from superset-frontend/src/hooks/useComponentDidMount/index.ts
rename to superset-frontend/packages/superset-ui-core/src/hooks/useComponentDidMount/index.ts
diff --git a/superset-frontend/src/hooks/useComponentDidMount/useComponentDidMount.test.ts b/superset-frontend/packages/superset-ui-core/src/hooks/useComponentDidMount/useComponentDidMount.test.ts
similarity index 100%
rename from superset-frontend/src/hooks/useComponentDidMount/useComponentDidMount.test.ts
rename to superset-frontend/packages/superset-ui-core/src/hooks/useComponentDidMount/useComponentDidMount.test.ts
diff --git a/superset-frontend/src/hooks/useComponentDidMount/useComponentDidMount.ts b/superset-frontend/packages/superset-ui-core/src/hooks/useComponentDidMount/useComponentDidMount.ts
similarity index 100%
rename from superset-frontend/src/hooks/useComponentDidMount/useComponentDidMount.ts
rename to superset-frontend/packages/superset-ui-core/src/hooks/useComponentDidMount/useComponentDidMount.ts
diff --git a/superset-frontend/src/hooks/useComponentDidUpdate/index.ts b/superset-frontend/packages/superset-ui-core/src/hooks/useComponentDidUpdate/index.ts
similarity index 100%
rename from superset-frontend/src/hooks/useComponentDidUpdate/index.ts
rename to superset-frontend/packages/superset-ui-core/src/hooks/useComponentDidUpdate/index.ts
diff --git a/superset-frontend/src/hooks/useComponentDidUpdate/useComponentDidUpdate.test.ts b/superset-frontend/packages/superset-ui-core/src/hooks/useComponentDidUpdate/useComponentDidUpdate.test.ts
similarity index 100%
rename from superset-frontend/src/hooks/useComponentDidUpdate/useComponentDidUpdate.test.ts
rename to superset-frontend/packages/superset-ui-core/src/hooks/useComponentDidUpdate/useComponentDidUpdate.test.ts
diff --git a/superset-frontend/src/hooks/useComponentDidUpdate/useComponentDidUpdate.ts b/superset-frontend/packages/superset-ui-core/src/hooks/useComponentDidUpdate/useComponentDidUpdate.ts
similarity index 100%
rename from superset-frontend/src/hooks/useComponentDidUpdate/useComponentDidUpdate.ts
rename to superset-frontend/packages/superset-ui-core/src/hooks/useComponentDidUpdate/useComponentDidUpdate.ts
diff --git a/superset-frontend/src/hooks/useElementOnScreen/index.ts b/superset-frontend/packages/superset-ui-core/src/hooks/useElementOnScreen/index.ts
similarity index 100%
rename from superset-frontend/src/hooks/useElementOnScreen/index.ts
rename to superset-frontend/packages/superset-ui-core/src/hooks/useElementOnScreen/index.ts
diff --git a/superset-frontend/src/hooks/usePrevious/index.ts b/superset-frontend/packages/superset-ui-core/src/hooks/usePrevious/index.ts
similarity index 100%
rename from superset-frontend/src/hooks/usePrevious/index.ts
rename to superset-frontend/packages/superset-ui-core/src/hooks/usePrevious/index.ts
diff --git a/superset-frontend/src/hooks/usePrevious/usePrevious.test.ts b/superset-frontend/packages/superset-ui-core/src/hooks/usePrevious/usePrevious.test.ts
similarity index 100%
rename from superset-frontend/src/hooks/usePrevious/usePrevious.test.ts
rename to superset-frontend/packages/superset-ui-core/src/hooks/usePrevious/usePrevious.test.ts
diff --git a/superset-frontend/src/hooks/usePrevious/usePrevious.ts b/superset-frontend/packages/superset-ui-core/src/hooks/usePrevious/usePrevious.ts
similarity index 100%
rename from superset-frontend/src/hooks/usePrevious/usePrevious.ts
rename to superset-frontend/packages/superset-ui-core/src/hooks/usePrevious/usePrevious.ts
diff --git a/superset-frontend/src/hooks/useTruncation/index.ts b/superset-frontend/packages/superset-ui-core/src/hooks/useTruncation/index.ts
similarity index 100%
rename from superset-frontend/src/hooks/useTruncation/index.ts
rename to superset-frontend/packages/superset-ui-core/src/hooks/useTruncation/index.ts
diff --git a/superset-frontend/src/hooks/useTruncation/useCSSTextTruncation.ts b/superset-frontend/packages/superset-ui-core/src/hooks/useTruncation/useCSSTextTruncation.ts
similarity index 100%
rename from superset-frontend/src/hooks/useTruncation/useCSSTextTruncation.ts
rename to superset-frontend/packages/superset-ui-core/src/hooks/useTruncation/useCSSTextTruncation.ts
diff --git a/superset-frontend/src/hooks/useTruncation/useChildElementTruncation.ts b/superset-frontend/packages/superset-ui-core/src/hooks/useTruncation/useChildElementTruncation.ts
similarity index 100%
rename from superset-frontend/src/hooks/useTruncation/useChildElementTruncation.ts
rename to superset-frontend/packages/superset-ui-core/src/hooks/useTruncation/useChildElementTruncation.ts
diff --git a/superset-frontend/packages/superset-ui-core/src/index.ts b/superset-frontend/packages/superset-ui-core/src/index.ts
index 4d3c4b7c95..5ee5acbce4 100644
--- a/superset-frontend/packages/superset-ui-core/src/index.ts
+++ b/superset-frontend/packages/superset-ui-core/src/index.ts
@@ -35,3 +35,4 @@ export * from './chart-composition';
 export * from './components';
 export * from './math-expression';
 export * from './ui-overrides';
+export * from './hooks';
diff --git a/superset-frontend/packages/superset-ui-core/tsconfig.json b/superset-frontend/packages/superset-ui-core/tsconfig.json
index d345ae88fc..9d843075b5 100644
--- a/superset-frontend/packages/superset-ui-core/tsconfig.json
+++ b/superset-frontend/packages/superset-ui-core/tsconfig.json
@@ -13,6 +13,6 @@
     "src/**/*",
     "types/**/*",
     "../../types/**/*"
-  ],
+, "../../src/hooks/apiResources", "../../src/SqlLab/hooks/useQueryEditor", "../../src/hooks/useTabId.ts"  ],
   "references": []
 }
diff --git a/superset-frontend/plugins/plugin-chart-table/package.json b/superset-frontend/plugins/plugin-chart-table/package.json
index 293413805d..738c143e9d 100644
--- a/superset-frontend/plugins/plugin-chart-table/package.json
+++ b/superset-frontend/plugins/plugin-chart-table/package.json
@@ -32,6 +32,7 @@
     "@types/react-table": "^7.0.29",
     "classnames": "^2.3.2",
     "d3-array": "^2.4.0",
+    "lodash": "^4.17.21",
     "match-sorter": "^6.3.0",
     "memoize-one": "^5.1.1",
     "react-table": "^7.6.3",
diff --git a/superset-frontend/plugins/plugin-chart-table/src/DataTable/DataTable.tsx b/superset-frontend/plugins/plugin-chart-table/src/DataTable/DataTable.tsx
index 85580e7b63..6c5123806f 100644
--- a/superset-frontend/plugins/plugin-chart-table/src/DataTable/DataTable.tsx
+++ b/superset-frontend/plugins/plugin-chart-table/src/DataTable/DataTable.tsx
@@ -37,7 +37,8 @@ import {
   Row,
 } from 'react-table';
 import { matchSorter, rankings } from 'match-sorter';
-import { typedMemo } from '@superset-ui/core';
+import { typedMemo, usePrevious } from '@superset-ui/core';
+import { isEqual } from 'lodash';
 import GlobalFilter, { GlobalFilterProps } from './components/GlobalFilter';
 import SelectPageSize, {
   SelectPageSizeProps,
@@ -108,6 +109,8 @@ export default typedMemo(function DataTable<D extends object>({
     doSticky ? useSticky : [],
     hooks || [],
   ].flat();
+  const columnNames = Object.keys(data?.[0] || {});
+  const previousColumnNames = usePrevious(columnNames);
   const resultsSize = serverPagination ? rowCount : data.length;
   const sortByRef = useRef([]); // cache initial `sortby` so sorting doesn't trigger page reset
   const pageSizeRef = useRef([initialPageSize, resultsSize]);
@@ -187,6 +190,7 @@ export default typedMemo(function DataTable<D extends object>({
       getTableSize: defaultGetTableSize,
       globalFilter: defaultGlobalFilter,
       sortTypes,
+      autoResetSortBy: !isEqual(columnNames, previousColumnNames),
       ...moreUseTableOptions,
     },
     ...tableHooks,
diff --git a/superset-frontend/src/SqlLab/components/AceEditorWrapper/index.tsx b/superset-frontend/src/SqlLab/components/AceEditorWrapper/index.tsx
index 0dd3385ea5..32d17340fb 100644
--- a/superset-frontend/src/SqlLab/components/AceEditorWrapper/index.tsx
+++ b/superset-frontend/src/SqlLab/components/AceEditorWrapper/index.tsx
@@ -18,9 +18,8 @@
  */
 import React, { useState, useEffect, useRef } from 'react';
 import { useDispatch } from 'react-redux';
-import { css, styled } from '@superset-ui/core';
+import { css, styled, usePrevious } from '@superset-ui/core';
 
-import { usePrevious } from 'src/hooks/usePrevious';
 import { areArraysShallowEqual } from 'src/reduxUtils';
 import sqlKeywords from 'src/SqlLab/utils/sqlKeywords';
 import {
diff --git a/superset-frontend/src/SqlLab/components/ResultSet/index.tsx b/superset-frontend/src/SqlLab/components/ResultSet/index.tsx
index fad6c98bc9..f41d27650b 100644
--- a/superset-frontend/src/SqlLab/components/ResultSet/index.tsx
+++ b/superset-frontend/src/SqlLab/components/ResultSet/index.tsx
@@ -28,8 +28,8 @@ import {
   styled,
   t,
   useTheme,
+  usePrevious,
 } from '@superset-ui/core';
-import { usePrevious } from 'src/hooks/usePrevious';
 import ErrorMessageWithStackTrace from 'src/components/ErrorMessage/ErrorMessageWithStackTrace';
 import {
   ISaveableDatasource,
diff --git a/superset-frontend/src/components/DropdownContainer/index.tsx b/superset-frontend/src/components/DropdownContainer/index.tsx
index c90372973e..f2504c66ff 100644
--- a/superset-frontend/src/components/DropdownContainer/index.tsx
+++ b/superset-frontend/src/components/DropdownContainer/index.tsx
@@ -30,9 +30,8 @@ import React, {
   ReactNode,
 } from 'react';
 import { Global } from '@emotion/react';
-import { css, t, useTheme } from '@superset-ui/core';
+import { css, t, useTheme, usePrevious } from '@superset-ui/core';
 import { useResizeDetector } from 'react-resize-detector';
-import { usePrevious } from 'src/hooks/usePrevious';
 import Badge from '../Badge';
 import Icons from '../Icons';
 import Button from '../Button';
diff --git a/superset-frontend/src/components/FaveStar/index.tsx b/superset-frontend/src/components/FaveStar/index.tsx
index 8a6f4eca1f..c7b605243a 100644
--- a/superset-frontend/src/components/FaveStar/index.tsx
+++ b/superset-frontend/src/components/FaveStar/index.tsx
@@ -18,9 +18,8 @@
  */
 
 import React, { useCallback } from 'react';
-import { css, t, styled } from '@superset-ui/core';
+import { css, t, styled, useComponentDidMount } from '@superset-ui/core';
 import { Tooltip } from 'src/components/Tooltip';
-import { useComponentDidMount } from 'src/hooks/useComponentDidMount';
 import Icons from 'src/components/Icons';
 
 export interface FaveStarProps {
diff --git a/superset-frontend/src/components/FlashProvider/index.tsx b/superset-frontend/src/components/FlashProvider/index.tsx
index 5e00af5fc5..f2bef9cf57 100644
--- a/superset-frontend/src/components/FlashProvider/index.tsx
+++ b/superset-frontend/src/components/FlashProvider/index.tsx
@@ -17,7 +17,7 @@
  * under the License.
  */
 import { useToasts } from 'src/components/MessageToasts/withToasts';
-import { useComponentDidMount } from 'src/hooks/useComponentDidMount';
+import { useComponentDidMount } from '@superset-ui/core';
 
 type FlashMessageType = 'info' | 'alert' | 'danger' | 'warning' | 'success';
 export type FlashMessage = [FlashMessageType, string];
diff --git a/superset-frontend/src/components/ListView/CrossLinks.tsx b/superset-frontend/src/components/ListView/CrossLinks.tsx
index 653e97b06e..e315750674 100644
--- a/superset-frontend/src/components/ListView/CrossLinks.tsx
+++ b/superset-frontend/src/components/ListView/CrossLinks.tsx
@@ -17,9 +17,8 @@
  * under the License.
  */
 import React, { useMemo, useRef } from 'react';
-import { styled } from '@superset-ui/core';
+import { styled, useTruncation } from '@superset-ui/core';
 import { Link } from 'react-router-dom';
-import { useTruncation } from 'src/hooks/useTruncation';
 import CrossLinksTooltip from './CrossLinksTooltip';
 
 export type CrossLinkProps = {
diff --git a/superset-frontend/src/components/ReportModal/HeaderReportDropdown/index.tsx b/superset-frontend/src/components/ReportModal/HeaderReportDropdown/index.tsx
index f7bb9ba55c..e8426641d6 100644
--- a/superset-frontend/src/components/ReportModal/HeaderReportDropdown/index.tsx
+++ b/superset-frontend/src/components/ReportModal/HeaderReportDropdown/index.tsx
@@ -17,7 +17,6 @@
  * under the License.
  */
 import React, { useState, useEffect } from 'react';
-import { usePrevious } from 'src/hooks/usePrevious';
 import { useSelector, useDispatch } from 'react-redux';
 import {
   t,
@@ -28,6 +27,7 @@ import {
   FeatureFlag,
   isFeatureEnabled,
   getExtensionsRegistry,
+  usePrevious,
 } from '@superset-ui/core';
 import Icons from 'src/components/Icons';
 import { Switch } from 'src/components/Switch';
diff --git a/superset-frontend/src/components/Select/CustomTag.tsx b/superset-frontend/src/components/Select/CustomTag.tsx
index a7ffe10f6d..ce837706da 100644
--- a/superset-frontend/src/components/Select/CustomTag.tsx
+++ b/superset-frontend/src/components/Select/CustomTag.tsx
@@ -18,8 +18,7 @@
  */
 import React from 'react';
 import { Tag as AntdTag } from 'antd';
-import { styled } from '@superset-ui/core';
-import { useCSSTextTruncation } from 'src/hooks/useTruncation';
+import { styled, useCSSTextTruncation } from '@superset-ui/core';
 import { Tooltip } from '../Tooltip';
 import { CustomTagProps } from './types';
 import { SELECT_ALL_VALUE } from './utils';
diff --git a/superset-frontend/src/components/TruncatedList/index.tsx b/superset-frontend/src/components/TruncatedList/index.tsx
index 37d4fe0436..00e0acc0c3 100644
--- a/superset-frontend/src/components/TruncatedList/index.tsx
+++ b/superset-frontend/src/components/TruncatedList/index.tsx
@@ -18,8 +18,7 @@
  */
 
 import React, { ReactNode, useMemo, useRef } from 'react';
-import { styled, t } from '@superset-ui/core';
-import { useTruncation } from 'src/hooks/useTruncation';
+import { styled, t, useTruncation } from '@superset-ui/core';
 import { Tooltip } from '../Tooltip';
 
 export type TruncatedListProps<ListItemType> = {
diff --git a/superset-frontend/src/dashboard/components/DashboardBuilder/DashboardBuilder.tsx b/superset-frontend/src/dashboard/components/DashboardBuilder/DashboardBuilder.tsx
index 99360801c5..3c64c2ef1e 100644
--- a/superset-frontend/src/dashboard/components/DashboardBuilder/DashboardBuilder.tsx
+++ b/superset-frontend/src/dashboard/components/DashboardBuilder/DashboardBuilder.tsx
@@ -33,6 +33,7 @@ import {
   styled,
   t,
   useTheme,
+  useElementOnScreen,
 } from '@superset-ui/core';
 import { Global } from '@emotion/react';
 import { useDispatch, useSelector } from 'react-redux';
@@ -56,7 +57,6 @@ import {
   setDirectPathToChild,
   setEditMode,
 } from 'src/dashboard/actions/dashboardState';
-import { useElementOnScreen } from 'src/hooks/useElementOnScreen';
 import { FeatureFlag, isFeatureEnabled } from 'src/featureFlags';
 import {
   deleteTopLevelTabs,
diff --git a/superset-frontend/src/dashboard/components/DashboardBuilder/DashboardContainer.tsx b/superset-frontend/src/dashboard/components/DashboardBuilder/DashboardContainer.tsx
index 386d96266a..fc1570a975 100644
--- a/superset-frontend/src/dashboard/components/DashboardBuilder/DashboardContainer.tsx
+++ b/superset-frontend/src/dashboard/components/DashboardBuilder/DashboardContainer.tsx
@@ -27,6 +27,7 @@ import {
   getCategoricalSchemeRegistry,
   isFeatureEnabled,
   SupersetClient,
+  useComponentDidUpdate,
 } from '@superset-ui/core';
 import { ParentSize } from '@visx/responsive';
 import pick from 'lodash/pick';
@@ -48,7 +49,6 @@ import findTabIndexByComponentId from 'src/dashboard/util/findTabIndexByComponen
 import { setInScopeStatusOfFilters } from 'src/dashboard/actions/nativeFilters';
 import { dashboardInfoChanged } from 'src/dashboard/actions/dashboardInfo';
 import { setColorScheme } from 'src/dashboard/actions/dashboardState';
-import { useComponentDidUpdate } from 'src/hooks/useComponentDidUpdate/useComponentDidUpdate';
 import jsonStringify from 'json-stringify-pretty-compact';
 import { NATIVE_FILTER_DIVIDER_PREFIX } from '../nativeFilters/FiltersConfigModal/utils';
 import { findTabsWithChartsInScope } from '../nativeFilters/utils';
diff --git a/superset-frontend/src/dashboard/components/FiltersBadge/index.tsx b/superset-frontend/src/dashboard/components/FiltersBadge/index.tsx
index fb0718bf54..fe9acb8f8e 100644
--- a/superset-frontend/src/dashboard/components/FiltersBadge/index.tsx
+++ b/superset-frontend/src/dashboard/components/FiltersBadge/index.tsx
@@ -20,9 +20,8 @@ import React, { useCallback, useEffect, useMemo, useState } from 'react';
 import { useDispatch, useSelector } from 'react-redux';
 import { uniqWith } from 'lodash';
 import cx from 'classnames';
-import { DataMaskStateWithId, Filters } from '@superset-ui/core';
+import { DataMaskStateWithId, Filters, usePrevious } from '@superset-ui/core';
 import Icons from 'src/components/Icons';
-import { usePrevious } from 'src/hooks/usePrevious';
 import { setDirectPathToChild } from 'src/dashboard/actions/dashboardState';
 import DetailsPanelPopover from './DetailsPanel';
 import { Pill } from './Styles';
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/CrossFilters/CrossFilterTag.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/CrossFilters/CrossFilterTag.tsx
index 3a1145c7db..d4b0789919 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/CrossFilters/CrossFilterTag.tsx
+++ b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/CrossFilters/CrossFilterTag.tsx
@@ -18,11 +18,16 @@
  */
 
 import React from 'react';
-import { styled, css, useTheme, getColumnLabel } from '@superset-ui/core';
+import {
+  styled,
+  css,
+  useTheme,
+  getColumnLabel,
+  useCSSTextTruncation,
+} from '@superset-ui/core';
 import { CrossFilterIndicator } from 'src/dashboard/components/nativeFilters/selectors';
 import { Tag } from 'src/components';
 import { Tooltip } from 'src/components/Tooltip';
-import useCSSTextTruncation from 'src/hooks/useTruncation/useCSSTextTruncation';
 import { FilterBarOrientation } from 'src/dashboard/types';
 import { ellipsisCss } from './styles';
 
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/CrossFilters/CrossFilterTitle.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/CrossFilters/CrossFilterTitle.tsx
index 70f0ad2cd9..9221bffe15 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/CrossFilters/CrossFilterTitle.tsx
+++ b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/CrossFilters/CrossFilterTitle.tsx
@@ -18,9 +18,14 @@
  */
 
 import React from 'react';
-import { t, css, styled, useTheme } from '@superset-ui/core';
+import {
+  t,
+  css,
+  styled,
+  useTheme,
+  useCSSTextTruncation,
+} from '@superset-ui/core';
 import { Tooltip } from 'src/components/Tooltip';
-import useCSSTextTruncation from 'src/hooks/useTruncation/useCSSTextTruncation';
 import { FilterBarOrientation } from 'src/dashboard/types';
 import Icons from 'src/components/Icons';
 import { ellipsisCss } from './styles';
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterControl.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterControl.tsx
index 218603f74d..b7f2ba04f2 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterControl.tsx
+++ b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterControl.tsx
@@ -22,11 +22,10 @@ import {
   InPortal,
   OutPortal,
 } from 'react-reverse-portal';
-import { styled, SupersetTheme } from '@superset-ui/core';
+import { styled, SupersetTheme, truncationCSS } from '@superset-ui/core';
 import { FormItem as StyledFormItem, Form } from 'src/components/Form';
 import { Tooltip } from 'src/components/Tooltip';
 import { FilterBarOrientation } from 'src/dashboard/types';
-import { truncationCSS } from 'src/hooks/useTruncation';
 import { checkIsMissingRequiredValue } from '../utils';
 import FilterValue from './FilterValue';
 import { FilterCard } from '../../FilterCard';
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterDivider.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterDivider.tsx
index e06a56ac7b..6efe2c4515 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterDivider.tsx
+++ b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterDivider.tsx
@@ -17,12 +17,16 @@
  * under the License.
  */
 
-import { css, useTheme } from '@superset-ui/core';
+import {
+  css,
+  useTheme,
+  useCSSTextTruncation,
+  truncationCSS,
+} from '@superset-ui/core';
 import React from 'react';
 import Icons from 'src/components/Icons';
 import { Tooltip } from 'src/components/Tooltip';
 import { FilterBarOrientation } from 'src/dashboard/types';
-import { useCSSTextTruncation, truncationCSS } from 'src/hooks/useTruncation';
 import { FilterDividerProps } from './types';
 
 const VerticalDivider = ({ title, description }: FilterDividerProps) => (
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/index.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/index.tsx
index d82c128bf8..5b2ce29326 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/index.tsx
+++ b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/index.tsx
@@ -27,9 +27,9 @@ import {
   DataMask,
   SLOW_DEBOUNCE,
   isNativeFilter,
+  usePrevious,
 } from '@superset-ui/core';
 import { useHistory } from 'react-router-dom';
-import { usePrevious } from 'src/hooks/usePrevious';
 import { updateDataMask, clearDataMask } from 'src/dataMask/actions';
 import { useImmer } from 'use-immer';
 import { isEmpty, isEqual, debounce } from 'lodash';
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FilterCard/DependenciesRow.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FilterCard/DependenciesRow.tsx
index 0d0907a6eb..253ce4649d 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/FilterCard/DependenciesRow.tsx
+++ b/superset-frontend/src/dashboard/components/nativeFilters/FilterCard/DependenciesRow.tsx
@@ -18,9 +18,8 @@
  */
 import React, { useCallback, useMemo, useRef } from 'react';
 import { useDispatch } from 'react-redux';
-import { css, t, useTheme } from '@superset-ui/core';
+import { css, t, useTheme, useTruncation } from '@superset-ui/core';
 import Icons from 'src/components/Icons';
-import { useTruncation } from 'src/hooks/useTruncation';
 import { setDirectPathToChild } from 'src/dashboard/actions/dashboardState';
 import {
   DependencyItem,
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FilterCard/NameRow.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FilterCard/NameRow.tsx
index 6c7e82b15d..c62255a68b 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/FilterCard/NameRow.tsx
+++ b/superset-frontend/src/dashboard/components/nativeFilters/FilterCard/NameRow.tsx
@@ -18,9 +18,8 @@
  */
 import React, { useRef } from 'react';
 import { useSelector } from 'react-redux';
-import { css, SupersetTheme, useTheme } from '@superset-ui/core';
+import { css, SupersetTheme, useTheme, useTruncation } from '@superset-ui/core';
 import Icons from 'src/components/Icons';
-import { useTruncation } from 'src/hooks/useTruncation';
 import { RootState } from 'src/dashboard/types';
 import { Row, FilterName, InternalRow } from './Styles';
 import { FilterCardRowProps } from './types';
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FilterCard/ScopeRow.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FilterCard/ScopeRow.tsx
index 0c07040891..ff5c1142a5 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/FilterCard/ScopeRow.tsx
+++ b/superset-frontend/src/dashboard/components/nativeFilters/FilterCard/ScopeRow.tsx
@@ -17,8 +17,7 @@
  * under the License.
  */
 import React, { useMemo, useRef } from 'react';
-import { t } from '@superset-ui/core';
-import { useTruncation } from 'src/hooks/useTruncation';
+import { t, useTruncation } from '@superset-ui/core';
 import { useFilterScope } from './useFilterScope';
 import {
   Row,
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/ColumnSelect.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/ColumnSelect.tsx
index 41c591ade3..800fff35fd 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/ColumnSelect.tsx
+++ b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/ColumnSelect.tsx
@@ -17,8 +17,13 @@
  * under the License.
  */
 import React, { useCallback, useState, useMemo, useEffect } from 'react';
-import { Column, ensureIsArray, SupersetClient, t } from '@superset-ui/core';
-import { useChangeEffect } from 'src/hooks/useChangeEffect';
+import {
+  Column,
+  ensureIsArray,
+  SupersetClient,
+  t,
+  useChangeEffect,
+} from '@superset-ui/core';
 import { Select, FormInstance } from 'src/components';
 import { useToasts } from 'src/components/MessageToasts/withToasts';
 import { getClientErrorObject } from 'src/utils/getClientErrorObject';
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FilterScope/FilterScope.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FilterScope/FilterScope.tsx
index 059e202905..ce1a510e20 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FilterScope/FilterScope.tsx
+++ b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FilterScope/FilterScope.tsx
@@ -18,10 +18,14 @@
  */
 
 import React, { FC, useCallback, useState } from 'react';
-import { NativeFilterScope, styled, t } from '@superset-ui/core';
+import {
+  NativeFilterScope,
+  styled,
+  t,
+  useComponentDidUpdate,
+} from '@superset-ui/core';
 import { Radio } from 'src/components/Radio';
 import { AntdForm, Typography } from 'src/components';
-import { useComponentDidUpdate } from 'src/hooks/useComponentDidUpdate/useComponentDidUpdate';
 import { ScopingType } from './types';
 import ScopingTree from './ScopingTree';
 import { getDefaultScopeValue, isScopingAll } from './utils';
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/state.ts b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/state.ts
index e9b9ec17c6..65c4af3b04 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/state.ts
+++ b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/state.ts
@@ -1,6 +1,5 @@
 import { useEffect } from 'react';
-import { usePrevious } from 'src/hooks/usePrevious';
-import { NativeFilterType } from '@superset-ui/core';
+import { NativeFilterType, usePrevious } from '@superset-ui/core';
 import { FilterRemoval } from './types';
 
 /**
diff --git a/superset-frontend/src/explore/components/Control.tsx b/superset-frontend/src/explore/components/Control.tsx
index 5e202fdf10..b7a1587dd8 100644
--- a/superset-frontend/src/explore/components/Control.tsx
+++ b/superset-frontend/src/explore/components/Control.tsx
@@ -22,8 +22,12 @@ import {
   ControlType,
   ControlComponentProps as BaseControlComponentProps,
 } from '@superset-ui/chart-controls';
-import { styled, JsonValue, QueryFormData } from '@superset-ui/core';
-import { usePrevious } from 'src/hooks/usePrevious';
+import {
+  styled,
+  JsonValue,
+  QueryFormData,
+  usePrevious,
+} from '@superset-ui/core';
 import ErrorBoundary from 'src/components/ErrorBoundary';
 import { ExploreActions } from 'src/explore/actions/exploreActions';
 import controlMap from './controls';
diff --git a/superset-frontend/src/explore/components/ControlPanelsContainer.tsx b/superset-frontend/src/explore/components/ControlPanelsContainer.tsx
index 8a456619f4..7d0ceea50c 100644
--- a/superset-frontend/src/explore/components/ControlPanelsContainer.tsx
+++ b/superset-frontend/src/explore/components/ControlPanelsContainer.tsx
@@ -39,6 +39,7 @@ import {
   isDefined,
   JsonValue,
   NO_TIME_RANGE,
+  usePrevious,
 } from '@superset-ui/core';
 import {
   ControlPanelSectionConfig,
@@ -59,7 +60,6 @@ import { PluginContext } from 'src/components/DynamicPlugins';
 import Loading from 'src/components/Loading';
 import Modal from 'src/components/Modal';
 
-import { usePrevious } from 'src/hooks/usePrevious';
 import { getSectionsToRender } from 'src/explore/controlUtils';
 import { ExploreActions } from 'src/explore/actions/exploreActions';
 import { ChartState, ExplorePageState } from 'src/explore/types';
diff --git a/superset-frontend/src/explore/components/ExploreViewContainer/index.jsx b/superset-frontend/src/explore/components/ExploreViewContainer/index.jsx
index 66eed14a6c..0550ba2b29 100644
--- a/superset-frontend/src/explore/components/ExploreViewContainer/index.jsx
+++ b/superset-frontend/src/explore/components/ExploreViewContainer/index.jsx
@@ -21,15 +21,21 @@ import React, { useCallback, useEffect, useMemo, useState } from 'react';
 import PropTypes from 'prop-types';
 import { bindActionCreators } from 'redux';
 import { connect } from 'react-redux';
-import { styled, t, css, useTheme, logging } from '@superset-ui/core';
+import {
+  styled,
+  t,
+  css,
+  useTheme,
+  logging,
+  useChangeEffect,
+  useComponentDidMount,
+  usePrevious,
+} from '@superset-ui/core';
 import { debounce, pick } from 'lodash';
 import { Resizable } from 're-resizable';
-import { useChangeEffect } from 'src/hooks/useChangeEffect';
 import { usePluginContext } from 'src/components/DynamicPlugins';
 import { Global } from '@emotion/react';
 import { Tooltip } from 'src/components/Tooltip';
-import { usePrevious } from 'src/hooks/usePrevious';
-import { useComponentDidMount } from 'src/hooks/useComponentDidMount';
 import Icons from 'src/components/Icons';
 import {
   getItem,
diff --git a/superset-frontend/src/explore/components/controls/ConditionalFormattingControl/ConditionalFormattingControl.tsx b/superset-frontend/src/explore/components/controls/ConditionalFormattingControl/ConditionalFormattingControl.tsx
index 478a395448..8fb9b27453 100644
--- a/superset-frontend/src/explore/components/controls/ConditionalFormattingControl/ConditionalFormattingControl.tsx
+++ b/superset-frontend/src/explore/components/controls/ConditionalFormattingControl/ConditionalFormattingControl.tsx
@@ -17,10 +17,15 @@
  * under the License.
  */
 import React, { useCallback, useEffect, useState } from 'react';
-import { styled, css, t, useTheme } from '@superset-ui/core';
+import {
+  styled,
+  css,
+  t,
+  useTheme,
+  useComponentDidUpdate,
+} from '@superset-ui/core';
 import Icons from 'src/components/Icons';
 import ControlHeader from 'src/explore/components/ControlHeader';
-import { useComponentDidUpdate } from 'src/hooks/useComponentDidUpdate';
 import { FormattingPopover } from './FormattingPopover';
 import {
   COMPARATOR,
diff --git a/superset-frontend/src/explore/components/controls/DateFilterControl/DateFilterLabel.tsx b/superset-frontend/src/explore/components/controls/DateFilterControl/DateFilterLabel.tsx
index 55adbfe44e..a3d44eb570 100644
--- a/superset-frontend/src/explore/components/controls/DateFilterControl/DateFilterLabel.tsx
+++ b/superset-frontend/src/explore/components/controls/DateFilterControl/DateFilterLabel.tsx
@@ -24,6 +24,7 @@ import {
   useTheme,
   NO_TIME_RANGE,
   SupersetTheme,
+  useCSSTextTruncation,
 } from '@superset-ui/core';
 import Button from 'src/components/Button';
 import ControlHeader from 'src/explore/components/ControlHeader';
@@ -35,7 +36,6 @@ import { Tooltip } from 'src/components/Tooltip';
 import { useDebouncedEffect } from 'src/explore/exploreUtils';
 import { SLOW_DEBOUNCE } from 'src/constants';
 import { noOp } from 'src/utils/common';
-import { useCSSTextTruncation } from 'src/hooks/useTruncation';
 import ControlPopover from '../ControlPopover/ControlPopover';
 
 import { DateFilterControlProps, FrameType } from './types';
diff --git a/superset-frontend/src/explore/components/controls/MetricControl/MetricsControl.jsx b/superset-frontend/src/explore/components/controls/MetricControl/MetricsControl.jsx
index 617be7112b..62005910cb 100644
--- a/superset-frontend/src/explore/components/controls/MetricControl/MetricsControl.jsx
+++ b/superset-frontend/src/explore/components/controls/MetricControl/MetricsControl.jsx
@@ -18,7 +18,7 @@
  */
 import React, { useCallback, useEffect, useMemo, useState } from 'react';
 import PropTypes from 'prop-types';
-import { ensureIsArray, t, useTheme } from '@superset-ui/core';
+import { ensureIsArray, t, useTheme, usePrevious } from '@superset-ui/core';
 import { isEqual } from 'lodash';
 import ControlHeader from 'src/explore/components/ControlHeader';
 import Icons from 'src/components/Icons';
@@ -28,7 +28,6 @@ import {
   HeaderContainer,
   LabelsContainer,
 } from 'src/explore/components/controls/OptionControls';
-import { usePrevious } from 'src/hooks/usePrevious';
 import columnType from './columnType';
 import MetricDefinitionValue from './MetricDefinitionValue';
 import AdhocMetric from './AdhocMetric';