Pinned/unpinned notifications that correspond to system notes and comments
Background
- This is an evolution in the design of unified todos and notifications, a step beyond https://gitlab.com/gitlab-org/gitlab-ce/issues/48787.
- It is inspired by taking a lot of ideas from threaded conversations in modern clients.
- It is inspired by this suggestion from @matejlatin (https://gitlab.com/gitlab-org/gitlab-ce/issues/43474#note_93028117), who says we can associate todos with specific comments, not just issues/mrs/epics.
- It is based on an observation that most notifications are actually driven from events that already has a corresponding system note or comment in the comment thread of an issue/mr/epic.
Concept
- For a given event (e.g., a comment being made in an issue), there is a system note recorded in the thread of the issue itself. Take that system note and just put it in the email notification itself. So this will minimize overlap of functionality/content. We should simplify email notifications so that they just contain the system note itself, and maybe some additional metadata, (i.e. issue title, etc.).
- In your email client, you thus have a bunch of threaded conversations. Each conversation corresponds to an issue/mr/epic. And each email in that conversation corresponds to a system note. In other words, each conversation is just a subset of the system notes from that object.
- So in the web UI where you show notifications, there should be no reason to re-create new UI / UI elements. Just use the system notes themselves!
- So in the web UI, you also have a bunch of threaded conversations. But for each conversation, you can show the entire set of system notes (since you are GitLab!). So the web UI is just pulling in a bunch of issues/mrs/epics, and aggregating them together in one single flow/list.
- And then you do the sensible thing in how you order items, and just borrow ideas from the modern email clients. You put the latest conversation at the top. When you click into a conversation, you show recent system notes first. You indicate which system note actually generated a email notification versus ones that did not.
- You can also configure GitLab to automatically (similar to https://gitlab.com/gitlab-org/gitlab-ce/issues/48787), to automatically pin notifications. But in this design, you can pin individual system notes. So every time there's a comment on an issue, and you are participating (notification-wise) in that issue, and you have configured GitLab to auto-pin, then all new system notes will be pinned when they come in. There is also a functionality to unpin individual system notes when you are done with it, or unpin all pinned system notes in a given issue, all at once.
- This means that on the issue page itself, you will now be able to pin individual system notes, instead of pinning the entire the object. That is, you can view the pins, and pin/unpin system notes both in the notifications web UI, and in the object UI itself.
Visuals
Edited by Victor Wu