task-managment / src / app / dashboard / tasks / _components / TaskList.tsx
TaskList.tsx
Raw
'use client'
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
import { Kanban, ListTree } from "lucide-react";
import ErrorBoundary from "@/components/ErrorBoundary";
import { lazy, Suspense } from "react";
import TasksListSkeleton from "./TaskListSkeleton";
import DialogCreateTask from "@/components/tasks/DialogCreateTask";
import Loading from "@/components/Loading";
import { EmplyPlaceHolder, EmptyContent, EmptyIcon, EmptyTitle } from "@/components/EmplyPlaceHolder";

const TaskListTable = lazy(()=>import("./TaskListTable"))
const TaskListCanvas = lazy(()=>import( "./TaskListCanvas"))

const ErrorTasksFallback=()=>{
  return (
    <div className="min-h-[60vh] grid place-content-center">
            <EmplyPlaceHolder>
          <EmptyIcon iconName="error" />
          <EmptyTitle className="text-base">Ocurrió un error</EmptyTitle>
          <EmptyContent className="text-xs">
            Por favor, revisa tu conexión a internet o intenta más tarde.
          </EmptyContent>
        </EmplyPlaceHolder>
          </div>
  )
}

const TaskList = ({ searchParams }: { searchParams: Record<string, any> }) => {

  return (
    <div className="space-y-10 ">
      <Tabs className=" w-full mt-5 " defaultValue="list">
        <TabsList className="bg-transparent w-full" asChild>
          <div className="flex justify-between ">
            <div>
              <TabsTrigger value="list" name="list">
                <div className="flex gap-1 items-center">
                  <ListTree />
                  <p>Lista</p>
                </div>
              </TabsTrigger>
              <TabsTrigger value="canvas" name="canvas">
                <div className="flex gap-1 items-center">
                  <Kanban />
                  <p>Kanvan</p>
                </div>
              </TabsTrigger>
            </div>
            <div className="flex gap-3">
           
            <DialogCreateTask />
          
            </div>
          </div>
        </TabsList>
        <TabsContent value="list" className=" w-full min-h-80vh px-1">
          <ErrorBoundary fallback={<ErrorTasksFallback/>}>
            <Suspense key={`${searchParams?.q}`} fallback={<TasksListSkeleton />}>
              <TaskListTable searchParams={searchParams} />
            </Suspense>
          </ErrorBoundary>
        </TabsContent>
        <TabsContent value="canvas" className=" w-full min-h-80vh px-2  ">
          <ErrorBoundary fallback={<ErrorTasksFallback/>}>
            <Suspense key={`${searchParams?.q}`} fallback={<div className="grid place-content-center min-h-[60vh]"><Loading/></div>}>
              <TaskListCanvas searchParams={searchParams} />
            </Suspense>
          </ErrorBoundary>
        </TabsContent>
      </Tabs>
    </div>
  );
};

export default TaskList;