import api from "@/lib/api-client"; import { ICopyPageToSpace, IExportPageParams, IMovePage, IMovePageToSpace, IPage, IPageInput, SidebarPagesParams, } from '@/features/page/types/page.types'; import { QueryParams } from "@/lib/types"; import { IAttachment, IPagination } from "@/lib/types.ts"; import { saveAs } from "file-saver"; import { InfiniteData } from "@tanstack/react-query"; import { IFileTask } from '@/features/file-task/types/file-task.types.ts'; export async function createPage(data: Partial): Promise { const req = await api.post("/pages/create", data); return req.data; } export async function getPageById( pageInput: Partial, ): Promise { const req = await api.post("/pages/info", pageInput); return req.data; } export async function updatePage(data: Partial): Promise { const req = await api.post("/pages/update", data); return req.data; } export async function deletePage(pageId: string, permanentlyDelete = false): Promise { await api.post("/pages/delete", { pageId, permanentlyDelete }); } export async function getDeletedPages( spaceId: string, params?: QueryParams, ): Promise> { const req = await api.post("/pages/trash", { spaceId, ...params }); return req.data; } export async function restorePage(pageId: string): Promise { const response = await api.post("/pages/restore", { pageId }); return response.data; } export async function movePage(data: IMovePage): Promise { await api.post("/pages/move", data); } export async function movePageToSpace(data: IMovePageToSpace): Promise { await api.post("/pages/move-to-space", data); } export async function duplicatePage(data: ICopyPageToSpace): Promise { const req = await api.post("/pages/duplicate", data); return req.data; } export async function getSidebarPages( params: SidebarPagesParams, ): Promise> { const req = await api.post("/pages/sidebar-pages", params); return req.data; } export async function getAllSidebarPages( params: SidebarPagesParams, ): Promise, unknown>> { let page = 1; let hasNextPage = false; const pages: IPagination[] = []; const pageParams: number[] = []; do { const req = await api.post("/pages/sidebar-pages", { ...params, page: page }); const data: IPagination = req.data; pages.push(data); pageParams.push(page); hasNextPage = data.meta.hasNextPage; page += 1; } while (hasNextPage); return { pageParams, pages, }; } export async function getPageBreadcrumbs( pageId: string, ): Promise> { const req = await api.post("/pages/breadcrumbs", { pageId }); return req.data; } export async function getRecentChanges( spaceId?: string, ): Promise> { const req = await api.post("/pages/recent", { spaceId }); return req.data; } export async function exportPage(data: IExportPageParams): Promise { const req = await api.post("/pages/export", data, { responseType: "blob", }); const fileName = req?.headers["content-disposition"] .split("filename=")[1] .replace(/"/g, ""); saveAs(req.data, decodeURIComponent(fileName)); } export async function importPage(file: File, spaceId: string) { const formData = new FormData(); formData.append("spaceId", spaceId); formData.append("file", file); const req = await api.post("/pages/import", formData, { headers: { "Content-Type": "multipart/form-data", }, }); return req.data; } export async function importZip( file: File, spaceId: string, source?: string, ): Promise { const formData = new FormData(); formData.append("spaceId", spaceId); formData.append("source", source); formData.append("file", file); const req = await api.post("/pages/import-zip", formData, { headers: { "Content-Type": "multipart/form-data", }, }); return req.data; } export async function uploadFile( file: File, pageId: string, attachmentId?: string, ): Promise { const formData = new FormData(); if (attachmentId) { formData.append("attachmentId", attachmentId); } formData.append("pageId", pageId); formData.append("file", file); const req = await api.post("/files/upload", formData, { headers: { "Content-Type": "multipart/form-data", }, }); return req as unknown as IAttachment; }