diff --git a/frontend/src/metabase/dashboard/components/DashboardGrid.jsx b/frontend/src/metabase/dashboard/components/DashboardGrid.jsx index d219d5b65c15621541fc9405f4f9217624c591f2..f80c947a1f0a640c1fb57e163db4360f22eafaf0 100644 --- a/frontend/src/metabase/dashboard/components/DashboardGrid.jsx +++ b/frontend/src/metabase/dashboard/components/DashboardGrid.jsx @@ -190,10 +190,10 @@ export default class DashboardGrid extends Component { this.setState({ addSeriesModalDashCard: dc }); } - onUpdateVisualizationSetting(dc, setting, value) { + onUpdateVisualizationSetting(dc, key, value) { this.props.setDashCardVisualizationSetting({ id: dc.id, - setting: setting, + key: key, value: value }); } diff --git a/frontend/src/metabase/dashboard/dashboard.js b/frontend/src/metabase/dashboard/dashboard.js index b4e593b2c5319fc638da1c2151ff29909b1fc1b2..254865b134f8c5cc5ede58f96619cb395c1ee98a 100644 --- a/frontend/src/metabase/dashboard/dashboard.js +++ b/frontend/src/metabase/dashboard/dashboard.js @@ -357,9 +357,9 @@ const dashcards = handleActions({ }) }, [SET_DASHCARD_VISUALIZATION_SETTING]: { - next: (state, { payload: { id, setting, value } }) => + next: (state, { payload: { id, key, value } }) => i.chain(state) - .assocIn([id, "card", "visualization_settings"].concat(setting), value) + .assocIn([id, "card", "visualization_settings", key], value) .assocIn([id, "card", "isDirty"], true) .value() }, diff --git a/frontend/src/metabase/query_builder/actions.js b/frontend/src/metabase/query_builder/actions.js index ee60cb5b4743cc14eda221d49fad137fd6e1a5da..965bc60135a0d797284a978acb889ec56404f08c 100644 --- a/frontend/src/metabase/query_builder/actions.js +++ b/frontend/src/metabase/query_builder/actions.js @@ -340,10 +340,10 @@ export const setCardVisualization = createThunkAction(SET_CARD_VISUALIZATION, (d }); export const SET_CARD_VISUALIZATION_SETTING = "SET_CARD_VISUALIZATION_SETTING"; -export const setCardVisualizationSetting = createThunkAction(SET_CARD_VISUALIZATION_SETTING, (path, value) => { +export const setCardVisualizationSetting = createThunkAction(SET_CARD_VISUALIZATION_SETTING, (key, value) => { return (dispatch, getState) => { const { qb: { card, uiControls } } = getState(); - let updatedCard = updateVisualizationSettings(card, uiControls.isEditing, card.display, i.assocIn(card.visualization_settings, path, value)); + let updatedCard = updateVisualizationSettings(card, uiControls.isEditing, card.display, i.assocIn(card.visualization_settings, key, value)); dispatch(updateUrl(updatedCard, true)); return updatedCard; }; diff --git a/frontend/src/metabase/visualizations/PinMap.jsx b/frontend/src/metabase/visualizations/PinMap.jsx index ddb7460caddf9f6c191ada78a73c8fe1a8d882cc..0d3acc9200f0a979b19a606c4020d18969563185 100644 --- a/frontend/src/metabase/visualizations/PinMap.jsx +++ b/frontend/src/metabase/visualizations/PinMap.jsx @@ -35,13 +35,13 @@ export default class PinMap extends Component { updateSettings() { if (this.state.lat != null) { - this.props.onUpdateVisualizationSetting(["map", "center_latitude"], this.state.lat); + this.props.onUpdateVisualizationSetting("map.center_latitude", this.state.lat); } if (this.state.lon != null) { - this.props.onUpdateVisualizationSetting(["map", "center_longitude"], this.state.lon); + this.props.onUpdateVisualizationSetting("map.center_longitude", this.state.lon); } if (this.state.zoom != null) { - this.props.onUpdateVisualizationSetting(["map", "zoom"], this.state.zoom); + this.props.onUpdateVisualizationSetting("map.zoom", this.state.zoom); } this.setState({ lat: null, lon: null, zoom: null }); } diff --git a/frontend/src/metabase/visualizations/components/ChartSettings.jsx b/frontend/src/metabase/visualizations/components/ChartSettings.jsx index e2a48cec5c475ae65b1b564d083fb90df1d84589..942e434919bc8b9f67cee640369a7ef7344b348b 100644 --- a/frontend/src/metabase/visualizations/components/ChartSettings.jsx +++ b/frontend/src/metabase/visualizations/components/ChartSettings.jsx @@ -48,9 +48,9 @@ class ChartSettings extends Component { this.setState({ currentTab: tab }); } - onUpdateVisualizationSetting = (path, value) => { + onUpdateVisualizationSetting = (key, value) => { this.onChangeSettings({ - [path.join(".")]: value + [key]: value }); } diff --git a/frontend/src/metabase/visualizations/components/LineAreaBarChart.jsx b/frontend/src/metabase/visualizations/components/LineAreaBarChart.jsx index 5b3d34437b153f76095daf71e2f62afe13441e03..b58e4cf9a3081955c7226877f1b5b7ada4ceb517 100644 --- a/frontend/src/metabase/visualizations/components/LineAreaBarChart.jsx +++ b/frontend/src/metabase/visualizations/components/LineAreaBarChart.jsx @@ -59,7 +59,6 @@ export default class LineAreaBarChart extends Component { super(props, context); this.state = { series: null, - isMultiseries: null }; } @@ -88,7 +87,6 @@ export default class LineAreaBarChart extends Component { let { series, settings } = newProps; let nextState = { series: series, - isMultiseries: false }; let s = series && series.length === 1 && series[0]; if (s && s.data) { @@ -109,7 +107,6 @@ export default class LineAreaBarChart extends Component { const rowIndexes = [dimensionIndex].concat(metricIndexes); const seriesGroup = dataset.dimension(d => d[seriesIndex]).group() - nextState.isMultiseries = true; nextState.series = seriesGroup.reduce( (p, v) => p.concat([rowIndexes.map(i => v[i])]), (p, v) => null, () => [] @@ -127,7 +124,6 @@ export default class LineAreaBarChart extends Component { } else { const dimensionIndex = dimensionIndexes[0]; - nextState.isMultiseries = metrics.length > 1; nextState.series = metricIndexes.map(metricIndex => { const col = cols[metricIndex]; return { @@ -213,22 +209,26 @@ export default class LineAreaBarChart extends Component { render() { const { hovered, isDashboard, onAddSeries, onRemoveSeries, actionButtons } = this.props; - const { series, isMultiseries } = this.state; + const { series } = this.state; const card = this.props.series[0].card; let settings = this.getSettings(); + let isMultiseries = this.state.series.length > 1; + let isDashboardMultiseries = this.props.series.length > 1; + let isCardMultiseries = isMultiseries && !isDashboardMultiseries; + return ( <div className={cx("flex flex-column p1", this.getHoverClasses(), this.props.className)}> - { (isDashboard && isMultiseries) && + { (isDashboard && !isDashboardMultiseries) && <a href={card.id && Urls.card(card.id)} className="Card-title pt1 px1 flex-no-shrink no-decoration h3 text-bold fullscreen-night-text fullscreen-normal-text" style={{fontSize: '1em'}}>{card.name}</a> } - { (isDashboard || isMultiseries) && + { isMultiseries && <LegendHeader className="flex-no-shrink" series={series} - onAddSeries={isMultiseries ? undefined : onAddSeries} + onAddSeries={isCardMultiseries ? undefined : onAddSeries} onRemoveSeries={onRemoveSeries} actionButtons={actionButtons} hovered={hovered}