63 lines
1.6 KiB
JavaScript
63 lines
1.6 KiB
JavaScript
import { useState, useEffect } from 'react';
|
|
import levelService from '../services/serviceMaterials';
|
|
|
|
const useMaterials = () => {
|
|
const [levels, setLevels] = useState([]);
|
|
const [loading, setLoading] = useState(true);
|
|
const [error, setError] = useState(null);
|
|
|
|
const [search, setSearch] = useState("");
|
|
const [sort, setSort] = useState("");
|
|
const [page, setCurrentPage] = useState(1);
|
|
const [limit, setLimit] = useState(7);
|
|
const [totalPages, setTotalPages] = useState(0);
|
|
const [totalData, setTotalData] = useState(null);
|
|
|
|
const fetchData = async () => {
|
|
setLoading(true);
|
|
try {
|
|
const data = await levelService.fetchData(search, sort, page, limit);
|
|
setTotalPages(data.payload.totalPages);
|
|
setTotalData(data.payload.totalItems);
|
|
setLevels(data.payload.levels);
|
|
} catch (err) {
|
|
setError(err);
|
|
} finally {
|
|
setLoading(false);
|
|
}
|
|
};
|
|
|
|
const handleSerachChange = () => {
|
|
fetchData();
|
|
setCurrentPage(1);
|
|
}
|
|
|
|
const handlePageChange = (pages) => {
|
|
setCurrentPage(pages);
|
|
}
|
|
|
|
const handleLimitsChange = (e) => {
|
|
setLimit(e.target.value);
|
|
setCurrentPage(1);
|
|
}
|
|
|
|
useEffect(() => {
|
|
fetchData();
|
|
}, [page, limit]);
|
|
|
|
return {
|
|
levels,
|
|
loading,
|
|
error,
|
|
page,
|
|
totalData,
|
|
totalPages,
|
|
setSearch,
|
|
handlePageChange,
|
|
handleLimitsChange,
|
|
handleSerachChange,
|
|
};
|
|
};
|
|
|
|
export default useMaterials;
|