From f33a945384173a44c9367e38c20b504a399ea9e2 Mon Sep 17 00:00:00 2001 From: "CHIEFSOFT\\ameye" Date: Sun, 21 Sep 2025 09:08:27 -0400 Subject: [PATCH] Product and custom templates pages --- src/components/products/CustomTemplates.jsx | 141 +++++++++++++++++++ src/components/products/ProductTemplates.jsx | 141 +++++++++++++++++++ src/pages/CustomTemplatePage.jsx | 4 +- src/pages/ProductTemplatePage.jsx | 4 +- 4 files changed, 286 insertions(+), 4 deletions(-) create mode 100644 src/components/products/CustomTemplates.jsx create mode 100644 src/components/products/ProductTemplates.jsx diff --git a/src/components/products/CustomTemplates.jsx b/src/components/products/CustomTemplates.jsx new file mode 100644 index 0000000..6e53d97 --- /dev/null +++ b/src/components/products/CustomTemplates.jsx @@ -0,0 +1,141 @@ +import { useState } from 'react' +import { useQuery } from '@tanstack/react-query' +import queryKeys from '../../services/queryKeys' + +import BreadcrumbCom from '../breadcrumb/BreadcrumbCom' +import TablePaginatedWrapper from '../tableWrapper/TablePaginatedWrapper' +import Icons from '../Icons' +import { getProducts } from '../../services/siteServices' +import getDateTimeFromDateString from '../../helpers/getDateTimeFromDateString' + +export default function CustomTemplates() { + + const [page, setPage] = useState(1) + const [filter, setFilter] = useState({type: '', id: ''}) + const [willFilter, setWillFilter] = useState(false) + + const handleFilter = ({target:{name, value}}) => { + setFilter(prev => ({...prev, [name]:value})) + } + + const handleFilterByParams = () => { + if(filter.type && !filter.id){ + return + }else if(!filter.type){ + setPage(1) + setWillFilter(prev => !prev) + setFilter({type: '', id: ''}) + }else{ + setPage(1) + setWillFilter(prev => !prev) + } + } + + const {data, isFetching, isError, error} = useQuery({ + queryKey: [...queryKeys.products, page, willFilter], + queryFn: () => { + const filterData = filter?.type ? {[filter?.type]: filter.id} : {} + const reqData = { + page, + ...filterData + } + return getProducts(reqData) + }, + staleTime: 0 //0 mins + }) + const productsData = data?.data?.products // PRODUCTS LIST + const pagination = data?.data?.pagination + // console.log('DATA', data?.data) + + return ( +
+ + +
+ { isError ? +

{error?.message}

+ : + <> + {/* filter section */} +
+ +
+ +
+
+ +
+ +
+ {/* end of filter section */} + + + {({ data }) => ( + <> + + + + + + + + + + + {(data && data.length > 0) ? data?.map((item, index) => ( + + + + + + + )) + : + + + + } + +
+ Added + + Name + + Product ID + + Status +
+
+
+
{getDateTimeFromDateString(item?.added)}
+
+
+
+
+
{item?.name}
+
+
+
+
{item?.product_id}
+
+
+
+
{item?.status}
+
+
+
+ No Record Found +
+
+ + )} +
+ + } +
+
+ ) +} \ No newline at end of file diff --git a/src/components/products/ProductTemplates.jsx b/src/components/products/ProductTemplates.jsx new file mode 100644 index 0000000..56312f1 --- /dev/null +++ b/src/components/products/ProductTemplates.jsx @@ -0,0 +1,141 @@ +import { useState } from 'react' +import { useQuery } from '@tanstack/react-query' +import queryKeys from '../../services/queryKeys' + +import BreadcrumbCom from '../breadcrumb/BreadcrumbCom' +import TablePaginatedWrapper from '../tableWrapper/TablePaginatedWrapper' +import Icons from '../Icons' +import { getProducts } from '../../services/siteServices' +import getDateTimeFromDateString from '../../helpers/getDateTimeFromDateString' + +export default function ProductTemplates() { + + const [page, setPage] = useState(1) + const [filter, setFilter] = useState({type: '', id: ''}) + const [willFilter, setWillFilter] = useState(false) + + const handleFilter = ({target:{name, value}}) => { + setFilter(prev => ({...prev, [name]:value})) + } + + const handleFilterByParams = () => { + if(filter.type && !filter.id){ + return + }else if(!filter.type){ + setPage(1) + setWillFilter(prev => !prev) + setFilter({type: '', id: ''}) + }else{ + setPage(1) + setWillFilter(prev => !prev) + } + } + + const {data, isFetching, isError, error} = useQuery({ + queryKey: [...queryKeys.products, page, willFilter], + queryFn: () => { + const filterData = filter?.type ? {[filter?.type]: filter.id} : {} + const reqData = { + page, + ...filterData + } + return getProducts(reqData) + }, + staleTime: 0 //0 mins + }) + const productsData = data?.data?.products // PRODUCTS LIST + const pagination = data?.data?.pagination + // console.log('DATA', data?.data) + + return ( +
+ + +
+ { isError ? +

{error?.message}

+ : + <> + {/* filter section */} +
+ +
+ +
+
+ +
+ +
+ {/* end of filter section */} + + + {({ data }) => ( + <> + + + + + + + + + + + {(data && data.length > 0) ? data?.map((item, index) => ( + + + + + + + )) + : + + + + } + +
+ Added + + Name + + Product ID + + Status +
+
+
+
{getDateTimeFromDateString(item?.added)}
+
+
+
+
+
{item?.name}
+
+
+
+
{item?.product_id}
+
+
+
+
{item?.status}
+
+
+
+ No Record Found +
+
+ + )} +
+ + } +
+
+ ) +} \ No newline at end of file diff --git a/src/pages/CustomTemplatePage.jsx b/src/pages/CustomTemplatePage.jsx index 6c7dfd2..aa08b4d 100644 --- a/src/pages/CustomTemplatePage.jsx +++ b/src/pages/CustomTemplatePage.jsx @@ -1,8 +1,8 @@ import React from 'react' -import ProductsCom from '../components/products/ProductsCom' +import CustomTemplates from "../components/products/CustomTemplates"; export default function CustomTemplatePage() { return ( - + ) } diff --git a/src/pages/ProductTemplatePage.jsx b/src/pages/ProductTemplatePage.jsx index a3b7039..a5dfa9c 100644 --- a/src/pages/ProductTemplatePage.jsx +++ b/src/pages/ProductTemplatePage.jsx @@ -1,8 +1,8 @@ import React from 'react' -import ProductsCom from '../components/products/ProductsCom' +import ProductTemplates from "../components/products/ProductTemplates"; export default function ProductTemplatePage() { return ( - + ) }