@@ -2,61 +2,82 @@ import loadScript from "load-script"
22import { store } from "./wrapRootElement"
33
44export const onInitialClientRender = ( ) => {
5- loadScript ( `https://apis.google.com/js/api.js` , err => {
6- if ( err ) {
7- console . error ( "Could not load gapi" )
8- return
9- }
105
11- var SCOPES = [ "https://www.googleapis.com/auth/analytics.readonly" ]
6+ const gapiPromise = new Promise ( ( resolve , reject ) => {
7+ loadScript ( "https://apis.google.com/js/api.js" , err => {
8+ if ( err ) {
9+ reject ( err )
10+ } else {
11+ window . gapi . load ( "client" , ( ) => {
12+ resolve ( window . gapi )
13+ } )
14+ }
15+ } )
16+ } )
17+
18+ const gisPromise = new Promise ( ( resolve , reject ) => {
19+ loadScript ( "https://accounts.google.com/gsi/client" , err => {
20+ if ( err ) {
21+ reject ( err )
22+ } else resolve ( window . google )
23+ } )
24+ } )
25+
26+ Promise . all ( [ gapiPromise , gisPromise ] )
27+ . then ( ( [ gapi , google ] ) => {
28+ const SCOPES = [ "https://www.googleapis.com/auth/analytics.readonly" ]
29+ const clientId = process . env . GAPI_CLIENT_ID
1230
13- const clientId = process . env . GAPI_CLIENT_ID
31+ if ( ! clientId ) {
32+ console . error (
33+ "GAPI_CLIENT_ID is not defined. Please check your .env file."
34+ )
35+ store . dispatch ( { type : "gapiStatus" , status : "cannot initialize" } )
36+ return
37+ }
1438
15- // TODO - Remove :analytics and replace it with the discovery document.
16- window . gapi . load ( "client:auth2:analytics" , ( ) => {
1739 Promise . all ( [
18- window . gapi . client . load (
19- "https://analyticsreporting.googleapis.com/$discovery/rest?version=v4"
20- ) ,
21- window . gapi . client . load (
40+ gapi . client . load (
2241 "https://analyticsdata.googleapis.com/$discovery/rest"
2342 ) ,
24- window . gapi . client . load (
43+ gapi . client . load (
2544 "https://analyticsadmin.googleapis.com/$discovery/rest"
2645 ) ,
27- ] ) . then ( ( ) => {
28- window . gapi . client
29- . init ( {
46+ ] )
47+ . then ( ( ) => {
48+ console . log ( "Initializing token client..." )
49+ // Replace gapi.auth2.init() with google.accounts.oauth2.initTokenClient()
50+ const tokenClient = google . accounts . oauth2 . initTokenClient ( {
51+ client_id : clientId ,
3052 scope : SCOPES . join ( " " ) ,
31- clientId,
32- } )
33- . then ( ( ) => {
34- store . dispatch ( { type : "setGapi" , gapi : window . gapi } )
35- const user = window . gapi . auth2 . getAuthInstance ( ) . currentUser . get ( )
36- store . dispatch ( {
37- type : "setUser" ,
38- user : user . isSignedIn ( ) ? user : undefined ,
39- } )
40- window . gapi . auth2 . getAuthInstance ( ) . currentUser . listen ( user => {
41- store . dispatch ( {
42- type : "setUser" ,
43- user : user . isSignedIn ( ) ? user : undefined ,
44- } )
45- } )
46- } )
47- . catch ( e => {
48- store . dispatch ( { type : "setGapi" , gapi : window . gapi } )
49- store . dispatch ( {
50- type : "setUser" ,
51- user : undefined ,
52- } )
53- store . dispatch ( {
54- type : "gapiStatus" ,
55- status : "cannot initialize" ,
56- } )
57- console . error ( e )
53+ callback : tokenResponse => {
54+ console . log ( "onInitialClientRender: callback invoked" , tokenResponse )
55+ if ( tokenResponse && tokenResponse . access_token ) {
56+ gapi . client . setToken ( tokenResponse . access_token )
57+ console . log ( "onInitialClientRender: setUser" , tokenResponse ) ;
58+ store . dispatch ( { type : "setUser" , user : tokenResponse } )
59+ } else {
60+ console . error ( "onInitialClientRender: tokenResponse did not contain access_token." , tokenResponse ) ;
61+ store . dispatch ( { type : "setUser" , user : undefined } )
62+ }
63+ } , error_callback : ( error ) => {
64+ console . error ( "GIS Error:" , error ) ;
65+ } ,
5866 } )
59- } , console . error )
67+
68+ store . dispatch ( { type : "setGapi" , gapi } )
69+ store . dispatch ( { type : "gapiStatus" , status : "initialized" } )
70+ store . dispatch ( { type : "setGoogle" , google } )
71+ store . dispatch ( { type : "setTokenClient" , tokenClient } )
72+ } )
73+ . catch ( e => {
74+ store . dispatch ( { type : "setGapi" , gapi } )
75+ store . dispatch ( { type : "setUser" , user : undefined } )
76+ store . dispatch ( { type : "gapiStatus" , status : "cannot initialize" } )
77+ console . error ( e )
78+ } )
79+ } )
80+ . catch ( e => {
81+ console . error ( e )
6082 } )
61- } )
6283}
0 commit comments