UNPKG

use-google-sheets

Version:

### A React Hook wrapper library for google-sheets-mapper for getting data from Google Sheets API v4

112 lines (104 loc) 2.94 kB
Object.defineProperty(exports, '__esModule', { value: true }); var React = require('react'); var GoogleSheetsMapper = require('google-sheets-mapper'); function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; } function _interopNamespace(e) { if (e && e.__esModule) return e; var n = Object.create(null); if (e) { Object.keys(e).forEach(function (k) { if (k !== 'default') { var d = Object.getOwnPropertyDescriptor(e, k); Object.defineProperty(n, k, d.get ? d : { enumerable: true, get: function () { return e[k]; } }); } }); } n.default = e; return n; } var React__namespace = /*#__PURE__*/_interopNamespace(React); var GoogleSheetsMapper__default = /*#__PURE__*/_interopDefault(GoogleSheetsMapper); const Status = { pending: "pending", success: "success", error: "error" }; const initialState = { status: Status.pending, error: null, data: [] }; function reducer(state, action) { switch(action.type){ case Status.pending: return { ...state, status: Status.pending, error: null }; case Status.success: return { status: Status.success, error: null, data: action.payload }; case Status.error: return { ...state, status: Status.error, error: action.payload }; default: return state; } } const useGoogleSheets = ({ apiKey, sheetId, sheetsOptions = [] })=>{ const [state, dispatch] = React__namespace.useReducer(reducer, initialState); const sheetsRef = React__namespace.useRef(sheetsOptions); React__namespace.useEffect(()=>{ sheetsRef.current = sheetsOptions; }, [ sheetsOptions ]); const fetchData = React__namespace.useCallback(async ()=>{ dispatch({ type: Status.pending }); try { const mappedData = await GoogleSheetsMapper__default.default.fetchGoogleSheetsData({ apiKey, sheetId, sheetsOptions: sheetsRef.current }); dispatch({ type: Status.success, payload: mappedData }); } catch (error) { dispatch({ type: Status.error, payload: error instanceof Error ? error : error }); } }, [ apiKey, sheetId ]); React__namespace.useEffect(()=>{ fetchData(); }, [ fetchData ]); return { status: state.status, loading: state.status === Status.pending, error: state.error, data: state.data, refetch: fetchData }; }; exports.Status = Status; exports.default = useGoogleSheets;