Real-time boards lists
Problem
Issue Boards are insufficient facilitating collaborative planning. Constant page reloads are not intuitive, especially if there are multiple people individually looking at the same board during a meeting.
Proposal
Collaborate with groupmemory on #21249 to make Issues within Issue Lists "real time".
Expected Behavior
Anytime an attribute on an issue changes, that change is reflected on the Issue and corresponding Issue List(s) without needing to refresh the page. This should include, but is not limited to, the following:
-
Label is added/removed from Issue -
Label is renamed on Issue -
Milestone is added, removed, or changed -
Assignee(s) is added, removed, or change -
An Issue is moved to another project -
An Issue's weight is added, removed, or changed -
An Issue's relative priority is changed -
An Issue's Title is updated -
An Issue's confidentiality settings are changed. -
Anything else to implicitly call out?
This change is limited to Issues and how they are presented within Issue Lists. There will be future MVCs for additional Issue Board behaviors such as Issue List order and Board Configuration.
Technical Considerations
If moving to GraphQL is our long term goal, we should consider:
- Implementing this with Subscriptions via anycable-graphql or something similar.
- Implementing this with Apollo, as it now has decent support for local state, instead of VueX.
Alternatively, if for some reason this is a bad idea...
- Keeping VueX and using an alternative networking layer on the client to facilitate
wss
Possible implementation
- When an issue is created / changed, query the boards / lists that are affected.
- We need to query the issue's project and its ancestor groups for boards with scopes that match the issue's old and new params.
- We need the old params too because we want to broadcast that the issue has been removed from that board / list.
- Once we find the matching boards, we need to find the affected lists for each of those boards.
- Some notes:
- When an issue matches the board scope, it is definitely in one of the lists of that board. Because if it does not match the user-created lists, it will be in the Open or Closed list. Though there is also a case where Open / Closed can be hidden, but I think we can ignore that case for now. That can be an optimization for later.
- Similar to above, when a board does not have any scope defined, it will contain all issues of that project / group.
- An issue can appear in more than one user-created list. For example, if you have an assignee list and a label list in one board then it matches both, the issue shows up on both lists.
- For each of those lists, trigger a GraphQL subscription so the frontend can refresh the list
These can happen in a Sidekiq job if these aren't fast enough so we don't slow down the creation / update.
Original details
-------- V2 -------------
Description
- Board config changes: This is not in scope.
- List changes. I.e. if somebody adds/removes/reorders a list on a board: This is not in scope.
- When certain attributes/data changes in an issue (title, description, others): This is not in scope.
- What is in scope:
- An issue changes from open to closed or vice versa. Then it may appear on a different list in the board. This is in scope.
- An issue changes labels/assignees/milestones. Then it may appear on a different list in the board or not appear anymore. This is in scope.
--------- V1 -----------------
Problem
The issue board already feels like a UI piece that reflects real time.. except its not.Also, the issueboard has 2 usecases where real time ness is important:
- when doing a remote meeting and I change the label on a certain issue.. the one screencasting their screen with the issue board should not have to refresh their tab in order to see those changes.. as to avoid wasting time on an issue not relevant.
Original content issue: This is a problem for us at the moment as we have up 10 members of the team using the board. It has been annoying to keep track of the board as there is the constant need to manually refresh it to see any updates.
- for a non remote office. the issue board could be alway on screen on some monitor.. as to let everybody be aware of how issues are moving through their pipeline for example... or what still needs work etc.
Proposal
Make issue boards real time.. its already built in vue and is one of our prime UI views.
Links / references
*This page may contain information related to upcoming products, features and functionality. It is important to note that the information presented is for informational purposes only, so please do not rely on the information for purchasing or planning purposes. Just like with all projects, the items mentioned on the page are subject to change or delay, and the development, release, and timing of any products, features, or functionality remain at the sole discretion of GitLab Inc.*