UNPKG

react-hooks-toolbox

Version:

React hooks toolbox

51 lines (45 loc) 2.07 kB
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; }