in src/views/agile-board/board-actions.ts [797:861]
export function subscribeServersideUpdates(): ReduxAction {
return async (
dispatch: ReduxThunkDispatch,
getState: ReduxStateGetter,
getApi: ReduxAPIGetter,
) => {
const {sprint} = getState().agile;
const updateCache = (): void => {
cacheSprint(sprint);
};
serverSideEventsInstance = new ServersideEvents(getApi().config.backendUrl);
serverSideEventsInstance.subscribeAgileBoardUpdates(
sprint.eventSourceTicket,
);
serverSideEventsInstance.listenTo('error', () => {
clearTimeout(serverSideEventsInstanceErrorTimer);
serverSideEventsInstanceErrorTimer = setTimeout(() => {
log.info('Agile Actions: Reloading sprint and reconnecting to LiveUpdate...');
if (Router.getCurrentRouteName() !== routeMap.AgileBoard) {
destroySSE(); //TODO: remove after implementing lazy screens loading
} else if (
serverSideEventsInstanceErrorTimer &&
serverSideEventsInstance
) {
dispatch(loadSprintIssues(sprint));
}
}, RECONNECT_TIMEOUT);
});
serverSideEventsInstance.listenTo('sprintCellUpdate', data => {
animateLayout();
dispatch(addOrUpdateCellOnBoard(data.issue, data.row.id, data.column.id));
updateCache();
});
serverSideEventsInstance.listenTo('sprintSwimlaneUpdate', data => {
animateLayout();
dispatch(updateSwimlane(data.swimlane));
updateCache();
});
serverSideEventsInstance.listenTo('sprintIssueRemove', data => {
animateLayout();
dispatch(removeIssueFromBoard(data.removedIssue.id));
updateCache();
});
serverSideEventsInstance.listenTo('sprintIssueHide', data => {
animateLayout();
dispatch(removeIssueFromBoard(data.removedIssue.id));
updateCache();
});
serverSideEventsInstance.listenTo('sprintIssueMessage', function (data) {
data.messages.forEach(msg => notify(msg));
});
serverSideEventsInstance.listenTo('sprintIssuesReorder', data => {
animateLayout();
data.reorders.forEach(function (reorder) {
const leadingId = reorder.leading ? reorder.leading.id : null;
dispatch(reorderSwimlanesOrCells(leadingId, reorder.moved.id));
});
updateCache();
});
setSSEInstance(serverSideEventsInstance);
};
}