From af24092440f23f807554dcc63e3e45c3c73273bf Mon Sep 17 00:00:00 2001
From: "Michael S. Molina" <70410625+michael-s-molina@users.noreply.github.com>
Date: Thu, 8 Jun 2023 11:27:08 -0300
Subject: [PATCH] feat: Migrates TreeMap chart (#23741)
---
UPDATING.md | 1 +
.../cypress/e2e/dashboard/editmode.test.ts | 55 ++---
.../cypress/e2e/dashboard/tabs.test.ts | 4 +-
.../cypress/e2e/dashboard/utils.ts | 2 +-
.../explore/visualizations/treemap.test.js | 96 ---------
superset-frontend/package-lock.json | 29 ---
superset-frontend/package.json | 1 -
.../packages/superset-ui-demo/package.json | 1 -
.../legacy-plugin-chart-treemap/Stories.tsx | 44 ----
.../legacy-plugin-chart-treemap/data.ts | 55 -----
.../legacy-plugin-chart-treemap/CHANGELOG.md | 35 ----
.../legacy-plugin-chart-treemap/README.md | 52 -----
.../legacy-plugin-chart-treemap/package.json | 38 ----
.../src/ReactTreemap.jsx | 51 -----
.../src/Treemap.js | 190 ------------------
.../src/controlPanel.ts | 85 --------
.../src/images/Treemap.jpg | Bin 23739 -> 0 bytes
.../src/images/Treemap2.jpg | Bin 165612 -> 0 bytes
.../src/images/Treemap3.jpg | Bin 30761 -> 0 bytes
.../src/images/Treemap4.jpg | Bin 56770 -> 0 bytes
.../src/images/thumbnail.png | Bin 13823 -> 0 bytes
.../src/images/thumbnailLarge.png | Bin 27164 -> 0 bytes
.../legacy-plugin-chart-treemap/src/index.js | 61 ------
.../src/transformProps.js | 44 ----
.../legacy-plugin-chart-treemap/tsconfig.json | 25 ---
.../spec/fixtures/mockSliceEntities.js | 2 +-
.../components/PropertiesModal/index.tsx | 15 +-
.../FilterScope/utils.test.ts | 16 +-
.../VizTypeControl/VizTypeGallery.tsx | 2 +-
.../src/visualizations/presets/MainPreset.js | 2 -
.../examples/configs/charts/Commute_Time.yaml | 45 ++---
.../configs/charts/Games_per_Genre.yaml | 116 +++++------
.../configs/charts/Members_per_Channel.yaml | 9 +-
...hat_Hit_100k_in_Sales_By_Release_Year.yaml | 105 +++++-----
.../charts/Preferred_Employment_Style.yaml | 45 ++---
.../Vaccine_Candidates_per_Country.yaml | 9 +-
.../examples/supported_charts_dashboard.py | 11 -
superset/examples/world_bank.py | 6 +-
...0-22_4c5da39be729_migrate_treemap_chart.py | 47 +++++
.../translations/de/LC_MESSAGES/messages.json | 7 -
.../translations/de/LC_MESSAGES/messages.po | 182 ++++++++---------
.../translations/en/LC_MESSAGES/messages.json | 6 +-
.../translations/en/LC_MESSAGES/messages.po | 189 ++++++++---------
.../translations/es/LC_MESSAGES/messages.json | 5 -
.../translations/es/LC_MESSAGES/messages.po | 190 ++++++++----------
.../translations/fr/LC_MESSAGES/messages.json | 5 -
.../translations/fr/LC_MESSAGES/messages.po | 190 ++++++++----------
.../translations/it/LC_MESSAGES/messages.json | 6 +-
.../translations/it/LC_MESSAGES/messages.po | 189 ++++++++---------
.../translations/ja/LC_MESSAGES/messages.json | 6 +-
.../translations/ja/LC_MESSAGES/messages.po | 189 ++++++++---------
.../translations/ko/LC_MESSAGES/messages.json | 6 +-
.../translations/ko/LC_MESSAGES/messages.po | 189 ++++++++---------
superset/translations/messages.pot | 189 ++++++++---------
.../translations/nl/LC_MESSAGES/messages.json | 6 +-
.../translations/nl/LC_MESSAGES/messages.po | 189 ++++++++---------
.../translations/pt/LC_MESSAGES/messages.json | 6 +-
.../translations/pt/LC_MESSAGES/messages.po | 189 ++++++++---------
.../pt_BR/LC_MESSAGES/messages.json | 3 -
.../translations/ru/LC_MESSAGES/messages.json | 5 -
.../translations/ru/LC_MESSAGES/messages.po | 190 ++++++++----------
.../translations/sk/LC_MESSAGES/messages.json | 6 +-
.../translations/sk/LC_MESSAGES/messages.po | 189 ++++++++---------
.../translations/sl/LC_MESSAGES/messages.json | 7 -
.../translations/sl/LC_MESSAGES/messages.po | 190 ++++++++----------
.../translations/zh/LC_MESSAGES/messages.json | 5 -
.../translations/zh/LC_MESSAGES/messages.po | 190 ++++++++----------
superset/viz.py | 47 -----
tests/unit_tests/fixtures/assets_configs.py | 4 +-
69 files changed, 1436 insertions(+), 2637 deletions(-)
delete mode 100644 superset-frontend/cypress-base/cypress/e2e/explore/visualizations/treemap.test.js
delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-treemap/Stories.tsx
delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-treemap/data.ts
delete mode 100644 superset-frontend/plugins/legacy-plugin-chart-treemap/CHANGELOG.md
delete mode 100644 superset-frontend/plugins/legacy-plugin-chart-treemap/README.md
delete mode 100644 superset-frontend/plugins/legacy-plugin-chart-treemap/package.json
delete mode 100644 superset-frontend/plugins/legacy-plugin-chart-treemap/src/ReactTreemap.jsx
delete mode 100644 superset-frontend/plugins/legacy-plugin-chart-treemap/src/Treemap.js
delete mode 100644 superset-frontend/plugins/legacy-plugin-chart-treemap/src/controlPanel.ts
delete mode 100644 superset-frontend/plugins/legacy-plugin-chart-treemap/src/images/Treemap.jpg
delete mode 100644 superset-frontend/plugins/legacy-plugin-chart-treemap/src/images/Treemap2.jpg
delete mode 100644 superset-frontend/plugins/legacy-plugin-chart-treemap/src/images/Treemap3.jpg
delete mode 100644 superset-frontend/plugins/legacy-plugin-chart-treemap/src/images/Treemap4.jpg
delete mode 100644 superset-frontend/plugins/legacy-plugin-chart-treemap/src/images/thumbnail.png
delete mode 100644 superset-frontend/plugins/legacy-plugin-chart-treemap/src/images/thumbnailLarge.png
delete mode 100644 superset-frontend/plugins/legacy-plugin-chart-treemap/src/index.js
delete mode 100644 superset-frontend/plugins/legacy-plugin-chart-treemap/src/transformProps.js
delete mode 100644 superset-frontend/plugins/legacy-plugin-chart-treemap/tsconfig.json
create mode 100644 superset/migrations/versions/2023-06-08_10-22_4c5da39be729_migrate_treemap_chart.py
diff --git a/UPDATING.md b/UPDATING.md
index f590f6194bdcd..e61df9ff76b55 100644
--- a/UPDATING.md
+++ b/UPDATING.md
@@ -33,6 +33,7 @@ assists people when migrating to a new version.
### Breaking Changes
+- [23741](https://github.com/apache/superset/pull/23741) Migrates the TreeMap chart and removes the legacy Treemap code.
- [23712](https://github.com/apache/superset/pull/23712) Migrates the Pivot Table v1 chart to v2 and removes v1 code.
- [24029](https://github.com/apache/superset/pull/24029) Removes the `user` and `username` arguments for the `QUERY_LOGGER` and `SQL_QUERY_MUTATOR` methods respectively. If the username for the current user is required, the `superset.utils.core.get_username` method should be used.
- [24128](https://github.com/apache/superset/pull/24128) The `RLS_BASE_RELATED_FIELD_FILTERS` config parameter has been removed. Now the Tables dropdown will feature the same tables that the user is able to see elsewhere in the application using the standard `DatasourceFilter`, and the Roles dropdown will be filtered using the filter defined in `EXTRA_RELATED_QUERY_FILTERS["role"]`.
diff --git a/superset-frontend/cypress-base/cypress/e2e/dashboard/editmode.test.ts b/superset-frontend/cypress-base/cypress/e2e/dashboard/editmode.test.ts
index 97cef2cae2f5c..416af35182288 100644
--- a/superset-frontend/cypress-base/cypress/e2e/dashboard/editmode.test.ts
+++ b/superset-frontend/cypress-base/cypress/e2e/dashboard/editmode.test.ts
@@ -230,7 +230,7 @@ describe('Dashboard edit', () => {
'[data-test-chart-name="Top 10 California Names Timeseries"] .line .nv-legend-symbol',
)
.first()
- .should('have.css', 'fill', 'rgb(51, 217, 193)');
+ .should('have.css', 'fill', 'rgb(51, 61, 71)');
// open 2nd main tab
openTab(0, 1);
@@ -239,7 +239,7 @@ describe('Dashboard edit', () => {
// label Anthony
cy.get('[data-test-chart-name="Trends"] .line .nv-legend-symbol')
.eq(2)
- .should('have.css', 'fill', 'rgb(51, 217, 193)');
+ .should('have.css', 'fill', 'rgb(51, 61, 71)');
});
it('should apply same color to same labels with no color scheme set', () => {
@@ -393,7 +393,7 @@ describe('Dashboard edit', () => {
'[data-test-chart-name="Top 10 California Names Timeseries"] .line .nv-legend-symbol',
)
.eq(2)
- .should('have.css', 'fill', 'rgb(168, 104, 183)');
+ .should('have.css', 'fill', 'rgb(163, 143, 121)');
openProperties();
cy.get('[aria-label="Select color scheme"]').should('have.value', '');
@@ -422,17 +422,17 @@ describe('Dashboard edit', () => {
'[data-test-chart-name="Top 10 California Names Timeseries"] .line .nv-legend-symbol',
)
.first()
- .should('have.css', 'fill', 'rgb(69, 78, 124)');
+ .should('have.css', 'fill', 'rgb(252, 199, 0)');
cy.get(
'[data-test-chart-name="Top 10 California Names Timeseries"] .line .nv-legend-symbol',
)
.eq(1)
- .should('have.css', 'fill', 'rgb(224, 67, 85)');
+ .should('have.css', 'fill', 'rgb(143, 211, 228)');
cy.get(
'[data-test-chart-name="Top 10 California Names Timeseries"] .line .nv-legend-symbol',
)
.eq(2)
- .should('have.css', 'fill', 'rgb(168, 104, 183)');
+ .should('have.css', 'fill', 'rgb(172, 225, 196)');
});
it('should show the same colors in Explore', () => {
@@ -463,7 +463,7 @@ describe('Dashboard edit', () => {
'[data-test-chart-name="Top 10 California Names Timeseries"] .line .nv-legend-symbol',
)
.eq(1)
- .should('have.css', 'fill', 'rgb(157, 172, 185)');
+ .should('have.css', 'fill', 'rgb(51, 61, 71)');
openExplore('Top 10 California Names Timeseries');
@@ -495,7 +495,7 @@ describe('Dashboard edit', () => {
'[data-test-chart-name="Top 10 California Names Timeseries"] .line .nv-legend-symbol',
)
.first()
- .should('have.css', 'fill', 'rgb(51, 217, 193)');
+ .should('have.css', 'fill', 'rgb(51, 61, 71)');
// open 2nd main tab
openTab(0, 1);
@@ -504,7 +504,7 @@ describe('Dashboard edit', () => {
// label Anthony
cy.get('[data-test-chart-name="Trends"] .line .nv-legend-symbol')
.eq(2)
- .should('have.css', 'fill', 'rgb(51, 217, 193)');
+ .should('have.css', 'fill', 'rgb(51, 61, 71)');
editDashboard();
openProperties();
@@ -535,44 +535,29 @@ describe('Dashboard edit', () => {
applyChanges();
saveChanges();
- cy.get('.treemap #rect-sum__SP_POP_TOTL').should(
- 'have.css',
- 'fill',
- 'rgb(234, 11, 140)',
- );
-
// go to second tab
openTab(0, 1);
waitForChartLoad({ name: 'Trends', viz: 'line' });
cy.get('[data-test-chart-name="Trends"] .line .nv-legend-symbol')
.first()
- .should('have.css', 'fill', 'rgb(234, 11, 140)');
+ .should('have.css', 'fill', 'rgb(51, 61, 71)');
});
it('should apply the color scheme across main tabs for rendered charts', () => {
- waitForChartLoad({ name: 'Treemap', viz: 'treemap' });
+ waitForChartLoad({ name: 'Treemap', viz: 'treemap_v2' });
openProperties();
selectColorScheme('bnbColors');
applyChanges();
saveChanges();
- cy.get('.treemap #rect-sum__SP_POP_TOTL').should(
- 'have.css',
- 'fill',
- 'rgb(255, 90, 95)',
- );
-
// go to second tab
openTab(0, 1);
waitForChartLoad({ name: 'Trends', viz: 'line' });
cy.get('[data-test-chart-name="Trends"] .line .nv-legend-symbol')
.first()
- .should('have.css', 'fill', 'rgb(140, 224, 113)');
-
- // go back to first tab
- openTab(0, 0);
+ .should('have.css', 'fill', 'rgb(204, 0, 134)');
// change scheme now that charts are rendered across the main tabs
editDashboard();
@@ -581,15 +566,6 @@ describe('Dashboard edit', () => {
applyChanges();
saveChanges();
- cy.get('.treemap #rect-sum__SP_POP_TOTL').should(
- 'have.css',
- 'fill',
- 'rgb(234, 11, 140)',
- );
-
- // go to second tab again
- openTab(0, 1);
-
cy.get('[data-test-chart-name="Trends"] .line .nv-legend-symbol')
.first()
.should('have.css', 'fill', 'rgb(234, 11, 140)');
@@ -600,11 +576,6 @@ describe('Dashboard edit', () => {
selectColorScheme('lyftColors');
applyChanges();
saveChanges();
- cy.get('.treemap #rect-sum__SP_POP_TOTL').should(
- 'have.css',
- 'fill',
- 'rgb(234, 11, 140)',
- );
// open nested tab
openTab(1, 1);
@@ -616,7 +587,7 @@ describe('Dashboard edit', () => {
'[data-test-chart-name="Top 10 California Names Timeseries"] .line .nv-legend-symbol',
)
.first()
- .should('have.css', 'fill', 'rgb(51, 217, 193)');
+ .should('have.css', 'fill', 'rgb(51, 61, 71)');
// open another nested tab
openTab(2, 1);
diff --git a/superset-frontend/cypress-base/cypress/e2e/dashboard/tabs.test.ts b/superset-frontend/cypress-base/cypress/e2e/dashboard/tabs.test.ts
index ac076a2200f26..6fc89c1446fb8 100644
--- a/superset-frontend/cypress-base/cypress/e2e/dashboard/tabs.test.ts
+++ b/superset-frontend/cypress-base/cypress/e2e/dashboard/tabs.test.ts
@@ -24,7 +24,7 @@ import {
import { TABBED_DASHBOARD } from 'cypress/utils/urls';
import { expandFilterOnLeftPanel } from './utils';
-const TREEMAP = { name: 'Treemap', viz: 'treemap' };
+const TREEMAP = { name: 'Treemap', viz: 'treemap_v2' };
const FILTER_BOX = { name: 'Region Filter', viz: 'filter_box' };
const LINE_CHART = { name: 'Growth Rate', viz: 'line' };
const BOX_PLOT = { name: 'Box plot', viz: 'box_plot' };
@@ -185,7 +185,7 @@ describe('Dashboard tabs', () => {
cy.wait(1000);
- cy.get("[data-test-viz-type='treemap'] .chart-container").then(
+ cy.get("[data-test-viz-type='treemap_v2'] .chart-container").then(
$chartContainer => {
expect($chartContainer.get(0).scrollWidth).eq(
$chartContainer.get(0).offsetWidth,
diff --git a/superset-frontend/cypress-base/cypress/e2e/dashboard/utils.ts b/superset-frontend/cypress-base/cypress/e2e/dashboard/utils.ts
index 159e9368eccba..00d3eda45e31f 100644
--- a/superset-frontend/cypress-base/cypress/e2e/dashboard/utils.ts
+++ b/superset-frontend/cypress-base/cypress/e2e/dashboard/utils.ts
@@ -29,7 +29,7 @@ export const WORLD_HEALTH_CHARTS = [
{ name: 'Rural Breakdown', viz: 'sunburst' },
{ name: "World's Pop Growth", viz: 'area' },
{ name: 'Life Expectancy VS Rural %', viz: 'bubble' },
- { name: 'Treemap', viz: 'treemap' },
+ { name: 'Treemap', viz: 'treemap_v2' },
{ name: 'Box plot', viz: 'box_plot' },
] as ChartSpec[];
diff --git a/superset-frontend/cypress-base/cypress/e2e/explore/visualizations/treemap.test.js b/superset-frontend/cypress-base/cypress/e2e/explore/visualizations/treemap.test.js
deleted file mode 100644
index 158aa7b39b15e..0000000000000
--- a/superset-frontend/cypress-base/cypress/e2e/explore/visualizations/treemap.test.js
+++ /dev/null
@@ -1,96 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-describe('Visualization > Treemap', () => {
- beforeEach(() => {
- cy.intercept('POST', '/superset/explore_json/**').as('getJson');
- });
-
- const TREEMAP_FORM_DATA = {
- datasource: '2__table',
- viz_type: 'treemap',
- slice_id: 10,
- granularity_sqla: 'year',
- time_grain_sqla: 'P1D',
- time_range: 'No filter',
- metrics: ['sum__SP_POP_TOTL'],
- adhoc_filters: [],
- groupby: ['country_code'],
- row_limit: 50000,
- color_scheme: 'bnbColors',
- treemap_ratio: 1.618033988749895,
- number_format: '.3s',
- };
-
- const level0 = '.chart-container rect[style="fill: rgb(255, 90, 95);"]';
- const level1 = '.chart-container rect[style="fill: rgb(123, 0, 81);"]';
- const level2 = '.chart-container rect[style="fill: rgb(0, 122, 135);"]';
-
- function verify(formData) {
- cy.visitChartByParams(formData);
- cy.verifySliceSuccess({ waitAlias: '@getJson', chartSelector: 'svg' });
- }
-
- it('should work', () => {
- verify(TREEMAP_FORM_DATA);
- cy.get(level0).should('have.length', 1);
- cy.get(level1).should('have.length', 214);
- });
-
- it('should work with multiple groupby', () => {
- verify({
- ...TREEMAP_FORM_DATA,
- groupby: ['region', 'country_code'],
- });
- cy.get(level0).should('have.length', 1);
- cy.get(level1).should('have.length', 7);
- cy.get(level2).should('have.length', 214);
- });
-
- it('should work with filter', () => {
- verify({
- ...TREEMAP_FORM_DATA,
- adhoc_filters: [
- {
- expressionType: 'SIMPLE',
- subject: 'region',
- operator: '==',
- comparator: 'South Asia',
- clause: 'WHERE',
- sqlExpression: null,
- filterOptionName: 'filter_8aqxcf5co1a_x7lm2d1fq0l',
- },
- ],
- });
- cy.get(level1).should('have.length', 8);
- });
-
- it('should allow type to search color schemes and apply the scheme', () => {
- verify(TREEMAP_FORM_DATA);
-
- cy.get('.Control[data-test="color_scheme"]').scrollIntoView();
- cy.get('.Control[data-test="color_scheme"] input[type="search"]')
- .focus()
- .type('supersetColors{enter}');
- cy.get(
- '.Control[data-test="color_scheme"] .ant-select-selection-item [data-test="supersetColors"]',
- ).should('exist');
- cy.get('[data-test=run-query-button]').click();
- cy.get('#rect-IND').should('have.css', 'fill', 'rgb(69, 78, 124)');
- });
-});
diff --git a/superset-frontend/package-lock.json b/superset-frontend/package-lock.json
index 9da0b33fa180a..0dd9bb121a4c5 100644
--- a/superset-frontend/package-lock.json
+++ b/superset-frontend/package-lock.json
@@ -38,7 +38,6 @@
"@superset-ui/legacy-plugin-chart-sankey": "file:./plugins/legacy-plugin-chart-sankey",
"@superset-ui/legacy-plugin-chart-sankey-loop": "file:./plugins/legacy-plugin-chart-sankey-loop",
"@superset-ui/legacy-plugin-chart-sunburst": "file:./plugins/legacy-plugin-chart-sunburst",
- "@superset-ui/legacy-plugin-chart-treemap": "file:./plugins/legacy-plugin-chart-treemap",
"@superset-ui/legacy-plugin-chart-world-map": "file:./plugins/legacy-plugin-chart-world-map",
"@superset-ui/legacy-preset-chart-deckgl": "file:./plugins/legacy-preset-chart-deckgl",
"@superset-ui/legacy-preset-chart-nvd3": "file:./plugins/legacy-preset-chart-nvd3",
@@ -19847,10 +19846,6 @@
"resolved": "plugins/legacy-plugin-chart-sunburst",
"link": true
},
- "node_modules/@superset-ui/legacy-plugin-chart-treemap": {
- "resolved": "plugins/legacy-plugin-chart-treemap",
- "link": true
- },
"node_modules/@superset-ui/legacy-plugin-chart-world-map": {
"resolved": "plugins/legacy-plugin-chart-world-map",
"link": true
@@ -60470,7 +60465,6 @@
"@superset-ui/legacy-plugin-chart-sankey-loop": "*",
"@superset-ui/legacy-plugin-chart-sunburst": "*",
"@superset-ui/legacy-plugin-chart-time-table": "*",
- "@superset-ui/legacy-plugin-chart-treemap": "*",
"@superset-ui/legacy-plugin-chart-world-map": "*",
"@superset-ui/legacy-preset-chart-deckgl": "*",
"@superset-ui/legacy-preset-chart-nvd3": "*",
@@ -61534,21 +61528,6 @@
"reactable-arc": "^0.15.0"
}
},
- "plugins/legacy-plugin-chart-treemap": {
- "name": "@superset-ui/legacy-plugin-chart-treemap",
- "version": "0.18.25",
- "license": "Apache-2.0",
- "dependencies": {
- "d3-hierarchy": "^1.1.8",
- "d3-selection": "^1.4.0",
- "prop-types": "^15.6.2"
- },
- "peerDependencies": {
- "@superset-ui/chart-controls": "*",
- "@superset-ui/core": "*",
- "react": "^16.13.1"
- }
- },
"plugins/legacy-plugin-chart-world-map": {
"name": "@superset-ui/legacy-plugin-chart-world-map",
"version": "0.18.25",
@@ -77511,14 +77490,6 @@
"prop-types": "^15.6.2"
}
},
- "@superset-ui/legacy-plugin-chart-treemap": {
- "version": "file:plugins/legacy-plugin-chart-treemap",
- "requires": {
- "d3-hierarchy": "^1.1.8",
- "d3-selection": "^1.4.0",
- "prop-types": "^15.6.2"
- }
- },
"@superset-ui/legacy-plugin-chart-world-map": {
"version": "file:plugins/legacy-plugin-chart-world-map",
"requires": {
diff --git a/superset-frontend/package.json b/superset-frontend/package.json
index fabdf39086079..39e99e3c658d5 100644
--- a/superset-frontend/package.json
+++ b/superset-frontend/package.json
@@ -103,7 +103,6 @@
"@superset-ui/legacy-plugin-chart-sankey": "file:./plugins/legacy-plugin-chart-sankey",
"@superset-ui/legacy-plugin-chart-sankey-loop": "file:./plugins/legacy-plugin-chart-sankey-loop",
"@superset-ui/legacy-plugin-chart-sunburst": "file:./plugins/legacy-plugin-chart-sunburst",
- "@superset-ui/legacy-plugin-chart-treemap": "file:./plugins/legacy-plugin-chart-treemap",
"@superset-ui/legacy-plugin-chart-world-map": "file:./plugins/legacy-plugin-chart-world-map",
"@superset-ui/legacy-preset-chart-deckgl": "file:./plugins/legacy-preset-chart-deckgl",
"@superset-ui/legacy-preset-chart-nvd3": "file:./plugins/legacy-preset-chart-nvd3",
diff --git a/superset-frontend/packages/superset-ui-demo/package.json b/superset-frontend/packages/superset-ui-demo/package.json
index 192e79d8a8012..c33ae8c9cb843 100644
--- a/superset-frontend/packages/superset-ui-demo/package.json
+++ b/superset-frontend/packages/superset-ui-demo/package.json
@@ -82,7 +82,6 @@
"@superset-ui/legacy-plugin-chart-sankey-loop": "*",
"@superset-ui/legacy-plugin-chart-sunburst": "*",
"@superset-ui/legacy-plugin-chart-time-table": "*",
- "@superset-ui/legacy-plugin-chart-treemap": "*",
"@superset-ui/legacy-plugin-chart-world-map": "*",
"@superset-ui/legacy-preset-chart-deckgl": "*",
"@superset-ui/legacy-preset-chart-nvd3": "*",
diff --git a/superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-treemap/Stories.tsx b/superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-treemap/Stories.tsx
deleted file mode 100644
index 1331ca81ed77a..0000000000000
--- a/superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-treemap/Stories.tsx
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/* eslint-disable no-magic-numbers, sort-keys */
-import React from 'react';
-import { SuperChart } from '@superset-ui/core';
-import TreemapChartPlugin from '@superset-ui/legacy-plugin-chart-treemap';
-import data from './data';
-
-new TreemapChartPlugin().configure({ key: 'treemap' }).register();
-
-export default {
- title: 'Legacy Chart Plugins/legacy-plugin-chart-treemap',
-};
-
-export const basic = () => (
-
-);
diff --git a/superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-treemap/data.ts b/superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-treemap/data.ts
deleted file mode 100644
index 9f67b5a00fe00..0000000000000
--- a/superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-treemap/data.ts
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/* eslint-disable sort-keys */
-export default [
- {
- name: 'Total Population',
- children: [
- {
- name: 'East Asia & Pacific',
- value: 92886288081,
- },
- {
- name: 'South Asia',
- value: 60081663698,
- },
- {
- name: 'Europe & Central Asia',
- value: 44338871387,
- },
- {
- name: 'Sub-Saharan Africa',
- value: 28161513610,
- },
- {
- name: 'Latin America & Caribbean',
- value: 23202014769,
- },
- {
- name: 'North America',
- value: 15077904555,
- },
- {
- name: 'Middle East & North Africa',
- value: 13187931450,
- },
- ],
- },
-];
diff --git a/superset-frontend/plugins/legacy-plugin-chart-treemap/CHANGELOG.md b/superset-frontend/plugins/legacy-plugin-chart-treemap/CHANGELOG.md
deleted file mode 100644
index 5920cace74eb8..0000000000000
--- a/superset-frontend/plugins/legacy-plugin-chart-treemap/CHANGELOG.md
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-# Change Log
-
-All notable changes to this project will be documented in this file.
-See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
-
-# [0.18.0](https://github.com/apache-superset/superset-ui/compare/v0.17.87...v0.18.0) (2021-08-30)
-
-**Note:** Version bump only for package @superset-ui/legacy-plugin-chart-treemap
-
-
-
-
-
-## [0.17.61](https://github.com/apache-superset/superset-ui/compare/v0.17.60...v0.17.61) (2021-07-02)
-
-**Note:** Version bump only for package @superset-ui/legacy-plugin-chart-treemap
diff --git a/superset-frontend/plugins/legacy-plugin-chart-treemap/README.md b/superset-frontend/plugins/legacy-plugin-chart-treemap/README.md
deleted file mode 100644
index b6596ab9806b7..0000000000000
--- a/superset-frontend/plugins/legacy-plugin-chart-treemap/README.md
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
-## @superset-ui/legacy-plugin-chart-treemap
-
-[![Version](https://img.shields.io/npm/v/@superset-ui/legacy-plugin-chart-treemap.svg?style=flat-square)](https://www.npmjs.com/package/@superset-ui/legacy-plugin-chart-treemap)
-[![David (path)](https://img.shields.io/david/apache-superset/superset-ui-plugins.svg?path=packages%2Fsuperset-ui-legacy-plugin-chart-treemap&style=flat-square)](https://david-dm.org/apache-superset/superset-ui-plugins?path=packages/superset-ui-legacy-plugin-chart-treemap)
-
-This plugin provides Treemap for Superset.
-
-### Usage
-
-Configure `key`, which can be any `string`, and register the plugin. This `key` will be used to
-lookup this chart throughout the app.
-
-```js
-import TreemapChartPlugin from '@superset-ui/legacy-plugin-chart-treemap';
-
-new TreemapChartPlugin().configure({ key: 'treemap' }).register();
-```
-
-Then use it via `SuperChart`. See
-[storybook](https://apache-superset.github.io/superset-ui-plugins/?selectedKind=plugin-chart-treemap)
-for more details.
-
-```js
-
-```
diff --git a/superset-frontend/plugins/legacy-plugin-chart-treemap/package.json b/superset-frontend/plugins/legacy-plugin-chart-treemap/package.json
deleted file mode 100644
index 022e8bddb45e2..0000000000000
--- a/superset-frontend/plugins/legacy-plugin-chart-treemap/package.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- "name": "@superset-ui/legacy-plugin-chart-treemap",
- "version": "0.18.25",
- "description": "Superset Legacy Chart - Treemap",
- "keywords": [
- "superset"
- ],
- "homepage": "https://github.com/apache/superset/tree/master/superset-frontend/plugins/legacy-plugin-chart-treemap#readme",
- "bugs": {
- "url": "https://github.com/apache/superset/issues"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/apache/superset.git",
- "directory": "superset-frontend/plugins/legacy-plugin-chart-treemap"
- },
- "license": "Apache-2.0",
- "author": "Superset",
- "main": "lib/index.js",
- "module": "esm/index.js",
- "files": [
- "esm",
- "lib"
- ],
- "dependencies": {
- "d3-hierarchy": "^1.1.8",
- "d3-selection": "^1.4.0",
- "prop-types": "^15.6.2"
- },
- "peerDependencies": {
- "@superset-ui/chart-controls": "*",
- "@superset-ui/core": "*",
- "react": "^16.13.1"
- },
- "publishConfig": {
- "access": "public"
- }
-}
diff --git a/superset-frontend/plugins/legacy-plugin-chart-treemap/src/ReactTreemap.jsx b/superset-frontend/plugins/legacy-plugin-chart-treemap/src/ReactTreemap.jsx
deleted file mode 100644
index c00d8b5d17492..0000000000000
--- a/superset-frontend/plugins/legacy-plugin-chart-treemap/src/ReactTreemap.jsx
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-import React from 'react';
-import { reactify, styled } from '@superset-ui/core';
-import Component from './Treemap';
-
-const ReactComponent = reactify(Component);
-
-const Treemap = ({ className, ...otherProps }) => (
-
-
-
-);
-
-export default styled(Treemap)`
- ${({ theme }) => `
- .superset-legacy-chart-treemap text {
- font-size: ${theme.typography.sizes.s}px;
- pointer-events: none;
- }
-
- .superset-legacy-chart-treemap tspan:last-child {
- font-size: ${theme.typography.sizes.xs}px;
- fill-opacity: 0.8;
- }
-
- .superset-legacy-chart-treemap .node rect {
- shape-rendering: crispEdges;
- }
-
- .superset-legacy-chart-treemap .node--hover rect {
- stroke: ${theme.colors.grayscale.dark2};
- }
- `}
-`;
diff --git a/superset-frontend/plugins/legacy-plugin-chart-treemap/src/Treemap.js b/superset-frontend/plugins/legacy-plugin-chart-treemap/src/Treemap.js
deleted file mode 100644
index e0f4e691220c2..0000000000000
--- a/superset-frontend/plugins/legacy-plugin-chart-treemap/src/Treemap.js
+++ /dev/null
@@ -1,190 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-/* eslint-disable no-param-reassign, func-names */
-/* eslint-disable react/sort-prop-types */
-import { select as d3Select, selectAll as d3SelectAll } from 'd3-selection';
-import {
- treemap as d3Treemap,
- hierarchy as d3Hierarchy,
- treemapSquarify,
-} from 'd3-hierarchy';
-import PropTypes from 'prop-types';
-import {
- getNumberFormatter,
- CategoricalColorNamespace,
-} from '@superset-ui/core';
-
-// Declare PropTypes for recursive data structures
-// https://github.com/facebook/react/issues/5676
-/* eslint-disable-next-line no-undef */
-const lazyFunction = f => () => f().apply(this, arguments);
-
-const leafType = PropTypes.shape({
- name: PropTypes.string,
- value: PropTypes.number.isRequired,
-});
-
-const parentShape = {
- name: PropTypes.string,
- children: PropTypes.arrayOf(
- PropTypes.oneOfType([
- PropTypes.shape(lazyFunction(() => parentShape)),
- leafType,
- ]),
- ),
-};
-
-const nodeType = PropTypes.oneOfType([PropTypes.shape(parentShape), leafType]);
-
-const propTypes = {
- data: PropTypes.arrayOf(nodeType),
- width: PropTypes.number,
- height: PropTypes.number,
- colorScheme: PropTypes.string,
- margin: PropTypes.shape({
- top: PropTypes.number,
- right: PropTypes.number,
- bottom: PropTypes.number,
- left: PropTypes.number,
- }),
- numberFormat: PropTypes.string,
- treemapRatio: PropTypes.number,
-};
-
-function hovered(hover) {
- return function (node) {
- d3SelectAll(node.ancestors().map(d => d.node))
- .classed('node--hover', hover)
- .select('rect')
- .attr('width', d => d.x1 - d.x0 - hover)
- .attr('height', d => d.y1 - d.y0 - hover);
- };
-}
-
-/* Modified from https://bl.ocks.org/mbostock/911ad09bdead40ec0061 */
-function Treemap(element, props) {
- const {
- data: rawData,
- width,
- height,
- numberFormat,
- colorScheme,
- treemapRatio,
- sliceId,
- } = props;
- const div = d3Select(element);
- div.classed('superset-legacy-chart-treemap', true);
-
- const formatNumber = getNumberFormatter(numberFormat);
- const colorFn = CategoricalColorNamespace.getScale(colorScheme);
-
- const rootNodes = rawData;
-
- div.selectAll('*').remove();
-
- if (rootNodes.length > 0) {
- const [rootNode] = rootNodes;
- const treemap = d3Treemap()
- .size([width, height])
- .paddingOuter(3)
- .paddingTop(19)
- .paddingInner(1)
- .tile(treemapSquarify.ratio(treemapRatio))
- .round(true);
-
- const root = treemap(
- d3Hierarchy(rootNode)
- .sum(d => d.value)
- .sort((a, b) => b.height - a.height || b.value - a.value),
- );
-
- const svg = div
- .append('svg')
- .attr('class', 'treemap')
- .attr('width', width)
- .attr('height', height);
-
- const cell = svg
- .selectAll('.node')
- .data(root.descendants())
- .enter()
- .append('g')
- .attr('transform', d => `translate(${d.x0},${d.y0})`)
- .attr('class', 'node')
- .each(function (d) {
- d.node = this;
- })
- .on('mouseover', hovered(true))
- .on('mouseout', hovered(false));
-
- cell
- .append('rect')
- .attr('id', d => `rect-${d.data.name}`)
- .attr('width', d => d.x1 - d.x0)
- .attr('height', d => d.y1 - d.y0)
- .style('fill', d => colorFn(d.depth, sliceId));
-
- cell
- .append('clipPath')
- .attr('id', d => `clip-${d.data.name}`)
- .append('use')
- .attr('xlink:href', d => `#rect-${d.data.name}`);
-
- const label = cell
- .append('text')
- .attr('clip-path', d => `url(#clip-${d.data.name})`);
-
- label
- .filter(d => d.children)
- .selectAll('tspan')
- .data(d =>
- d.data.name
- .slice(Math.max(0, d.data.name.lastIndexOf('.') + 1))
- .split(/(?=[A-Z][^A-Z])/g)
- .concat(`\u00A0${formatNumber(d.value)}`),
- )
- .enter()
- .append('tspan')
- .attr('x', (d, i) => (i ? null : 4))
- .attr('y', 13)
- .text(d => d);
-
- label
- .filter(d => !d.children)
- .selectAll('tspan')
- .data(d =>
- d.data.name
- .slice(Math.max(0, d.data.name.lastIndexOf('.') + 1))
- .split(/(?=[A-Z][^A-Z])/g)
- .concat(formatNumber(d.value)),
- )
- .enter()
- .append('tspan')
- .attr('x', 4)
- .attr('y', (d, i) => 13 + i * 10)
- .text(d => d);
-
- cell.append('title').text(d => `${d.data.name}\n${formatNumber(d.value)}`);
- }
-}
-
-Treemap.displayName = 'Treemap';
-Treemap.propTypes = propTypes;
-
-export default Treemap;
diff --git a/superset-frontend/plugins/legacy-plugin-chart-treemap/src/controlPanel.ts b/superset-frontend/plugins/legacy-plugin-chart-treemap/src/controlPanel.ts
deleted file mode 100644
index bc400d2f4b0a9..0000000000000
--- a/superset-frontend/plugins/legacy-plugin-chart-treemap/src/controlPanel.ts
+++ /dev/null
@@ -1,85 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-import { t } from '@superset-ui/core';
-import {
- ControlPanelConfig,
- D3_FORMAT_OPTIONS,
- D3_FORMAT_DOCS,
- sections,
-} from '@superset-ui/chart-controls';
-
-const config: ControlPanelConfig = {
- controlPanelSections: [
- sections.legacyRegularTime,
- {
- label: t('Query'),
- expanded: true,
- controlSetRows: [
- ['metrics'],
- ['adhoc_filters'],
- ['groupby'],
- ['row_limit'],
- ['timeseries_limit_metric'],
- ['order_desc'],
- ],
- },
- {
- label: t('Chart Options'),
- expanded: true,
- tabOverride: 'customize',
- controlSetRows: [
- ['color_scheme'],
- [
- {
- name: 'treemap_ratio',
- config: {
- type: 'TextControl',
- label: t('Ratio'),
- renderTrigger: true,
- isFloat: true,
- default: 0.5 * (1 + Math.sqrt(5)), // d3 default, golden ratio
- description: t('Target aspect ratio for treemap tiles.'),
- },
- },
- ],
- [
- {
- name: 'number_format',
- config: {
- type: 'SelectControl',
- freeForm: true,
- label: t('Number format'),
- renderTrigger: true,
- default: 'SMART_NUMBER',
- choices: D3_FORMAT_OPTIONS,
- description: D3_FORMAT_DOCS,
- },
- },
- ],
- ],
- },
- ],
- controlOverrides: {
- color_scheme: {
- renderTrigger: false,
- },
- },
-};
-
-export default config;
diff --git a/superset-frontend/plugins/legacy-plugin-chart-treemap/src/images/Treemap.jpg b/superset-frontend/plugins/legacy-plugin-chart-treemap/src/images/Treemap.jpg
deleted file mode 100644
index 9578310096d7779158621ba0133c4669eab801c8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 23739
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