From 66089ccf1ab842eb5f7608502eaf8d2642e350b5 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Mon, 6 Mar 2023 03:10:24 +0000 Subject: Add latest changes from gitlab-org/gitlab@master --- .../analytics/cycle_analytics/components/base.vue | 19 ++++++++++++-- .../javascripts/analytics/cycle_analytics/utils.js | 1 + .../shared/components/value_stream_metrics.vue | 18 ++++++++++++- .../components/value_streams_dashboard_link.vue | 30 ++++++++++++++++++++++ app/assets/javascripts/analytics/shared/utils.js | 19 ++++++++++++++ .../projects/cycle_analytics_controller.rb | 1 + .../license_scanning_of_cyclonedx_files/index.md | 4 +-- locale/gitlab.pot | 6 +++++ .../analytics/cycle_analytics/base_spec.js | 21 +++++++++++++++ .../analytics/cycle_analytics/utils_spec.js | 2 +- .../cycle_analytics/value_stream_metrics_spec.js | 21 +++++++++++++++ spec/frontend/analytics/shared/utils_spec.js | 28 ++++++++++++++++++++ workhorse/go.mod | 2 +- workhorse/go.sum | 4 +-- 14 files changed, 167 insertions(+), 9 deletions(-) create mode 100644 app/assets/javascripts/analytics/shared/components/value_streams_dashboard_link.vue diff --git a/app/assets/javascripts/analytics/cycle_analytics/components/base.vue b/app/assets/javascripts/analytics/cycle_analytics/components/base.vue index a688e2f497b..a0416100e49 100644 --- a/app/assets/javascripts/analytics/cycle_analytics/components/base.vue +++ b/app/assets/javascripts/analytics/cycle_analytics/components/base.vue @@ -4,7 +4,7 @@ import { mapActions, mapState, mapGetters } from 'vuex'; import { getCookie, setCookie } from '~/lib/utils/common_utils'; import ValueStreamMetrics from '~/analytics/shared/components/value_stream_metrics.vue'; import { VSA_METRICS_GROUPS } from '~/analytics/shared/constants'; -import { toYmd } from '~/analytics/shared/utils'; +import { toYmd, generateValueStreamsDashboardLink } from '~/analytics/shared/utils'; import PathNavigation from '~/analytics/cycle_analytics/components/path_navigation.vue'; import StageTable from '~/analytics/cycle_analytics/components/stage_table.vue'; import ValueStreamFilters from '~/analytics/cycle_analytics/components/value_stream_filters.vue'; @@ -98,8 +98,22 @@ export default { } return 0; }, + hasCycleAnalyticsForGroups() { + return this.features?.cycleAnalyticsForGroups; + }, metricsRequests() { - return this.features?.cycleAnalyticsForGroups ? METRICS_REQUESTS : SUMMARY_METRICS_REQUEST; + return this.hasCycleAnalyticsForGroups ? METRICS_REQUESTS : SUMMARY_METRICS_REQUEST; + }, + showLinkToDashboard() { + return this.hasCycleAnalyticsForGroups && this.features?.groupAnalyticsDashboardsPage; + }, + dashboardsPath() { + const { + endpoints: { groupPath, fullPath }, + } = this; + return this.showLinkToDashboard + ? generateValueStreamsDashboardLink(groupPath, [fullPath]) + : null; }, query() { return { @@ -173,6 +187,7 @@ export default { :request-params="filterParams" :requests="metricsRequests" :group-by="$options.VSA_METRICS_GROUPS" + :dashboards-path="dashboardsPath" /> const extractFeatures = (gon) => ({ cycleAnalyticsForGroups: Boolean(gon?.licensed_features?.cycleAnalyticsForGroups), + groupAnalyticsDashboardsPage: Boolean(gon?.features?.groupAnalyticsDashboardsPage), }); /** diff --git a/app/assets/javascripts/analytics/shared/components/value_stream_metrics.vue b/app/assets/javascripts/analytics/shared/components/value_stream_metrics.vue index cc7b554f32c..f917248cd13 100644 --- a/app/assets/javascripts/analytics/shared/components/value_stream_metrics.vue +++ b/app/assets/javascripts/analytics/shared/components/value_stream_metrics.vue @@ -4,6 +4,7 @@ import { isEqual, keyBy } from 'lodash'; import { createAlert } from '~/flash'; import { sprintf, s__ } from '~/locale'; import { fetchMetricsData, removeFlash } from '../utils'; +import ValueStreamsDashboardLink from './value_streams_dashboard_link.vue'; import MetricTile from './metric_tile.vue'; const extractMetricsGroupData = (keyList = [], data = []) => { @@ -28,6 +29,7 @@ export default { components: { GlSkeletonLoader, MetricTile, + ValueStreamsDashboardLink, }, props: { requestPath: { @@ -52,6 +54,11 @@ export default { required: false, default: () => [], }, + dashboardsPath: { + type: String, + required: false, + default: null, + }, }, data() { return { @@ -76,6 +83,10 @@ export default { this.fetchData(); }, methods: { + shouldDisplayDashboardLink(index) { + // When we have groups of metrics, we should only display the link for the first group + return index === 0 && this.dashboardsPath; + }, fetchData() { removeFlash(); this.isLoading = true; @@ -110,7 +121,7 @@ export default {