import React, { useEffect, useState } from "react"; import { Tooltip } from "react-tooltip"; import Swal from "sweetalert2"; // Import SweetAlert2 import { confirmHoldToDelete } from "../utils/confirmHoldToDelete"; import BASE_URL from "@backend/server/config"; import DeductionModal from './deductionModal'; // Import the modal import Breadcrumbs from "../breadcrumbs/Breadcrumbs"; import { Plus } from "lucide-react"; // Import Plus icon from lucide-react import { useSession } from "../../context/SessionContext"; // import usePermissions from "../../components/user_permisson/hooks/usePermissions"; import usePermissions from "../../users/hooks/usePermissions"; import { SquarePen, Trash2 } from 'lucide-react'; import IconButton from "../../../Styles/icons/IconButton"; const Deduction = () => { const { user } = useSession(); const { permissions, loading: permLoading } = usePermissions(user?.username); const [data, setData] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [modalOpen, setModalOpen] = useState(false); const [selectedRecord, setSelectedRecord] = useState(null); const fetchContributions = () => { setLoading(true); fetch(`${BASE_URL}/api/deduction/deduction`) .then((response) => response.json()) .then((result) => { if (result.success) { // Convert id to number const formattedData = result.data.map(item => ({ ...item, id: Number(item.id), // Ensure id is a number })); setData(formattedData); } else { setError(result.message); } setLoading(false); }) .catch((err) => { setError("Failed to fetch data"); setLoading(false); }); }; useEffect(() => { fetchContributions(); // Call function on mount }, []); const handleEdit = (record) => { setSelectedRecord(record); setModalOpen(true); }; const handleDeleteEmployee = async (id) => { const result = await confirmHoldToDelete({ title: "Are you sure?", text: "You won't be able to revert this!", }); if (result.isConfirmed) { fetch(`${BASE_URL}/api/deduction/delete_deduction`, { method: 'DELETE', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ id }), }) .then((response) => response.json()) .then((result) => { if (result.success) { Swal.fire("Deleted!", "The deduction has been deleted.", "success"); fetchContributions(); // Refresh the data } else { Swal.fire("Error", result.message, "error"); } }) .catch((err) => { console.error(err); Swal.fire("Error", "Failed to delete deduction", "error"); }); } }); }; const handleModalClose = () => { setModalOpen(false); setSelectedRecord(null); }; const formatTime = (timeString) => { const [hours, minutes] = timeString.split(':'); const hoursIn12 = (hours % 12) || 12; // Convert to 12-hour format const ampm = hours < 12 ? 'AM' : 'PM'; return `${hoursIn12}:${minutes} ${ampm}`; }; if (loading) return

Loading...

; if (error) return

Error: {error}

; const breadcrumbItems = [ // { label: 'Home', path: '/' }, { label: 'Utilities Dashboard', path: '/utilitiesdashboard' }, { label: 'Deductions' }, ]; return (
{/* Header Section */}
Deductions
{/* */} {!permLoading && permissions?.can_add && ( )}
{/* */} {!permLoading && permissions?.can_edit ? ( ) : ( )} {data.map((item, index) => ( {/* */} ))}
idstart_time end_time deductionAction
{item.id}{formatTime(item.start_time)} {formatTime(item.end_time)} {item.deduction} {!permLoading && permissions?.can_edit && ( handleEdit(item)} > )} {!permLoading && permissions?.can_delete && ( handleDeleteEmployee(item.id)} > )}
); }; export default Deduction;