task-managment / src / app / (home) / _components / UserTasksTabs.tsx
UserTasksTabs.tsx
Raw
"use client";

import { trpc } from "@/app/_trpc/client";
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
import useGroupTasks from "@/hooks/useGroupTasks";
import {
  cn,
  formatDateSpecial,
  getStatusColor,
} from "@/lib/utils";
import { TasksByDate } from "@/server/task/domain/models";



const UserTasksTabs = () => {
  const [tasks] = trpc.tasks.getTasks.useSuspenseQuery({onlyUserTask:true});



  const {rearrangedTaks}=useGroupTasks(tasks as TasksByDate[])
  
  if(!rearrangedTaks)return

  return (
    <div className="flex-1">
      <h2 className="text-xl md:text-3xl font-bold ml-3">Mis tareas</h2>
      <Tabs
        className="  min-h-[200px] md:min-h-[300px]  bg-transparent"
        defaultValue="Recientes"
      >
        <TabsList className="bg-transparent " asChild>
          <div className="flex gap-2 flex-nowrap  min-h-10 ">
            {Object.values(rearrangedTaks)?.map((item) => {
              return (
                <TabsTrigger
                  key={item.label}
                  value={item.label}
                  name={item.label}
                  className="text-xs md:text-base !bg-transparent !shadow-none"
                >
                  {item.label}
                </TabsTrigger>
              );
            })}
          </div>
        </TabsList>

        { Object.values(rearrangedTaks)?.map(({ label, list }) => {
          return (
            <TabsContent
              key={label}
              value={label}
              className="userTabContainer  h-[230px] px-2 text-center  overflow-y-scroll"
            >
              <div className="space-y-5">
                {list?.map((task) => {
                  return (
                    <article
                      key={task.id}
                      className="relative py-4 px-3 justify-between rounded-md bg-white border-l-2"
                    >
                      <div
                        className={cn(
                          "w-[6px] rounded-l-md h-full text-nowrap absolute grid place-content-center left-0 top-0 bottom-0 ",
                          getStatusColor(task?.status)
                        )}
                      ></div>

                      <div className="">
                        <div className="flex gap-5">
                          <div>
                            <p className="text-xs space-x-2 first-letter:uppercase font-light">
                              <span>{formatDateSpecial(task?.startDate!)}</span>
                              <span>
                                {task?.expireDate
                                  ? formatDateSpecial(task?.expireDate)
                                  : "-"}
                              </span>
                            </p>
                          </div>
                        </div>
                      </div>

                      <div>
                        <p className="space-x-0.5 text-base font-bold text-start">
                          <span>{task?.projectName}</span>
                          <span>-</span>
                          <span>{task?.floorName}</span>
                        </p>
                        <p className="text-start text-gray-500">{task?.areaName}</p>
                        <p className="text-xs text-gray-500 text-left">
                          {task?.comments}
                        </p>
                      </div>
                    </article>
                  );
                })}
                {!list ||
                  (list.length === 0 && (
                    <span className=" text-xs md:text-base block mt-20 text-primary font-semibold">
                      No hay resultados...
                    </span>
                  ))}
              </div>
            </TabsContent>
          );
        })}
      </Tabs>
    </div>
  );
};

export default UserTasksTabs;