frontend_adaptive_learning/src/roles/admin/manage_teachers/hooks/useTeachers.jsx

201 lines
5.7 KiB
JavaScript

import { useState, useEffect } from 'react';
import teacherService from '../services/serviceTeachers';
const useTeachers = () => {
const [teachers, setTeachers] = useState([]);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
const [selectedTeacher, setSelectedTeacher] = useState(null);
const [formData, setFormData] = useState({
fullName: '',
nip: '',
email: '',
pass: '',
confirm_pass: '',
});
const [show, setShow] = useState(false);
const [showLoader, setShowLoader] = useState(false);
const [loaderState, setLoaderState] = useState({ loading: false, successMessage: '', title: '', description: '', confirmAction: false });
const resetForm = () =>{
setFormData({
fullName: '',
nip: '',
email: '',
pass: '',
confirm_pass: '',
});
}
const createTeacher = async (data) => {
try {
const newTeacher ={
NAME_USERS: data.fullName,
EMAIL: data.email,
NIP: data.nip,
PASSWORD: data.pass,
CONFIRM_PASSWORD: data.confirm_pass,
};
const createdTeacher = await teacherService.createData(newTeacher);
setLoaderState(prev => ({
...prev,
loading: false,
successMessage: 'New teacher has been successfully created. waiting to verify the email.'
}));
resetForm();
} catch (err) {
setLoaderState(prev => ({
...prev,
title: "ERROR",
loading: false,
successMessage: err.response.data.message
}));
}
};
const editTeacher = async (id, data) => {
const formData = new FormData();
formData.append('NAME_USERS', data.fullName);
formData.append('EMAIL', data.email);
formData.append('NIP', data.nip);
try {
const Teacher = await teacherService.updateData(id, formData);
setTeachers((prevTeachers) =>
prevTeachers.map((s) => (s.ID === id ? Teacher.payload : s))
);
setLoaderState(prev => ({
...prev,
loading: false,
successMessage: 'Your data has been successfully updated.'
}));
} catch (err) {
setLoaderState(prev => ({
...prev,
title: "ERROR",
loading: false,
successMessage: err.response.data.message
}));
}
};
const deleteTeacher = async (id) => {
handleShowLoader('Deleted', '', true)
try {
await teacherService.deleteData(id);
setTeachers((prevTeachers) => prevTeachers.filter((s) => s.ID !== id));
setLoaderState(prev => ({
...prev,
loading: false,
successMessage: 'Your data has been successfully deleted.'
}));
} catch (err) {
setLoaderState(prev => ({
...prev,
title: "ERROR",
loading: false,
successMessage: err.response.data.message
}));
}
};
const handleFormChange = (e) => {
setFormData({ ...formData, [e.target.name]: e.target.value });
};
const handleShow = (data) => {
setSelectedTeacher(data);
setFormData({
fullName: data?.NAME_USERS || '',
nip: data?.NIP || '',
email: data?.EMAIL || ''
});
setShow(true);
};
const handleClose = () => {setShow(false); resetForm(); setSelectedTeacher(null)};
const handleCloseLoader = () => setShowLoader(false);
const handleShowLoader = (title, description, loading = false, successMessage = '', confirmAction = false) => {
setLoaderState({ title, description, loading, successMessage, confirmAction });
setShowLoader(true);
};
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 teacherService.fetchData(search, sort, page, limit);
setTotalPages(data.payload.totalPages);
setTotalData(data.payload.totalTeachers);
setTeachers(data.payload.teachers);
} 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 {
teachers,
loading,
error,
selectedTeacher,
formData,
createTeacher,
editTeacher,
deleteTeacher,
setSelectedTeacher,
setFormData,
handleFormChange,
resetForm,
show,
setShow,
handleShow,
handleClose,
showLoader,
handleShowLoader,
handleCloseLoader,
loaderState,
setLoaderState,
totalPages,
totalData,
setSearch,
page,
handlePageChange,
handleLimitsChange,
handleSerachChange
};
};
export default useTeachers;