diff --git a/src/components/Expenses/ExpenseList.jsx b/src/components/Expenses/ExpenseList.jsx index 2ac606e5..bb4d523a 100644 --- a/src/components/Expenses/ExpenseList.jsx +++ b/src/components/Expenses/ExpenseList.jsx @@ -190,7 +190,7 @@ const ExpenseList = () => { - setViewExpense({ expenseId: expense, view: true }) + setViewExpense({ expenseId:expense.id, view: true }) } > diff --git a/src/components/Expenses/PreviewDocument.jsx b/src/components/Expenses/PreviewDocument.jsx new file mode 100644 index 00000000..9c0f5c49 --- /dev/null +++ b/src/components/Expenses/PreviewDocument.jsx @@ -0,0 +1,28 @@ +import { useState } from 'react'; + +const PreviewDocument = ({ imageUrl }) => { + const [loading, setLoading] = useState(true); + + return ( +
+ {loading && ( +
+ Loading... +
+ )} + Full View setLoading(false)} + /> +
+ ); +}; + +export default PreviewDocument; diff --git a/src/components/Expenses/ViewExpense.jsx b/src/components/Expenses/ViewExpense.jsx index 8c15f2a5..989aff98 100644 --- a/src/components/Expenses/ViewExpense.jsx +++ b/src/components/Expenses/ViewExpense.jsx @@ -1,11 +1,16 @@ -import React from "react"; -import { useActionOnExpense } from "../../hooks/useExpense"; +import React, { useState } from "react"; +import { useActionOnExpense, useExpense } from "../../hooks/useExpense"; import { formatUTCToLocalTime } from "../../utils/dateUtils"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { ActionSchema } from "./ExpenseSchema"; +import { useExpenseContext } from "../../pages/Expense/ExpensePage"; const ViewExpense = ({ ExpenseId }) => { + const { data, isLoading, isError, error } = useExpense(ExpenseId); + const [imageLoaded, setImageLoaded] = useState({}); + const { setDocumentView } = useExpenseContext(); + const { register, handleSubmit, @@ -31,6 +36,20 @@ const ViewExpense = ({ ExpenseId }) => { MakeAction(Payload); }; + if (isLoading) { + return ( +
+
Loading...
+
+ ); + } + const handleImageLoad = (id) => { + setImageLoaded((prev) => ({ ...prev, [id]: true })); + }; + return (
@@ -40,100 +59,175 @@ const ViewExpense = ({ ExpenseId }) => {
{/* Expense Info Rows */} -
+
- -
{formatUTCToLocalTime(ExpenseId.transactionDate)}
-
-
- -
-
- -
{ExpenseId.expensesType.name}
-
-
- -
-
- -
{ExpenseId.supplerName}
-
-
- -
-
- -
₹ {ExpenseId.amount}
-
-
- -
-
- -
{ExpenseId.paymentMode.name}
-
-
- -
-
- +
- {ExpenseId.paidBy.firstName} {ExpenseId.paidBy.lastName} + {formatUTCToLocalTime(data.transactionDate)}
-
+
+
+ +
{data.expensesType.name}
+
+
+ +
+
+ +
{data.supplerName}
+
+
+ +
+
+ +
₹ {data.amount}
+
+
+ +
+
+ +
{data.paymentMode.name}
+
+
+ +
+
+ +
+ {data.paidBy.firstName} {data.paidBy.lastName} +
+
+
+ +
- - {ExpenseId.status.displayName} + + {data.status.displayName}
-
+
- -
{ExpenseId.preApproved ? "Yes" : "No"}
+ +
{data.preApproved ? "Yes" : "No"}
-
+
- -
{ExpenseId.project.name}
+ +
{data.project.name}
-
+
- +
- {ExpenseId.createdBy.firstName} {ExpenseId.createdBy.lastName} + {data.createdBy.firstName} {data.createdBy.lastName}
-
+
- -
{formatUTCToLocalTime(ExpenseId.createdAt, true)}
+ +
+ {formatUTCToLocalTime(data.createdAt, true)} +
-
- Local travel reimbursement for delivery of materials to client site via City Taxi Service -
+
{data.description}
+
+
- {Array.isArray(ExpenseId.nextStatus) && ExpenseId.nextStatus.length > 0 && ( + {Array.isArray(data.nextStatus) && data.nextStatus.length > 0 && (