diff --git a/client/src/api/boards.js b/client/src/api/boards.js index c35b2e98..3a50c47a 100755 --- a/client/src/api/boards.js +++ b/client/src/api/boards.js @@ -11,15 +11,17 @@ const createBoard = (projectId, data, headers) => const createBoardWithImport = (projectId, data, requestId, headers) => http.post(`/projects/${projectId}/boards?requestId=${requestId}`, data, headers); -const getBoard = (id, headers) => - socket.get(`/boards/${id}`, undefined, headers).then((body) => ({ - ...body, - included: { - ...body.included, - cards: body.included.cards.map(transformCard), - attachments: body.included.attachments.map(transformAttachment), - }, - })); +const getBoard = (id, subscribe, headers) => + socket + .get(`/boards/${id}${subscribe ? '?subscribe=true' : ''}`, undefined, headers) + .then((body) => ({ + ...body, + included: { + ...body.included, + cards: body.included.cards.map(transformCard), + attachments: body.included.attachments.map(transformAttachment), + }, + })); const updateBoard = (id, data, headers) => socket.patch(`/boards/${id}`, data, headers); diff --git a/client/src/api/users.js b/client/src/api/users.js index ca77bd9d..93d9be31 100755 --- a/client/src/api/users.js +++ b/client/src/api/users.js @@ -9,7 +9,8 @@ const createUser = (data, headers) => socket.post('/users', data, headers); const getUser = (id, headers) => socket.get(`/users/${id}`, undefined, headers); -const getCurrentUser = (headers) => socket.get('/users/me', undefined, headers); +const getCurrentUser = (subscribe, headers) => + socket.get(`/users/me${subscribe ? '?subscribe=true' : ''}`, undefined, headers); const updateUser = (id, data, headers) => socket.patch(`/users/${id}`, data, headers); diff --git a/client/src/sagas/core/requests/boards.js b/client/src/sagas/core/requests/boards.js index 0ed3bea6..3f7fe281 100644 --- a/client/src/sagas/core/requests/boards.js +++ b/client/src/sagas/core/requests/boards.js @@ -47,7 +47,7 @@ export function* fetchBoardByCurrentPath() { tasks, attachments, }, - } = yield call(request, api.getBoard, boardId)); + } = yield call(request, api.getBoard, boardId, true)); } } diff --git a/client/src/sagas/core/requests/core.js b/client/src/sagas/core/requests/core.js index 10055b08..77cddd3e 100644 --- a/client/src/sagas/core/requests/core.js +++ b/client/src/sagas/core/requests/core.js @@ -6,7 +6,7 @@ import api from '../../../api'; import mergeRecords from '../../../utils/merge-records'; export function* fetchCore() { - const { item: user } = yield call(request, api.getCurrentUser); + const { item: user } = yield call(request, api.getCurrentUser, true); const { items: users1 } = yield call(request, api.getUsers); const { diff --git a/client/src/sagas/core/services/board-memberships.js b/client/src/sagas/core/services/board-memberships.js index 06311367..0d6c5a0e 100644 --- a/client/src/sagas/core/services/board-memberships.js +++ b/client/src/sagas/core/services/board-memberships.js @@ -62,7 +62,7 @@ export function* handleBoardMembershipCreate(boardMembership) { if (isCurrentUser) { let board2; try { - ({ item: board2 } = yield call(request, api.getBoard, boardMembership.boardId)); + ({ item: board2 } = yield call(request, api.getBoard, boardMembership.boardId, false)); } catch { return; } diff --git a/client/src/sagas/core/services/boards.js b/client/src/sagas/core/services/boards.js index b797ecf7..de8280c6 100644 --- a/client/src/sagas/core/services/boards.js +++ b/client/src/sagas/core/services/boards.js @@ -96,7 +96,7 @@ export function* fetchBoard(id) { tasks, attachments, }, - } = yield call(request, api.getBoard, id)); + } = yield call(request, api.getBoard, id, true)); } catch (error) { yield put(actions.fetchBoard.failure(id, error)); return; diff --git a/client/src/sagas/core/services/router.js b/client/src/sagas/core/services/router.js index f47cd9bb..2585dc01 100644 --- a/client/src/sagas/core/services/router.js +++ b/client/src/sagas/core/services/router.js @@ -81,7 +81,7 @@ export function* handleLocationChange() { tasks, attachments, }, - } = yield call(request, api.getBoard, currentBoard.id)); + } = yield call(request, api.getBoard, currentBoard.id, true)); } catch (error) {} // eslint-disable-line no-empty } diff --git a/server/api/controllers/boards/create.js b/server/api/controllers/boards/create.js index f1d69b40..207180bc 100755 --- a/server/api/controllers/boards/create.js +++ b/server/api/controllers/boards/create.js @@ -108,10 +108,6 @@ module.exports = { request: this.req, }); - if (this.req.isSocket) { - sails.sockets.join(this.req, `board:${board.id}`); // TODO: only when subscription needed - } - return { item: board, included: { diff --git a/server/api/controllers/boards/show.js b/server/api/controllers/boards/show.js index d7a5f871..b93c58ba 100755 --- a/server/api/controllers/boards/show.js +++ b/server/api/controllers/boards/show.js @@ -11,6 +11,9 @@ module.exports = { regex: /^[0-9]+$/, required: true, }, + subscribe: { + type: 'boolean', + }, }, exits: { @@ -73,8 +76,8 @@ module.exports = { card.isSubscribed = isSubscribedByCardId[card.id] || false; }); - if (this.req.isSocket) { - sails.sockets.join(this.req, `board:${board.id}`); // TODO: only when subscription needed + if (inputs.subscribe && this.req.isSocket) { + sails.sockets.join(this.req, `board:${board.id}`); } return { diff --git a/server/api/controllers/users/show.js b/server/api/controllers/users/show.js index 972dc580..98503d54 100755 --- a/server/api/controllers/users/show.js +++ b/server/api/controllers/users/show.js @@ -13,6 +13,9 @@ module.exports = { regex: /^[0-9]+|me$/, required: true, }, + subscribe: { + type: 'boolean', + }, }, exits: { @@ -26,8 +29,8 @@ module.exports = { if (inputs.id === CURRENT_USER_ID) { ({ currentUser: user } = this.req); - if (this.req.isSocket) { - sails.sockets.join(this.req, `user:${user.id}`); // TODO: only when subscription needed + if (inputs.subscribe && this.req.isSocket) { + sails.sockets.join(this.req, `user:${user.id}`); } } else { user = await sails.helpers.users.getOne(inputs.id);