34 lines
988 B
JavaScript
34 lines
988 B
JavaScript
import { Observable } from 'rx';
|
|
import { ofType } from 'redux-epic';
|
|
import {
|
|
types,
|
|
|
|
addUser,
|
|
updateThisUser,
|
|
createErrorObservable,
|
|
showSignIn,
|
|
updateTheme,
|
|
addThemeToBody
|
|
} from './';
|
|
|
|
export default function getUserEpic(actions, { getState }, { services }) {
|
|
return actions::ofType(types.fetchUser)
|
|
.flatMap(() => {
|
|
return services.readService$({ service: 'user' })
|
|
.filter(({ entities, result }) => entities && !!result)
|
|
.flatMap(({ entities, result })=> {
|
|
const user = entities.user[result];
|
|
const isNightMode = user.theme === 'night';
|
|
const actions = [
|
|
addUser(entities),
|
|
updateThisUser(result),
|
|
isNightMode ? updateTheme(user.theme) : null,
|
|
isNightMode ? addThemeToBody(user.theme) : null
|
|
];
|
|
return Observable.from(actions).filter(Boolean);
|
|
})
|
|
.defaultIfEmpty(showSignIn())
|
|
.catch(createErrorObservable);
|
|
});
|
|
}
|