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;