Generic create work item view in modal
What does this MR do and why?
This MR introduces a new create work item view for work items group level. Although the issue focusses on "epic" , to make sure the create view is scalable to for future iterations and there are no "hardcodings" , this MR introduces the basic architecture/wireframe for future developements. Hence you will see all the available work item types for project scope/group scope.
Just FYI the create work item has some issues where it is not generic enough to create any other work item type other than "epic/Objective/issue/Key Results/Task" hence you will see that it defaults to issue for "Requirement/Test Case/Incident etc".
For more information slack coversation here : https://gitlab.slack.com/archives/C014C5S4TK4/p1701336655477449
To show the right sidebar applicable widgets, the work item types query is returning the available widgets for each work item type. and that you will see in this MR.
Response details
{
"data": {
"workspace": {
"id": "gid://gitlab/Group/76",
"workItemTypes": {
"nodes": [
{
"id": "gid://gitlab/WorkItems::Type/8",
"name": "Epic",
"widgetDefinitions": [
{
"type": "ASSIGNEES",
"allowsMultipleAssignees": true,
"canInviteMembers": true,
"__typename": "WorkItemWidgetDefinitionAssignees"
},
{
"type": "DESCRIPTION",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "HIERARCHY",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "LABELS",
"allowsScopedLabels": true,
"__typename": "WorkItemWidgetDefinitionLabels"
},
{
"type": "NOTES",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "START_AND_DUE_DATE",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "HEALTH_STATUS",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "STATUS",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "NOTIFICATIONS",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "AWARD_EMOJI",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "LINKED_ITEMS",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "CURRENT_USER_TODOS",
"__typename": "WorkItemWidgetDefinitionGeneric"
}
],
"__typename": "WorkItemType"
},
{
"id": "gid://gitlab/WorkItems::Type/2",
"name": "Incident",
"widgetDefinitions": [
{
"type": "ASSIGNEES",
"allowsMultipleAssignees": true,
"canInviteMembers": true,
"__typename": "WorkItemWidgetDefinitionAssignees"
},
{
"type": "DESCRIPTION",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "HIERARCHY",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "NOTES",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "NOTIFICATIONS",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "CURRENT_USER_TODOS",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "AWARD_EMOJI",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "LINKED_ITEMS",
"__typename": "WorkItemWidgetDefinitionGeneric"
}
],
"__typename": "WorkItemType"
},
{
"id": "gid://gitlab/WorkItems::Type/1",
"name": "Issue",
"widgetDefinitions": [
{
"type": "ASSIGNEES",
"allowsMultipleAssignees": true,
"canInviteMembers": true,
"__typename": "WorkItemWidgetDefinitionAssignees"
},
{
"type": "LABELS",
"allowsScopedLabels": true,
"__typename": "WorkItemWidgetDefinitionLabels"
},
{
"type": "DESCRIPTION",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "HIERARCHY",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "START_AND_DUE_DATE",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "MILESTONE",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "NOTES",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "ITERATION",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "WEIGHT",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "HEALTH_STATUS",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "NOTIFICATIONS",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "CURRENT_USER_TODOS",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "AWARD_EMOJI",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "LINKED_ITEMS",
"__typename": "WorkItemWidgetDefinitionGeneric"
}
],
"__typename": "WorkItemType"
},
{
"id": "gid://gitlab/WorkItems::Type/7",
"name": "Key Result",
"widgetDefinitions": [
{
"type": "ASSIGNEES",
"allowsMultipleAssignees": true,
"canInviteMembers": true,
"__typename": "WorkItemWidgetDefinitionAssignees"
},
{
"type": "LABELS",
"allowsScopedLabels": true,
"__typename": "WorkItemWidgetDefinitionLabels"
},
{
"type": "DESCRIPTION",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "HIERARCHY",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "START_AND_DUE_DATE",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "NOTES",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "HEALTH_STATUS",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "PROGRESS",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "NOTIFICATIONS",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "CURRENT_USER_TODOS",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "AWARD_EMOJI",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "LINKED_ITEMS",
"__typename": "WorkItemWidgetDefinitionGeneric"
}
],
"__typename": "WorkItemType"
},
{
"id": "gid://gitlab/WorkItems::Type/6",
"name": "Objective",
"widgetDefinitions": [
{
"type": "ASSIGNEES",
"allowsMultipleAssignees": true,
"canInviteMembers": true,
"__typename": "WorkItemWidgetDefinitionAssignees"
},
{
"type": "LABELS",
"allowsScopedLabels": true,
"__typename": "WorkItemWidgetDefinitionLabels"
},
{
"type": "DESCRIPTION",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "HIERARCHY",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "MILESTONE",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "NOTES",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "HEALTH_STATUS",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "PROGRESS",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "NOTIFICATIONS",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "CURRENT_USER_TODOS",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "AWARD_EMOJI",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "LINKED_ITEMS",
"__typename": "WorkItemWidgetDefinitionGeneric"
}
],
"__typename": "WorkItemType"
},
{
"id": "gid://gitlab/WorkItems::Type/4",
"name": "Requirement",
"widgetDefinitions": [
{
"type": "DESCRIPTION",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "NOTES",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "STATUS",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "REQUIREMENT_LEGACY",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "TEST_REPORTS",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "NOTIFICATIONS",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "CURRENT_USER_TODOS",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "AWARD_EMOJI",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "LINKED_ITEMS",
"__typename": "WorkItemWidgetDefinitionGeneric"
}
],
"__typename": "WorkItemType"
},
{
"id": "gid://gitlab/WorkItems::Type/5",
"name": "Task",
"widgetDefinitions": [
{
"type": "ASSIGNEES",
"allowsMultipleAssignees": true,
"canInviteMembers": true,
"__typename": "WorkItemWidgetDefinitionAssignees"
},
{
"type": "LABELS",
"allowsScopedLabels": true,
"__typename": "WorkItemWidgetDefinitionLabels"
},
{
"type": "DESCRIPTION",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "HIERARCHY",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "START_AND_DUE_DATE",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "MILESTONE",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "NOTES",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "ITERATION",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "WEIGHT",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "NOTIFICATIONS",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "CURRENT_USER_TODOS",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "AWARD_EMOJI",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "LINKED_ITEMS",
"__typename": "WorkItemWidgetDefinitionGeneric"
}
],
"__typename": "WorkItemType"
},
{
"id": "gid://gitlab/WorkItems::Type/3",
"name": "Test Case",
"widgetDefinitions": [
{
"type": "DESCRIPTION",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "NOTES",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "NOTIFICATIONS",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "CURRENT_USER_TODOS",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "AWARD_EMOJI",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "LINKED_ITEMS",
"__typename": "WorkItemWidgetDefinitionGeneric"
}
],
"__typename": "WorkItemType"
},
{
"id": "gid://gitlab/WorkItems::Type/9",
"name": "Ticket",
"widgetDefinitions": [
{
"type": "ASSIGNEES",
"allowsMultipleAssignees": true,
"canInviteMembers": true,
"__typename": "WorkItemWidgetDefinitionAssignees"
},
{
"type": "DESCRIPTION",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "HIERARCHY",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "LABELS",
"allowsScopedLabels": true,
"__typename": "WorkItemWidgetDefinitionLabels"
},
{
"type": "MILESTONE",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "NOTES",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "START_AND_DUE_DATE",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "HEALTH_STATUS",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "WEIGHT",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "ITERATION",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "NOTIFICATIONS",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "CURRENT_USER_TODOS",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "AWARD_EMOJI",
"__typename": "WorkItemWidgetDefinitionGeneric"
},
{
"type": "LINKED_ITEMS",
"__typename": "WorkItemWidgetDefinitionGeneric"
}
],
"__typename": "WorkItemType"
}
],
"__typename": "WorkItemTypeConnection"
},
"__typename": "Group"
}
}
}
For example in the above response, Epic has "linked items widget" and Test case does not.
These details have been taken from the backend to make sure we are not hardcoding stuff on the frontend even for attributes wrapper.
Related issue - Work items at the group level - create epic fro... (#429127 - closed)
Screenshots or screen recordings
Screen Recording 2023-12-04 at 4.47.40 PM.mov
How to set up and validate locally
- In rails console enable FF
Feature.enable(:namespace_level_work_items) Feature.enable(:work_items_mvc_2)
- Visit any group work items list such as
http://127.0.0.1:3000/groups/flightjs/-/work-items
- Click the
New work item
button. - Create a work item and see the results
MR acceptance checklist
This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.
-
I have evaluated the MR acceptance checklist for this MR.