task-managment / src / app / dashboard / tasks / hooks / useKanvanTask.tsx
useKanvanTask.tsx
Raw
'use client';
import { TaskSelect } from '@/database/schema';
import { InferQueryModel } from '@/helpers/types';
import { Task } from '@/server/task/domain/models';
import React, { useMemo } from 'react';


interface KanbanTask {
  status: string;
  items: Task[];
}

const useKanvanTask = (tasks: any) => {
  const taskList = useMemo(() => {
    if (!tasks) return [];

    return tasks
      .map((project:any) => project.task || []) // Asegúrate de que 'task' siempre sea un array
      .flat()
      .reduce((acc: KanbanTask[], current:TaskSelect) => {
        if (!current) return acc; // Verifica que current no sea undefined

        // Buscar si ya existe un objeto para este estado
        let statusObj = acc.find((item) => item.status === current.status);

        if (!statusObj) {
          // Si no existe, creamos uno nuevo
          statusObj = { status: current.status, items: [] };
          acc.push(statusObj);
        }

        // Agregar la tarea actual al grupo de items
        statusObj.items.push(current as any);

        return acc;
      }, []);
  }, [tasks]);

  return {
    kanvanTasks: taskList,
  }
};

export default useKanvanTask;