Ezekiel Kigbo activity https://gitlab.com/ekigbo 2026-03-19T00:36:47Z tag:gitlab.com,2026-03-19:5219920611 Ezekiel Kigbo pushed to project branch 589180-create-analytics-dashboard-page at GitLab.org / GitLab 2026-03-19T00:36:47Z ekigbo Ezekiel Kigbo

Ezekiel Kigbo (414b0873) at 19 Mar 00:36

Apply 1 suggestion(s) to 1 file(s)

tag:gitlab.com,2026-03-19:5219919827 Ezekiel Kigbo commented on merge request !226783 at GitLab.org / GitLab 2026-03-19T00:36:16Z ekigbo Ezekiel Kigbo

note: custom_dashboards_foundation seems like a better fit since analytics dashboards is broader than just value stream management

tag:gitlab.com,2026-03-19:5219919811 Ezekiel Kigbo commented on merge request !226783 at GitLab.org / GitLab 2026-03-19T00:36:15Z ekigbo Ezekiel Kigbo
tag:gitlab.com,2026-03-19:5219917798 Ezekiel Kigbo commented on merge request !226783 at GitLab.org / GitLab 2026-03-19T00:34:57Z ekigbo Ezekiel Kigbo

Good question, this will be added later once we implement the graphql queries to fetch the list of dashboards, for now it will always be empty #589182

tag:gitlab.com,2026-03-19:5219902418 Ezekiel Kigbo pushed to project branch 589180-create-analytics-dashboard-page at GitLab.org / GitLab 2026-03-19T00:23:44Z ekigbo Ezekiel Kigbo

Ezekiel Kigbo (a17fb836) at 19 Mar 00:23

Apply 2 suggestion(s) to 1 file(s)

tag:gitlab.com,2026-03-18:5219840710 Ezekiel Kigbo commented on merge request !226783 at GitLab.org / GitLab 2026-03-18T23:50:48Z ekigbo Ezekiel Kigbo

Hi @lvanc would you be free to give this a quick UX review? I took a guess at a "empty state" when there are no dashboards available to list.

For now, the dashboard list is empty, but when #589182 is implemented we should be able to fetch the dashboards that are available in the postgres database (there will likely be a migration added to seed some dashboards)

tag:gitlab.com,2026-03-18:5219826462 Ezekiel Kigbo commented on merge request !227455 at GitLab.org / GitLab 2026-03-18T23:42:16Z ekigbo Ezekiel Kigbo

Thanks @smaglangit, just a couple of tiny nitpicks.

I am a bit curious about the why for this change?

We already had 2 separate components, but the new shared component just adds them together with the only change seeming to be to centralize the button actions, but I wonder if we could have just created separate redirectConfig, leaveMessage and deleteMessage functions that we call from the existing components.

This is incomplete and untested, but hopefully illustrative of what I mean

diff --git a/app/assets/javascripts/vue_shared/components/projects_list/project_list_item_actions.vue b/app/assets/javascripts/vue_shared/components/projects_list/project_list_item_actions.vue
index 7a4a8c6f0b7b..159f7782cc13 100644
--- a/app/assets/javascripts/vue_shared/components/projects_list/project_list_item_actions.vue
+++ b/app/assets/javascripts/vue_shared/components/projects_list/project_list_item_actions.vue
@@ -30,6 +30,43 @@ import {
 } from './utils';
 import ProjectsListItemLeaveModal from './projects_list_item_leave_modal.vue';
 
+// TODO: move these methods to a `utils` folder
+const redirectConfig = ({ path, id, deleteMessage, leaveMessage }) => {
+  return {
+    [ACTION_DELETE_IMMEDIATELY]: {
+      path,
+      alerts: [
+        {
+          id,
+          message: deleteMessage,
+          variant: 'info',
+        },
+      ],
+    },
+    [ACTION_LEAVE]: {
+      path,
+      alerts: [
+        {
+          id,
+          message: leaveMessage,
+          variant: 'info',
+        },
+      ],
+    },
+  };
+};
+
+const handleHeadActionRedirect = ({ action, resourceFullPath }) => {
+  const { alerts, path = resourceFullPath } = this.redirectConfig[action] || {};
+  const url = new URL(path, window.location.origin);
+
+  if (alerts) {
+    visitUrlWithAlerts(url.href, alerts);
+  } else {
+    visitUrl(url.href);
+  }
+};
+
 export default {
   name: 'ProjectListItemActions',
   components: {
@@ -209,7 +246,11 @@ export default {
 
         this.$emit(
           'action',
-          this.project.markedForDeletion ? ACTION_DELETE_IMMEDIATELY : ACTION_DELETE,
+
+          handleHeadActionRedirect({
+            action: this.project.markedForDeletion ? ACTION_DELETE_IMMEDIATELY : ACTION_DELETE,
+            resourceFullPath: '',
+          }),
         );
         renderDeleteSuccessToast(this.project);
       } catch (error) {
@@ -228,7 +269,10 @@ export default {
       this.isLeaveModalVisible = true;
     },
     onLeaveSuccess() {
-      this.$emit('action', ACTION_LEAVE);
+      this.$emit(
+        'action',
+        handleHeadActionRedirect({ action: ACTION_LEAVE, resourceFullPath: '' }),
+      );
     },
   },
 };
tag:gitlab.com,2026-03-18:5219826461 Ezekiel Kigbo commented on merge request !227455 at GitLab.org / GitLab 2026-03-18T23:42:16Z ekigbo Ezekiel Kigbo

Same comment as above re: casing

tag:gitlab.com,2026-03-18:5219826444 Ezekiel Kigbo commented on merge request !227455 at GitLab.org / GitLab 2026-03-18T23:42:16Z ekigbo Ezekiel Kigbo

nitpick: any reason for the mixed case in this method? Might be better to keep it consistent.

        return sprintf(__('You left the "%{groupName}" group.'), {
          groupName: this.resource.fullName,
tag:gitlab.com,2026-03-18:5219826439 Ezekiel Kigbo commented on merge request !227455 at GitLab.org / GitLab 2026-03-18T23:42:15Z ekigbo Ezekiel Kigbo

not-blocking: @smaglangit I do wonder if it would make sense to be a bit more specific with the name of the component and file? Even though the import path contains groups_projects, I wonder if the name HeaderActionsDropdown is a little too generic.

Perhaps NamespaceActionsDropdown? - not blocking though!

tag:gitlab.com,2026-03-18:5215988468 Ezekiel Kigbo pushed to project branch 589180-create-analytics-dashboard-page at GitLab.org / GitLab 2026-03-18T07:17:38Z ekigbo Ezekiel Kigbo

Ezekiel Kigbo (31b474e3) at 18 Mar 07:17

Add spec/view/explore tests

tag:gitlab.com,2026-03-18:5215920221 Ezekiel Kigbo pushed to project branch 589180-create-analytics-dashboard-page at GitLab.org / GitLab 2026-03-18T06:51:36Z ekigbo Ezekiel Kigbo

Ezekiel Kigbo (965dccd3) at 18 Mar 06:51

Add spec/view/explore tests

... and 3 more commits

tag:gitlab.com,2026-03-18:5215537731 Ezekiel Kigbo pushed to project branch 589180-create-analytics-dashboard-page at GitLab.org / GitLab 2026-03-18T03:27:31Z ekigbo Ezekiel Kigbo

Ezekiel Kigbo (55ef70c8) at 18 Mar 03:27

Add an skeleton empty state

... and 324 more commits

tag:gitlab.com,2026-03-18:5215450690 Ezekiel Kigbo pushed to project branch master at GitLab.org / GitLab 2026-03-18T02:32:47Z ekigbo Ezekiel Kigbo

Ezekiel Kigbo (565a60ab) at 18 Mar 02:32

Merge branch 'realtime-stage-status-dropdown' into 'master'

... and 1 more commit

tag:gitlab.com,2026-03-18:5215450257 Ezekiel Kigbo deleted project branch realtime-stage-status-dropdown at GitLab.org / GitLab 2026-03-18T02:32:26Z ekigbo Ezekiel Kigbo

Ezekiel Kigbo (39ddc394) at 18 Mar 02:32

tag:gitlab.com,2026-03-18:5215449604 Ezekiel Kigbo accepted merge request !227492: Subscribe to ciStageStatusUpdated in PipelineStageDropdown at GitLab.org / GitLab 2026-03-18T02:31:56Z ekigbo Ezekiel Kigbo

What does this MR do and why?

Subscribe to the ciStageStatusUpdated GraphQL subscription in PipelineStageDropdown so stage icons in the MR pipeline mini graph update in real-time when their status changes (e.g., pending → running → success).

Background

This is part of the MR Pipelines migration to GraphQL epic, which aims to migrate the MR Pipelines tab to use GraphQL. As part of this migration, we're leveraging GraphQL subscriptions to make the pipeline mini graph real-time, providing an improved user experience. Previously, we implemented real-time updates at the pipeline level. This MR extends that work to individual stage statuses.

Solution

  • Add new ci_stage_status_updated.subscription.graphql with @feature_category
  • Subscribe only to "alive" stages (running, pending, etc.) to minimize WebSocket overhead
  • Automatically unsubscribe when a stage reaches a terminal status
  • Add double-subscription guard to prevent leaked subscriptions
  • Add stage watcher to re-subscribe when stage prop changes (component reuse)
  • Inline the MR pipelines GraphQL query (decoupled from shared PipelineDetails fragment) to add detailedStatus.name on stages without increasing complexity for other consumers
  • Inject parent mergeRequest data into each pipeline object (replaces the per-pipeline mergeRequest field that was on the shared fragment)

The MR pipelines GraphQL page is behind the mr_pipelines_graphql feature flag.

This is Part 1 of 4 in the real-time MR pipeline mini graph series.

Visual Changes

How to set up and validate locally

  1. Enable the feature flags in Rails console:
    Feature.enable(:mr_pipelines_graphql)
    Feature.enable(:pipeline_mini_graph_subscription)
  2. Open a merge request and trigger a new pipeline
  3. Open browser dev tools → Network → WS → find cable connection
  4. Verify ciStageStatusUpdated messages appear when stages change status
  5. Observe that stage icons update immediately as jobs progress
  6. Verify that completed stages (success/failed) do not have active subscriptions

References

MR acceptance checklist

Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.

tag:gitlab.com,2026-03-18:5215446625 Ezekiel Kigbo pushed to project branch 589180-create-analytics-dashboard-page at GitLab.org / GitLab 2026-03-18T02:29:35Z ekigbo Ezekiel Kigbo

Ezekiel Kigbo (016be3af) at 18 Mar 02:29

[skip ci] wip - update related specs

... and 2 more commits

tag:gitlab.com,2026-03-17:5215159506 Ezekiel Kigbo commented on merge request !227694 at GitLab.org / GitLab 2026-03-17T23:42:19Z ekigbo Ezekiel Kigbo

Hi @rsarangadharan are you able to help review this community contribution?

tag:gitlab.com,2026-03-17:5215152517 Ezekiel Kigbo commented on merge request !227492 at GitLab.org / GitLab 2026-03-17T23:36:58Z ekigbo Ezekiel Kigbo

Thanks for updating, this looks great. I'll set MWPS.

tag:gitlab.com,2026-03-17:5215152175 Ezekiel Kigbo approved merge request !227492: Subscribe to ciStageStatusUpdated in PipelineStageDropdown at GitLab.org / GitLab 2026-03-17T23:36:45Z ekigbo Ezekiel Kigbo

What does this MR do and why?

Subscribe to the ciStageStatusUpdated GraphQL subscription in PipelineStageDropdown so stage icons in the MR pipeline mini graph update in real-time when their status changes (e.g., pending → running → success).

Background

This is part of the MR Pipelines migration to GraphQL epic, which aims to migrate the MR Pipelines tab to use GraphQL. As part of this migration, we're leveraging GraphQL subscriptions to make the pipeline mini graph real-time, providing an improved user experience. Previously, we implemented real-time updates at the pipeline level. This MR extends that work to individual stage statuses.

Solution

  • Add new ci_stage_status_updated.subscription.graphql with @feature_category
  • Subscribe only to "alive" stages (running, pending, etc.) to minimize WebSocket overhead
  • Automatically unsubscribe when a stage reaches a terminal status
  • Add double-subscription guard to prevent leaked subscriptions
  • Add stage watcher to re-subscribe when stage prop changes (component reuse)
  • Inline the MR pipelines GraphQL query (decoupled from shared PipelineDetails fragment) to add detailedStatus.name on stages without increasing complexity for other consumers
  • Inject parent mergeRequest data into each pipeline object (replaces the per-pipeline mergeRequest field that was on the shared fragment)

The MR pipelines GraphQL page is behind the mr_pipelines_graphql feature flag.

This is Part 1 of 4 in the real-time MR pipeline mini graph series.

Visual Changes

How to set up and validate locally

  1. Enable the feature flags in Rails console:
    Feature.enable(:mr_pipelines_graphql)
    Feature.enable(:pipeline_mini_graph_subscription)
  2. Open a merge request and trigger a new pipeline
  3. Open browser dev tools → Network → WS → find cable connection
  4. Verify ciStageStatusUpdated messages appear when stages change status
  5. Observe that stage icons update immediately as jobs progress
  6. Verify that completed stages (success/failed) do not have active subscriptions

References

MR acceptance checklist

Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.