Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | 9x 9x 9x 28x 28x 14x 28x 11x 17x 11x 11x 11x 11x 10x 7x 3x 3x 3x 9x 9x | import { createSlice, PayloadAction } from '@reduxjs/toolkit';
import {PanierState} from "@/type/achat/offrePanier";
const initialState: PanierState = {
items: [],
};
/**
* Slice Redux pour la gestion du panier d'achat.
* Contient les actions et le reducer pour ajouter, retirer et vider les articles du panier.
*
* @module panierSlice
*/
const panierSlice = createSlice({
name: 'panier',
initialState,
reducers: {
/**
* Ajoute un article au panier. Si l'article existe déjà, incrémente la quantité.
*
* @param state L'état actuel du panier.
* @param action L'identifiant de l'événement et de l'offre à ajouter.
*/
addOneArticleToCart: (
state,
action: PayloadAction<{ evenementId: number; offreId: number }>
) => {
const { evenementId, offreId } = action.payload;
const existing = state.items.find(
(item) => item.evenementId === evenementId && item.offreId === offreId
);
if (existing) {
existing.quantity += 1;
} else {
state.items.push({ evenementId, offreId, quantity: 1 });
}
},
/**
* Retire un article du panier. Décrémente la quantité ou supprime l'article si quantité = 1.
*
* @param state L'état actuel du panier.
* @param action L'identifiant de l'événement et de l'offre à retirer.
*/
removeOneArticleFromCart: (
state,
action: PayloadAction<{ evenementId: number; offreId: number }>
) => {
const { evenementId, offreId } = action.payload;
const existing = state.items.find(
(item) => item.evenementId === evenementId && item.offreId === offreId
);
if (existing) {
if (existing.quantity > 1) {
existing.quantity -= 1;
} else {
state.items = state.items.filter(
(item) => !(item.evenementId === evenementId && item.offreId === offreId)
);
}
}
},
/**
* Vide complètement le panier.
*
* @param state L'état actuel du panier.
*/
clearCart: (state) => {
state.items = [];
},
},
});
export const { addOneArticleToCart, removeOneArticleFromCart, clearCart } =
panierSlice.actions;
export default panierSlice.reducer;
|