UNPKG

react-onegraph

Version:
93 lines (77 loc) 1.97 kB
import React, {Component, createContext} from 'react'; import OneGraphAuth from 'onegraph-auth'; const AuthContext = createContext(); class AuthProvider extends Component { state = { auth: this.props.auth || new OneGraphAuth({ appId: this.props.appId, }), status: {}, headers: {}, }; componentDidMount() { const {auth} = this.state; auth.servicesStatus().then(status => this.setState({ headers: auth.authHeaders(), status: Object.keys(status).reduce((out, service) => { out[service] = status[service].isLoggedIn; return out; }, {}), auth, }), ); } login = (service, callback) => { const {auth, status} = this.state; if (auth) { auth.login(service).then(() => { auth.isLoggedIn(service).then(isLoggedIn => { callback && callback(isLoggedIn); this.setState({ status: { ...status, [service]: isLoggedIn, }, headers: auth.authHeaders(), }); }); }); } }; logout = (service, callback) => { const {auth, status} = this.state; auth.logout(service).then(() => { auth.isLoggedIn(service).then(isLoggedIn => { callback && callback(isLoggedIn); this.setState({ status: { ...status, [service]: isLoggedIn, }, headers: auth.authHeaders(), }); }); }); }; render() { const {appId} = this.props; const {status, headers} = this.state; const authInterface = { status, headers, login: this.login, logout: this.logout, appId, }; return ( <AuthContext.Provider value={authInterface}> {this.props.children} </AuthContext.Provider> ); } } const AuthConsumer = AuthContext.Consumer; export {AuthContext, AuthConsumer, AuthProvider};