task-managment / src / app / dashboard / users / hooks / useGetUsers.ts
useGetUsers.ts
Raw
import { trpc } from "@/app/_trpc/client";
import { User } from "@/server/user/domain/models";
import React, { useEffect, useState } from "react";

export default function useGetUsers() {
  const [users, setUsers] = useState<User[]>([]);
  const [data] = trpc.users.getUsers.useSuspenseQuery(undefined,{
    refetchOnMount:"always",
    refetchOnWindowFocus:false
  });

  useEffect(()=>{
    setUsers(data as any)
  },[data])

  const handleUpdateUser=(userToUpdate:User)=>{
    setUsers((prev)=>prev.map(item=>{
      const userInList=item.id === userToUpdate.id
      return userInList ?{...item,...userToUpdate}:item
    }))
  }

  const handleDeleteUser=(userId:string)=>{
    setUsers((prev)=>prev.filter(user=>user.id !== userId))
  }
  return({
    users,
    handleUpdateUser,
    handleDeleteUser
  })
}