Files
expert-front/src/lib/app/hooks/useDatatable.jsx
2023-07-16 10:08:40 +03:30

121 lines
2.9 KiB
JavaScript

import axios from "axios";
import { useCallback, useContext, useReducer, useState } from "react";
import { ReloadDataTableContext } from "../contexts/ReloadDatatableContext";
import useUser from "./useUser";
import Notifications from "@/core/components/notifications";
import useDirection from "./useDirection";
import { useTranslations } from "next-intl";
const initialValues = {
url: "",
rowID: "",
values: {},
};
const reducer = (state, action) => {
switch (action.type) {
case "CONFIRM_DATA":
return {
...state,
url: action.url,
rowID: action.rowID,
};
case "REJECT_DATA":
return {
...state,
url: action.url,
rowID: action.rowID,
values: {},
};
default:
return state;
}
};
const useDataTable = () => {
const { setReloadDataTable } = useContext(ReloadDataTableContext);
const [state, dispatch] = useReducer(reducer, initialValues);
const [openConfirmDialog, setOpenConfirmDialog] = useState(false);
const [openRejectDialog, setOpenRejectDialog] = useState(false);
const [rowId, setRowId] = useState(null);
const { directionApp } = useDirection();
const t = useTranslations();
const { token } = useUser();
const confirmData = useCallback(async (url, rowID) => {
dispatch({ type: "CONFIRM_DATA", url: url, rowID: rowID });
axios
.post(`${url}/${rowID}`, {
headers: { authorization: `Bearer ${token}` },
})
.then(() => {
setReloadDataTable(true);
})
.catch((error) => {
Notifications(directionApp, error.response, t);
});
}, []);
const rejectData = useCallback(async (url, rowID) => {
dispatch({ type: "REJECT_DATA", url: url, rowID: rowID });
axios
.post(`${url}/${rowID}`, {
headers: { authorization: `Bearer ${token}` },
})
.then(() => {
setReloadDataTable(true);
})
.catch((error) => {
Notifications(directionApp, error.response, t);
});
}, []);
//Confirm Data
const handleOpenConfirmDialog = (row) => {
setRowId(row.getValue("id"));
setOpenConfirmDialog(true);
};
const handleCloseConfirmDialog = () => {
setOpenConfirmDialog(false);
};
const handleConfirmDialog = () => {
setOpenConfirmDialog(false);
};
//End Confirm Data
// Reject Data
const handleOpenRejectDialog = (row) => {
setRowId(row.getValue("id"));
setOpenRejectDialog(true);
};
const handleCloseRejectDialog = () => {
setOpenRejectDialog(false);
};
const handleRejectDialog = () => {
setOpenRejectDialog(false);
};
// End Reject Data
const contextValue = {
handleOpenConfirmDialog,
handleCloseConfirmDialog,
handleConfirmDialog,
handleOpenRejectDialog,
handleCloseRejectDialog,
handleRejectDialog,
rowId,
openConfirmDialog,
openRejectDialog,
rejectData,
confirmData,
};
return contextValue;
};
export default useDataTable;