react-hooks-toolbox
Version:
React hooks toolbox
51 lines (45 loc) • 2.07 kB
JavaScript
import { useEffect, useCallback, useReducer } from "react";
import { change_gapi_status, change_signed_status } from "./actions";
import { reducer } from "./reducers";
var initState = { gapiStatus: "init", gapiError: null, signed: false, userProfile: null };
export function useGoogleApiInit(initConf) {
var _useReducer = useReducer(reducer, initState),
state = _useReducer[0],
dispatch = _useReducer[1];
var handleInit = useCallback(function () {
var script = document.createElement("script");
script.src = "https://apis.google.com/js/api.js";
document.body.appendChild(script);
script.onerror = function () {
dispatch(change_gapi_status("error", "Failed to load api.js script. "));
};
script.onload = function () {
var gapi = window["gapi"];
gapi.load("client:auth2", {
callback: function callback() {
// Handle gapi.client initialization.
gapi.client.init(initConf).then(function () {
dispatch(change_gapi_status("success"));
// Listen for sign-in state changes.
gapi.auth2.getAuthInstance().isSignedIn.listen(function (signed) {
return dispatch(change_signed_status(signed));
});
// Handle the initial sign-in state.
dispatch(change_signed_status(gapi.auth2.getAuthInstance().isSignedIn.get()));
}, function (error) {
dispatch(change_gapi_status("error", error));
});
},
onerror: function onerror(error) {
// Handle loading gapiError.
dispatch(change_gapi_status("error", error));
}
});
};
}, [initConf]);
useEffect(function () {
dispatch(change_gapi_status("loading"));
handleInit();
}, [handleInit]);
return state;
}