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