metadata-based-explorer1
Version:
Box UI Elements
169 lines (154 loc) • 5.1 kB
JavaScript
/**
* @flow
* @file Helper for the box Task Assignments API
* @author Box
*/
import TasksBase from './TasksBase';
import {
PERMISSION_CAN_COMMENT,
ERROR_CODE_CREATE_TASK_ASSIGNMENT,
ERROR_CODE_UPDATE_TASK_ASSIGNMENT,
ERROR_CODE_DELETE_TASK_ASSIGNMENT,
} from '../../constants';
class TaskAssignments extends TasksBase {
/**
* API URL for task assignments. Getting a list of assignments "/tasks/id/assignments" does not give us the fields
* we need. So instead we will only perform GET operations on an assignment by assignment basis,
* and other endpoints will use the GET URL.
*
* @param {string} id - a box task assignment ID
* @return {string} base url for task assignments
*/
getUrl(id?: string): string {
const baseUrl = `${this.getBaseApiUrl()}/task_assignments`;
return id ? `${baseUrl}/${id}` : baseUrl;
}
/**
* API for creating a task assignment on a file
*
* @param {BoxItem} file - File object that contains the task we are assigning to
* @param {string} taskId - Task id that we are adding an assignment to
* @param {Object} assignTo - Object containing task assignee
* @param {Function} successCallback - Success callback
* @param {Function} errorCallback - Error callback
* @return {void}
*/
createTaskAssignment({
file,
taskId,
assignTo,
successCallback,
errorCallback,
}: {
assignTo: { id: string },
errorCallback: ElementsErrorCallback,
file: BoxItem,
successCallback: Function,
taskId: string,
}): void {
this.errorCode = ERROR_CODE_CREATE_TASK_ASSIGNMENT;
const { id = '', permissions } = file;
try {
this.checkApiCallValidity(PERMISSION_CAN_COMMENT, permissions, id);
} catch (e) {
errorCallback(e, this.errorCode);
return;
}
const requestData = {
data: {
task: {
type: 'task',
id: taskId,
},
assign_to: assignTo,
},
};
this.post({
id,
url: this.getUrl(),
data: requestData,
successCallback,
errorCallback,
});
}
/**
* API for updating a task assignment on a file
*
* @param {BoxItem} file - File object for which we are updating a task assignment
* @param {string} taskAssignmentId - Task assignment to be edited
* @param {TaskAssignmentStatus} taskStatus - The updated task assignment status
* @param {Function} successCallback - Success callback
* @param {Function} errorCallback - Error callback
* @return {void}
*/
updateTaskAssignment({
file,
taskAssignmentId,
taskStatus,
successCallback,
errorCallback,
}: {
errorCallback: ElementsErrorCallback,
file: BoxItem,
successCallback: Function,
taskAssignmentId: string,
taskStatus: TaskAssignmentStatus,
}): void {
this.errorCode = ERROR_CODE_UPDATE_TASK_ASSIGNMENT;
const { id = '', permissions } = file;
try {
// We don't know task_assignment_edit specific permissions, so let the client try and fail gracefully
this.checkApiCallValidity(PERMISSION_CAN_COMMENT, permissions, id);
} catch (e) {
errorCallback(e, this.errorCode);
return;
}
const requestData = {
data: { status: taskStatus },
};
this.put({
id,
url: this.getUrl(taskAssignmentId),
data: requestData,
successCallback,
errorCallback,
});
}
/**
* API for deleting a task assignment on a file
*
* @param {BoxItem} file - File object for which we are deleting a task assignment
* @param {string} taskAssignmentId - Id of the task assignment we are deleting
* @param {Function} successCallback - Success callback
* @param {Function} errorCallback - Error callback
* @return {void}
*/
deleteTaskAssignment({
file,
taskAssignmentId,
successCallback,
errorCallback,
}: {
errorCallback: ElementsErrorCallback,
file: BoxItem,
successCallback: Function,
taskAssignmentId: string,
}): void {
this.errorCode = ERROR_CODE_DELETE_TASK_ASSIGNMENT;
const { id = '', permissions } = file;
try {
// We don't know task_assignment_delete specific permissions, so let the client try and fail gracefully
this.checkApiCallValidity(PERMISSION_CAN_COMMENT, permissions, id);
} catch (e) {
errorCallback(e, this.errorCode);
return;
}
this.delete({
id,
url: this.getUrl(taskAssignmentId),
successCallback,
errorCallback,
});
}
}
export default TaskAssignments;