143 lines
4.1 KiB
JavaScript
143 lines
4.1 KiB
JavaScript
import { useState, useEffect } from 'react';
|
|
import progressService from '../services/serviceProgress';
|
|
|
|
const useProgress = () => {
|
|
const [students, setStudents] = useState([]);
|
|
const [classes, setClasses] = useState([]);
|
|
const [loading, setLoading] = useState(true);
|
|
const [error, setError] = useState(null);
|
|
|
|
const [searchStudent, setSearchStudent] = useState("");
|
|
const [sortStudent, setSortStudent] = useState("");
|
|
const [pageStudent, setCurrentPageStudent] = useState(1);
|
|
const [limitStudent, setLimitStudent] = useState(20);
|
|
const [totalPagesStudent, setTotalPagesStudent] = useState(0);
|
|
const [totalDataStudent, setTotalDataStudent] = useState(null);
|
|
|
|
const [searchClass, setSearchClass] = useState("");
|
|
const [sortClass, setSortClass] = useState("");
|
|
const [pageClass, setCurrentPageClass] = useState(1);
|
|
const [limitClass, setLimitClass] = useState(1000);
|
|
const [totalPagesClass, setTotalPagesClass] = useState(0);
|
|
const [totalDataClass, setTotalDataClass] = useState(null);
|
|
|
|
const [selectedId, setSelectedId] = useState('');
|
|
const [selected, setSelected] = useState([]);
|
|
const [show, setShow] = useState(false);
|
|
const [loadingModal, setLoadingModal] = useState(true);
|
|
|
|
const fetchDataStudents = async () => {
|
|
setLoading(true);
|
|
try {
|
|
const student = await progressService.fetchDataStudent(searchStudent, sortStudent, pageStudent, limitStudent);
|
|
setStudents(student.payload.monitorings);
|
|
setTotalPagesStudent(student.payload.totalPages);
|
|
setTotalDataStudent(student.payload.totalItems);
|
|
} catch (err) {
|
|
setError(err);
|
|
} finally {
|
|
setLoading(false);
|
|
}
|
|
};
|
|
|
|
const fetchDataClasses = async () => {
|
|
setLoading(true);
|
|
try {
|
|
const classes = await progressService.fetchDataClass(searchClass, sortClass, pageClass, limitClass);
|
|
setClasses(classes.payload.classes);
|
|
setTotalDataClass(classes.payload.totalItems);
|
|
} catch (err) {
|
|
setError(err);
|
|
} finally {
|
|
setLoading(false);
|
|
}
|
|
};
|
|
|
|
const handleSearchChangeStudents = () => {
|
|
fetchDataStudents();
|
|
setCurrentPageStudent(1);
|
|
}
|
|
|
|
const handlePageChangeStudents = (pages) => {
|
|
setCurrentPageStudent(pages);
|
|
}
|
|
|
|
const handleLimitsChangeStudents = (e) => {
|
|
setLimitStudent(e.target.value);
|
|
setCurrentPageStudent(1);
|
|
}
|
|
|
|
const handleSearchChangeClasses = () => {
|
|
fetchDataClasses();
|
|
setCurrentPageClass(1);
|
|
}
|
|
|
|
const handlePageChangeClasses = (pages) => {
|
|
setCurrentPageClass(pages);
|
|
}
|
|
|
|
const handleLimitsChangeClasses = (e) => {
|
|
setLimitClass(e.target.value);
|
|
setCurrentPageClass(1);
|
|
}
|
|
|
|
useEffect(() => {
|
|
fetchDataStudents();
|
|
}, [pageStudent, limitStudent]);
|
|
|
|
useEffect(() => {
|
|
fetchDataClasses();
|
|
}, [pageClass, limitClass]);
|
|
|
|
const getClassTopic = async (id) => {
|
|
setLoadingModal(true);
|
|
try {
|
|
const classes = await progressService.getTopicByClass(id);
|
|
setSelected(classes.payload.data);
|
|
} catch (err) {
|
|
console.log(err);
|
|
}finally{
|
|
setLoadingModal(false);
|
|
}
|
|
};
|
|
|
|
const handleShow = (data) => {
|
|
setSelectedId(data);
|
|
getClassTopic(data);
|
|
setShow(true);
|
|
};
|
|
const handleClose = () => {setShow(false); setSelected([])};
|
|
|
|
return {
|
|
students,
|
|
classes,
|
|
loading,
|
|
error,
|
|
|
|
totalPagesStudent,
|
|
totalDataStudent,
|
|
setSearchStudent,
|
|
pageStudent,
|
|
handlePageChangeStudents,
|
|
handleLimitsChangeStudents,
|
|
handleSearchChangeStudents,
|
|
|
|
totalPagesClass,
|
|
totalDataClass,
|
|
setSearchClass,
|
|
pageClass,
|
|
handlePageChangeClasses,
|
|
handleLimitsChangeClasses,
|
|
handleSearchChangeClasses,
|
|
|
|
selectedId,
|
|
selected,
|
|
show,
|
|
loadingModal,
|
|
handleShow,
|
|
handleClose,
|
|
};
|
|
};
|
|
|
|
export default useProgress;
|