diff --git a/src/components/Expenses/ViewExpense.jsx b/src/components/Expenses/ViewExpense.jsx index 0c36f2c1..f6aeb09e 100644 --- a/src/components/Expenses/ViewExpense.jsx +++ b/src/components/Expenses/ViewExpense.jsx @@ -1,5 +1,9 @@ -import React, { useState } from "react"; -import { useActionOnExpense, useExpense } from "../../hooks/useExpense"; +import React, { useState, useMemo } from "react"; +import { + useActionOnExpense, + useExpense, + useHasAnyPermission, +} from "../../hooks/useExpense"; import { formatUTCToLocalTime } from "../../utils/dateUtils"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; @@ -7,11 +11,18 @@ import { ActionSchema } from "./ExpenseSchema"; import { useExpenseContext } from "../../pages/Expense/ExpensePage"; import { getColorNameFromHex } from "../../utils/appUtils"; import { ExpenseDetailsSkeleton } from "./ExpenseSkeleton"; +import { useHasUserPermission } from "../../hooks/useHasUserPermission"; +import { REVIEW_EXPENSE } from "../../utils/constants"; +import { useProfile } from "../../hooks/useProfile"; +import { useSelector } from "react-redux"; +import { useNavigate } from "react-router-dom"; const ViewExpense = ({ ExpenseId }) => { const { data, isLoading, isError, error } = useExpense(ExpenseId); + const IsReview = useHasUserPermission(REVIEW_EXPENSE); const [imageLoaded, setImageLoaded] = useState({}); const { setDocumentView } = useExpenseContext(); + const navigate = useNavigate(); const { register, handleSubmit, @@ -26,6 +37,24 @@ const ViewExpense = ({ ExpenseId }) => { }, }); + const userPermissions = useSelector( + (state) => state?.globalVariables?.loginUser?.featurePermissions || [] + ); + + const nextStatusWithPermission = useMemo(() => { + if (!Array.isArray(data?.nextStatus)) return []; + + return data.nextStatus.filter((status) => { + const permissionIds = Array.isArray(status?.permissionIds) + ? status.permissionIds + : []; + + if (permissionIds.length === 0) return true; + + return permissionIds.some((id) => userPermissions.includes(id)); + }); + }, [data, userPermissions]); + const { mutate: MakeAction } = useActionOnExpense(() => reset()); const onSubmit = (formData) => { @@ -178,7 +207,7 @@ const ViewExpense = ({ ExpenseId }) => { if (type.includes("zip") || type.includes("rar")) return "bxs-file-archive"; - return "bx bx-file"; + return "bx bx-file"; // Default }; const isImage = doc.contentType?.includes("image"); @@ -216,7 +245,6 @@ const ViewExpense = ({ ExpenseId }) => { target="_blank" rel="noopener noreferrer" className="bx bx-cloud-download cursor-pointer" - title="View PDF" /> @@ -227,9 +255,10 @@ const ViewExpense = ({ ExpenseId }) => {