'use strict'; import { alt, altWhitelabel, 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 alt.recycle(); altWhitelabel.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');