import { createSlice, PayloadAction } from '@reduxjs/toolkit' import { Challenge } from '../challenges/challengesSlice' export interface ChallengeAction { id: number challengeId: number success: boolean, start: number, // date end: number | null, // date penaltyStart: number | null, // date penaltyEnd: number | null, // date runId: number, } export interface ActionsState { challengeActions: ChallengeAction[] } const initialState: ActionsState = { challengeActions: [] } export interface ChallengeActionPayload { id: number playerId: number challengeId: number success: boolean, start: string, end: string | null, penaltyStart: string | null, penaltyEnd: string | null, runId: number, } export interface ChallengeActionsPayload { data: (Challenge & { action: ChallengeActionPayload })[] } export const challengeActionsSlice = createSlice({ name: 'challengeActions', initialState: initialState, reducers: { downloadChallengeActions(state, action: PayloadAction) { if (state.challengeActions) state.challengeActions = state.challengeActions.filter(challengeAction => action.payload.data.filter(dlChallenge => dlChallenge.action.id === challengeAction.id) === null) for (const dlChallenge of action.payload.data) { state.challengeActions.push({ id: dlChallenge.action.id, challengeId: dlChallenge.id, success: dlChallenge.action.success, start: new Date(dlChallenge.action.start).getTime(), end: dlChallenge.action.end ? new Date(dlChallenge.action.end).getTime() : null, penaltyStart: dlChallenge.action.penaltyStart ? new Date(dlChallenge.action.penaltyStart).getTime() : null, penaltyEnd: dlChallenge.action.penaltyEnd ? new Date(dlChallenge.action.penaltyEnd).getTime() : null, runId: dlChallenge.action.runId, }) } state.challengeActions.sort((c1, c2) => c2.id - c1.id) }, }, }) export const { downloadChallengeActions } = challengeActionsSlice.actions export default challengeActionsSlice.reducer