first commit
This commit is contained in:
115
ui/TicketDetailModel.tsx
Normal file
115
ui/TicketDetailModel.tsx
Normal file
@@ -0,0 +1,115 @@
|
||||
"use client";
|
||||
|
||||
import {
|
||||
Dialog,
|
||||
DialogTitle,
|
||||
DialogContent,
|
||||
IconButton,
|
||||
Typography,
|
||||
Chip,
|
||||
Divider,
|
||||
} from "@mui/material";
|
||||
import CloseIcon from "@mui/icons-material/Close";
|
||||
import { ticketPriorities, ticketStatuses } from "@/core/constant";
|
||||
import { TicketInterface } from "@/core/types";
|
||||
|
||||
export default function TicketDetailModal({
|
||||
open,
|
||||
onClose,
|
||||
ticket,
|
||||
}: {
|
||||
open: boolean;
|
||||
onClose: () => void;
|
||||
ticket: TicketInterface | null;
|
||||
}) {
|
||||
if (!ticket) return null;
|
||||
const status = ticketStatuses.find((p) => p.id === ticket?.status);
|
||||
const priority = ticketPriorities.find((p) => p.id === ticket?.priority);
|
||||
return (
|
||||
<Dialog open={open} onClose={onClose} fullWidth maxWidth="sm">
|
||||
<DialogTitle className="flex justify-between items-center text-slate-800">
|
||||
<span>جزئیات تیکت #{ticket.id.slice(-6)}</span>
|
||||
<IconButton onClick={onClose} size="small">
|
||||
<CloseIcon />
|
||||
</IconButton>
|
||||
</DialogTitle>
|
||||
|
||||
<DialogContent dividers>
|
||||
<div className="space-y-4">
|
||||
<div>
|
||||
<Typography variant="subtitle2" className="text-slate-500">
|
||||
واحد / بخش
|
||||
</Typography>
|
||||
<Typography className="font-semibold text-slate-900">
|
||||
{ticket.department?.displayName}
|
||||
</Typography>
|
||||
</div>
|
||||
<div>
|
||||
<Typography variant="subtitle2" className="text-slate-500">
|
||||
كاربر
|
||||
</Typography>
|
||||
<Typography className="font-semibold text-slate-900">
|
||||
{ticket.createdBy}
|
||||
</Typography>
|
||||
</div>
|
||||
<div>
|
||||
<Typography variant="subtitle2" className="text-slate-500">
|
||||
ارجاع به
|
||||
</Typography>
|
||||
<Typography className="font-semibold text-slate-900">
|
||||
{ticket.assignee.fullname}
|
||||
</Typography>
|
||||
</div>
|
||||
<div className="flex items-center justify-start gap-4">
|
||||
<div>
|
||||
<Typography variant="subtitle2" className="text-slate-500">
|
||||
وضعیت
|
||||
</Typography>
|
||||
<Chip
|
||||
label={status?.displayName}
|
||||
className={`mt-1 bg-blue-100 text-blue-700 font-medium`}
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<Typography variant="subtitle2" className="text-slate-500">
|
||||
اولویت
|
||||
</Typography>
|
||||
<Chip
|
||||
label={priority?.displayName}
|
||||
className={`mt-1 bg-red-100 text-red-700 font-medium`}
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<Typography variant="subtitle2" className="text-slate-500">
|
||||
محل وقوع مشكل
|
||||
</Typography>
|
||||
<Chip
|
||||
label={ticket?.location}
|
||||
className={`mt-1 bg-blue-100 text-blue-700 font-medium`}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<Divider />
|
||||
|
||||
<div>
|
||||
<Typography variant="subtitle2" className="text-slate-500">
|
||||
توضیحات
|
||||
</Typography>
|
||||
<Typography className="text-slate-700 mt-2 leading-relaxed bg-slate-50 p-3 rounded-lg border border-slate-100">
|
||||
{ticket.description || "توضیحی ثبت نشده است."}
|
||||
</Typography>
|
||||
</div>
|
||||
<div>
|
||||
<Typography variant="subtitle2" className="text-slate-500">
|
||||
اقدام كارشناس
|
||||
</Typography>
|
||||
<Typography className="text-slate-700 mt-2 leading-relaxed bg-slate-50 p-3 rounded-lg border border-slate-100">
|
||||
{ticket.helpdeskAction || "توضیحی ثبت نشده است."}
|
||||
</Typography>
|
||||
</div>
|
||||
</div>
|
||||
</DialogContent>
|
||||
</Dialog>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user