From 179ab17e4ce0b19b9d56708093a852f183937a0d Mon Sep 17 00:00:00 2001 From: Tom Robinson <tlrobinson@gmail.com> Date: Fri, 14 Apr 2017 16:10:41 -0700 Subject: [PATCH] Add 'warnings' support to settings. Implement for email 'corrections' --- frontend/src/metabase/admin/admin.js | 2 ++ .../settings/components/SettingsEmailForm.jsx | 15 +++++++++++---- .../admin/settings/components/SettingsSetting.jsx | 3 +++ frontend/src/metabase/admin/settings/selectors.js | 10 +++++++++- frontend/src/metabase/admin/settings/settings.js | 15 +++++++++++++-- 5 files changed, 38 insertions(+), 7 deletions(-) diff --git a/frontend/src/metabase/admin/admin.js b/frontend/src/metabase/admin/admin.js index 6e8a68eff7d..3fafa57f7ed 100644 --- a/frontend/src/metabase/admin/admin.js +++ b/frontend/src/metabase/admin/admin.js @@ -6,6 +6,7 @@ import people from "metabase/admin/people/people"; import databases from "metabase/admin/databases/database"; import datamodel from "metabase/admin/datamodel/datamodel"; import permissions from "metabase/admin/permissions/permissions"; +import settings from "metabase/admin/settings/settings"; import { combineReducers } from "metabase/lib/redux"; @@ -14,4 +15,5 @@ export default combineReducers({ datamodel, people, permissions, + settings }) diff --git a/frontend/src/metabase/admin/settings/components/SettingsEmailForm.jsx b/frontend/src/metabase/admin/settings/components/SettingsEmailForm.jsx index de3639693cb..a74be885760 100644 --- a/frontend/src/metabase/admin/settings/components/SettingsEmailForm.jsx +++ b/frontend/src/metabase/admin/settings/components/SettingsEmailForm.jsx @@ -31,12 +31,19 @@ export default class SettingsEmailForm extends Component { componentWillMount() { // this gives us an opportunity to load up our formData with any existing values for elements + this.updateFormData(this.props); + } + + componentWillReceiveProps(nextProps) { + this.updateFormData(nextProps); + } + + updateFormData(props) { let formData = {}; - this.props.elements.forEach(function(element) { + for (const element of props.elements) { formData[element.key] = element.value; - }); - - this.setState({formData}); + } + this.setState({ formData }); } componentDidMount() { diff --git a/frontend/src/metabase/admin/settings/components/SettingsSetting.jsx b/frontend/src/metabase/admin/settings/components/SettingsSetting.jsx index 8e5498b759b..998b5a826fc 100644 --- a/frontend/src/metabase/admin/settings/components/SettingsSetting.jsx +++ b/frontend/src/metabase/admin/settings/components/SettingsSetting.jsx @@ -45,6 +45,9 @@ export default class SettingsSetting extends Component { { errorMessage && <div className="text-error text-bold pt1">{errorMessage}</div> } + { setting.warning && + <div className="text-gold text-bold pt1">{setting.warning}</div> + } </li> ); } diff --git a/frontend/src/metabase/admin/settings/selectors.js b/frontend/src/metabase/admin/settings/selectors.js index 7d58874a02b..1303d13df83 100644 --- a/frontend/src/metabase/admin/settings/selectors.js +++ b/frontend/src/metabase/admin/settings/selectors.js @@ -270,7 +270,15 @@ for (const section of SECTIONS) { section.slug = slugify(section.name); } -export const getSettings = state => state.settings.settings; +export const getSettings = createSelector( + state => state.settings.settings, + state => state.admin.settings.warnings, + (settings, warnings) => + settings.map(setting => warnings[setting.key] ? + { ...setting, warning: warnings[setting.key] } : + setting + ) +) export const getSettingValues = createSelector( getSettings, diff --git a/frontend/src/metabase/admin/settings/settings.js b/frontend/src/metabase/admin/settings/settings.js index a8ecc16bccd..cc63d4829c5 100644 --- a/frontend/src/metabase/admin/settings/settings.js +++ b/frontend/src/metabase/admin/settings/settings.js @@ -1,5 +1,5 @@ -import { createThunkAction } from "metabase/lib/redux"; +import { createThunkAction, handleActions, combineReducers } from "metabase/lib/redux"; import { SettingsApi, EmailApi, SlackApi } from "metabase/services"; @@ -36,8 +36,9 @@ export const UPDATE_EMAIL_SETTINGS = "metabase/admin/settings/UPDATE_EMAIL_SETTI export const updateEmailSettings = createThunkAction(UPDATE_EMAIL_SETTINGS, function(settings) { return async function(dispatch, getState) { try { - await EmailApi.updateSettings(settings); + const result = await EmailApi.updateSettings(settings); await dispatch(refreshSiteSettings()); + return result; } catch(error) { console.log("error updating email settings", settings, error); throw error; @@ -76,3 +77,13 @@ export const reloadSettings = createThunkAction(RELOAD_SETTINGS, function() { await dispatch(refreshSiteSettings()); } }); + +// REDUCERS + +export const warnings = handleActions({ + [UPDATE_EMAIL_SETTINGS]: { next: (state, { payload }) => payload["with-corrections"] } +}, {}); + +export default combineReducers({ + warnings +}); -- GitLab