Mutations.ts 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  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 EvenementVersion from "@/models/EvenementVersion";
  6. import { Ressource } from "jc-timeline";
  7. import { MutationTree } from "vuex";
  8. import { Client } from "stompjs";
  9. import { State } from "./State";
  10. export enum MutationTypes {
  11. resetState = "resetState",
  12. editEvenement = "editEvenement",
  13. addCreneau = "addCreneau",
  14. removeCreneau = "removeCreneau",
  15. editCreneau = "editCreneau",
  16. addBenevole2Creneau = "addBenevole2Creneau",
  17. removeBenevole2Creneau = "removeBenevole2Creneau",
  18. clearBenevole2Creneau = "clearBenevole2Creneau",
  19. addCreneauGroup = "addCreneauGroup",
  20. addCreneauGroupAt = "addCreneauGroupAt",
  21. removeCreneauGroup = "removeCreneauGroup",
  22. editCreneauGroup = "editCreneauGroup",
  23. reorderCreneauGroup = "reorderCreneauGroup",
  24. addBenevole = "addBenevole",
  25. removeBenevole = "removeBenevole",
  26. editBenevole = "editBenevole",
  27. addConstraint = "addConstraint",
  28. removeConstraint = "removeConstraint",
  29. editConstraint = "editConstraint",
  30. newVersion = "newVersion",
  31. refreshVersion = "refreshVersion",
  32. pushSavedPlanning = "pushSavedPlanning",
  33. refreshSavedPlanning = "refreshSavedPlanning",
  34. setUsername = "setUsername",
  35. setStompClient = "setStompClient",
  36. }
  37. interface CreneauPairing {
  38. creneauId: string;
  39. benevoleId: number;
  40. }
  41. export type Mutations<S = State> = {
  42. [MutationTypes.resetState](state: S): void;
  43. [MutationTypes.editEvenement]<K extends keyof Evenement>(
  44. state: S,
  45. payload: { field: K; value: Evenement[K] }
  46. ): void;
  47. [MutationTypes.addCreneau](state: S, payload: Creneau): void;
  48. [MutationTypes.removeCreneau](state: S, payload: Creneau): void;
  49. [MutationTypes.editCreneau]<K extends keyof Creneau>(
  50. state: S,
  51. payload: { id: string; field: K; value: Creneau[K] }
  52. ): boolean;
  53. [MutationTypes.addCreneauGroup](state: S, payload: Ressource): void;
  54. [MutationTypes.addCreneauGroupAt](state: S, payload: { r: Ressource; pos: number }): void;
  55. [MutationTypes.removeCreneauGroup](state: S, payload: Ressource): void;
  56. [MutationTypes.editCreneauGroup]<K extends keyof Ressource>(
  57. state: S,
  58. payload: { id: string; field: K; value: Ressource[K] }
  59. ): boolean;
  60. [MutationTypes.reorderCreneauGroup](state: S, payload: Array<Ressource>): boolean;
  61. [MutationTypes.addBenevole2Creneau](state: S, payload: CreneauPairing): void;
  62. [MutationTypes.removeBenevole2Creneau](state: S, payload: CreneauPairing): void;
  63. [MutationTypes.clearBenevole2Creneau](state: S): void;
  64. [MutationTypes.addBenevole](state: S, payload: Benevole): void;
  65. [MutationTypes.removeBenevole](state: S, payload: Benevole): void;
  66. [MutationTypes.editBenevole]<K extends keyof Benevole>(
  67. state: S,
  68. payload: { id: number; field: K; value: Benevole[K] }
  69. ): boolean;
  70. [MutationTypes.addConstraint](state: S, payload: Competence): void;
  71. [MutationTypes.removeConstraint](state: S, payload: Competence): void;
  72. [MutationTypes.editConstraint]<K extends keyof Competence>(
  73. state: S,
  74. payload: { id: number; field: K; value: Competence[K] }
  75. ): boolean;
  76. [MutationTypes.newVersion](state: S, payload: EvenementVersion): void;
  77. [MutationTypes.refreshVersion](state: S, payload: Array<EvenementVersion>): void;
  78. [MutationTypes.pushSavedPlanning](state: S, payload: EvenementVersion): void;
  79. [MutationTypes.refreshSavedPlanning](state: S, payload: Array<EvenementVersion>): void;
  80. [MutationTypes.setUsername](state: S, payload: string): void;
  81. [MutationTypes.setStompClient](state: S, payload: Client): void;
  82. };
  83. export const mutations: MutationTree<State> & Mutations = {
  84. [MutationTypes.resetState](state): void {
  85. state.evenement = new Evenement();
  86. state.creneauList = [];
  87. state.creneauGroupList = [];
  88. state.competenceList = [];
  89. state.benevoleList = [];
  90. },
  91. [MutationTypes.editEvenement](state, payload): void {
  92. state.evenement[payload.field] = payload.value;
  93. },
  94. // Creneau Management
  95. [MutationTypes.addCreneau](state, creneau) {
  96. state.creneauList = [creneau, ...state.creneauList];
  97. },
  98. [MutationTypes.removeCreneau](state, creneau) {
  99. state.creneauList = state.creneauList.filter((c) => c.id !== creneau.id);
  100. },
  101. [MutationTypes.editCreneau](state, payload) {
  102. const el = state.creneauList.find((o) => o.id == payload.id);
  103. if (el) {
  104. el[payload.field] = payload.value;
  105. return true;
  106. }
  107. return false;
  108. },
  109. [MutationTypes.addBenevole2Creneau](state, pair: CreneauPairing) {
  110. const benevole = state.benevoleList.find((o) => o.id == pair.benevoleId);
  111. const creneau = state.creneauList.find((o) => o.id == pair.creneauId);
  112. if (creneau && benevole) {
  113. benevole.creneauIdList = [...benevole.creneauIdList, pair.creneauId];
  114. creneau.benevoleIdList = [...creneau.benevoleIdList, pair.benevoleId];
  115. }
  116. },
  117. [MutationTypes.removeBenevole2Creneau](state, pair: CreneauPairing) {
  118. const benevole = state.benevoleList.find((o) => o.id == pair.benevoleId);
  119. const creneau = state.creneauList.find((o) => o.id == pair.creneauId);
  120. if (benevole)
  121. benevole.creneauIdList = benevole.creneauIdList.filter((id) => id !== pair.creneauId);
  122. if (creneau)
  123. creneau.benevoleIdList = creneau.benevoleIdList.filter((id) => id !== pair.benevoleId);
  124. },
  125. [MutationTypes.clearBenevole2Creneau](state) {
  126. state.benevoleList.forEach((b) => (b.creneauIdList = []));
  127. state.creneauList.forEach((b) => (b.benevoleIdList = []));
  128. },
  129. // Creneau Group Management
  130. [MutationTypes.reorderCreneauGroup](state, payload) {
  131. state.creneauGroupList = payload;
  132. return true;
  133. },
  134. [MutationTypes.addCreneauGroup](state, payload) {
  135. state.creneauGroupList = [...state.creneauGroupList, payload];
  136. },
  137. [MutationTypes.addCreneauGroupAt](state, payload) {
  138. if (payload.pos < 1) {
  139. state.creneauGroupList = [payload.r, ...state.creneauGroupList];
  140. } else if (payload.pos > state.creneauGroupList.length) {
  141. state.creneauGroupList = [...state.creneauGroupList, payload.r];
  142. } else {
  143. state.creneauGroupList.splice(payload.pos, 0, payload.r);
  144. }
  145. },
  146. [MutationTypes.removeCreneauGroup](state, payload) {
  147. state.creneauGroupList = state.creneauGroupList.filter((c) => c.id !== payload.id);
  148. },
  149. [MutationTypes.editCreneauGroup](state, payload) {
  150. const el = state.creneauGroupList.find((o) => o.id == payload.id);
  151. if (el) {
  152. el[payload.field] = payload.value;
  153. return true;
  154. }
  155. return false;
  156. },
  157. // Benevole Management
  158. [MutationTypes.addBenevole](state, payload) {
  159. state.benevoleList = [payload, ...state.benevoleList];
  160. },
  161. [MutationTypes.removeBenevole](state, payload) {
  162. state.creneauList.forEach(
  163. (creneau) =>
  164. (creneau.benevoleIdList = creneau.benevoleIdList.filter((id) => id !== payload.id))
  165. );
  166. state.benevoleList = state.benevoleList.filter((c) => c.id !== payload.id);
  167. },
  168. [MutationTypes.editBenevole](state, payload) {
  169. const el = state.benevoleList.find((o) => o.id == payload.id);
  170. if (el) {
  171. el[payload.field] = payload.value;
  172. return true;
  173. }
  174. return false;
  175. },
  176. // Constraint Management
  177. [MutationTypes.addConstraint](state, payload) {
  178. state.competenceList = [payload, ...state.competenceList];
  179. },
  180. [MutationTypes.removeConstraint](state, payload) {
  181. const filterFunction = (id: number) => id !== payload.id;
  182. state.benevoleList.forEach(
  183. (benevole) => (benevole.competenceIdList = benevole.competenceIdList.filter(filterFunction))
  184. );
  185. state.creneauList.forEach(
  186. (creneau) => (creneau.competencesIdList = creneau.competencesIdList.filter(filterFunction))
  187. );
  188. state.competenceList = state.competenceList.filter((c) => c.id !== payload.id);
  189. },
  190. [MutationTypes.editConstraint](state, payload) {
  191. const el = state.competenceList.find((o) => o.id == payload.id);
  192. if (el) {
  193. el[payload.field] = payload.value;
  194. return true;
  195. }
  196. return false;
  197. },
  198. [MutationTypes.newVersion](state, payload) {
  199. // if the version is not yet registered in the current history.
  200. if (!state.history.find((v) => v.id == payload.id)) {
  201. // register the new version in the history
  202. state.history = [payload, ...state.history.filter((h) => h.uuid == payload.uuid)];
  203. // add the version in the planning list if it doesn't exist neither.
  204. if (state.savedPlanning.filter((o) => o.uuid == payload.uuid).length == 0) {
  205. state.savedPlanning = [payload, ...state.savedPlanning];
  206. }
  207. }
  208. },
  209. [MutationTypes.refreshVersion](state, payload) {
  210. state.history = payload;
  211. },
  212. [MutationTypes.pushSavedPlanning](state, payload) {
  213. state.savedPlanning = [payload, ...state.savedPlanning];
  214. },
  215. [MutationTypes.refreshSavedPlanning](state, payload) {
  216. state.savedPlanning = payload;
  217. },
  218. [MutationTypes.setUsername](state, payload) {
  219. state.username = payload;
  220. },
  221. [MutationTypes.setStompClient](state, payload) {
  222. state.stompClient = payload;
  223. },
  224. };