mirror of
https://github.com/elyby/accounts-frontend.git
synced 2025-05-31 14:11:58 +05:30
В первом приближении заинтегрировался с беком
This commit is contained in:
58
src/components/user/User.js
Normal file
58
src/components/user/User.js
Normal file
@@ -0,0 +1,58 @@
|
||||
import { PropTypes } from 'react';
|
||||
|
||||
const KEY_USER = 'user';
|
||||
|
||||
export default class User {
|
||||
/**
|
||||
* @param {Object|string|undefined} data plain object or jwt token or empty to load from storage
|
||||
*
|
||||
* @return {User}
|
||||
*/
|
||||
constructor(data) {
|
||||
if (!data) {
|
||||
return this.load();
|
||||
}
|
||||
|
||||
// TODO: strict value types validation
|
||||
|
||||
const defaults = {
|
||||
id: null,
|
||||
token: '',
|
||||
username: '',
|
||||
email: '',
|
||||
avatar: '',
|
||||
isGuest: true,
|
||||
isActive: false
|
||||
};
|
||||
|
||||
const user = Object.keys(defaults).reduce((user, key) => {
|
||||
if (data.hasOwnProperty(key)) {
|
||||
user[key] = data[key];
|
||||
}
|
||||
|
||||
return user;
|
||||
}, defaults);
|
||||
|
||||
localStorage.setItem(KEY_USER, JSON.stringify(user));
|
||||
|
||||
return user;
|
||||
}
|
||||
|
||||
load() {
|
||||
try {
|
||||
return new User(JSON.parse(localStorage.getItem(KEY_USER)));
|
||||
} catch (error) {
|
||||
return new User({isGuest: true});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export const userShape = PropTypes.shape({
|
||||
id: PropTypes.number,
|
||||
token: PropTypes.string,
|
||||
username: PropTypes.string,
|
||||
email: PropTypes.string,
|
||||
avatar: PropTypes.string,
|
||||
isGuest: PropTypes.bool.isRequired,
|
||||
isActive: PropTypes.bool.isRequired
|
||||
});
|
||||
Reference in New Issue
Block a user