Skip to content

Instantly share code, notes, and snippets.

@spac3unit
Forked from ivanov-v/d.js
Created January 20, 2020 20:04
Show Gist options
  • Select an option

  • Save spac3unit/a598ada99b33d63d714e5bb2c7243e39 to your computer and use it in GitHub Desktop.

Select an option

Save spac3unit/a598ada99b33d63d714e5bb2c7243e39 to your computer and use it in GitHub Desktop.
import {createStore, createEvent, createEffect} from 'effector';
import {authService, googleAuthProvider} from '../cloudStore';
const userStateChange = createEvent('userStateChange');
const signIn = createEffect('signIn').use(() =>
authService.signInWithPopup(googleAuthProvider)
);
const signOut = createEffect('signOut').use(() => authService.signOut());
const $user = createStore(null);
const $loginError = createStore(null);
const $isUserUpdating = createStore(false);
$user.on(userStateChange, (_, currentUser) => currentUser);
authService.onAuthStateChanged(userStateChange);
$isUserUpdating
.reset(signIn.done)
.reset(signIn.fail)
.reset(signOut.done)
.reset(signOut.fail)
.on(signIn, () => true)
.on(signOut, () => true);
const $isAuth = $user.map(Boolean);
export const userModel = {
effects: {
signIn,
signOut,
},
stores: {
$user,
$isAuth,
$isUserUpdating,
},
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment