mirror of
https://github.com/Paris-est-Ludique/intranet.git
synced 2025-09-12 14:20:08 +02:00
Adds GSheet read&write API
This commit is contained in:
57
src/store/envieList.ts
Normal file
57
src/store/envieList.ts
Normal file
@@ -0,0 +1,57 @@
|
||||
import { PayloadAction, createSlice } from "@reduxjs/toolkit"
|
||||
|
||||
import { Envie, getEnvieList } from "../services/envies"
|
||||
import { AppThunk, AppState } from "."
|
||||
|
||||
interface EnvieList {
|
||||
readyStatus: string
|
||||
items: Envie[]
|
||||
error: string | null
|
||||
}
|
||||
|
||||
export const initialState: EnvieList = {
|
||||
readyStatus: "invalid",
|
||||
items: [],
|
||||
error: null,
|
||||
}
|
||||
|
||||
const envieList = createSlice({
|
||||
name: "envieList",
|
||||
initialState,
|
||||
reducers: {
|
||||
getRequesting: (state: EnvieList) => {
|
||||
state.readyStatus = "request"
|
||||
},
|
||||
getSuccess: (state, { payload }: PayloadAction<Envie[]>) => {
|
||||
state.readyStatus = "success"
|
||||
state.items = payload
|
||||
},
|
||||
getFailure: (state, { payload }: PayloadAction<string>) => {
|
||||
state.readyStatus = "failure"
|
||||
state.error = payload
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
export default envieList.reducer
|
||||
export const { getRequesting, getSuccess, getFailure } = envieList.actions
|
||||
|
||||
export const fetchEnvieList = (): AppThunk => async (dispatch) => {
|
||||
dispatch(getRequesting())
|
||||
|
||||
const { error, data } = await getEnvieList()
|
||||
|
||||
if (error) {
|
||||
dispatch(getFailure(error.message))
|
||||
} else {
|
||||
dispatch(getSuccess(data as Envie[]))
|
||||
}
|
||||
}
|
||||
|
||||
const shouldFetchEnvieList = (state: AppState) => state.envieList.readyStatus !== "success"
|
||||
|
||||
export const fetchEnvieListIfNeed = (): AppThunk => (dispatch, getState) => {
|
||||
if (shouldFetchEnvieList(getState())) return dispatch(fetchEnvieList())
|
||||
|
||||
return null
|
||||
}
|
@@ -4,6 +4,7 @@ import { connectRouter } from "connected-react-router"
|
||||
import userList from "./userList"
|
||||
import userData from "./userData"
|
||||
import jeuxJavList from "./jeuxJavList"
|
||||
import envieList from "./envieList"
|
||||
|
||||
// Use inferred return type for making correctly Redux types
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
||||
@@ -11,6 +12,7 @@ export default (history: History) => ({
|
||||
userList,
|
||||
userData,
|
||||
jeuxJavList,
|
||||
envieList,
|
||||
router: connectRouter(history) as any,
|
||||
// Register more reducers...
|
||||
})
|
||||
|
Reference in New Issue
Block a user