1
0
mirror of https://github.com/ascribe/onion.git synced 2024-06-24 10:16:29 +02:00
onion/js/stores/user_store.js

81 lines
2.1 KiB
JavaScript

'use strict';
import { alt, altUser, altThirdParty } from '../alt';
import EventActions from '../actions/event_actions';
import UserActions from '../actions/user_actions';
import UserSource from '../sources/user_source';
class UserStore {
constructor() {
this.currentUser = {};
this.userMeta = {
hasLoaded: false,
err: null
};
this.bindActions(UserActions);
this.registerAsync(UserSource);
this.exportPublicMethods({
hasLoaded: this.hasLoaded.bind(this)
});
}
onFetchCurrentUser(invalidateCache) {
if (invalidateCache || !this.getInstance().isLoading()) {
this.getInstance().lookupCurrentUser(invalidateCache);
}
// Prevent alt from sending an empty change event when a request is sent
// off to the source
this.preventDefault();
}
onSuccessFetchCurrentUser({ users: [ user = {} ] = [] }) {
this.userMeta.hasLoaded = true;
this.userMeta.err = null;
if (user.email && user.email !== this.currentUser.email) {
EventActions.userDidAuthenticate(user);
}
this.currentUser = user;
}
onLogoutCurrentUser() {
this.getInstance().performLogoutCurrentUser();
// Prevent alt from sending an empty change event when a request is sent
// off to the source
this.preventDefault();
}
onSuccessLogoutCurrentUser() {
EventActions.userDidLogout();
// Reset all stores back to their initial state
// Don't recycle the whitelabel stores since they're not dependent on login
alt.recycle();
altUser.recycle();
altThirdParty.recycle();
// Since we've just logged out, we can set this store's
// hasLoaded flag back to true as there is no current user.
this.userMeta.hasLoaded = true;
}
onErrorCurrentUser(err) {
console.logGlobal(err);
this.userMeta.hasLoaded = true;
this.userMeta.err = err;
}
hasLoaded() {
return this.userMeta.hasLoaded;
}
}
export default altUser.createStore(UserStore, 'UserStore');