From 040d49d61292984ac709abd51379994f4ab9cb73 Mon Sep 17 00:00:00 2001 From: Berkeley Martinez Date: Fri, 26 Jan 2018 19:15:23 -0800 Subject: [PATCH] feat(Flash): Should reflect express style --- common/app/Flash/Flash.jsx | 8 +++--- common/app/Flash/redux/index.js | 9 +++---- common/app/Flash/redux/utils.js | 43 +++++++++++++++++++++++++-------- 3 files changed, 41 insertions(+), 19 deletions(-) diff --git a/common/app/Flash/Flash.jsx b/common/app/Flash/Flash.jsx index 52a549b0c7..6582e890ed 100644 --- a/common/app/Flash/Flash.jsx +++ b/common/app/Flash/Flash.jsx @@ -11,19 +11,19 @@ import { } from './redux'; const propTypes = { - alertType: PropTypes.oneOf(Object.keys(alertTypes)), clickOnClose: PropTypes.func.isRequired, - message: PropTypes.string + message: PropTypes.string, + type: PropTypes.oneOf(Object.keys(alertTypes)) }; const mapStateToProps = latestMessageSelector; const mapDispatchToProps = { clickOnClose }; -export function Flash({ alertType, clickOnClose, message }) { +export function Flash({ type, clickOnClose, message }) { if (!message) { return null; } return ( -
+

{ message } diff --git a/common/app/Flash/redux/index.js b/common/app/Flash/redux/index.js index 3b0595654c..cd217b8c1e 100644 --- a/common/app/Flash/redux/index.js +++ b/common/app/Flash/redux/index.js @@ -11,6 +11,8 @@ import * as utils from './utils.js'; import getMessagesEpic from './get-messages-epic.js'; import ns from '../ns.json'; +// export all the utils +export { utils }; export const epics = [getMessagesEpic]; export const types = createTypes([ 'clickOnClose', @@ -45,13 +47,10 @@ export default composeReducers( ), function metaReducer(state = defaultState, action) { if (utils.isFlashAction(action)) { - const { payload: { alertType, message } } = utils.getFlashAction(action); + const { payload } = utils.getFlashAction(action); return [ ...state, - { - alertType: utils.normalizeAlertType(alertType), - message: _.escape(message) - } + ...payload ]; } return state; diff --git a/common/app/Flash/redux/utils.js b/common/app/Flash/redux/utils.js index e3b22dec9f..408ad1bdb2 100644 --- a/common/app/Flash/redux/utils.js +++ b/common/app/Flash/redux/utils.js @@ -9,21 +9,44 @@ export const alertTypes = _.keyBy(_.identity)([ export const normalizeAlertType = alertType => alertTypes[alertType] || 'info'; -export const getFlashAction = _.flow( - _.property('meta'), - _.property('flash') -); - -export const isFlashAction = _.flow( - getFlashAction, - Boolean -); +// interface ExpressFlash { +// [alertType]: [String...] +// } +// interface StackFlash { +// type: AlertType, +// message: String +// } export const expressToStack = _.flow( _.toPairs, _.flatMap(([ type, messages ]) => messages.map(msg => ({ message: msg, - alertType: normalizeAlertType(type) + type: normalizeAlertType(type) }))) ); +export const isExpressFlash = _.flow( + _.keys, + _.every(type => alertTypes[type]) +); + +export const getFlashAction = _.flow( + _.property('meta'), + _.property('flash') +); + +// FlashMessage +// createFlashMetaAction(payload: ExpressFlash|StackFlash +export const createFlashMetaAction = payload => { + if (isExpressFlash(payload)) { + payload = expressToStack(payload); + } else { + payload = [payload]; + } + return { flash: { payload } }; +}; + +export const isFlashAction = _.flow( + getFlashAction, + Boolean +);