From 5b6986d6550e095e3a18fb60b95b0cdffee8eede Mon Sep 17 00:00:00 2001 From: Riku Rouvila Date: Sat, 26 Aug 2017 20:33:30 +0100 Subject: [PATCH] save user asynchronously --- src/UserCreator/actions.js | 10 ++++++++++ src/UserCreator/reducer.js | 16 ++++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/UserCreator/actions.js b/src/UserCreator/actions.js index cbdccdf..cf02a3d 100644 --- a/src/UserCreator/actions.js +++ b/src/UserCreator/actions.js @@ -7,6 +7,16 @@ export function updateNameField(name) { } export const CREATE_USER = "USER_CREATOR/CREATE_USER"; + export function createUser() { return { type: CREATE_USER }; } + +export const USER_SAVED = "USER_CREATOR/USER_SAVED"; +export function userSaved(user) { + return { type: USER_SAVED, payload: user }; +} + +export function saveUser(user) { + return Promise.resolve(user); +} diff --git a/src/UserCreator/reducer.js b/src/UserCreator/reducer.js index 8fa9701..8bd10d6 100644 --- a/src/UserCreator/reducer.js +++ b/src/UserCreator/reducer.js @@ -1,7 +1,8 @@ import { loop, Cmd } from "redux-loop"; -import { CREATE_USER, UPDATE_NAME_FIELD } from "./actions"; +import { CREATE_USER, UPDATE_NAME_FIELD, USER_SAVED, saveUser, userSaved } from "./actions"; import { globalAction } from "redux-subspace"; + import { userCreated } from "../state/users"; const initialState = { @@ -12,8 +13,19 @@ export default function(state = initialState, action) { switch (action.type) { case UPDATE_NAME_FIELD: return { ...state, name: action.payload }; + + case USER_SAVED: + return loop(state, Cmd.action(globalAction(userCreated(action.payload)))); + case CREATE_USER: - return loop(state, Cmd.action(globalAction(userCreated(state)))); + return loop( + state, + Cmd.run(saveUser, { + successActionCreator: userSaved, + args: [state] + }) + ); + default: return state; }