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
JavaScript
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;