[Discussion] Technical implementation of extensible issues
This issue will contain the technical implementation conversations around extensible issues. The main idea is to build an extensible framework to use issue-like objects, such as issues, epics, MRs, and incidents.
Base framework
For attributes, the base primitive will only include id
, iid
, title
, type
.
For the frontend, this will involve a refactor of the issues page, moving it from Haml + Vue to Vue. Currently, since we use a mixture, it's difficult to share state between components within the page. A single Vue app for the entire page should alleviate this.
When building the framework, we need to keep in mind our value of iteration and how it will affect the approach we take in building widgets. Initially, we don't want to have to completely refactor components that are already in Vue. We might need to move Vuex stores around, but we should experiment by using an already built Vue component (discussions, assignees are some examples) and trying to plug it in with minimal effort.
GraphQL
Consider using GraphQL for the base framework, as we should be GraphQL first. Again, keep in mind that we will have to tie in non-GraphQL widgets to this.
Outstanding questions
How will we model this on the backend?
Widgets
For the MVC, widgets will have three distinctive slots where they can be added: the primary container (left side top), tabs within the primary container, and the right sidebar.
Here's a list of all the widgets that will need to be built. For now, I'll link to what the widget looks like as a standalone item, and we can have initial conversations about them there. Once ready to be built, we'll move the details into a separate issue.
Primary container (left)
- description
- status (open, closed)
- linked issues
- emoji award
- create merge request
Primary tabbed
Secondary container (right sidebar)
- todo
- assignees
- epic
- milestone
- iteration
- time tracking
- due date
- labels
- weight
- health status
- confidentiality
- lock
- participants
- notifications
- reference
- move
Iterations
Interested in hearing thoughts around what MVC can be for this. We can iteratively build out the widgets, but building them seems to have a hard dependency on building out the base primitive. Maybe MVC would be displaying title and support using a brand new widget? That way we can start building out the new incident widgets as we build out support for existing Vue widgets.