From 9d8dd549dc224567b55cb6e23dbc8c7dcb882f3b Mon Sep 17 00:00:00 2001 From: hamid zarghami Date: Mon, 1 Jun 2026 10:04:05 +0330 Subject: [PATCH] get with slug --- src/pages/catalogue/List.tsx | 43 ++-- .../catalogue/components/CatalogueItem.tsx | 184 +++++++++--------- src/pages/catalogue/types/Types.ts | 1 + src/pages/home/service/HomeService.ts | 2 +- 4 files changed, 113 insertions(+), 117 deletions(-) diff --git a/src/pages/catalogue/List.tsx b/src/pages/catalogue/List.tsx index 21288a5..0792829 100644 --- a/src/pages/catalogue/List.tsx +++ b/src/pages/catalogue/List.tsx @@ -1,16 +1,15 @@ -import { type FC } from 'react' -import { useGetCatalog } from '../home/hooks/useHomeData' -import GridWrapper from '@/components/GridWrapper' -import CatalogueItem from './components/CatalogueItem' -import ButtonAddCatalogue from './components/ButtonAddCatalogue' +import GridWrapper from "@/components/GridWrapper"; +import { type FC } from "react"; +import { useGetCatalog } from "../home/hooks/useHomeData"; +import ButtonAddCatalogue from "./components/ButtonAddCatalogue"; +import CatalogueItem from "./components/CatalogueItem"; const CatalogueList: FC = () => { + const { data, refetch } = useGetCatalog(); - const { data, refetch } = useGetCatalog() - - return ( -
- {/* { + return ( +
+ {/* { !isPending && !data?.data?.length &&
@@ -24,18 +23,14 @@ const CatalogueList: FC = () => {
} */} - - { - data?.data?.map((item) => { - return ( - - ) - }) - } - - -
- ) -} + + {data?.data?.map((item) => { + return ; + })} + + +
+ ); +}; -export default CatalogueList \ No newline at end of file +export default CatalogueList; diff --git a/src/pages/catalogue/components/CatalogueItem.tsx b/src/pages/catalogue/components/CatalogueItem.tsx index 7b4489f..52d9955 100644 --- a/src/pages/catalogue/components/CatalogueItem.tsx +++ b/src/pages/catalogue/components/CatalogueItem.tsx @@ -1,103 +1,103 @@ -import { type FC } from 'react' -import { Edit, Eye, Share } from 'iconsax-react' -import type { CatalogItemType } from '../types/Types' -import moment from 'moment-jalaali' -import { Link } from 'react-router-dom' -import { Paths } from '@/config/Paths' -import CatalogPreview from './CatalogPreview' -import TrashWithConfrim from '@/components/TrashWithConfrim' -import { useDleteCatalog } from '@/pages/home/hooks/useHomeData' -import { toast } from '@/components/Toast' -import { extractErrorMessage } from '@/helpers/utils' -import { requestViewerFullscreen } from '@/pages/viewer/utils/viewerFullscreen' +import { toast } from "@/components/Toast"; +import TrashWithConfrim from "@/components/TrashWithConfrim"; +import { Paths } from "@/config/Paths"; +import { extractErrorMessage } from "@/helpers/utils"; +import { useDleteCatalog } from "@/pages/home/hooks/useHomeData"; +import { requestViewerFullscreen } from "@/pages/viewer/utils/viewerFullscreen"; +import { Edit, Eye, Share } from "iconsax-react"; +import moment from "moment-jalaali"; +import { type FC } from "react"; +import { Link } from "react-router-dom"; +import type { CatalogItemType } from "../types/Types"; +import CatalogPreview from "./CatalogPreview"; type Props = { - item: CatalogItemType, - refetch: () => void, -} + item: CatalogItemType; + refetch: () => void; +}; const CatalogueItem: FC = ({ item, refetch }) => { + const deleteCatalog = useDleteCatalog(); - const deleteCatalog = useDleteCatalog() + const shareUrl = `${window.location.origin}${Paths.viewer}/${item.id}`; - const shareUrl = `${window.location.origin}${Paths.viewer}/${item.id}` - - const handleShare = async () => { - try { - if (typeof navigator.share === 'function') { - await navigator.share({ - title: item.name, - text: item.name, - url: shareUrl, - }) - return - } - await navigator.clipboard.writeText(shareUrl) - toast('لینک در کلیپ‌بورد کپی شد', 'success') - } catch (err) { - const isAbort = - err instanceof DOMException - ? err.name === 'AbortError' - : err instanceof Error && err.name === 'AbortError' - if (isAbort) return - toast(extractErrorMessage(err, 'امکان اشتراک‌گذاری وجود ندارد'), 'error') - } + const handleShare = async () => { + try { + if (typeof navigator.share === "function") { + await navigator.share({ + title: item.name, + text: item.name, + url: shareUrl, + }); + return; + } + await navigator.clipboard.writeText(shareUrl); + toast("لینک در کلیپ‌بورد کپی شد", "success"); + } catch (err) { + const isAbort = + err instanceof DOMException + ? err.name === "AbortError" + : err instanceof Error && err.name === "AbortError"; + if (isAbort) return; + toast(extractErrorMessage(err, "امکان اشتراک‌گذاری وجود ندارد"), "error"); } + }; - const handleDelete = () => { - deleteCatalog.mutate(item.id, { - onSuccess: () => { - toast('با موفقیت حذف شد', 'success') - refetch() - }, - onError: (error) => { - toast(extractErrorMessage(error, 'error')) - } - }) - } + const handleDelete = () => { + deleteCatalog.mutate(item.id, { + onSuccess: () => { + toast("با موفقیت حذف شد", "success"); + refetch(); + }, + onError: (error) => { + toast(extractErrorMessage(error, "error")); + }, + }); + }; - return ( -
-
- -
-
- {item.name} -
-
- {moment(item.createdAt).format('jYYYY/jMM/jDD')} -
-
-
-
- -
- -
- - -
- -
- - -
- -
-
+ return ( +
+
+ +
+
{item.name}
+
+ {moment(item.createdAt).format("jYYYY/jMM/jDD")} +
- ) -} +
+
+ +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ ); +}; -export default CatalogueItem \ No newline at end of file +export default CatalogueItem; diff --git a/src/pages/catalogue/types/Types.ts b/src/pages/catalogue/types/Types.ts index c36b713..6687c6b 100644 --- a/src/pages/catalogue/types/Types.ts +++ b/src/pages/catalogue/types/Types.ts @@ -7,6 +7,7 @@ export type CatalogItemType = { size: string; status: string; createdAt: string; + slug: string; }; export type CatalogResponseType = BaseResponse; diff --git a/src/pages/home/service/HomeService.ts b/src/pages/home/service/HomeService.ts index 8a61137..e8a5fc4 100644 --- a/src/pages/home/service/HomeService.ts +++ b/src/pages/home/service/HomeService.ts @@ -20,7 +20,7 @@ export const getCatalogs = async () => { export const getCatalogById = async (id: string) => { const { data } = await axios.get( - `/public/catalogue/${id}`, + `/public/catalogue/slug/${id}`, ); return data; };