Skip to content

Instantly share code, notes, and snippets.

@cayasso
Created August 24, 2017 16:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cayasso/67523a07b7246bbb273eaeb5eca18f2a to your computer and use it in GitHub Desktop.
Save cayasso/67523a07b7246bbb273eaeb5eca18f2a to your computer and use it in GitHub Desktop.
mobx user store
import { observable, extendObservable } from 'mobx'
import * as storage from '../../utils/local-storage'
import config from '../../config'
import * as api from './api'
const defaults = {
sub: null,
email: null,
mail_verified: null
}
export const user = observable(defaults)
const set = (data) => {
extendObservable(user, data)
return user
}
export const fetch = async () => {
try {
const data = await api.getUser()
return set(data)
} catch(error) {
return { error }
}
}
export const signin = async (credentials) => {
try {
const data = await api.signin(credentials)
return set(data)
} catch(error) {
return { error }
}
}
export const signup = async (credentials) => {
try {
const data = await api.signup(credentials)
return set(data)
} catch(error) {
return { error }
}
}
export const sigout = async () => {
try {
await api.signout()
storage.set('signout', {
time: Date.now(),
sessionId: config.sessionId
})
return set(defaults)
} catch(error) {
return { error }
}
}
export const confirm = async (code) => {
try {
return await api.confirm(code) || {}
} catch(error) {
return { error }
}
}
export const isAuthenticated = () => {
return Boolean(user.email)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment