mirror of
https://github.com/Paris-est-Ludique/intranet.git
synced 2025-09-11 22:06:29 +02:00
Add announcements page, i.e gazettes and comptes rendus
This commit is contained in:
51
src/store/announcementList.ts
Normal file
51
src/store/announcementList.ts
Normal file
@@ -0,0 +1,51 @@
|
||||
import { PayloadAction, createSlice, createEntityAdapter } from "@reduxjs/toolkit"
|
||||
|
||||
import { StateRequest, toastError, elementListFetch } from "./utils"
|
||||
import { Announcement } from "../services/announcement"
|
||||
import { AppThunk, AppState } from "."
|
||||
import { announcementListGet } from "../services/announcementAccessors"
|
||||
|
||||
const announcementAdapter = createEntityAdapter<Announcement>()
|
||||
|
||||
export const initialState = announcementAdapter.getInitialState({
|
||||
readyStatus: "idle",
|
||||
} as StateRequest)
|
||||
|
||||
const announcementList = createSlice({
|
||||
name: "announcementList",
|
||||
initialState,
|
||||
reducers: {
|
||||
getRequesting: (state) => {
|
||||
state.readyStatus = "request"
|
||||
},
|
||||
getSuccess: (state, { payload }: PayloadAction<Announcement[]>) => {
|
||||
state.readyStatus = "success"
|
||||
announcementAdapter.setAll(state, payload)
|
||||
},
|
||||
getFailure: (state, { payload }: PayloadAction<string>) => {
|
||||
state.readyStatus = "failure"
|
||||
state.error = payload
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
export default announcementList.reducer
|
||||
export const { getRequesting, getSuccess, getFailure } = announcementList.actions
|
||||
|
||||
export const fetchAnnouncementList = elementListFetch(
|
||||
announcementListGet,
|
||||
getRequesting,
|
||||
getSuccess,
|
||||
getFailure,
|
||||
(error: Error) => toastError(`Erreur lors du chargement des announcements: ${error.message}`)
|
||||
)
|
||||
|
||||
const shouldFetchAnnouncementList = (state: AppState) =>
|
||||
state.announcementList.readyStatus !== "success"
|
||||
|
||||
export const fetchAnnouncementListIfNeed = (): AppThunk => (dispatch, getState) => {
|
||||
const { jwt } = getState().auth
|
||||
if (shouldFetchAnnouncementList(getState())) return dispatch(fetchAnnouncementList(jwt))
|
||||
|
||||
return null
|
||||
}
|
@@ -3,6 +3,7 @@ import { connectRouter } from "connected-react-router"
|
||||
|
||||
import auth from "./auth"
|
||||
import javGameList from "./javGameList"
|
||||
import announcementList from "./announcementList"
|
||||
import preVolunteerAdd from "./preVolunteerAdd"
|
||||
import preVolunteerCount from "./preVolunteerCount"
|
||||
import teamList from "./teamList"
|
||||
@@ -25,6 +26,7 @@ import wishList from "./wishList"
|
||||
export default (history: History) => ({
|
||||
auth,
|
||||
javGameList,
|
||||
announcementList,
|
||||
preVolunteerAdd,
|
||||
preVolunteerCount,
|
||||
teamList,
|
||||
|
@@ -91,8 +91,8 @@ export function elementAddFetch<Element>(
|
||||
}
|
||||
}
|
||||
|
||||
export function elementListFetch<Element>(
|
||||
elementListService: () => Promise<{
|
||||
export function elementListFetch<Element, ServiceInput extends Array<any>>(
|
||||
elementListService: (...idArgs: ServiceInput) => Promise<{
|
||||
data?: Element[] | undefined
|
||||
error?: Error | undefined
|
||||
}>,
|
||||
@@ -101,20 +101,21 @@ export function elementListFetch<Element>(
|
||||
getFailure: ActionCreatorWithPayload<string, string>,
|
||||
errorMessage?: (error: Error) => void,
|
||||
successMessage?: () => void
|
||||
): () => AppThunk {
|
||||
return (): AppThunk => async (dispatch) => {
|
||||
dispatch(getRequesting())
|
||||
): (...idArgs: ServiceInput) => AppThunk {
|
||||
return (...idArgs: ServiceInput): AppThunk =>
|
||||
async (dispatch) => {
|
||||
dispatch(getRequesting())
|
||||
|
||||
const { error, data } = await elementListService()
|
||||
const { error, data } = await elementListService(...idArgs)
|
||||
|
||||
if (error) {
|
||||
dispatch(getFailure(error.message))
|
||||
errorMessage?.(error)
|
||||
} else {
|
||||
dispatch(getSuccess(data as Element[]))
|
||||
successMessage?.()
|
||||
if (error) {
|
||||
dispatch(getFailure(error.message))
|
||||
errorMessage?.(error)
|
||||
} else {
|
||||
dispatch(getSuccess(data as Element[]))
|
||||
successMessage?.()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export function elementSet<Element>(
|
||||
|
Reference in New Issue
Block a user