// types import { API_BASE_URL } from "@plane/constants"; import type { TDocumentPayload, TPage } from "@plane/types"; // helpers // services import { APIService } from "@/services/api.service"; import { FileUploadService } from "@/services/file-upload.service"; export class ProjectPageService extends APIService { private fileUploadService: FileUploadService; constructor() { super(API_BASE_URL); // upload service this.fileUploadService = new FileUploadService(); } async fetchAll(workspaceSlug: string, projectId: string): Promise { return this.get(`/api/workspaces/${workspaceSlug}/projects/${projectId}/pages/`) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async fetchById(workspaceSlug: string, projectId: string, pageId: string, trackVisit: boolean): Promise { return this.get(`/api/workspaces/${workspaceSlug}/projects/${projectId}/pages/${pageId}/`, { params: { track_visit: trackVisit, }, }) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async create(workspaceSlug: string, projectId: string, data: Partial): Promise { return this.post(`/api/workspaces/${workspaceSlug}/projects/${projectId}/pages/`, data) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async update(workspaceSlug: string, projectId: string, pageId: string, data: Partial): Promise { return this.patch(`/api/workspaces/${workspaceSlug}/projects/${projectId}/pages/${pageId}/`, data) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async updateAccess( workspaceSlug: string, projectId: string, pageId: string, data: Pick ): Promise { return this.post(`/api/workspaces/${workspaceSlug}/projects/${projectId}/pages/${pageId}/access/`, data) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async remove(workspaceSlug: string, projectId: string, pageId: string): Promise { return this.delete(`/api/workspaces/${workspaceSlug}/projects/${projectId}/pages/${pageId}/`) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async fetchFavorites(workspaceSlug: string, projectId: string): Promise { return this.get(`/api/workspaces/${workspaceSlug}/projects/${projectId}/favorite-pages/`) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async addToFavorites(workspaceSlug: string, projectId: string, pageId: string): Promise { return this.post(`/api/workspaces/${workspaceSlug}/projects/${projectId}/favorite-pages/${pageId}/`) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async removeFromFavorites(workspaceSlug: string, projectId: string, pageId: string): Promise { return this.delete(`/api/workspaces/${workspaceSlug}/projects/${projectId}/favorite-pages/${pageId}/`) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async fetchArchived(workspaceSlug: string, projectId: string): Promise { return this.get(`/api/workspaces/${workspaceSlug}/projects/${projectId}/archived-pages/`) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async archive( workspaceSlug: string, projectId: string, pageId: string ): Promise<{ archived_at: string; }> { return this.post(`/api/workspaces/${workspaceSlug}/projects/${projectId}/pages/${pageId}/archive/`) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async restore(workspaceSlug: string, projectId: string, pageId: string): Promise { return this.delete(`/api/workspaces/${workspaceSlug}/projects/${projectId}/pages/${pageId}/archive/`) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async lock(workspaceSlug: string, projectId: string, pageId: string): Promise { return this.post(`/api/workspaces/${workspaceSlug}/projects/${projectId}/pages/${pageId}/lock/`) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async unlock(workspaceSlug: string, projectId: string, pageId: string): Promise { return this.delete(`/api/workspaces/${workspaceSlug}/projects/${projectId}/pages/${pageId}/lock/`) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async fetchDescriptionBinary(workspaceSlug: string, projectId: string, pageId: string): Promise { return this.get(`/api/workspaces/${workspaceSlug}/projects/${projectId}/pages/${pageId}/description/`, { headers: { "Content-Type": "application/octet-stream", }, responseType: "arraybuffer", }) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async updateDescription( workspaceSlug: string, projectId: string, pageId: string, data: TDocumentPayload ): Promise { return this.patch(`/api/workspaces/${workspaceSlug}/projects/${projectId}/pages/${pageId}/description/`, data) .then((response) => response?.data) .catch((error) => { throw error; }); } async duplicate(workspaceSlug: string, projectId: string, pageId: string): Promise { return this.post(`/api/workspaces/${workspaceSlug}/projects/${projectId}/pages/${pageId}/duplicate/`) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async move(workspaceSlug: string, projectId: string, pageId: string, newProjectId: string): Promise { return this.post(`/api/workspaces/${workspaceSlug}/projects/${projectId}/pages/${pageId}/move/`, { new_project_id: newProjectId, }) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } }