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

beto pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-superset.git


The following commit(s) were added to refs/heads/master by this push:
     new 8346e62  Sort Chart Types based on Usage (#6849)
8346e62 is described below

commit 8346e62dec7f5676757ac0aae0abf8afd92ba7b2
Author: Thomas Wang <17309187+datability...@users.noreply.github.com>
AuthorDate: Tue Mar 5 11:32:10 2019 -0800

    Sort Chart Types based on Usage (#6849)
    
    * initial commit for VIZ-58
    
    * address @kristw's comments
    
    * per @mistercrunch's comment to use a static list for now
    
    * fix javascript test errors
    
    * fix lint errors
    
    * per @betodealmeida's comments
    
    * remove unnecessary loop
---
 .../explore/components/controls/VizTypeControl.jsx | 46 +++++++++++++++++++++-
 1 file changed, 44 insertions(+), 2 deletions(-)

diff --git a/superset/assets/src/explore/components/controls/VizTypeControl.jsx 
b/superset/assets/src/explore/components/controls/VizTypeControl.jsx
index 86f2f80..0264b1c 100644
--- a/superset/assets/src/explore/components/controls/VizTypeControl.jsx
+++ b/superset/assets/src/explore/components/controls/VizTypeControl.jsx
@@ -69,6 +69,49 @@ export default class VizTypeControl extends 
React.PureComponent {
       this.searchRef.focus();
     }
   }
+  buildVizTypeLookup(types) {
+    const lookup = new Map();
+    types.forEach((type) => {
+      lookup.set(type.key, type);
+    });
+    return lookup;
+  }
+  sortVizTypes(types) {
+    const defaultOrder = [
+      'line', 'big_number', 'table', 'filter_box', 'dist_bar', 'area', 'bar',
+      'deck_polygon', 'pie', 'time_table', 'pivot_table', 'histogram',
+      'big_number_total', 'deck_scatter', 'deck_hex', 'time_pivot', 'deck_arc',
+      'heatmap', 'deck_grid', 'dual_line', 'deck_screengrid', 'line_multi',
+      'treemap', 'box_plot', 'separator', 'sunburst', 'sankey', 'word_cloud',
+      'mapbox', 'kepler', 'cal_heatmap', 'rose', 'bubble', 'deck_geojson',
+      'horizon', 'markup', 'deck_multi', 'compare', 'partition', 'event_flow',
+      'deck_path', 'directed_force', 'world_map', 'paired_ttest', 'para',
+      'iframe', 'country_map',
+    ];
+
+    const sorted = [];
+    const loadedKeys = new Set();
+    const vizTypeLookup = this.buildVizTypeLookup(types);
+
+    // Sort based on the `defaultOrder`
+    defaultOrder.forEach((key) => {
+      const vizType = vizTypeLookup.get(key);
+      if (typeof vizType !== 'undefined') {
+        sorted.push(vizType);
+        loadedKeys.add(key);
+      }
+    });
+
+    // Load the rest of Viz Types not mandated by the `defualtOrder`
+    types.forEach((vizType) => {
+      if (!loadedKeys.has(vizType.key)) {
+        sorted.push(vizType);
+        loadedKeys.add(vizType.key);
+      }
+    });
+
+    return sorted;
+  }
   renderItem(entry) {
     const { value } = this.props;
     const { key, value: type } = entry;
@@ -94,8 +137,7 @@ export default class VizTypeControl extends 
React.PureComponent {
     const { value } = this.props;
 
     const registry = getChartMetadataRegistry();
-
-    const types = registry.entries();
+    const types = this.sortVizTypes(registry.entries());
     const filteredTypes = filter.length > 0
       ? types.filter(type => type.value.name.toLowerCase().includes(filter))
       : types;

Reply via email to