import Benevole from "@/models/Benevole"; import Competence from "@/models/Competence"; import Creneau from "@/models/Creneau"; import Evenement from "@/models/Evenement"; import { Ressource } from "jc-timeline"; import { MutationTree } from "vuex"; import { State, StateJSON } from "./State"; export enum MutationTypes { resetState = "resetState", editEvenement = "editEvenement", addCreneau = "addCreneau", removeCreneau = "removeCreneau", editCreneau = "editCreneau", addBenevole2Creneau = "addBenevole2Creneau", removeBenevole2Creneau = "removeBenevole2Creneau", addCreneauGroup = "addCreneauGroup", removeCreneauGroup = "removeCreneauGroup", editCreneauGroup = "editCreneauGroup", reorderCreneauGroup = "reorderCreneauGroup", addBenevole = "addBenevole", removeBenevole = "removeBenevole", editBenevole = "editBenevole", addConstraint = "addConstraint", removeConstraint = "removeConstraint", editConstraint = "editConstraint", } interface CreneauPairing { creneauId: string; benevoleId: number; } export type Mutations = { [MutationTypes.resetState](state: S): void; [MutationTypes.editEvenement]( state: S, payload: { field: K; value: Evenement[K] } ): void; [MutationTypes.addCreneau](state: S, payload: Creneau): void; [MutationTypes.removeCreneau](state: S, payload: Creneau): void; [MutationTypes.editCreneau]( state: S, payload: { id: string; field: K; value: Creneau[K] } ): boolean; [MutationTypes.addCreneauGroup](state: S, payload: Ressource): void; [MutationTypes.removeCreneauGroup](state: S, payload: Ressource): void; [MutationTypes.editCreneauGroup]( state: S, payload: { id: string; field: K; value: Ressource[K] } ): boolean; [MutationTypes.reorderCreneauGroup](state: S, payload: Array): boolean; [MutationTypes.addBenevole2Creneau](state: S, payload: CreneauPairing): void; [MutationTypes.removeBenevole2Creneau](state: S, payload: CreneauPairing): void; [MutationTypes.addBenevole](state: S, payload: Benevole): void; [MutationTypes.removeBenevole](state: S, payload: Benevole): void; [MutationTypes.editBenevole]( state: S, payload: { id: number; field: K; value: Benevole[K] } ): boolean; [MutationTypes.addConstraint](state: S, payload: Competence): void; [MutationTypes.removeConstraint](state: S, payload: Competence): void; [MutationTypes.editConstraint]( state: S, payload: { id: number; field: K; value: Competence[K] } ): boolean; }; export const mutations: MutationTree & Mutations = { [MutationTypes.resetState](state): void { state.evenement = new Evenement(); state.creneauList = []; state.creneauGroupList = []; state.competenceList = []; state.benevoleList = []; }, [MutationTypes.editEvenement](state, payload): void { state.evenement[payload.field] = payload.value; }, // Creneau Management [MutationTypes.addCreneau](state, creneau) { state.creneauList = [...state.creneauList, creneau]; }, [MutationTypes.removeCreneau](state, creneau) { state.creneauList = state.creneauList.filter((c) => c.id !== creneau.id); }, [MutationTypes.editCreneau](state, payload) { const el = state.creneauList.find((o) => o.id == payload.id); if (el) { el[payload.field] = payload.value; return true; } return false; }, [MutationTypes.addBenevole2Creneau](state, pair: CreneauPairing) { const benevole = state.benevoleList.find((o) => o.id == pair.benevoleId); const creneau = state.creneauList.find((o) => o.id == pair.creneauId); if (creneau && benevole) { benevole.creneauIdList = [...benevole.creneauIdList, pair.creneauId]; creneau.benevoleIdList = [...creneau.benevoleIdList, pair.benevoleId]; } }, [MutationTypes.removeBenevole2Creneau](state, pair: CreneauPairing) { const benevole = state.benevoleList.find((o) => o.id == pair.benevoleId); const creneau = state.creneauList.find((o) => o.id == pair.creneauId); if (benevole) benevole.creneauIdList = benevole.creneauIdList.filter((id) => id !== pair.creneauId); if (creneau) creneau.benevoleIdList = creneau.benevoleIdList.filter((id) => id !== pair.benevoleId); }, // Creneau Group Management [MutationTypes.reorderCreneauGroup](state, payload) { state.creneauGroupList = payload; return true; }, [MutationTypes.addCreneauGroup](state, payload) { state.creneauGroupList = [...state.creneauGroupList, payload]; }, [MutationTypes.removeCreneauGroup](state, payload) { state.creneauGroupList = state.creneauGroupList.filter((c) => c.id !== payload.id); }, [MutationTypes.editCreneauGroup](state, payload) { const el = state.creneauGroupList.find((o) => o.id == payload.id); if (el) { el[payload.field] = payload.value; return true; } return false; }, // Benevole Management [MutationTypes.addBenevole](state, payload) { state.benevoleList = [...state.benevoleList, payload]; }, [MutationTypes.removeBenevole](state, payload) { state.creneauList.forEach( (creneau) => (creneau.benevoleIdList = creneau.benevoleIdList.filter((id) => id !== payload.id)) ); state.benevoleList = state.benevoleList.filter((c) => c.id !== payload.id); }, [MutationTypes.editBenevole](state, payload) { const el = state.benevoleList.find((o) => o.id == payload.id); if (el) { el[payload.field] = payload.value; return true; } return false; }, // Constraint Management [MutationTypes.addConstraint](state, payload) { state.competenceList = [...state.competenceList, payload]; }, [MutationTypes.removeConstraint](state, payload) { const filterFunction = (id: number) => id !== payload.id; state.benevoleList.forEach( (benevole) => (benevole.competenceIdList = benevole.competenceIdList.filter(filterFunction)) ); state.creneauList.forEach( (creneau) => (creneau.competencesIdList = creneau.competencesIdList.filter(filterFunction)) ); state.competenceList = state.competenceList.filter((c) => c.id !== payload.id); }, [MutationTypes.editConstraint](state, payload) { const el = state.competenceList.find((o) => o.id == payload.id); if (el) { el[payload.field] = payload.value; return true; } return false; }, };