feat(Flash): Should reflect express style
This commit is contained in:
@ -11,19 +11,19 @@ import {
|
|||||||
} from './redux';
|
} from './redux';
|
||||||
|
|
||||||
const propTypes = {
|
const propTypes = {
|
||||||
alertType: PropTypes.oneOf(Object.keys(alertTypes)),
|
|
||||||
clickOnClose: PropTypes.func.isRequired,
|
clickOnClose: PropTypes.func.isRequired,
|
||||||
message: PropTypes.string
|
message: PropTypes.string,
|
||||||
|
type: PropTypes.oneOf(Object.keys(alertTypes))
|
||||||
};
|
};
|
||||||
const mapStateToProps = latestMessageSelector;
|
const mapStateToProps = latestMessageSelector;
|
||||||
const mapDispatchToProps = { clickOnClose };
|
const mapDispatchToProps = { clickOnClose };
|
||||||
|
|
||||||
export function Flash({ alertType, clickOnClose, message }) {
|
export function Flash({ type, clickOnClose, message }) {
|
||||||
if (!message) {
|
if (!message) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
<div className={`${ns}-container bg-${alertType}`}>
|
<div className={`${ns}-container bg-${type}`}>
|
||||||
<div className={`${ns}-content`}>
|
<div className={`${ns}-content`}>
|
||||||
<p className={ `${ns}-message` }>
|
<p className={ `${ns}-message` }>
|
||||||
{ message }
|
{ message }
|
||||||
|
@ -11,6 +11,8 @@ import * as utils from './utils.js';
|
|||||||
import getMessagesEpic from './get-messages-epic.js';
|
import getMessagesEpic from './get-messages-epic.js';
|
||||||
import ns from '../ns.json';
|
import ns from '../ns.json';
|
||||||
|
|
||||||
|
// export all the utils
|
||||||
|
export { utils };
|
||||||
export const epics = [getMessagesEpic];
|
export const epics = [getMessagesEpic];
|
||||||
export const types = createTypes([
|
export const types = createTypes([
|
||||||
'clickOnClose',
|
'clickOnClose',
|
||||||
@ -45,13 +47,10 @@ export default composeReducers(
|
|||||||
),
|
),
|
||||||
function metaReducer(state = defaultState, action) {
|
function metaReducer(state = defaultState, action) {
|
||||||
if (utils.isFlashAction(action)) {
|
if (utils.isFlashAction(action)) {
|
||||||
const { payload: { alertType, message } } = utils.getFlashAction(action);
|
const { payload } = utils.getFlashAction(action);
|
||||||
return [
|
return [
|
||||||
...state,
|
...state,
|
||||||
{
|
...payload
|
||||||
alertType: utils.normalizeAlertType(alertType),
|
|
||||||
message: _.escape(message)
|
|
||||||
}
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
return state;
|
return state;
|
||||||
|
@ -9,21 +9,44 @@ export const alertTypes = _.keyBy(_.identity)([
|
|||||||
|
|
||||||
export const normalizeAlertType = alertType => alertTypes[alertType] || 'info';
|
export const normalizeAlertType = alertType => alertTypes[alertType] || 'info';
|
||||||
|
|
||||||
export const getFlashAction = _.flow(
|
// interface ExpressFlash {
|
||||||
_.property('meta'),
|
// [alertType]: [String...]
|
||||||
_.property('flash')
|
// }
|
||||||
);
|
// interface StackFlash {
|
||||||
|
// type: AlertType,
|
||||||
export const isFlashAction = _.flow(
|
// message: String
|
||||||
getFlashAction,
|
// }
|
||||||
Boolean
|
|
||||||
);
|
|
||||||
|
|
||||||
export const expressToStack = _.flow(
|
export const expressToStack = _.flow(
|
||||||
_.toPairs,
|
_.toPairs,
|
||||||
_.flatMap(([ type, messages ]) => messages.map(msg => ({
|
_.flatMap(([ type, messages ]) => messages.map(msg => ({
|
||||||
message: 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