Skip to content

Generic create work item view in modal

Deepika Guliani requested to merge dg-work-item-create-flow into master

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)

Screenshots or screen recordings

Screen Recording 2023-12-04 at 4.47.40 PM.mov

How to set up and validate locally

  1. In rails console enable FF
    Feature.enable(:namespace_level_work_items)
    Feature.enable(:work_items_mvc_2)
  2. Visit any group work items list such as http://127.0.0.1:3000/groups/flightjs/-/work-items
  3. Click the New work item button.
  4. 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.

Edited by Deepika Guliani

Merge request reports