Files
MermsFirstOffice/src/components/products/ProductView.jsx
T
2025-10-08 17:39:12 +01:00

173 lines
8.5 KiB
React

import {useEffect, useState} from 'react';
import {useLocation, useNavigate} from 'react-router-dom'
import BreadcrumbCom from '../breadcrumb/BreadcrumbCom'
import { useQuery, useQueryClient, useMutation } from '@tanstack/react-query'
import queryKeys from '../../services/queryKeys'
import { getProductView } from "../../services/siteServices";
import ProductDetails from './ProductDetails';
import RouteLinks from './../../RouteLinks'
import getDateTimeFromDateString from '../../helpers/getDateTimeFromDateString';
export default function ProductView() {
const {state} = useLocation()
const navigate = useNavigate()
useEffect(() => {
if (!state?.productID) {
navigate(RouteLinks.homePage, {replace: true})
}
}, [])
const {data, isFetching, status, isError, error} = useQuery({
queryKey: queryKeys.product_view,
queryFn: () => {
const reqData = {
// page,
// ...filterData
product_id : state?.productID
}
return getProductView(reqData)
},
staleTime: 0 // 0 mins
})
const productConfig = data?.data?.product_configuration // PRODUCT CONFIG
const productDetails = data?.data?.product_details // PRODUCT DETAILS
return (
<div className='w-full flex flex-col gap-8'>
<BreadcrumbCom title={`Product View [${state?.productID}]`} paths={['Dashboard', 'Product View']}/>
{isFetching ?
<>
<p className='text-slate-800'>Loading...</p>
</>
: isError ?
<p className='text-red-500'>{error.message}</p>
:
<div className='flex flex-col gap-4'>
<div className='flex flex-col gap-2'>
<p className='text-lg dark:text-white-light'>Product Configuration</p>
<div className='box bg-white dark:bg-black-box text-black-body dark:text-white-body'>
<table className="py-2 w-full text-sm">
<thead className="py-2 text-sm text-slate-500 text-left">
<tr>
<th scope="col" className="px-2 py-2" style={{width: '150px'}}>
Item
</th>
<th scope="col" className="px-2">
Value
</th>
</tr>
</thead>
<tbody>
<tr className="py-2 border-t border-dashed border-slate-300">
<td className="px-2 py-2">
<div
className='w-full min-w-48 flex items-center gap-2 whitespace-nowrap'>
<div className="text-left">
ProductID
</div>
</div>
</td>
<td className="px-2">
<div className="text-left">
{productConfig?.product_id}
</div>
</td>
</tr>
<tr className="py-2 border-t border-dashed border-slate-300">
<td className="px-2 py-2">
<div
className='w-full min-w-48 flex items-center gap-2 whitespace-nowrap'>
<div className="text-left">
Description
</div>
</div>
</td>
<td className="px-2">
<div className="text-left">
{productConfig?.description}
</div>
</td>
</tr>
<tr className="py-2 border-t border-dashed border-slate-300">
<td className="px-2 py-2">
<div
className='w-full min-w-48 flex items-center gap-2 whitespace-nowrap'>
<div className="text-left">
Status
</div>
</div>
</td>
<td className="px-2">
<div className="text-left">
{productConfig?.status}
</div>
</td>
</tr>
<tr className="py-2 border-t border-dashed border-slate-300">
<td className="px-2 py-2">
<div
className='w-full min-w-48 flex items-center gap-2 whitespace-nowrap'>
<div className="text-left">
Added
</div>
</div>
</td>
<td className="px-2">
<div className="text-left">
{getDateTimeFromDateString(productConfig?.added)}
</div>
</td>
</tr>
<tr className="py-2 border-t border-dashed border-slate-300">
<td className="px-2 py-2">
<div
className='w-full min-w-48 flex items-center gap-2 whitespace-nowrap'>
<div className="text-left">
Banner
</div>
</div>
</td>
<td className="px-2">
<div className="text-left">
{productConfig?.banner}
</div>
</td>
</tr>
<tr className="py-2 border-t border-dashed border-slate-300">
<td className="px-2 py-2">
<div
className='w-full min-w-48 flex items-center gap-2 whitespace-nowrap'>
<div className="text-left">
UID
</div>
</div>
</td>
<td className="px-2">
<div className="text-left">
{productConfig?.uid}
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p className='text-lg'>Product Details</p>
<ProductDetails productDetails={productDetails} />
<div className='box bg-[aliceblue] dark:bg-black-box text-black-body dark:text-white-body'>
<div className='flex flex-col gap-2'>
</div>
</div>
</div>
}
</div>
)
}