Skip to content
Snippets Groups Projects
Commit 84907117 authored by Atte Keinänen's avatar Atte Keinänen
Browse files

Persist default viz settings while saving question

parent cf0f0feb
No related branches found
No related tags found
No related merge requests found
......@@ -633,9 +633,13 @@ export const updateQuestion = (newQuestion, { doNotClearNameAndId } = {}) => {
export const API_CREATE_QUESTION = "metabase/qb/API_CREATE_QUESTION";
export const apiCreateQuestion = (question) => {
return async (dispatch, getState) => {
// Needed for persisting visualization columns for pulses/alerts, see #6749
const series = getTransformedSeries(getState())
const questionWithVizSettings = series ? getQuestionWithDefaultVisualizationSettings(question, series) : question
let resultsMetadata = getResultsMetadata(getState())
const createdQuestion = await (
question
questionWithVizSettings
.setQuery(question.query().clean())
.setResultsMetadata(resultsMetadata)
.apiCreate()
......@@ -656,9 +660,15 @@ export const apiCreateQuestion = (question) => {
export const API_UPDATE_QUESTION = "metabase/qb/API_UPDATE_QUESTION";
export const apiUpdateQuestion = (question) => {
return async (dispatch, getState) => {
question = question || getQuestion(getState())
// Needed for persisting visualization columns for pulses/alerts, see #6749
const series = getTransformedSeries(getState())
const questionWithVizSettings = series ? getQuestionWithDefaultVisualizationSettings(question, series) : question
let resultsMetadata = getResultsMetadata(getState())
const updatedQuestion = await (
question
questionWithVizSettings
.setQuery(question.query().clean())
.setResultsMetadata(resultsMetadata)
.apiUpdate()
......@@ -1065,8 +1075,6 @@ export const queryCompleted = (card, queryResults) => {
cardDisplay: getDisplayTypeForCard(card, queryResults),
queryResults
})
dispatch(persistDefaultVisualizationSettings())
};
};
......@@ -1076,18 +1084,6 @@ export const queryCompleted = (card, queryResults) => {
*
* Needed for persisting visualization columns for pulses/alerts, see #6749.
*/
export const PERSIST_DEFAULT_VIZ_SETTINGS = "metabase/qb/PERSIST_DEFAULT_VIZ_SETTINGS";
export const persistDefaultVisualizationSettings = () => {
return (dispatch, getState) => {
const question = getQuestion(getState())
const series = getTransformedSeries(getState())
const updatedQuestion = getQuestionWithDefaultVisualizationSettings(question, series)
if (updatedQuestion !== question) dispatch(updateQuestion(updatedQuestion))
dispatch.action(PERSIST_DEFAULT_VIZ_SETTINGS)
}
}
const getQuestionWithDefaultVisualizationSettings = (question, series) => {
const oldVizSettings = question.visualizationSettings()
const newVizSettings = { ...getPersistableDefaultSettings(series), ...oldVizSettings }
......
......@@ -28,6 +28,7 @@ import MetabaseCookies from "metabase/lib/cookies";
import cxs from 'cxs';
import ChannelSetupModal from "metabase/components/ChannelSetupModal";
import ButtonWithStatus from "metabase/components/ButtonWithStatus";
import { apiUpdateQuestion } from "metabase/query_builder/actions";
const getScheduleFromChannel = (channel) =>
_.pick(channel, "schedule_day", "schedule_frame", "schedule_hour", "schedule_type")
......@@ -43,7 +44,7 @@ const classes = cxs ({
hasLoadedChannelInfo: hasLoadedChannelInfoSelector(state),
hasConfiguredAnyChannel: hasConfiguredAnyChannelSelector(state),
hasConfiguredEmailChannel: hasConfiguredEmailChannelSelector(state)
}), { createAlert, fetchPulseFormInput })
}), { createAlert, fetchPulseFormInput, apiUpdateQuestion })
export class CreateAlertModalContent extends Component {
props: {
onCancel: () => void,
......@@ -84,10 +85,14 @@ export class CreateAlertModalContent extends Component {
onAlertChange = (alert) => this.setState({ alert })
onCreateAlert = async () => {
const { createAlert, onAlertCreated } = this.props
const { createAlert, apiUpdateQuestion, onAlertCreated } = this.props
const { alert } = this.state
// Resave the question here (for persisting the x/y axes; see #6749)
await apiUpdateQuestion()
await createAlert(alert)
// should close be triggered manually like this
// but the creation notification would appear automatically ...?
// OR should the modal visibility be part of QB redux state
......@@ -498,7 +503,7 @@ export class AlertEditChannels extends Component {
// TODO: Not sure how to translate text with formatting properly
@connect((state) => ({ question: getQuestion(state), visualizationSettings: getVisualizationSettings(state) }))
class RawDataAlertTip extends Component {
export class RawDataAlertTip extends Component {
render() {
const display = this.props.question.display()
const vizSettings = this.props.visualizationSettings
......
......@@ -24,7 +24,8 @@ import {
AlertEducationalScreen,
AlertSettingToggle,
CreateAlertModalContent,
RawDataAlertTip, UpdateAlertModalContent
RawDataAlertTip,
UpdateAlertModalContent
} from "metabase/query_builder/components/AlertModals";
import Button from "metabase/components/Button";
import {
......
......@@ -137,6 +137,7 @@ describe("parameters", () => {
expect(fieldFilterVarType.text()).toBe("Field Filter");
click(fieldFilterVarType);
// there's an async error here for some reason
await store.waitForActions([UPDATE_TEMPLATE_TAG]);
await delay(500);
......@@ -151,6 +152,7 @@ describe("parameters", () => {
// close the template variable sidebar
click(tagEditorSidebar.find(".Icon-close"));
// test without the parameter
click(app.find(RunButton));
await store.waitForActions([RUN_QUERY, QUERY_COMPLETED])
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment