Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
538 changes: 312 additions & 226 deletions dist/doboard-widget-bundle.js

Large diffs are not rendered by default.

104 changes: 62 additions & 42 deletions dist/doboard-widget-bundle.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/doboard-widget-bundle.min.js.map

Large diffs are not rendered by default.

105 changes: 67 additions & 38 deletions js/src/api.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ const SPOTFIX_DOBOARD_API_URL = 'https://api.doboard.com';
* @param {string} method - The API method to call
* @param {string|number} accountId - Optional account ID for the endpoint
*
* @returns {Promise<Object>} The response data when operation_status is 'SUCCESS'
* @return {Promise<Object>} The response data when operation_status is 'SUCCESS'
*/
const spotfixApiCall = async(data, method, accountId = undefined) => {
const spotfixApiCall = async (data, method, accountId = undefined) => {
if (!data || typeof data !== 'object') {
throw new Error('Data must be a valid object');
}
Expand Down Expand Up @@ -75,7 +75,7 @@ const spotfixApiCall = async(data, method, accountId = undefined) => {

if (responseBody.data.operation_status === 'FAILED') {
const errorMessage = responseBody.data.operation_message || 'Operation failed without specific message';
if(responseBody?.data?.operation_message === 'session_id Unknown'){
if (responseBody?.data?.operation_message === 'session_id Unknown') {
clearLocalstorageOnLogout();
checkLogInOutButtonsVisible();
}
Expand All @@ -87,19 +87,19 @@ const spotfixApiCall = async(data, method, accountId = undefined) => {
}

throw new Error(`Unknown operation status: ${responseBody.data.operation_status}`);
}
};

const spotFixUserConfirmEmailDoboard = async (emailConfirmationToken) => {
const data = {
email_confirmation_token: encodeURIComponent(emailConfirmationToken)
}
email_confirmation_token: encodeURIComponent(emailConfirmationToken),
};
const result = await spotfixApiCall(data, 'user_confirm_email');
return {
sessionId: result.session_id,
userId: result.user_id,
email: result.email,
accounts: result.accounts,
operationStatus: result.operation_status
operationStatus: result.operation_status,
};
};

Expand All @@ -113,12 +113,12 @@ const createTaskDoboard = async (sessionId, taskDetails) => {
name: taskDetails.taskTitle,
comment: taskDetails.taskDescription,
meta: taskDetails.taskMeta,
task_type: 'PUBLIC'
}
task_type: taskDetails.task_type,
};
const result = await spotfixApiCall(data, 'task_add', accountId);
return {
taskId: result.task_id,
}
};
};

const createTaskCommentDoboard = async (accountId, sessionId, taskId, comment, projectToken, status = 'ACTIVE') => {
Expand All @@ -127,8 +127,8 @@ const createTaskCommentDoboard = async (accountId, sessionId, taskId, comment, p
project_token: projectToken,
task_id: taskId,
comment: comment,
status: status
}
status: status,
};
const result = await spotfixApiCall(data, 'comment_add', accountId);
return {
commentId: result.comment_id,
Expand All @@ -144,8 +144,8 @@ const attachmentAddDoboard = async (fileData) => {
comment_id: fileData.commentId,
filename: fileData.fileName,
file: fileData.fileBinary,
attachment_order: fileData.attachmentOrder
}
attachment_order: fileData.attachmentOrder,
};
const result = await spotfixApiCall(data, 'attachment_add', accountId);
// @ToDo need to handle result?
};
Expand All @@ -155,7 +155,7 @@ const registerUserDoboard = async (projectToken, accountId, email, nickname, pag
project_token: projectToken,
account_id: accountId,
confirmation_url: email,
}
};
if (email && nickname) {
data.email = email;
data.name = nickname;
Expand Down Expand Up @@ -188,7 +188,7 @@ const loginUserDoboard = async (email, password) => {
const data = {
email: email,
password: password,
}
};
const result = await spotfixApiCall(data, 'user_authorize');
return {
sessionId: result.session_id,
Expand All @@ -198,25 +198,25 @@ const loginUserDoboard = async (email, password) => {
operationMessage: result.operation_message,
operationStatus: result.operation_status,
userEmailConfirmed: result.user_email_confirmed,
accounts: result.accounts
}
}
accounts: result.accounts,
};
};

const forgotPasswordDoboard = async (email) => {
const data = {
email: email
}
email: email,
};
return await spotfixApiCall(data, 'user_password_reset');
}
};


const logoutUserDoboard = async (projectToken) => {
const sessionId = localStorage.getItem('spotfix_session_id');
const accountsString = localStorage.getItem('spotfix_accounts');
const accounts = accountsString !== 'undefined' ? JSON.parse(accountsString || '[]') : [];
const accounts = accountsString !== 'undefined' ? JSON.parse(accountsString || '[]') : [];
const accountId = accounts.length > 0 ? accounts[0].account_id : 1;

if(sessionId && accountId) {
if (sessionId && accountId) {
const data = {
session_id: sessionId,
};
Expand All @@ -234,24 +234,25 @@ const logoutUserDoboard = async (projectToken) => {
checkLogInOutButtonsVisible();
}
}
}
};

const getTasksDoboard = async (projectToken, sessionId, accountId, projectId, userId) => {
const data = {
session_id: sessionId,
project_token: projectToken,
project_id: projectId,
task_type: 'PUBLIC',
status: 'ACTIVE,DONE',
}
};
if ( userId ) {
data.user_id = userId;
}
const result = await spotfixApiCall(data, 'task_get', accountId);
const tasks = result.tasks.map(task => ({
const tasks = result.tasks.map((task) => ({
taskId: task.task_id,
taskTitle: task.name,
userId: task.user_id,
task_type: task.task_type,
commentsCount: task.comments_count,
taskLastUpdate: task.updated,
taskCreated: task.created,
taskCreatorTaskUser: task.creator_user_id,
Expand All @@ -261,18 +262,20 @@ const getTasksDoboard = async (projectToken, sessionId, accountId, projectId, us
await spotfixIndexedDB.clearPut(SPOTFIX_TABLE_TASKS, tasks);
storageSaveTasksCount(tasks);
return tasks;
}
};


const getTasksCommentsDoboard = async (sessionId, accountId, projectToken, currentActiveTaskId, status = 'ACTIVE') => {
const data = {
session_id: sessionId,
project_token: projectToken,
status: status,
task_id: currentActiveTaskId
}
};

if (currentActiveTaskId) data.task_id = currentActiveTaskId;

const result = await spotfixApiCall(data, 'comment_get', accountId);
const comments = result.comments.map(comment => ({
const comments = result.comments.map((comment) => ({
taskId: comment.task_id,
commentId: comment.comment_id,
userId: comment.user_id,
Expand All @@ -289,7 +292,7 @@ const getUserDoboard = async (sessionId, projectToken, accountId, userId) => {
const data = {
session_id: sessionId,
project_token: projectToken,
}
};
if (userId) data.user_id = userId;

const result = await spotfixApiCall(data, 'user_get', accountId);
Expand All @@ -301,7 +304,7 @@ const getUserDoboard = async (sessionId, projectToken, accountId, userId) => {
return result.users;

// @ToDo Need to handle these two different answers?
/*// Format 1: users inside data
/* // Format 1: users inside data
if (responseBody.data && responseBody.data.operation_status) {
if (responseBody.data.operation_status === 'FAILED') {
throw new Error(responseBody.data.operation_message);
Expand Down Expand Up @@ -332,13 +335,13 @@ const userUpdateDoboard = async (projectToken, accountId, sessionId, userId, tim
session_id: sessionId,
project_token: projectToken,
user_id: userId,
timestamp: timezone
}
timestamp: timezone,
};
await spotfixApiCall(data, 'user_update', accountId);
return {
success: true
success: true,
};
}
};

const getReleaseVersion = async () => {
try {
Expand All @@ -362,3 +365,29 @@ const getReleaseVersion = async () => {
}
};

const getNotificationsDoboard = async (projectToken, sessionId, accountId) => {
if (sessionId) {
const data = {
session_id: sessionId,
project_token: projectToken,
status: 'DELIVERED',
};

const result = await spotfixApiCall(data, 'notification_get', accountId);
return result.notifications;
}
};

const updateNotificationsDoboard = async (taskId, projectToken, accountId) => {
const sessionId = localStorage.getItem('spotfix_session_id');
if (sessionId) {
const data = {
session_id: sessionId,
project_token: projectToken,
task_id: taskId,
status: 'READ',
};

await spotfixApiCall(data, 'notification_update', accountId);
}
};
Loading