import React, { useState } from "react"; import { daysLeft, getNextBadgeColor } from "../../utils/appUtils"; import { useServiceProjectJobs } from "../../hooks/useServiceProject"; import { ITEMS_PER_PAGE } from "../../utils/constants"; import EmployeeAvatarGroup from "../common/EmployeeAvatarGroup"; import { formatUTCToLocalTime } from "../../utils/dateUtils"; import { SpinnerLoader } from "../common/Loader"; import { useParams } from "react-router-dom"; import ProjectPage from "../../pages/project/ProjectPage"; import { useServiceProjectJobContext } from "./Jobs"; const JobList = () => { const { setSelectedJob, setManageJob } = useServiceProjectJobContext(); const { projectId } = useParams(); const { data, isLoading, isError, error } = useServiceProjectJobs( ITEMS_PER_PAGE, 1, true, projectId ); const jobGrid = [ { key: "jobTicketUId", label: "Job Id", getValue: (e) => e?.jobTicketUId || "N/A", align: "text-start", }, { key: "title", label: "Title", getValue: (e) => ( setSelectedJob({ showCanvas: true, job: e?.id }) } > {e?.title} ), isAlwaysVisible: true, className: "text-start", }, { key: "dueDate", label: "Due On", getValue: (e) => formatUTCToLocalTime(e.startDate), isAlwaysVisible: true, className: "text-start d-none d-sm-table-cell", }, { key: "status", label: "Status", getValue: (e) => { const statusName = e?.status?.displayName || "N/A"; const statusColorMap = { Assigned: "label-primary", Pending: "label-warning", Completed: "label-success", Cancelled: "label-danger", }; const badgeColor = statusColorMap[statusName] || "label-secondary"; return ( {statusName} ); }, isAlwaysVisible: true, className: "text-start d-none d-sm-table-cell", }, { key: "daysLeft", label: "Days Left", getValue: (e) => { const { days, color } = daysLeft(e.startDate, e.dueDate); return ( {days !== null ? `${days} days` : "N/A"} ); }, isAlwaysVisible: true, className: "text-start d-none d-sm-table-cell" } ]; return (
{jobGrid.map((col) => ( ))} {Array.isArray(data?.data) && data.data.length > 0 ? ( data.data.map((row, i) => ( {jobGrid.map((col) => ( ))} )) ) : ( )}
{col.label}
Actions
{col.getValue(row)}
{/* View always visible */} <>
{isLoading ? : "Not Found Jobs."}
); }; export default JobList;