rw-xsm-handlers
Version:
realworld example unified state handlers for XSM
80 lines (67 loc) • 1.96 kB
JavaScript
import agent from './agent';
import * as userHandler from './userHandler';
import * as dh from './dataHandler';
import xsm from 'xsm';
const {set} = xsm;
let inProgress = false;
let errors = undefined;
let values = {
username: '',
email: '',
password: '',
};
export function setUsername(username) {
values.username = username;
set('currentUser', values);
}
export function setEmail(email) {
values.email = email;
set('currentUser', values);
}
export function setPassword(password) {
values.password = password;
set('currentUser', values);
}
export function reset() {
values.username = '';
values.email = '';
values.password = '';
set('currentUser', values);
}
export function login() {
inProgress = true;
errors = undefined;
return agent.Auth.login(values.email, values.password)
.then(({ user }) => {
dh.setToken(user.token)
set('currentUser', user)
})
.then(() => userHandler.pullUser())
.catch((err) => {
errors = err.response && err.response.body && err.response.body.errors;
set('lerrors', errors);
throw err;
})
.finally(() => { inProgress = false; });
}
export function register() {
inProgress = true;
errors = undefined;
return agent.Auth.register(values.username, values.email, values.password)
.then(({ user }) => {
dh.setToken(user.token)
set('currentUser', user)
})
.then(() => userHandler.pullUser())
.catch((err) => {
errors = err.response && err.response.body && err.response.body.errors;
set('rerrors', errors);
throw err;
})
.finally(() => { inProgress = false; });
}
export function logout() {
dh.setToken(undefined);
userHandler.forgetUser();
return Promise.resolve();
}