projeto-hit/frontend/src/hooks/useTickets/index.js

85 lines
1.6 KiB
JavaScript

import { useState, useEffect } from "react"
import toastError from "../../errors/toastError"
import api from "../../services/api"
const useTickets = ({
searchParam,
searchParamContent,
pageNumber,
status,
date,
showAll,
queueIds,
withUnreadMessages,
unlimited,
tab
}) => {
const [loading, setLoading] = useState(true)
const [hasMore, setHasMore] = useState(false)
const [tickets, setTickets] = useState([])
const [remoteTicketsControll, setRemoteTicketsControll] = useState([])
useEffect(() => {
setLoading(true)
const delayDebounceFn = setTimeout(() => {
const fetchTickets = async () => {
try {
if ((tab === 'search') && (!searchParam || searchParam.trim().length === 0 || searchParam.trim().length > 40 || searchParam.endsWith(' '))) {
return
}
const { data } = await api.get("/tickets", {
params: {
searchParam,
searchParamContent,
pageNumber,
status,
date,
showAll,
queueIds,
withUnreadMessages,
unlimited
},
})
setTickets(data.tickets)
setHasMore(data.hasMore)
setLoading(false)
if (data?.remoteTicketsControll) {
setRemoteTicketsControll(data.remoteTicketsControll.map(t => +t))
}
} catch (err) {
setLoading(false)
toastError(err)
}
}
fetchTickets()
}, 500)
return () => clearTimeout(delayDebounceFn)
}, [
searchParam,
searchParamContent,
pageNumber,
status,
date,
showAll,
queueIds,
withUnreadMessages,
tab,
unlimited
])
return { tickets, loading, hasMore, remoteTicketsControll }
}
export default useTickets