use-google-sheets
Version:
### A React Hook wrapper library for google-sheets-mapper for getting data from Google Sheets API v4
1 lines • 3.58 kB
Source Map (JSON)
{"version":3,"file":"index.d.cts","sources":["../src/types.ts","../src/index.tsx"],"sourcesContent":["export interface SheetsOption {\n id: string;\n headerRowIndex?: number;\n}\nexport interface UseGoogleSheetsOptions {\n apiKey: string;\n sheetId: string;\n sheetsOptions?: SheetsOption[];\n}\nexport interface Sheet {\n id: string;\n data: Record<string, unknown>[];\n}\n\nexport const Status = {\n pending: \"pending\",\n success: \"success\",\n error: \"error\",\n} as const;\n\nexport type StatusType = (typeof Status)[keyof typeof Status];\n\nexport interface UseGoogleSheetsState {\n status: StatusType;\n /** @deprecated Use `status === \"pending\"` instead */\n loading: boolean;\n error: Error | null;\n data: Sheet[];\n refetch: () => void;\n}\n\nexport type Action =\n | { type: typeof Status.pending }\n | { type: typeof Status.error; payload: UseGoogleSheetsState[\"error\"] }\n | { type: typeof Status.success; payload: UseGoogleSheetsState[\"data\"] };\n","import * as React from \"react\";\nimport GoogleSheetsMapper from \"google-sheets-mapper\";\n\nimport type { UseGoogleSheetsOptions, UseGoogleSheetsState, Action } from \"./types\";\nimport { Status } from \"./types\";\n\nexport type {\n UseGoogleSheetsOptions,\n UseGoogleSheetsState,\n Sheet,\n SheetsOption,\n StatusType,\n} from \"./types\";\nexport { Status } from \"./types\";\n\ninterface InternalState {\n status: UseGoogleSheetsState[\"status\"];\n error: UseGoogleSheetsState[\"error\"];\n data: UseGoogleSheetsState[\"data\"];\n}\n\nconst initialState: InternalState = {\n status: Status.pending,\n error: null,\n data: [],\n};\n\nfunction reducer(state: InternalState, action: Action): InternalState {\n switch (action.type) {\n case Status.pending:\n return { ...state, status: Status.pending, error: null };\n case Status.success:\n return { status: Status.success, error: null, data: action.payload };\n case Status.error:\n return { ...state, status: Status.error, error: action.payload };\n default:\n return state;\n }\n}\n\nconst useGoogleSheets = ({\n apiKey,\n sheetId,\n sheetsOptions = [],\n}: UseGoogleSheetsOptions): UseGoogleSheetsState => {\n const [state, dispatch] = React.useReducer(reducer, initialState);\n const sheetsRef = React.useRef(sheetsOptions);\n\n React.useEffect(() => {\n sheetsRef.current = sheetsOptions;\n }, [sheetsOptions]);\n\n const fetchData = React.useCallback(async () => {\n dispatch({ type: Status.pending });\n try {\n const mappedData = await GoogleSheetsMapper.fetchGoogleSheetsData({\n apiKey,\n sheetId,\n sheetsOptions: sheetsRef.current,\n });\n\n dispatch({ type: Status.success, payload: mappedData });\n } catch (error) {\n dispatch({\n type: Status.error,\n payload: error instanceof Error ? error : (error as UseGoogleSheetsState[\"error\"]),\n });\n }\n }, [apiKey, sheetId]);\n\n React.useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return {\n status: state.status,\n loading: state.status === Status.pending,\n error: state.error,\n data: state.data,\n refetch: fetchData,\n };\n};\n\nexport default useGoogleSheets;\n"],"names":[],"mappings":"AAAO,UAAA,YAAA;AACP;AACA;AACA;AACO,UAAA,sBAAA;AACP;AACA;AACA,oBAAA,YAAA;AACA;AACO,UAAA,KAAA;AACP;AACA,UAAA,MAAA;AACA;AACO,cAAA,MAAA;AACP;AACA;AACA;AACA;AACO,KAAA,UAAA,WAAA,MAAA,eAAA,MAAA;AACA,UAAA,oBAAA;AACP,YAAA,UAAA;AACA;AACA;AACA,WAAA,KAAA;AACA,UAAA,KAAA;AACA;AACA;;ACvBA,cAAA,eAAA,wCAAA,sBAAA,KAAA,oBAAA;;;;"}