accounts-frontend/src/components/user/reducer.js

81 lines
1.8 KiB
JavaScript
Raw Normal View History

// @flow
2016-05-20 01:11:43 +05:30
import { UPDATE, SET, CHANGE_LANG } from './actions';
export type User = {|
id: ?number,
uuid: ?string,
2017-06-08 23:29:31 +05:30
token: string,
username: string,
email: string,
avatar: string,
lang: string,
isGuest: bool,
isActive: bool,
isOtpEnabled: bool,
passwordChangedAt: number,
2017-06-08 23:29:31 +05:30
hasMojangUsernameCollision: bool,
maskedEmail?: string,
shouldAcceptRules?: bool,
|};
2017-06-08 23:29:31 +05:30
const defaults: User = {
id: null,
uuid: null,
username: '',
token: '',
email: '',
// will contain user's email or masked email
// (e.g. ex**ple@em*il.c**) depending on what information user have already provided
maskedEmail: '',
avatar: '',
lang: '',
isActive: false,
isOtpEnabled: false,
shouldAcceptRules: false, // whether user need to review updated rules
passwordChangedAt: 0,
hasMojangUsernameCollision: false,
// frontend specific attributes
isGuest: true
};
export default function user(
state: User = defaults,
{type, payload}: {type: string, payload: ?Object}
) {
switch (type) {
2016-05-20 01:11:43 +05:30
case CHANGE_LANG:
if (!payload || !payload.lang) {
throw new Error('payload.lang is required for user reducer');
}
return {
2016-05-20 01:11:43 +05:30
...state,
lang: payload.lang
};
2016-05-20 01:11:43 +05:30
case UPDATE:
if (!payload) {
throw new Error('payload is required for user reducer');
}
return {
...state,
...payload
};
case SET:
payload = payload || {};
return {
...defaults,
...payload
};
default:
return state || {
...defaults
};
}
}