This commit is contained in:
@@ -75,7 +75,7 @@ const CatalogueItem: FC<Props> = ({ item, refetch }) => {
|
|||||||
<Eye size={18} color="#0047FF" />
|
<Eye size={18} color="#0047FF" />
|
||||||
</div>
|
</div>
|
||||||
</Link>
|
</Link>
|
||||||
<Link to={Paths.editor + `/${item.slug}`}>
|
<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>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import * as api from "../service/HomeService";
|
|
||||||
import { useMutation, useQuery } from "@tanstack/react-query";
|
import { useMutation, useQuery } from "@tanstack/react-query";
|
||||||
import { useCallback, useEffect, useRef, useState } from "react";
|
import { useCallback, useEffect, useRef, useState } from "react";
|
||||||
|
import * as api from "../service/HomeService";
|
||||||
|
|
||||||
export const useCreateCatalog = () => {
|
export const useCreateCatalog = () => {
|
||||||
return useMutation({
|
return useMutation({
|
||||||
@@ -31,6 +31,16 @@ export const useGetCatalogById = (id: string) => {
|
|||||||
staleTime: 5 * 60 * 1000,
|
staleTime: 5 * 60 * 1000,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
export const useGetCatalogBySlug = (slug: string) => {
|
||||||
|
return useQuery({
|
||||||
|
queryKey: ["catalog", slug],
|
||||||
|
queryFn: () => api.getCatalogBySlug(slug),
|
||||||
|
enabled: !!slug,
|
||||||
|
// جلوگیری از بازنویسی state محلی با refetch هنگام فوکوس پنجره (مثلاً دو کاربر همزمان)
|
||||||
|
refetchOnWindowFocus: false,
|
||||||
|
staleTime: 5 * 60 * 1000,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
export const useUpdateCatalog = () => {
|
export const useUpdateCatalog = () => {
|
||||||
const mutation = useMutation({
|
const mutation = useMutation({
|
||||||
@@ -38,7 +48,9 @@ export const useUpdateCatalog = () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);
|
const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);
|
||||||
const pendingParamsRef = useRef<Parameters<typeof api.updateCatalog>[0] | null>(null);
|
const pendingParamsRef = useRef<
|
||||||
|
Parameters<typeof api.updateCatalog>[0] | null
|
||||||
|
>(null);
|
||||||
const [isScheduledSaving, setIsScheduledSaving] = useState(false);
|
const [isScheduledSaving, setIsScheduledSaving] = useState(false);
|
||||||
|
|
||||||
const cancelPendingUpdate = useCallback(() => {
|
const cancelPendingUpdate = useCallback(() => {
|
||||||
|
|||||||
@@ -20,7 +20,14 @@ export const getCatalogs = async () => {
|
|||||||
|
|
||||||
export const getCatalogById = async (id: string) => {
|
export const getCatalogById = async (id: string) => {
|
||||||
const { data } = await axios.get<CatalogByIdResponseType>(
|
const { data } = await axios.get<CatalogByIdResponseType>(
|
||||||
`/public/catalogue/slug/${id}`,
|
`/admin/catalogue/${id}`,
|
||||||
|
);
|
||||||
|
return data;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const getCatalogBySlug = async (slug: string) => {
|
||||||
|
const { data } = await axios.get<CatalogByIdResponseType>(
|
||||||
|
`/public/catalogue/slug/${slug}`,
|
||||||
);
|
);
|
||||||
return data;
|
return data;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { usePageTitle } from "@/hooks/usePageTitle";
|
import { usePageTitle } from "@/hooks/usePageTitle";
|
||||||
import type { DocumentSettings } from "@/pages/editor/store/editorStore";
|
import type { DocumentSettings } from "@/pages/editor/store/editorStore";
|
||||||
import { useGetCatalogById } from "@/pages/home/hooks/useHomeData";
|
import { useGetCatalogBySlug } from "@/pages/home/hooks/useHomeData";
|
||||||
import { type FC, useEffect, useState } from "react";
|
import { type FC, useEffect, useState } from "react";
|
||||||
import { useParams } from "react-router-dom";
|
import { useParams } from "react-router-dom";
|
||||||
import BookViewer from "./components/BookViewer";
|
import BookViewer from "./components/BookViewer";
|
||||||
@@ -12,7 +12,7 @@ import { transformViewerDataToPages } from "./utils/dataTransformer";
|
|||||||
|
|
||||||
const Viewer: FC = () => {
|
const Viewer: FC = () => {
|
||||||
const { id } = useParams<{ id: string }>();
|
const { id } = useParams<{ id: string }>();
|
||||||
const { data, isLoading, error: queryError } = useGetCatalogById(id ?? "");
|
const { data, isLoading, error: queryError } = useGetCatalogBySlug(id ?? "");
|
||||||
usePageTitle(`کاتالوگ ${data?.data?.name}`);
|
usePageTitle(`کاتالوگ ${data?.data?.name}`);
|
||||||
const [pages, setPages] = useState<PageData[]>([]);
|
const [pages, setPages] = useState<PageData[]>([]);
|
||||||
const [documentSettings, setDocumentSettings] = useState<
|
const [documentSettings, setDocumentSettings] = useState<
|
||||||
|
|||||||
Reference in New Issue
Block a user