config/projectStore.jsx

  1. /**
  2. * @module Config
  3. * @category State
  4. */
  5. import { create } from "zustand";
  6. /**
  7. * @config
  8. * Store de Zustand para gestionar el estado de un proyecto y sus tareas.
  9. *
  10. * @typedef {Object} ProjectStore
  11. * @property {boolean} loading - Indica si el proyecto está cargando.
  12. * @property {Object|null} project - Datos del proyecto actual.
  13. * @property {Array} todoTasks - Lista de tareas pendientes.
  14. * @property {Array} inProgressTasks - Lista de tareas en progreso.
  15. * @property {Array} toReviewTasks - Lista de tareas en revisión.
  16. * @property {Array} doneTasks - Lista de tareas completadas.
  17. * @property {function} setLoading - Función para actualizar el estado de carga.
  18. * @property {function} setProject - Función para establecer el proyecto actual.
  19. * @property {function} setTodoTasks - Función para actualizar las tareas pendientes.
  20. * @property {function} setInProgressTasks - Función para actualizar las tareas en progreso.
  21. * @property {function} setToReviewTasks - Función para actualizar las tareas en revisión.
  22. * @property {function} setDoneTasks - Función para actualizar las tareas completadas.
  23. * @property {function} clearProject - Función para limpiar el proyecto actual.
  24. */
  25. /**
  26. * Hook personalizado para acceder y modificar el estado de un proyecto y sus tareas.
  27. *
  28. * @type {import('zustand').UseStore<ProjectStore>}
  29. */
  30. export const useProjectStore = create((set) => ({
  31. loading: true,
  32. project: null,
  33. todoTasks: [],
  34. inProgressTasks: [],
  35. toReviewTasks: [],
  36. doneTasks: [],
  37. /**
  38. * Actualiza el estado de carga del proyecto.
  39. * @param {boolean} loading - Nuevo estado de carga.
  40. */
  41. setLoading: (loading) => set({ loading }),
  42. /**
  43. * Establece los datos del proyecto actual.
  44. * @param {Object} project - Datos del proyecto.
  45. */
  46. setProject: (project) => set({ project }),
  47. /**
  48. * Actualiza la lista de tareas pendientes.
  49. * @param {Array} tasks - Nueva lista de tareas pendientes.
  50. */
  51. setTodoTasks: (tasks) => set({ todoTasks: tasks }),
  52. /**
  53. * Actualiza la lista de tareas en progreso.
  54. * @param {Array} tasks - Nueva lista de tareas en progreso.
  55. */
  56. setInProgressTasks: (tasks) => set({ inProgressTasks: tasks }),
  57. /**
  58. * Actualiza la lista de tareas en revisión.
  59. * @param {Array} tasks - Nueva lista de tareas en revisión.
  60. */
  61. setToReviewTasks: (tasks) => set({ toReviewTasks: tasks }),
  62. /**
  63. * Actualiza la lista de tareas completadas.
  64. * @param {Array} tasks - Nueva lista de tareas completadas.
  65. */
  66. setDoneTasks: (tasks) => set({ doneTasks: tasks }),
  67. /**
  68. * Limpia los datos del proyecto actual.
  69. */
  70. clearProject: () => set({ project: null }),
  71. }));