From 9529c639b9f0ce61fa31f9850d2ca539e4970aba Mon Sep 17 00:00:00 2001 From: Dave Pisek Date: Mon, 4 Aug 2025 23:00:54 +0200 Subject: [PATCH 01/10] WIP --- .../charts/open_vulnerabilities_over_time.vue | 41 +++++++++++- .../group_vulnerabilities_over_time_panel.vue | 63 +++++++++++++++++-- 2 files changed, 98 insertions(+), 6 deletions(-) diff --git a/ee/app/assets/javascripts/security_dashboard/components/shared/charts/open_vulnerabilities_over_time.vue b/ee/app/assets/javascripts/security_dashboard/components/shared/charts/open_vulnerabilities_over_time.vue index eee49d656745b8..080d00eb7f49df 100644 --- a/ee/app/assets/javascripts/security_dashboard/components/shared/charts/open_vulnerabilities_over_time.vue +++ b/ee/app/assets/javascripts/security_dashboard/components/shared/charts/open_vulnerabilities_over_time.vue @@ -58,9 +58,48 @@ export default { }; }, }, + watch: { + chartSeries: { + handler(newSeries, oldSeries) { + if (!this.chart) return; + + // // Check if series were removed (length decreased or series names changed) + const hasSeriesRemoved = newSeries.length < oldSeries?.length; + + if (hasSeriesRemoved) { + // // Force a complete chart update when series are removed + this.chart.setOption( + { + series: newSeries, + }, + { lazyUpdate: false, replaceMerge: ['series'] }, + ); + } else { + // Use lazy update for data changes only + this.chart.setOption( + { + series: newSeries, + }, + { lazyUpdate: true }, + ); + } + }, + deep: true, + }, + }, + methods: { + onChartCreated(chart) { + this.chart = chart; + }, + }, }; diff --git a/ee/app/assets/javascripts/security_dashboard/components/shared/group_vulnerabilities_over_time_panel.vue b/ee/app/assets/javascripts/security_dashboard/components/shared/group_vulnerabilities_over_time_panel.vue index f71ecf2b36de55..a40015013be16c 100644 --- a/ee/app/assets/javascripts/security_dashboard/components/shared/group_vulnerabilities_over_time_panel.vue +++ b/ee/app/assets/javascripts/security_dashboard/components/shared/group_vulnerabilities_over_time_panel.vue @@ -1,5 +1,6 @@ @@ -82,6 +122,19 @@ export default { :show-alert-state="fetchError" > diff --git a/ee/app/assets/javascripts/security_dashboard/components/shared/group_vulnerabilities_over_time_panel.vue b/ee/app/assets/javascripts/security_dashboard/components/shared/group_vulnerabilities_over_time_panel.vue index ef0a4685c5d314..2b4b62a6e2a48c 100644 --- a/ee/app/assets/javascripts/security_dashboard/components/shared/group_vulnerabilities_over_time_panel.vue +++ b/ee/app/assets/javascripts/security_dashboard/components/shared/group_vulnerabilities_over_time_panel.vue @@ -71,7 +71,7 @@ export default { update(data) { const rawData = data.group?.securityMetrics?.vulnerabilitiesOverTime?.nodes || []; - this.vulnerabilitiesOverTime = formatVulnerabilitiesOverTimeData(rawData, this.groupedBy); + return formatVulnerabilitiesOverTimeData(rawData, this.groupedBy); }, error() { this.fetchError = true; @@ -92,7 +92,7 @@ export default { }, computed: { hasChartData() { - return this.vulnerabilitiesOverTime?.length > 0; + return this.vulnerabilitiesOverTime.length > 0; }, }, methods: { -- GitLab From c5dd5781d66bee111eec67aa65656a801b8b5414 Mon Sep 17 00:00:00 2001 From: Dave Pisek Date: Tue, 5 Aug 2025 11:15:27 +0200 Subject: [PATCH 04/10] WIP: Remove unnecessary changes --- .../shared/charts/open_vulnerabilities_over_time.vue | 6 ------ 1 file changed, 6 deletions(-) diff --git a/ee/app/assets/javascripts/security_dashboard/components/shared/charts/open_vulnerabilities_over_time.vue b/ee/app/assets/javascripts/security_dashboard/components/shared/charts/open_vulnerabilities_over_time.vue index 283470ef08b46d..428796964e72dc 100644 --- a/ee/app/assets/javascripts/security_dashboard/components/shared/charts/open_vulnerabilities_over_time.vue +++ b/ee/app/assets/javascripts/security_dashboard/components/shared/charts/open_vulnerabilities_over_time.vue @@ -58,11 +58,6 @@ export default { }; }, }, - methods: { - onChartCreated(chart) { - this.chart = chart; - }, - }, }; @@ -73,6 +68,5 @@ export default { :include-legend-avg-max="false" responsive height="auto" - @created="onChartCreated" /> -- GitLab From f78b6d4d99a58996a4612d6d9e82531ad0ce34d5 Mon Sep 17 00:00:00 2001 From: Dave Pisek Date: Tue, 5 Aug 2025 11:39:39 +0200 Subject: [PATCH 05/10] WIP: fix up listbox --- .../charts/open_vulnerabilities_over_time.vue | 1 + .../group_vulnerabilities_over_time_panel.vue | 85 ++++++++----------- 2 files changed, 38 insertions(+), 48 deletions(-) diff --git a/ee/app/assets/javascripts/security_dashboard/components/shared/charts/open_vulnerabilities_over_time.vue b/ee/app/assets/javascripts/security_dashboard/components/shared/charts/open_vulnerabilities_over_time.vue index 428796964e72dc..a6ff737ffbdc49 100644 --- a/ee/app/assets/javascripts/security_dashboard/components/shared/charts/open_vulnerabilities_over_time.vue +++ b/ee/app/assets/javascripts/security_dashboard/components/shared/charts/open_vulnerabilities_over_time.vue @@ -25,6 +25,7 @@ export default { }, chartOptions() { return { + animation: false, // Note: This is a workaround to remove the extra whitespace when the chart has no title // Once https://gitlab.com/gitlab-org/gitlab-services/design.gitlab.com/-/issues/2199 has been fixed, this can be removed grid: { diff --git a/ee/app/assets/javascripts/security_dashboard/components/shared/group_vulnerabilities_over_time_panel.vue b/ee/app/assets/javascripts/security_dashboard/components/shared/group_vulnerabilities_over_time_panel.vue index 2b4b62a6e2a48c..e9663b90aaa31a 100644 --- a/ee/app/assets/javascripts/security_dashboard/components/shared/group_vulnerabilities_over_time_panel.vue +++ b/ee/app/assets/javascripts/security_dashboard/components/shared/group_vulnerabilities_over_time_panel.vue @@ -1,6 +1,6 @@