// services import { APIService } from "services/api.service"; import { TrackEventService } from "services/track_event.service"; // helpers import { API_BASE_URL } from "helpers/common.helper"; // types import { IWorkspace, IWorkspaceMemberMe, IWorkspaceMember, IWorkspaceMemberInvitation, ILastActiveWorkspaceDetails, IWorkspaceSearchResults, IProductUpdateResponse, IUser, IWorkspaceBulkInviteFormData, IWorkspaceViewProps, } from "types"; import { IWorkspaceView } from "types/workspace-views"; // store import { IIssueGroupWithSubGroupsStructure, IIssueGroupedStructure, IIssueUnGroupedStructure } from "store/issue"; const trackEventService = new TrackEventService(); export class WorkspaceService extends APIService { constructor() { super(API_BASE_URL); } async userWorkspaces(): Promise { return this.get("/api/users/me/workspaces/") .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async getWorkspace(workspaceSlug: string): Promise { return this.get(`/api/workspaces/${workspaceSlug}/`) .then((response) => response?.data) .catch((error) => { throw error?.response; }); } async createWorkspace(data: Partial, user: IUser | undefined): Promise { return this.post("/api/workspaces/", data) .then((response) => { trackEventService.trackWorkspaceEvent(response.data, "CREATE_WORKSPACE", user as IUser); return response?.data; }) .catch((error) => { throw error?.response?.data; }); } async updateWorkspace( workspaceSlug: string, data: Partial, user: IUser | undefined ): Promise { return this.patch(`/api/workspaces/${workspaceSlug}/`, data) .then((response) => { trackEventService.trackWorkspaceEvent(response.data, "UPDATE_WORKSPACE", user as IUser); return response?.data; }) .catch((error) => { throw error?.response?.data; }); } async deleteWorkspace(workspaceSlug: string, user: IUser | undefined): Promise { return this.delete(`/api/workspaces/${workspaceSlug}/`) .then((response) => { trackEventService.trackWorkspaceEvent({ workspaceSlug }, "DELETE_WORKSPACE", user as IUser); return response?.data; }) .catch((error) => { throw error?.response?.data; }); } async inviteWorkspace( workspaceSlug: string, data: IWorkspaceBulkInviteFormData, user: IUser | undefined ): Promise { return this.post(`/api/workspaces/${workspaceSlug}/invite/`, data) .then((response) => { trackEventService.trackWorkspaceEvent(response.data, "WORKSPACE_USER_INVITE", user as IUser); return response?.data; }) .catch((error) => { throw error?.response?.data; }); } async joinWorkspace(workspaceSlug: string, invitationId: string, data: any, user: IUser | undefined): Promise { return this.post(`/api/users/me/invitations/workspaces/${workspaceSlug}/${invitationId}/join/`, data, { headers: {}, }) .then((response) => { trackEventService.trackWorkspaceEvent(response.data, "WORKSPACE_USER_INVITE_ACCEPT", user as IUser); return response?.data; }) .catch((error) => { throw error?.response?.data; }); } async joinWorkspaces(data: any): Promise { return this.post("/api/users/me/invitations/workspaces/", data) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async getLastActiveWorkspaceAndProjects(): Promise { return this.get("/api/users/last-visited-workspace/") .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async userWorkspaceInvitations(): Promise { return this.get("/api/users/me/invitations/workspaces/") .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async workspaceMemberMe(workspaceSlug: string): Promise { return this.get(`/api/workspaces/${workspaceSlug}/workspace-members/me/`) .then((response) => response?.data) .catch((error) => { throw error?.response; }); } async updateWorkspaceView(workspaceSlug: string, data: { view_props: IWorkspaceViewProps }): Promise { return this.post(`/api/workspaces/${workspaceSlug}/workspace-views/`, data) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async fetchWorkspaceMembers(workspaceSlug: string): Promise { return this.get(`/api/workspaces/${workspaceSlug}/members/`) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async updateWorkspaceMember( workspaceSlug: string, memberId: string, data: Partial ): Promise { return this.patch(`/api/workspaces/${workspaceSlug}/members/${memberId}/`, data) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async deleteWorkspaceMember(workspaceSlug: string, memberId: string): Promise { return this.delete(`/api/workspaces/${workspaceSlug}/members/${memberId}/`) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async workspaceInvitations(workspaceSlug: string): Promise { return this.get(`/api/workspaces/${workspaceSlug}/invitations/`) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async getWorkspaceInvitation(invitationId: string): Promise { return this.get(`/api/users/me/invitations/${invitationId}/`, { headers: {} }) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async deleteWorkspaceInvitations(workspaceSlug: string, invitationId: string): Promise { return this.delete(`/api/workspaces/${workspaceSlug}/invitations/${invitationId}/`) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async workspaceSlugCheck(slug: string): Promise { return this.get(`/api/workspace-slug-check/?slug=${slug}`) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async searchWorkspace( workspaceSlug: string, params: { project_id?: string; search: string; workspace_search: boolean; } ): Promise { return this.get(`/api/workspaces/${workspaceSlug}/search/`, { params, }) .then((res) => res?.data) .catch((error) => { throw error?.response?.data; }); } async getProductUpdates(): Promise { return this.get("/api/release-notes/") .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async createView(workspaceSlug: string, data: Partial): Promise { return this.post(`/api/workspaces/${workspaceSlug}/views/`, data) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async updateView(workspaceSlug: string, viewId: string, data: Partial): Promise { return this.patch(`/api/workspaces/${workspaceSlug}/views/${viewId}/`, data) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async deleteView(workspaceSlug: string, viewId: string): Promise { return this.delete(`/api/workspaces/${workspaceSlug}/views/${viewId}/`) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async getAllViews(workspaceSlug: string): Promise { return this.get(`/api/workspaces/${workspaceSlug}/views/`) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async getViewDetails(workspaceSlug: string, viewId: string): Promise { return this.get(`/api/workspaces/${workspaceSlug}/views/${viewId}/`) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async getViewIssues( workspaceSlug: string, params: any ): Promise { return this.get(`/api/workspaces/${workspaceSlug}/issues/`, { params, }) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } }