feat(Flash): Should reflect express style
This commit is contained in:
@ -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 (
|
||||
<div className={`${ns}-container bg-${alertType}`}>
|
||||
<div className={`${ns}-container bg-${type}`}>
|
||||
<div className={`${ns}-content`}>
|
||||
<p className={ `${ns}-message` }>
|
||||
{ message }
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
);
|
||||
|
Reference in New Issue
Block a user