Mutations.ts 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. import Benevole from "@/models/Benevole";
  2. import Competence from "@/models/Competence";
  3. import Creneau from "@/models/Creneau";
  4. import Evenement from "@/models/Evenement";
  5. import { Ressource } from "jc-timeline";
  6. import { MutationTree } from "vuex";
  7. import { State, StateJSON } from "./State";
  8. export enum MutationTypes {
  9. resetState = "resetState",
  10. editEvenement = "editEvenement",
  11. addCreneau = "addCreneau",
  12. removeCreneau = "removeCreneau",
  13. editCreneau = "editCreneau",
  14. addBenevole2Creneau = "addBenevole2Creneau",
  15. removeBenevole2Creneau = "removeBenevole2Creneau",
  16. addCreneauGroup = "addCreneauGroup",
  17. removeCreneauGroup = "removeCreneauGroup",
  18. editCreneauGroup = "editCreneauGroup",
  19. reorderCreneauGroup = "reorderCreneauGroup",
  20. addBenevole = "addBenevole",
  21. removeBenevole = "removeBenevole",
  22. editBenevole = "editBenevole",
  23. addConstraint = "addConstraint",
  24. removeConstraint = "removeConstraint",
  25. editConstraint = "editConstraint",
  26. }
  27. interface CreneauPairing {
  28. creneauId: string;
  29. benevoleId: number;
  30. }
  31. export type Mutations<S = State> = {
  32. [MutationTypes.resetState](state: S): void;
  33. [MutationTypes.editEvenement]<K extends keyof Evenement>(
  34. state: S,
  35. payload: { field: K; value: Evenement[K] }
  36. ): void;
  37. [MutationTypes.addCreneau](state: S, payload: Creneau): void;
  38. [MutationTypes.removeCreneau](state: S, payload: Creneau): void;
  39. [MutationTypes.editCreneau]<K extends keyof Creneau>(
  40. state: S,
  41. payload: { id: string; field: K; value: Creneau[K] }
  42. ): boolean;
  43. [MutationTypes.addCreneauGroup](state: S, payload: Ressource): void;
  44. [MutationTypes.removeCreneauGroup](state: S, payload: Ressource): void;
  45. [MutationTypes.editCreneauGroup]<K extends keyof Ressource>(
  46. state: S,
  47. payload: { id: string; field: K; value: Ressource[K] }
  48. ): boolean;
  49. [MutationTypes.reorderCreneauGroup](state: S, payload: Array<Ressource>): boolean;
  50. [MutationTypes.addBenevole2Creneau](state: S, payload: CreneauPairing): void;
  51. [MutationTypes.removeBenevole2Creneau](state: S, payload: CreneauPairing): void;
  52. [MutationTypes.addBenevole](state: S, payload: Benevole): void;
  53. [MutationTypes.removeBenevole](state: S, payload: Benevole): void;
  54. [MutationTypes.editBenevole]<K extends keyof Benevole>(
  55. state: S,
  56. payload: { id: number; field: K; value: Benevole[K] }
  57. ): boolean;
  58. [MutationTypes.addConstraint](state: S, payload: Competence): void;
  59. [MutationTypes.removeConstraint](state: S, payload: Competence): void;
  60. [MutationTypes.editConstraint]<K extends keyof Competence>(
  61. state: S,
  62. payload: { id: number; field: K; value: Competence[K] }
  63. ): boolean;
  64. };
  65. export const mutations: MutationTree<State> & Mutations = {
  66. [MutationTypes.resetState](state): void {
  67. state.evenement = new Evenement();
  68. state.creneauList = [];
  69. state.creneauGroupList = [];
  70. state.competenceList = [];
  71. state.benevoleList = [];
  72. },
  73. [MutationTypes.editEvenement](state, payload): void {
  74. state.evenement[payload.field] = payload.value;
  75. },
  76. // Creneau Management
  77. [MutationTypes.addCreneau](state, creneau) {
  78. state.creneauList = [...state.creneauList, creneau];
  79. },
  80. [MutationTypes.removeCreneau](state, creneau) {
  81. state.creneauList = state.creneauList.filter((c) => c.id !== creneau.id);
  82. },
  83. [MutationTypes.editCreneau](state, payload) {
  84. const el = state.creneauList.find((o) => o.id == payload.id);
  85. if (el) {
  86. el[payload.field] = payload.value;
  87. return true;
  88. }
  89. return false;
  90. },
  91. [MutationTypes.addBenevole2Creneau](state, pair: CreneauPairing) {
  92. const benevole = state.benevoleList.find((o) => o.id == pair.benevoleId);
  93. const creneau = state.creneauList.find((o) => o.id == pair.creneauId);
  94. if (creneau && benevole) {
  95. benevole.creneauIdList = [...benevole.creneauIdList, pair.creneauId];
  96. creneau.benevoleIdList = [...creneau.benevoleIdList, pair.benevoleId];
  97. }
  98. },
  99. [MutationTypes.removeBenevole2Creneau](state, pair: CreneauPairing) {
  100. const benevole = state.benevoleList.find((o) => o.id == pair.benevoleId);
  101. const creneau = state.creneauList.find((o) => o.id == pair.creneauId);
  102. if (benevole)
  103. benevole.creneauIdList = benevole.creneauIdList.filter((id) => id !== pair.creneauId);
  104. if (creneau)
  105. creneau.benevoleIdList = creneau.benevoleIdList.filter((id) => id !== pair.benevoleId);
  106. },
  107. // Creneau Group Management
  108. [MutationTypes.reorderCreneauGroup](state, payload) {
  109. state.creneauGroupList = payload;
  110. return true;
  111. },
  112. [MutationTypes.addCreneauGroup](state, payload) {
  113. state.creneauGroupList = [...state.creneauGroupList, payload];
  114. },
  115. [MutationTypes.removeCreneauGroup](state, payload) {
  116. state.creneauGroupList = state.creneauGroupList.filter((c) => c.id !== payload.id);
  117. },
  118. [MutationTypes.editCreneauGroup](state, payload) {
  119. const el = state.creneauGroupList.find((o) => o.id == payload.id);
  120. if (el) {
  121. el[payload.field] = payload.value;
  122. return true;
  123. }
  124. return false;
  125. },
  126. // Benevole Management
  127. [MutationTypes.addBenevole](state, payload) {
  128. state.benevoleList = [...state.benevoleList, payload];
  129. },
  130. [MutationTypes.removeBenevole](state, payload) {
  131. state.creneauList.forEach(
  132. (creneau) =>
  133. (creneau.benevoleIdList = creneau.benevoleIdList.filter((id) => id !== payload.id))
  134. );
  135. state.benevoleList = state.benevoleList.filter((c) => c.id !== payload.id);
  136. },
  137. [MutationTypes.editBenevole](state, payload) {
  138. const el = state.benevoleList.find((o) => o.id == payload.id);
  139. if (el) {
  140. el[payload.field] = payload.value;
  141. return true;
  142. }
  143. return false;
  144. },
  145. // Constraint Management
  146. [MutationTypes.addConstraint](state, payload) {
  147. state.competenceList = [...state.competenceList, payload];
  148. },
  149. [MutationTypes.removeConstraint](state, payload) {
  150. const filterFunction = (id: number) => id !== payload.id;
  151. state.benevoleList.forEach(
  152. (benevole) => (benevole.competenceIdList = benevole.competenceIdList.filter(filterFunction))
  153. );
  154. state.creneauList.forEach(
  155. (creneau) => (creneau.competencesIdList = creneau.competencesIdList.filter(filterFunction))
  156. );
  157. state.competenceList = state.competenceList.filter((c) => c.id !== payload.id);
  158. },
  159. [MutationTypes.editConstraint](state, payload) {
  160. const el = state.competenceList.find((o) => o.id == payload.id);
  161. if (el) {
  162. el[payload.field] = payload.value;
  163. return true;
  164. }
  165. return false;
  166. },
  167. };