task-managment / src / app / dashboard / log / hooks / useLogPage.tsx
useLogPage.tsx
Raw
"use client";
import { trpc } from "@/app/_trpc/client";
import useFormHandler from "@/hooks/useFormHandler";
import { logsSchema } from "@/lib/schemas/logsSchema";
import { useEffect, useState } from "react";
import { z } from "zod";


const logsSchemaModified = logsSchema.extend({
  startDate: z.date().optional(),
  endDate: z.date().optional(),
})

const getTomorrowDate = () => {
  const tomorrow = new Date();
  tomorrow.setDate(tomorrow.getDate() + 1);
  return tomorrow;
};

const useLogPage = () => {
  const [paginationParams, setPaginationParams] = useState<
    z.infer<typeof logsSchemaModified>
  >({
    limit: 10,
    startDate: new Date(),
    endDate: getTomorrowDate(),
    cursor: undefined,
  });
  const [results, setResults] = useState<any>([]);

  const { form, isInputChanged, setIsInputChanged } = useFormHandler(
    logsSchemaModified,
    paginationParams
  );

  const { data, isPending, error,isError} =
    trpc.eventLogs.getLogs.useQuery({...paginationParams,startDate:paginationParams.startDate?.toISOString(),endDate:paginationParams.endDate?.toISOString()});

  useEffect(() => {
    if (!data?.data) return;
    setResults([...results,...data?.data]);
  }, [paginationParams, data]) // eslint-disable-next-line react-hooks/exhaustive-deps


  //filtra registros por fecha
  const onSubmit = (values: z.infer<typeof logsSchemaModified>) => {
    setResults([]);
    //reinicia cursor cuandos se filtra por fecha
    setPaginationParams({
      ...paginationParams,
      startDate: values.startDate,
      endDate: values.endDate,
      cursor: undefined,
    });
  };
  return {
    onSubmit,
    isInputChanged,
    results,
    cursor:data?.cursor || undefined ,
    form,
    isError,
    isPending,
    setPaginationParams
  };
};

export default useLogPage;