11import React from 'react' ;
2+ import Cookies from 'js-cookie' ;
23import { connect } from 'react-redux' ;
34import Promise from 'bluebird' ;
45import AutosizeInput from 'react-input-autosize' ;
@@ -40,26 +41,25 @@ class App extends React.Component {
4041 }
4142
4243 componentDidMount ( ) {
44+ window . signIn = this . signIn . bind ( this ) ;
45+ window . signOut = this . signOut . bind ( this ) ;
46+
4347 this . loadAlgorithm ( this . props . match . params ) ;
4448
45- const { accessToken } = this . props . env ;
46- if ( accessToken ) {
47- GitHubApi . auth ( accessToken )
48- . then ( ( ) => GitHubApi . getUser ( ) )
49- . then ( user => {
50- const { login, avatar_url } = user ;
51- this . props . setUser ( { login, avatar_url } ) ;
52- } )
53- . then ( ( ) => this . loadScratchPapers ( ) ) ;
54- }
49+ const accessToken = Cookies . get ( 'access_token' ) ;
50+ if ( accessToken ) this . signIn ( accessToken ) ;
5551
5652 CategoryApi . getCategories ( )
57- . then ( ( { categories } ) => this . props . setCategories ( categories ) ) ;
53+ . then ( ( { categories } ) => this . props . setCategories ( categories ) )
54+ . catch ( this . props . showErrorToast ) ;
5855
59- tracerManager . setOnError ( error => this . props . showErrorToast ( error . message ) ) ;
56+ tracerManager . setOnError ( error => this . props . showErrorToast ( { name : error . name , message : error . message } ) ) ;
6057 }
6158
6259 componentWillUnmount ( ) {
60+ delete window . signIn ;
61+ delete window . signOut ;
62+
6363 tracerManager . setOnError ( null ) ;
6464 }
6565
@@ -83,6 +83,25 @@ class App extends React.Component {
8383 }
8484 }
8585
86+ signIn ( accessToken ) {
87+ Cookies . set ( 'access_token' , accessToken ) ;
88+ GitHubApi . auth ( accessToken )
89+ . then ( ( ) => GitHubApi . getUser ( ) )
90+ . then ( user => {
91+ const { login, avatar_url } = user ;
92+ this . props . setUser ( { login, avatar_url } ) ;
93+ } )
94+ . then ( ( ) => this . loadScratchPapers ( ) )
95+ . catch ( ( ) => this . signOut ( ) ) ;
96+ }
97+
98+ signOut ( ) {
99+ Cookies . remove ( 'access_token' ) ;
100+ GitHubApi . auth ( undefined )
101+ . then ( ( ) => this . props . setUser ( undefined ) )
102+ . then ( ( ) => this . props . setScratchPapers ( [ ] ) ) ;
103+ }
104+
86105 loadScratchPapers ( ) {
87106 const per_page = 100 ;
88107 const paginateGists = ( page = 1 , scratchPapers = [ ] ) => GitHubApi . listGists ( {
@@ -101,7 +120,9 @@ class App extends React.Component {
101120 return paginateGists ( page + 1 , scratchPapers ) ;
102121 }
103122 } ) ;
104- return paginateGists ( ) . then ( scratchPapers => this . props . setScratchPapers ( scratchPapers ) ) ;
123+ return paginateGists ( )
124+ . then ( scratchPapers => this . props . setScratchPapers ( scratchPapers ) )
125+ . catch ( this . props . showErrorToast ) ;
105126 }
106127
107128 loadAlgorithm ( { categoryKey, algorithmKey, gistId } ) {
0 commit comments