task-managment / src / app / dashboard / projects / _components / ProjectsList.tsx
ProjectsList.tsx
Raw
"use client";
import {
  addLocalOffsetFromDate,
  cn,
  formatPricePesos,
  getStatusColor,
} from "@/lib/utils";
import Link from "next/link";
import { TbHomeEdit } from "react-icons/tb";
import { MdApartment } from "react-icons/md";
import { trpc } from "@/app/_trpc/client";
import moment from "moment";
import { EmplyPlaceHolder, EmptyContent, EmptyIcon, EmptyTitle } from "@/components/EmplyPlaceHolder";

const ProjectsList = ({
  searchParams,
}: {
  searchParams: Record<string, string>;
}) => {
  
  const [data] = trpc.projects.getProjects.useSuspenseQuery(searchParams, {
    refetchOnMount: false,
  });

  if(!data?.projects.length){
    return(
      <div className="min-h-[55vh] grid place-content-center">
      <EmplyPlaceHolder>
        <EmptyIcon iconName="notFoundCat" className="text-primary/80" />
        <EmptyTitle className="text-2xl mt-1 font-bold">Projectos no encotrados</EmptyTitle>
        <EmptyContent className="text-center">Intente distintos filtros de busqueda </EmptyContent>
      </EmplyPlaceHolder>
    </div>
  );
    
  }

 

  return (
    <div className=" mt-2 min-h-[80%]">
      <section className="">

        <div className="grid gap-5 pt-5 grid-cols-[repeat(auto-fill,minmax(270px,1fr))] ">
          {data?.projects?.map((project) => {
            return (
              <Link
                key={project?.id}
                href={`/dashboard/projects/${project?.id}`}
              >
                <article className="bg-white relative flex items-center gap-3 rounded-xl py-6 space-y-3 px-5">
                  <div className="absolute top-3 right-3 flex gap-2 justify-between">
                    <div
                      className={cn(
                        "text-xs px-2 pt-0.5 capitalize font-semibold rounded-xl",
                        getStatusColor(project?.status!)
                      )}
                    >
                      {project?.status}
                    </div>
                  </div>
                  <div
                    className={cn(
                      "h-20 w-20 rounded-2xl grid place-content-center text-center p-3",
                      project?.residence === "casa"
                        ? "bg-primary"
                        : "bg-slate-500"
                    )}
                  >
                    {project?.residence === "casa" ? (
                      <TbHomeEdit size={40} className="text-white" />
                    ) : (
                      <MdApartment size={40} className="text-white" />
                    )}
                  </div>
                  <div className="flex-1 min-w-0 pt-1">
                    <p className="text-sm font-semibold capitalize">
                      Nombre:{" "}
                      <span className="truncate overflow-hidden text-ellipsis whitespace-nowrap block max-w-[150px]">
                        {project?.name}
                      </span>
                    </p>
                    <p className="text-sm font-medium truncate overflow-hidden text-ellipsis">
                      Cotización:{" "}
                      {formatPricePesos(
                        (project?.totalCostMaterials || 0) +
                         (project?.totalCostPerMeter || 0) +
                          (project?.laborCost || 0)
                      )}
                    </p>
                
                  </div>
                </article>
              </Link>
            );
          })}
        </div>
      </section>
    </div>
  );
};

export default ProjectsList;