You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

62 lines
1.5 KiB
JavaScript

import { useState, useEffect } from "react";
export function useDebounce(value, delay) {
const [debouncedValue, setDebouncedValue] = useState(value);
useEffect(() => {
const handler = setTimeout(() => {
setDebouncedValue(value);
}, delay);
return () => {
clearTimeout(handler);
};
}, [value, delay]);
return debouncedValue;
}
export function useModalState(state = false) {
const [isOpen, setIsOpen] = useState(state);
const toggle = () => {
setIsOpen(!isOpen);
};
const [data, setData] = useState(null);
return {
isOpen,
toggle,
setIsOpen,
data,
setData,
};
}
export function usePagination(auth, r) {
const [loading, setLoading] = useState(false)
const [data, setData] = useState({
data: [],
links: [],
from: 0,
to: 0,
total: 0
})
const page = data.links.find(link => link.active === true)
const fetch = (page = 1, params = {}) => {
setLoading(true)
axios
.get(route(r, { page: page, ...params }), {
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + auth.user.jwt_token,
},
})
.then((res) => {
setData(res.data)
})
.catch((err) => console.log(err))
.finally(() => setLoading(false))
};
return [data.data, data, page?.label, fetch, loading]
}