diff --git a/src/components/ServiceProject/JobComments.jsx b/src/components/ServiceProject/JobComments.jsx index 894c1b38..ff86577c 100644 --- a/src/components/ServiceProject/JobComments.jsx +++ b/src/components/ServiceProject/JobComments.jsx @@ -22,7 +22,7 @@ const JobComments = ({ data }) => { formState: { errors }, } = useAppForm({ resolver: zodResolver(JobCommentSchema), - defaultValues:{ comment: "", attachments: [] } + defaultValues: { comment: "", attachments: [] } }); const { @@ -119,38 +119,49 @@ const JobComments = ({ data }) => { -
-
document.getElementById("attachments").click()} - className="cursor-pointer" - > - { - onFileChange(e); - e.target.value = ""; - }} - /> - - Add Attachment +
+ {/* LEFT SIDE → Uploaded Files */} +
+ {files?.length > 0 && ( + + )} +
+ + {/* RIGHT SIDE → Add Attachment + Submit */} +
+
document.getElementById("attachments").click()} + className="cursor-pointer" + style={{ whiteSpace: 'nowrap' }} + > + { + onFileChange(e); + e.target.value = ""; + }} + /> + + Add Attachment +
+ + +
-
- {files?.length > 0 && ( - - )} +
diff --git a/src/components/ServiceProject/ManageJobTicket.jsx b/src/components/ServiceProject/ManageJobTicket.jsx index 7339c9a8..5f29b125 100644 --- a/src/components/ServiceProject/ManageJobTicket.jsx +++ b/src/components/ServiceProject/ManageJobTicket.jsx @@ -7,6 +7,7 @@ import Avatar from "../common/Avatar"; import EmployeeAvatarGroup from "../common/EmployeeAvatarGroup"; import JobStatusLog from "./JobStatusLog"; import JobComments from "./JobComments"; +import { daysLeft } from "../../utils/appUtils"; const ManageJobTicket = ({ Job }) => { const { data, isLoading, isError, error } = useServiceProjectJobDetails( @@ -17,14 +18,14 @@ const ManageJobTicket = ({ Job }) => { { id: "comment", title: "Comments", - icon:"bx bx-comment me-2", + icon: "bx bx-comment me-2", active: true, content: , }, { id: "history", title: "History", - icon:"bx bx-time me-2", + icon: "bx bx-time me-2", active: false, content: , }, @@ -41,56 +42,79 @@ const ManageJobTicket = ({ Job }) => { return (
-
{data?.title}
-
-
- {" "} - {formatUTCToLocalTime(data?.createdAt, true)} -
+
{data?.status?.name} + {data?.dueDate && (() => { + const { days, color } = daysLeft(data?.startDate, data?.dueDate); + return ( + + Days Left : + + {days !== null ? `${days} days` : "N/A"} + + + ); + })()} +
-
-

{data?.description}

+
{data?.title}
+ +
+

+ Description : + {data?.description || "N/A"} +

-
- - Start Date : {formatUTCToLocalTime(data?.startDate)} - {" "} - {" "} - - Due on : {formatUTCToLocalTime(data?.startDate)} - + + +
+
+ {" "} + Created Date : {formatUTCToLocalTime(data?.createdAt, true)} +
-
+ +
+
+ + Start Date : {formatUTCToLocalTime(data?.startDate)} + {" "} + {" "} + + Due on : {formatUTCToLocalTime(data?.startDate)} + +
+
+
- - Created By - {" "} + + Created By + {" "} {" "} -
-

{`${data?.createdBy?.firstName} ${data?.createdBy?.lastName}`}

- ({data?.createdBy?.jobRoleName}) -
+
+

{`${data?.createdBy?.firstName} ${data?.createdBy?.lastName}`}

+ ({data?.createdBy?.jobRoleName}) +
- - Assigned + + Assigned By -
- {data?.assignees?.map((emp)=>( +
+ {data?.assignees?.map((emp) => (
- +

{`${emp.firstName} ${emp.lastName}`}

- ( {emp.jobRoleName} ) -
+ ({emp.jobRoleName})
+
))} -
+
@@ -106,7 +130,7 @@ const ManageJobTicket = ({ Job }) => { data-bs-target={`#tab-${tab.id}`} role="tab" > - {tab.title} + {tab.title} ))} diff --git a/src/components/common/OffcanvasComponent.jsx b/src/components/common/OffcanvasComponent.jsx index 970785ae..f9e2d1c1 100644 --- a/src/components/common/OffcanvasComponent.jsx +++ b/src/components/common/OffcanvasComponent.jsx @@ -6,7 +6,7 @@ const OffcanvasComponent = ({ placement = "start", // start | end | top | bottom children, show = false, - onClose = () => {}, + onClose = () => { }, }) => { const offcanvasRef = useRef(null); const bsInstance = useRef(null); @@ -45,11 +45,19 @@ const OffcanvasComponent = ({ aria-labelledby={`${id}-label`} >
-
-
{title}
-
- +
+ + +
+ {title} +
+
+ +