Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts/pipelines/components/graph_shared/links_inner.vue')
-rw-r--r--app/assets/javascripts/pipelines/components/graph_shared/links_inner.vue161
1 files changed, 0 insertions, 161 deletions
diff --git a/app/assets/javascripts/pipelines/components/graph_shared/links_inner.vue b/app/assets/javascripts/pipelines/components/graph_shared/links_inner.vue
deleted file mode 100644
index 1189c2ebad8..00000000000
--- a/app/assets/javascripts/pipelines/components/graph_shared/links_inner.vue
+++ /dev/null
@@ -1,161 +0,0 @@
-<script>
-import { isEmpty } from 'lodash';
-import { DRAW_FAILURE } from '../../constants';
-import { createJobsHash, generateJobNeedsDict, reportToSentry } from '../../utils';
-import { STAGE_VIEW } from '../graph/constants';
-import { generateLinksData } from './drawing_utils';
-
-export default {
- name: 'LinksInner',
- STROKE_WIDTH: 2,
- props: {
- containerId: {
- type: String,
- required: true,
- },
- containerMeasurements: {
- type: Object,
- required: true,
- },
- linksData: {
- type: Array,
- required: true,
- },
- pipelineId: {
- type: Number,
- required: true,
- },
- pipelineData: {
- type: Array,
- required: true,
- },
- defaultLinkColor: {
- type: String,
- required: false,
- default: 'gl-stroke-gray-200',
- },
- highlightedJob: {
- type: String,
- required: false,
- default: '',
- },
- viewType: {
- type: String,
- required: false,
- default: STAGE_VIEW,
- },
- },
- data() {
- return {
- links: [],
- needsObject: null,
- };
- },
- computed: {
- hasHighlightedJob() {
- return Boolean(this.highlightedJob);
- },
- isPipelineDataEmpty() {
- return isEmpty(this.pipelineData);
- },
- highlightedJobs() {
- // If you are hovering on a job, then the jobs we want to highlight are:
- // The job you are currently hovering + all of its needs.
- return this.hasHighlightedJob
- ? [this.highlightedJob, ...this.needsObject[this.highlightedJob]]
- : [];
- },
- highlightedLinks() {
- // If you are hovering on a job, then the links we want to highlight are:
- // All the links whose `source` and `target` are highlighted jobs.
- if (this.hasHighlightedJob) {
- const filteredLinks = this.links.filter((link) => {
- return (
- this.highlightedJobs.includes(link.source) && this.highlightedJobs.includes(link.target)
- );
- });
-
- return filteredLinks.map((link) => link.ref);
- }
-
- return [];
- },
- viewBox() {
- return [0, 0, this.containerMeasurements.width, this.containerMeasurements.height];
- },
- },
- watch: {
- highlightedJob() {
- // On first hover, generate the needs reference
- if (!this.needsObject) {
- const jobs = createJobsHash(this.pipelineData);
- this.needsObject = generateJobNeedsDict(jobs) ?? {};
- }
- },
- highlightedJobs(jobs) {
- this.$emit('highlightedJobsChange', jobs);
- },
- linksData() {
- this.calculateLinkData();
- },
- viewType() {
- /*
- We need to wait a tick so that the layout reflows
- before the links refresh.
- */
- this.$nextTick(() => {
- this.calculateLinkData();
- });
- },
- },
- errorCaptured(err, _vm, info) {
- reportToSentry(this.$options.name, `error: ${err}, info: ${info}`);
- },
- mounted() {
- if (!isEmpty(this.linksData)) {
- this.calculateLinkData();
- }
- },
- methods: {
- isLinkHighlighted(linkRef) {
- return this.highlightedLinks.includes(linkRef);
- },
- calculateLinkData() {
- try {
- this.links = generateLinksData(this.linksData, this.containerId, `-${this.pipelineId}`);
- } catch (err) {
- this.$emit('error', { type: DRAW_FAILURE, reportToSentry: false });
- reportToSentry(this.$options.name, err);
- }
- },
- getLinkClasses(link) {
- return [
- this.isLinkHighlighted(link.ref) ? 'gl-stroke-blue-400' : this.defaultLinkColor,
- { 'gl-opacity-3': this.hasHighlightedJob && !this.isLinkHighlighted(link.ref) },
- ];
- },
- },
-};
-</script>
-<template>
- <div class="gl-display-flex gl-relative">
- <svg
- id="link-svg"
- class="gl-absolute gl-pointer-events-none"
- :viewBox="viewBox"
- :width="`${containerMeasurements.width}px`"
- :height="`${containerMeasurements.height}px`"
- >
- <path
- v-for="link in links"
- :key="link.path"
- :ref="link.ref"
- :d="link.path"
- class="gl-fill-transparent gl-transition-duration-slow gl-transition-timing-function-ease"
- :class="getLinkClasses(link)"
- :stroke-width="$options.STROKE_WIDTH"
- />
- </svg>
- <slot></slot>
- </div>
-</template>