mirror of
https://github.com/makeplane/plane
synced 2024-06-14 14:31:34 +00:00
63b6150b9c
* fix: Labels reordering inconsistency * fix: Delete child labels * feat: multi-select while grouping labels * refactor: label sorting in mobx computed function * feat: drag & drop label grouping, un-grouping * chore: removed label select modal * fix: moving labels from project store to project label store * fix: typo changes and build tree function added * labels feature * disable dropping group into a group * fix build errors * fix more issues * chore: added combining state UI, fixed scroll issue for label groups * chore: group icon for label groups * fix: group cannot be dropped in another group --------- Co-authored-by: sriram veeraghanta <veeraghanta.sriram@gmail.com> Co-authored-by: rahulramesha <rahulramesham@gmail.com> Co-authored-by: Aaryan Khandelwal <aaryankhandu123@gmail.com>
113 lines
3.4 KiB
TypeScript
113 lines
3.4 KiB
TypeScript
import { API_BASE_URL } from "helpers/common.helper";
|
|
// services
|
|
import { APIService } from "services/api.service";
|
|
import { TrackEventService } from "services/track_event.service";
|
|
// types
|
|
import { IIssueLabel, IUser } from "types";
|
|
|
|
const trackEventServices = new TrackEventService();
|
|
|
|
export class IssueLabelService extends APIService {
|
|
constructor() {
|
|
super(API_BASE_URL);
|
|
}
|
|
|
|
async getWorkspaceIssueLabels(workspaceSlug: string): Promise<IIssueLabel[]> {
|
|
return this.get(`/api/workspaces/${workspaceSlug}/labels/`)
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
|
|
async getProjectIssueLabels(workspaceSlug: string, projectId: string): Promise<IIssueLabel[]> {
|
|
return this.get(`/api/workspaces/${workspaceSlug}/projects/${projectId}/issue-labels/`)
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
|
|
async createIssueLabel(
|
|
workspaceSlug: string,
|
|
projectId: string,
|
|
data: any,
|
|
user: IUser | undefined
|
|
): Promise<IIssueLabel> {
|
|
return this.post(`/api/workspaces/${workspaceSlug}/projects/${projectId}/issue-labels/`, data)
|
|
.then((response: { data: IIssueLabel; [key: string]: any }) => {
|
|
trackEventServices.trackIssueLabelEvent(
|
|
{
|
|
workSpaceId: response?.data?.workspace_detail?.id,
|
|
workSpaceName: response?.data?.workspace_detail?.name,
|
|
workspaceSlug,
|
|
projectId,
|
|
projectIdentifier: response?.data?.project_detail?.identifier,
|
|
projectName: response?.data?.project_detail?.name,
|
|
labelId: response?.data?.id,
|
|
color: response?.data?.color,
|
|
},
|
|
"ISSUE_LABEL_CREATE",
|
|
user as IUser
|
|
);
|
|
return response?.data;
|
|
})
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
|
|
async patchIssueLabel(
|
|
workspaceSlug: string,
|
|
projectId: string,
|
|
labelId: string,
|
|
data: any,
|
|
user: IUser | undefined
|
|
): Promise<any> {
|
|
return this.patch(`/api/workspaces/${workspaceSlug}/projects/${projectId}/issue-labels/${labelId}/`, data)
|
|
.then((response) => {
|
|
trackEventServices.trackIssueLabelEvent(
|
|
{
|
|
workSpaceId: response?.data?.workspace_detail?.id,
|
|
workSpaceName: response?.data?.workspace_detail?.name,
|
|
workspaceSlug,
|
|
projectId,
|
|
projectIdentifier: response?.data?.project_detail?.identifier,
|
|
projectName: response?.data?.project_detail?.name,
|
|
labelId: response?.data?.id,
|
|
color: response?.data?.color,
|
|
},
|
|
"ISSUE_LABEL_UPDATE",
|
|
user as IUser
|
|
);
|
|
return response?.data;
|
|
})
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
|
|
async deleteIssueLabel(
|
|
workspaceSlug: string,
|
|
projectId: string,
|
|
labelId: string,
|
|
user: IUser | undefined
|
|
): Promise<any> {
|
|
return this.delete(`/api/workspaces/${workspaceSlug}/projects/${projectId}/issue-labels/${labelId}/`)
|
|
.then((response) => {
|
|
trackEventServices.trackIssueLabelEvent(
|
|
{
|
|
workspaceSlug,
|
|
projectId,
|
|
},
|
|
"ISSUE_LABEL_DELETE",
|
|
user as IUser
|
|
);
|
|
return response?.data;
|
|
})
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
}
|