diff --git a/superset/assets/images/viz_thumbnails_large/area.png b/superset/assets/images/viz_thumbnails_large/area.png deleted file mode 100644 index 86f1080cda..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/area.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/bar.png b/superset/assets/images/viz_thumbnails_large/bar.png deleted file mode 100644 index ab0e8d9915..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/bar.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/big_number.png b/superset/assets/images/viz_thumbnails_large/big_number.png deleted file mode 100644 index 2420f25e9f..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/big_number.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/big_number_total.png b/superset/assets/images/viz_thumbnails_large/big_number_total.png deleted file mode 100644 index eb4b345731..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/big_number_total.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/box_plot.png b/superset/assets/images/viz_thumbnails_large/box_plot.png deleted file mode 100644 index de8f061a68..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/box_plot.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/bubble.png b/superset/assets/images/viz_thumbnails_large/bubble.png deleted file mode 100644 index 08de51f4ff..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/bubble.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/bullet.png b/superset/assets/images/viz_thumbnails_large/bullet.png deleted file mode 100644 index 7a66a41c7a..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/bullet.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/cal_heatmap.png b/superset/assets/images/viz_thumbnails_large/cal_heatmap.png deleted file mode 100644 index bf79a9e237..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/cal_heatmap.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/chord.png b/superset/assets/images/viz_thumbnails_large/chord.png deleted file mode 100644 index a4a30b6aeb..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/chord.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/compare.png b/superset/assets/images/viz_thumbnails_large/compare.png deleted file mode 100644 index 00b0a7c515..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/compare.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/country_map.png b/superset/assets/images/viz_thumbnails_large/country_map.png deleted file mode 100644 index 896fd6b09a..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/country_map.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/deck_arc.png b/superset/assets/images/viz_thumbnails_large/deck_arc.png deleted file mode 100644 index f79f283491..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/deck_arc.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/deck_geojson.png b/superset/assets/images/viz_thumbnails_large/deck_geojson.png deleted file mode 100644 index acc452cf03..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/deck_geojson.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/deck_grid.png b/superset/assets/images/viz_thumbnails_large/deck_grid.png deleted file mode 100644 index cd93965106..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/deck_grid.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/deck_hex.png b/superset/assets/images/viz_thumbnails_large/deck_hex.png deleted file mode 100644 index 31feff5c8f..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/deck_hex.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/deck_multi.png b/superset/assets/images/viz_thumbnails_large/deck_multi.png deleted file mode 100644 index 21c27c0489..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/deck_multi.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/deck_path.png b/superset/assets/images/viz_thumbnails_large/deck_path.png deleted file mode 100644 index eede9da44c..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/deck_path.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/deck_polygon.png b/superset/assets/images/viz_thumbnails_large/deck_polygon.png deleted file mode 100644 index dfae8616ff..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/deck_polygon.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/deck_scatter.png b/superset/assets/images/viz_thumbnails_large/deck_scatter.png deleted file mode 100644 index 11f38ccc8d..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/deck_scatter.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/deck_screengrid.png b/superset/assets/images/viz_thumbnails_large/deck_screengrid.png deleted file mode 100644 index d5da29c99b..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/deck_screengrid.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/directed_force.png b/superset/assets/images/viz_thumbnails_large/directed_force.png deleted file mode 100644 index 1cc7ce9579..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/directed_force.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/dist_bar.png b/superset/assets/images/viz_thumbnails_large/dist_bar.png deleted file mode 100644 index b41014788a..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/dist_bar.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/dual_line.png b/superset/assets/images/viz_thumbnails_large/dual_line.png deleted file mode 100755 index 23a77500b7..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/dual_line.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/event_flow.png b/superset/assets/images/viz_thumbnails_large/event_flow.png deleted file mode 100644 index 45765295be..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/event_flow.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/filter_box.png b/superset/assets/images/viz_thumbnails_large/filter_box.png deleted file mode 100644 index 209259c699..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/filter_box.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/heatmap.png b/superset/assets/images/viz_thumbnails_large/heatmap.png deleted file mode 100644 index ac81a45881..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/heatmap.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/histogram.png b/superset/assets/images/viz_thumbnails_large/histogram.png deleted file mode 100644 index f7bbe62407..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/histogram.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/horizon.png b/superset/assets/images/viz_thumbnails_large/horizon.png deleted file mode 100644 index a5d4bf3ec4..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/horizon.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/iframe.png b/superset/assets/images/viz_thumbnails_large/iframe.png deleted file mode 100644 index d5f0f564ad..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/iframe.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/line.png b/superset/assets/images/viz_thumbnails_large/line.png deleted file mode 100644 index 67f8fe887f..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/line.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/line_multi.png b/superset/assets/images/viz_thumbnails_large/line_multi.png deleted file mode 100644 index 473be99b21..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/line_multi.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/mapbox.png b/superset/assets/images/viz_thumbnails_large/mapbox.png deleted file mode 100644 index 662c163d63..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/mapbox.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/markup.png b/superset/assets/images/viz_thumbnails_large/markup.png deleted file mode 100644 index 675e42a89f..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/markup.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/multi.png b/superset/assets/images/viz_thumbnails_large/multi.png deleted file mode 100644 index be62cd40e9..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/multi.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/paired_ttest.png b/superset/assets/images/viz_thumbnails_large/paired_ttest.png deleted file mode 100644 index 4f8ad71b12..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/paired_ttest.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/para.png b/superset/assets/images/viz_thumbnails_large/para.png deleted file mode 100644 index fc1a157345..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/para.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/partition.png b/superset/assets/images/viz_thumbnails_large/partition.png deleted file mode 100644 index 7cf6e1358a..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/partition.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/pie.png b/superset/assets/images/viz_thumbnails_large/pie.png deleted file mode 100644 index ab76749f74..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/pie.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/pivot_table.png b/superset/assets/images/viz_thumbnails_large/pivot_table.png deleted file mode 100644 index 37f86af079..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/pivot_table.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/rose.png b/superset/assets/images/viz_thumbnails_large/rose.png deleted file mode 100644 index 763fa2b120..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/rose.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/sankey.png b/superset/assets/images/viz_thumbnails_large/sankey.png deleted file mode 100644 index 981cdba870..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/sankey.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/separator.png b/superset/assets/images/viz_thumbnails_large/separator.png deleted file mode 100644 index eddb59d590..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/separator.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/sunburst.png b/superset/assets/images/viz_thumbnails_large/sunburst.png deleted file mode 100644 index f155363aad..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/sunburst.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/table.png b/superset/assets/images/viz_thumbnails_large/table.png deleted file mode 100644 index a3dd1bee98..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/table.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/time_pivot.png b/superset/assets/images/viz_thumbnails_large/time_pivot.png deleted file mode 100644 index 149f3dae5d..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/time_pivot.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/time_table.png b/superset/assets/images/viz_thumbnails_large/time_table.png deleted file mode 100644 index 5eba0c2f0b..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/time_table.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/treemap.png b/superset/assets/images/viz_thumbnails_large/treemap.png deleted file mode 100644 index 0aec60c819..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/treemap.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/word_cloud.png b/superset/assets/images/viz_thumbnails_large/word_cloud.png deleted file mode 100644 index 03936e1253..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/word_cloud.png and /dev/null differ diff --git a/superset/assets/images/viz_thumbnails_large/world_map.png b/superset/assets/images/viz_thumbnails_large/world_map.png deleted file mode 100644 index 82e8ad2d10..0000000000 Binary files a/superset/assets/images/viz_thumbnails_large/world_map.png and /dev/null differ diff --git a/superset/assets/spec/javascripts/explore/components/VizTypeControl_spec.jsx b/superset/assets/spec/javascripts/explore/components/VizTypeControl_spec.jsx index d3f6fd42fd..a6db627552 100644 --- a/superset/assets/spec/javascripts/explore/components/VizTypeControl_spec.jsx +++ b/superset/assets/spec/javascripts/explore/components/VizTypeControl_spec.jsx @@ -3,17 +3,30 @@ import sinon from 'sinon'; import { shallow } from 'enzyme'; import { Modal } from 'react-bootstrap'; import VizTypeControl from '../../../../src/explore/components/controls/VizTypeControl'; +import getChartMetadataRegistry from '../../../../src/visualizations/core/registries/ChartMetadataRegistrySingleton'; +import ChartMetadata from '../../../../src/visualizations/core/models/ChartMetadata'; const defaultProps = { name: 'viz_type', label: 'Visualization Type', - value: 'table', + value: 'vis1', onChange: sinon.spy(), }; describe('VizTypeControl', () => { let wrapper; + const registry = getChartMetadataRegistry(); + registry + .registerValue('vis1', new ChartMetadata({ + name: 'vis1', + thumbnail: '', + })) + .registerValue('vis2', new ChartMetadata({ + name: 'vis2', + thumbnail: '', + })); + beforeEach(() => { wrapper = shallow(); }); @@ -28,8 +41,8 @@ describe('VizTypeControl', () => { expect(defaultProps.onChange.called).toBe(true); }); it('filters images based on text input', () => { - expect(wrapper.find('img').length).toBeGreaterThan(20); - wrapper.setState({ filter: 'time' }); - expect(wrapper.find('img').length).toBeLessThan(10); + expect(wrapper.find('img')).toHaveLength(2); + wrapper.setState({ filter: 'vis2' }); + expect(wrapper.find('img')).toHaveLength(1); }); }); diff --git a/superset/assets/src/addSlice/AddSliceContainer.jsx b/superset/assets/src/addSlice/AddSliceContainer.jsx index f46dbadfee..968856e751 100644 --- a/superset/assets/src/addSlice/AddSliceContainer.jsx +++ b/superset/assets/src/addSlice/AddSliceContainer.jsx @@ -3,7 +3,7 @@ import PropTypes from 'prop-types'; import { Button, Panel } from 'react-bootstrap'; import Select from 'react-virtualized-select'; import { t } from '@superset-ui/translation'; -import visTypes from '../explore/visTypes'; +import getChartMetadataRegistry from '../visualizations/core/registries/ChartMetadataRegistrySingleton'; const propTypes = { datasources: PropTypes.arrayOf(PropTypes.shape({ @@ -17,11 +17,13 @@ const styleSelectWidth = { width: 300 }; export default class AddSliceContainer extends React.PureComponent { constructor(props) { super(props); - const visTypeKeys = Object.keys(visTypes); - this.vizTypeOptions = visTypeKeys.map(vt => ({ label: visTypes[vt].label, value: vt })); this.state = { visType: 'table', }; + + this.changeDatasource = this.changeDatasource.bind(this); + this.changeVisType = this.changeVisType.bind(this); + this.gotoSlice = this.gotoSlice.bind(this); } exploreUrl() { @@ -54,6 +56,12 @@ export default class AddSliceContainer extends React.PureComponent { } render() { + const types = getChartMetadataRegistry().entries() + .map(({ key, value }) => ({ + value: key, + label: value.name, + })); + return (
{t('Create a new chart')}}> @@ -64,7 +72,7 @@ export default class AddSliceContainer extends React.PureComponent { clearable={false} style={styleSelectWidth} name="select-datasource" - onChange={this.changeDatasource.bind(this)} + onChange={this.changeDatasource} options={this.props.datasources} placeholder={t('Choose a datasource')} value={this.state.datasourceValue} @@ -86,8 +94,8 @@ export default class AddSliceContainer extends React.PureComponent { clearable={false} name="select-vis-type" style={styleSelectWidth} - onChange={this.changeVisType.bind(this)} - options={this.vizTypeOptions} + onChange={this.changeVisType} + options={types} placeholder={t('Choose a visualization type')} value={this.state.visType} /> @@ -96,7 +104,7 @@ export default class AddSliceContainer extends React.PureComponent { diff --git a/superset/assets/src/addSlice/App.jsx b/superset/assets/src/addSlice/App.jsx index 34154a9b21..96122ec43c 100644 --- a/superset/assets/src/addSlice/App.jsx +++ b/superset/assets/src/addSlice/App.jsx @@ -1,9 +1,11 @@ import React from 'react'; import { hot } from 'react-hot-loader'; import setupApp from '../setup/setupApp'; +import setupPlugins from '../setup/setupPlugins'; import AddSliceContainer from './AddSliceContainer'; setupApp(); +setupPlugins(); const addSliceContainer = document.getElementById('js-add-slice-container'); const bootstrapData = JSON.parse(addSliceContainer.getAttribute('data-bootstrap')); diff --git a/superset/assets/src/explore/components/controls/VizTypeControl.css b/superset/assets/src/explore/components/controls/VizTypeControl.css new file mode 100644 index 0000000000..d2ebbccdf4 --- /dev/null +++ b/superset/assets/src/explore/components/controls/VizTypeControl.css @@ -0,0 +1,34 @@ +.viztype-label { + margin-top: 10px; + text-align: center; + font-size: 14px; +} + +.viztype-selector-container { + cursor: pointer; + margin-top: 10px; + margin-bottom: 10px; +} + +.viztype-selector-container:hover img { + border: 1px solid #aaa; +} + +.viztype-selector-container.selected { + cursor: not-allowed; + opacity: 1; +} + +.viztype-selector-container.selected img { + border: 1px solid #333; +} + +.viztype-selector-container img { + border: 1px solid #ddd; + border-radius: 4px; + transition: border-color .2s; +} + +.viztype-control-search-box { + margin-bottom: 10px; +} diff --git a/superset/assets/src/explore/components/controls/VizTypeControl.jsx b/superset/assets/src/explore/components/controls/VizTypeControl.jsx index 113d3c55c5..2f92242eac 100644 --- a/superset/assets/src/explore/components/controls/VizTypeControl.jsx +++ b/superset/assets/src/explore/components/controls/VizTypeControl.jsx @@ -5,8 +5,9 @@ import { Tooltip } from 'react-bootstrap'; import { t } from '@superset-ui/translation'; -import visTypes from '../../visTypes'; +import getChartMetadataRegistry from '../../../visualizations/core/registries/ChartMetadataRegistrySingleton'; import ControlHeader from '../ControlHeader'; +import './VizTypeControl.css'; const propTypes = { description: PropTypes.string, @@ -50,37 +51,47 @@ export default class VizTypeControl extends React.PureComponent { this.searchRef.focus(); } } - renderVizType(vizType) { - const vt = vizType; + renderItem(entry) { + const { value } = this.props; + const { key, value: type } = entry; + const isSelected = key === value; return (
{`viz-type-${vt}`}
- {visTypes[vt].label} + {type.name}
); } render() { - const filter = this.state.filter; - const filteredVizTypes = Object.keys(visTypes) - .filter(vt => filter.length === 0 || visTypes[vt].label.toLowerCase().includes(filter)); + const { filter, showModal } = this.state; + const { value } = this.props; + + const registry = getChartMetadataRegistry(); + + const types = registry.entries(); + const filteredTypes = filter.length > 0 + ? types.filter(type => type.value.name.toLowerCase().includes(filter)) + : types; + + const selectedType = registry.get(value); const imgPerRow = 6; const rows = []; - for (let i = 0; i <= filteredVizTypes.length; i += imgPerRow) { + for (let i = 0; i <= filteredTypes.length; i += imgPerRow) { rows.push( - {filteredVizTypes.slice(i, i + imgPerRow).map(vt => ( - - {this.renderVizType(vt)} + {filteredTypes.slice(i, i + imgPerRow).map(entry => ( + + {this.renderItem(entry)} ))} ); @@ -97,11 +108,11 @@ export default class VizTypeControl extends React.PureComponent { } > {t('Select a visualization type')} -
+
{ this.setSearchRef(ref); }} + inputRef={this.setSearchRef} type="text" - bsSize="sm" - value={this.state.filter} - placeholder={t('Search / Filter')} + bsSize="md" + value={filter} + placeholder={t('Search')} onChange={this.changeSearch} />
{rows} -
); +
+ ); } } diff --git a/superset/assets/src/explore/main.css b/superset/assets/src/explore/main.css index c228ad13dd..be3a5144c6 100644 --- a/superset/assets/src/explore/main.css +++ b/superset/assets/src/explore/main.css @@ -47,32 +47,6 @@ background-color: transparent !important; } -.viztype-label { - text-align: center; - font-size: 12px; -} - -.viztype-selector-container { - cursor: pointer; - margin-top: 10px; - margin-bottom: 10px; - padding: 5px; - border: 1px solid #aaa; -} - -.viztype-selector-container:hover { - border: 1px solid #000; -} - -.viztype-selector-container.selected { - cursor: not-allowed; - opacity: 0.5; -} -.viztype-selector-container.selected { - cursor: not-allowed; - border: 1px solid #aaa; -} - .color-scheme-container { list-style: none; margin: 0;