58 lines
1.5 KiB
JavaScript
58 lines
1.5 KiB
JavaScript
|
import Visibility from 'visibilityjs';
|
||
|
import { getIdFromGraphQLId } from '~/graphql_shared/utils';
|
||
|
import { unwrapStagesWithNeeds } from '../unwrapping_utils';
|
||
|
|
||
|
const addMulti = (mainPipelineProjectPath, linkedPipeline) => {
|
||
|
return {
|
||
|
...linkedPipeline,
|
||
|
multiproject: mainPipelineProjectPath !== linkedPipeline.project.fullPath,
|
||
|
};
|
||
|
};
|
||
|
|
||
|
const transformId = linkedPipeline => {
|
||
|
return { ...linkedPipeline, id: getIdFromGraphQLId(linkedPipeline.id) };
|
||
|
};
|
||
|
|
||
|
const unwrapPipelineData = (mainPipelineProjectPath, data) => {
|
||
|
if (!data?.project?.pipeline) {
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
const { pipeline } = data.project;
|
||
|
|
||
|
const {
|
||
|
upstream,
|
||
|
downstream,
|
||
|
stages: { nodes: stages },
|
||
|
} = pipeline;
|
||
|
|
||
|
const nodes = unwrapStagesWithNeeds(stages);
|
||
|
|
||
|
return {
|
||
|
...pipeline,
|
||
|
id: getIdFromGraphQLId(pipeline.id),
|
||
|
stages: nodes,
|
||
|
upstream: upstream
|
||
|
? [upstream].map(addMulti.bind(null, mainPipelineProjectPath)).map(transformId)
|
||
|
: [],
|
||
|
downstream: downstream
|
||
|
? downstream.nodes.map(addMulti.bind(null, mainPipelineProjectPath)).map(transformId)
|
||
|
: [],
|
||
|
};
|
||
|
};
|
||
|
|
||
|
const toggleQueryPollingByVisibility = (queryRef, interval = 10000) => {
|
||
|
const stopStartQuery = query => {
|
||
|
if (!Visibility.hidden()) {
|
||
|
query.startPolling(interval);
|
||
|
} else {
|
||
|
query.stopPolling();
|
||
|
}
|
||
|
};
|
||
|
|
||
|
stopStartQuery(queryRef);
|
||
|
Visibility.change(stopStartQuery.bind(null, queryRef));
|
||
|
};
|
||
|
|
||
|
export { unwrapPipelineData, toggleQueryPollingByVisibility };
|