import { useMutation } from "@apollo/client/react"; import { useState } from "react"; import { useTranslation } from "react-i18next"; import { logImEXEvent } from "../../firebase/firebase.utils"; import { UPDATE_JOB_ASSIGNMENTS } from "../../graphql/jobs.queries"; import JobEmployeeAssignmentsComponent from "./job-employee-assignments.component"; import { connect } from "react-redux"; import { createStructuredSelector } from "reselect"; import { insertAuditTrail } from "../../redux/application/application.actions"; import AuditTrailMapping from "../../utils/AuditTrailMappings"; import { useNotification } from "../../contexts/Notifications/notificationContext.jsx"; const mapStateToProps = createStructuredSelector({}); const mapDispatchToProps = (dispatch) => ({ insertAuditTrail: ({ jobid, operation, type }) => dispatch(insertAuditTrail({ jobid, operation, type })) }); export default connect(mapStateToProps, mapDispatchToProps)(JobEmployeeAssignmentsContainer); export function JobEmployeeAssignmentsContainer({ job, refetch, insertAuditTrail }) { const { t } = useTranslation(); const [updateJob] = useMutation(UPDATE_JOB_ASSIGNMENTS); const [loading, setLoading] = useState(false); const notification = useNotification(); const handleAdd = async (assignment) => { const { operation, employeeid, name } = assignment; const empAssignment = determineFieldName(operation); if (!job?.id || !empAssignment || !employeeid) return; setLoading(true); try { logImEXEvent("job_assign_employee", { operation }); const result = await updateJob({ variables: { jobId: job.id, job: { [empAssignment]: employeeid } } }); if (typeof refetch === "function") await refetch(); if (!result.errors) { insertAuditTrail({ jobid: job.id, operation: AuditTrailMapping.jobassignmentchange(operation, name), type: "jobassignmentchange" }); } else { notification.error({ title: t("jobs.errors.assigning", { message: JSON.stringify(result.errors) }) }); } } finally { setLoading(false); } }; const handleRemove = async (operation) => { const empAssignment = determineFieldName(operation); if (!job?.id || !empAssignment) return; setLoading(true); try { logImEXEvent("job_unassign_employee", { operation }); const result = await updateJob({ variables: { jobId: job.id, job: { [empAssignment]: null } } }); if (typeof refetch === "function") await refetch(); if (!result.errors) { insertAuditTrail({ jobid: job.id, operation: AuditTrailMapping.jobassignmentremoved(operation), type: "jobassignmentremoved" }); } else { notification.error({ title: t("jobs.errors.assigning", { message: JSON.stringify(result.errors) }) }); } } finally { setLoading(false); } }; return (