Updated the tickets to allow agents to also view theirs

This commit is contained in:
Tiago Ribeiro
2024-01-31 10:47:14 +00:00
parent 2de9636c8b
commit 85729116e7
3 changed files with 31 additions and 12 deletions

View File

@@ -143,6 +143,7 @@ export default function TicketDisplay({ user, ticket, onClose }: Props) {
label: `${u.name} - ${u.email}`, label: `${u.name} - ${u.email}`,
})), })),
]} ]}
disabled={user.type === "agent"}
value={ value={
assignedTo assignedTo
? { ? {

View File

@@ -169,7 +169,7 @@ export default function Sidebar({
isMinimized={isMinimized} isMinimized={isMinimized}
/> />
)} )}
{["admin", "developer"].includes(userType || "") && ( {["admin", "developer", "agent"].includes(userType || "") && (
<Nav <Nav
disabled={disableNavigation} disabled={disableNavigation}
Icon={BsClipboardData} Icon={BsClipboardData}

View File

@@ -44,7 +44,10 @@ export const getServerSideProps = withIronSessionSsr(({ req, res }) => {
}; };
} }
if (shouldRedirectHome(user) || user.type !== "developer") { if (
shouldRedirectHome(user) ||
["admin", "developer", "agent"].includes(user.type)
) {
res.setHeader("location", "/"); res.setHeader("location", "/");
res.statusCode = 302; res.statusCode = 302;
res.end(); res.end();
@@ -93,6 +96,8 @@ export default function Tickets() {
useEffect(() => { useEffect(() => {
const filters = []; const filters = [];
if (user?.type === "agent")
filters.push((x: Ticket) => x.assignedTo === user.id);
if (typeFilter) filters.push((x: Ticket) => x.type === typeFilter); if (typeFilter) filters.push((x: Ticket) => x.type === typeFilter);
if (statusFilter) filters.push((x: Ticket) => x.status === statusFilter); if (statusFilter) filters.push((x: Ticket) => x.status === statusFilter);
if (assigneeFilter) if (assigneeFilter)
@@ -101,7 +106,7 @@ export default function Tickets() {
setFilteredTickets( setFilteredTickets(
[...filters.reduce((d, f) => d.filter(f), tickets)].sort(sortByDate), [...filters.reduce((d, f) => d.filter(f), tickets)].sort(sortByDate),
); );
}, [tickets, typeFilter, statusFilter, assigneeFilter, dateSorting]); }, [tickets, typeFilter, statusFilter, assigneeFilter, dateSorting, user]);
const columns = [ const columns = [
columnHelper.accessor("id", { columnHelper.accessor("id", {
@@ -170,6 +175,23 @@ export default function Tickets() {
}), }),
]; ];
const getAssigneeValue = () => {
if (user && user.type === "agent")
return { value: user.id, label: `${user.name} - ${user.email}` };
if (assigneeFilter) {
const assigneeUser = users.find((x) => x.id === assigneeFilter);
return assigneeUser
? {
value: assigneeFilter,
label: `${assigneeUser.name} - ${assigneeUser.email}`,
}
: null;
}
return null;
};
const table = useReactTable({ const table = useReactTable({
data: filteredTickets, data: filteredTickets,
columns: columns, columns: columns,
@@ -265,20 +287,16 @@ export default function Tickets() {
options={[ options={[
{ value: "me", label: "Assigned to me" }, { value: "me", label: "Assigned to me" },
...users ...users
.filter((x) => ["admin", "developer"].includes(x.type)) .filter((x) =>
["admin", "developer", "agent"].includes(x.type),
)
.map((u) => ({ .map((u) => ({
value: u.id, value: u.id,
label: `${u.name} - ${u.email}`, label: `${u.name} - ${u.email}`,
})), })),
]} ]}
value={ disabled={user.type === "agent"}
assigneeFilter value={getAssigneeValue()}
? {
value: assigneeFilter,
label: `${users.find((u) => u.id === assigneeFilter)?.name} - ${users.find((u) => u.id === assigneeFilter)?.email}`,
}
: null
}
onChange={(value) => onChange={(value) =>
value value
? setAssigneeFilter( ? setAssigneeFilter(