viewer connect api

This commit is contained in:
hamid zarghami
2026-03-14 11:08:21 +03:30
parent 11f55d9c1c
commit b5a454a3fe
3 changed files with 33 additions and 30 deletions
@@ -24,10 +24,12 @@ const CatalogueItem: FC<Props> = ({ item }) => {
</div> </div>
</div> </div>
<div className='flex justify-end gap-1 items-center'> <div className='flex justify-end gap-1 items-center'>
<Link to={Paths.viewer + `/${item.id}`}>
<div className='size-6 bg-[#EAECF4] rounded-md flex justify-center items-center'> <div className='size-6 bg-[#EAECF4] rounded-md flex justify-center items-center'>
<Eye size={18} color='#0047FF' /> <Eye size={18} color='#0047FF' />
</div> </div>
<Link to={Paths.editor + `/id=${item.id}`}> </Link>
<Link to={Paths.editor + `/${item.id}`}>
<div className='size-6 bg-[#EAECF4] rounded-md flex justify-center items-center'> <div className='size-6 bg-[#EAECF4] rounded-md flex justify-center items-center'>
<Edit size={18} color='#0047FF' /> <Edit size={18} color='#0047FF' />
</div> </div>
+22 -21
View File
@@ -2,36 +2,37 @@ import { type FC, useEffect, useState } from 'react';
import BookViewer from './components/BookViewer'; import BookViewer from './components/BookViewer';
import { transformViewerDataToPages } from './utils/dataTransformer'; import { transformViewerDataToPages } from './utils/dataTransformer';
import type { PageData } from './types'; import type { PageData } from './types';
import { useParams } from 'react-router-dom';
import { useGetCatalogById } from '@/pages/home/hooks/useHomeData';
const Viewer: FC = () => { const Viewer: FC = () => {
const { id } = useParams<{ id: string }>();
const { data, isLoading, error: queryError } = useGetCatalogById(id ?? '');
const [pages, setPages] = useState<PageData[]>([]); const [pages, setPages] = useState<PageData[]>([]);
const [loading, setLoading] = useState(true);
const [error, setError] = useState<string | null>(null);
useEffect(() => { useEffect(() => {
const loadViewerData = async () => { if (!data?.data?.content || !id) return;
try { try {
setLoading(true); const parsed = JSON.parse(data.data.content);
const response = await fetch('/viewer-data.json'); const pagesArray = Array.isArray(parsed) ? parsed : [];
if (!response.ok) { const transformedPages = transformViewerDataToPages(
throw new Error('خطا در بارگذاری داده‌ها'); { pages: pagesArray } as Parameters<typeof transformViewerDataToPages>[0]
} );
const data = await response.json();
const transformedPages = transformViewerDataToPages(data);
setPages(transformedPages); setPages(transformedPages);
setError(null);
} catch (err) { } catch (err) {
setError(err instanceof Error ? err.message : 'خطای نامشخص'); console.error('خطا در پردازش محتوای کاتالوگ:', err);
console.error('خطا در بارگذاری viewer-data.json:', err);
} finally {
setLoading(false);
} }
}; }, [data?.data?.content, id]);
loadViewerData(); if (!id) {
}, []); return (
<div className="w-full h-full flex items-center justify-center">
<div className="text-gray-600">شناسه کاتالوگ مشخص نیست</div>
</div>
);
}
if (loading) { if (isLoading) {
return ( return (
<div className="w-full h-full flex items-center justify-center"> <div className="w-full h-full flex items-center justify-center">
<div className="text-gray-600">در حال بارگذاری...</div> <div className="text-gray-600">در حال بارگذاری...</div>
@@ -39,10 +40,10 @@ const Viewer: FC = () => {
); );
} }
if (error) { if (queryError) {
return ( return (
<div className="w-full h-full flex items-center justify-center"> <div className="w-full h-full flex items-center justify-center">
<div className="text-red-600">خطا: {error}</div> <div className="text-red-600">خطا: {queryError.message}</div>
</div> </div>
); );
} }
+1 -1
View File
@@ -33,7 +33,7 @@ const MainRouter = () => {
<Routes> <Routes>
<Route path={Paths.home} element={<Home />} /> <Route path={Paths.home} element={<Home />} />
<Route path={Paths.editor + '/:id'} element={<Editor />} /> <Route path={Paths.editor + '/:id'} element={<Editor />} />
<Route path={Paths.viewer} element={<Viewer />} /> <Route path={Paths.viewer + '/:id'} element={<Viewer />} />
<Route path={Paths.catalog.list} element={<CatalogueList />} /> <Route path={Paths.catalog.list} element={<CatalogueList />} />
</Routes> </Routes>
</div> </div>