diff --git a/dev/App.js b/dev/App.js index 85dc35141..dca15dc52 100644 --- a/dev/App.js +++ b/dev/App.js @@ -12,6 +12,7 @@ import Inspector from 'react-inspector'; import tips from './tips'; import 'brace/mode/json'; import 'brace/theme/textmate'; +import {categoryLayout, traceTypes, chartCategory} from 'lib/traceTypes'; // https://github.com/plotly/react-chart-editor#mapbox-access-tokens import ACCESS_TOKENS from '../accessTokens'; @@ -41,6 +42,41 @@ const dataSourceOptions = Object.keys(dataSources).map(name => ({ const config = {mapboxAccessToken: ACCESS_TOKENS.MAPBOX, editable: true}; +const traceTypesConfig = { + traces: _ => ([ + { + value: 'scattergl', + icon: 'scatter', + label: _('Scatter'), + }, + { + value: 'bar', + label: _('Bar'), + }, + { + value: 'histogram', + label: _('Histogram'), + }, + { + value: 'table', + label: _('Table'), + }, + { + value: 'pie', + label: _('Pie'), + }, + { + value: 'box', + label: _('Box'), + }, + { + value: 'histogram2d', + label: _('Histogram 2D'), + }, + ]), + complex: true +}; + class App extends Component { constructor() { super(); @@ -120,6 +156,8 @@ class App extends Component { debug advancedTraceTypeSelector showFieldTooltips + traceTypesConfig={traceTypesConfig} + useAsDefaultTrace={{type: 'scattergl'}} > diff --git a/src/EditorControls.js b/src/EditorControls.js index 262caeea5..aaf291d57 100644 --- a/src/EditorControls.js +++ b/src/EditorControls.js @@ -118,7 +118,9 @@ class EditorControls extends Component { if (this.props.beforeAddTrace) { this.props.beforeAddTrace(payload); } - graphDiv.data.push({type: 'scatter', mode: 'markers'}); + + graphDiv.data.push(this.props.useAsDefaultTrace); + if (this.props.afterAddTrace) { this.props.afterAddTrace(payload); } @@ -298,6 +300,7 @@ EditorControls.propTypes = { plotly: PropTypes.object, showFieldTooltips: PropTypes.bool, traceTypesConfig: PropTypes.object, + useAsDefaultTrace: PropTypes.object, }; EditorControls.defaultProps = { @@ -308,6 +311,7 @@ EditorControls.defaultProps = { traces: _ => traceTypes(_), complex: true, }, + useAsDefaultTrace: {type: 'scatter', mode: 'markers'}, }; EditorControls.childContextTypes = { diff --git a/src/PlotlyEditor.js b/src/PlotlyEditor.js index cfe0f1fb4..39bf3b308 100644 --- a/src/PlotlyEditor.js +++ b/src/PlotlyEditor.js @@ -26,6 +26,7 @@ class PlotlyEditor extends Component { dictionaries={this.props.dictionaries} showFieldTooltips={this.props.showFieldTooltips} srcConverters={this.props.srcConverters} + useAsDefaultTrace={this.props.useAsDefaultTrace} > {this.props.children} @@ -75,6 +76,7 @@ PlotlyEditor.propTypes = { toSrc: PropTypes.func.isRequired, fromSrc: PropTypes.func.isRequired, }), + useAsDefaultTrace: PropTypes.object, }; PlotlyEditor.defaultProps = { diff --git a/src/components/widgets/TraceTypeSelector.js b/src/components/widgets/TraceTypeSelector.js index 1c3cf5f07..a6d5f3c48 100644 --- a/src/components/widgets/TraceTypeSelector.js +++ b/src/components/widgets/TraceTypeSelector.js @@ -121,11 +121,53 @@ class TraceTypeSelector extends Component { }); } + renderGrid() { + return
{this.renderCategories()}
; + } + + renderSingleBlock() { + const {fullValue} = this.props; + const { + traceTypesConfig: {traces, complex}, + localize: _, + } = this.context; + + const items = traces(_).map(item => ( + this.selectAndClose(item.value)} + style={{display: 'inline-block'}} + /> + )); + + return ( +
+ {items} +
+ ); + } + render() { - const {localize: _} = this.context; + const { + traceTypesConfig: {categories}, + localize: _, + } = this.context; + return ( -
{this.renderCategories()}
+ {categories ? this.renderGrid() : this.renderSingleBlock()}
); } diff --git a/src/styles/components/widgets/_trace-type-selector.scss b/src/styles/components/widgets/_trace-type-selector.scss index 0a65f2234..0bb1a2eec 100644 --- a/src/styles/components/widgets/_trace-type-selector.scss +++ b/src/styles/components/widgets/_trace-type-selector.scss @@ -175,6 +175,7 @@ $item-size: 90px; color: var(--color-text-base); text-transform: capitalize; font-size: var(--font-size-small); + text-align: center; } }