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/pipelines.vue')
-rw-r--r--app/assets/javascripts/pipelines/components/pipelines.vue374
1 files changed, 0 insertions, 374 deletions
diff --git a/app/assets/javascripts/pipelines/components/pipelines.vue b/app/assets/javascripts/pipelines/components/pipelines.vue
deleted file mode 100644
index dbf29b0c29c..00000000000
--- a/app/assets/javascripts/pipelines/components/pipelines.vue
+++ /dev/null
@@ -1,374 +0,0 @@
-<script>
-import { isEqual } from 'lodash';
-import { __, sprintf, s__ } from '../../locale';
-import createFlash from '../../flash';
-import PipelinesService from '../services/pipelines_service';
-import pipelinesMixin from '../mixins/pipelines';
-import TablePagination from '../../vue_shared/components/pagination/table_pagination.vue';
-import NavigationTabs from '../../vue_shared/components/navigation_tabs.vue';
-import NavigationControls from './nav_controls.vue';
-import { getParameterByName } from '../../lib/utils/common_utils';
-import CIPaginationMixin from '../../vue_shared/mixins/ci_pagination_api_mixin';
-import PipelinesFilteredSearch from './pipelines_filtered_search.vue';
-import { validateParams } from '../utils';
-import { ANY_TRIGGER_AUTHOR, RAW_TEXT_WARNING, FILTER_TAG_IDENTIFIER } from '../constants';
-import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
-
-export default {
- components: {
- TablePagination,
- NavigationTabs,
- NavigationControls,
- PipelinesFilteredSearch,
- },
- mixins: [pipelinesMixin, CIPaginationMixin, glFeatureFlagsMixin()],
- props: {
- store: {
- type: Object,
- required: true,
- },
- // Can be rendered in 3 different places, with some visual differences
- // Accepts root | child
- // `root` -> main view
- // `child` -> rendered inside MR or Commit View
- viewType: {
- type: String,
- required: false,
- default: 'root',
- },
- endpoint: {
- type: String,
- required: true,
- },
- helpPagePath: {
- type: String,
- required: true,
- },
- emptyStateSvgPath: {
- type: String,
- required: true,
- },
- errorStateSvgPath: {
- type: String,
- required: true,
- },
- noPipelinesSvgPath: {
- type: String,
- required: true,
- },
- autoDevopsPath: {
- type: String,
- required: true,
- },
- hasGitlabCi: {
- type: Boolean,
- required: true,
- },
- canCreatePipeline: {
- type: Boolean,
- required: true,
- },
- ciLintPath: {
- type: String,
- required: false,
- default: null,
- },
- resetCachePath: {
- type: String,
- required: false,
- default: null,
- },
- newPipelinePath: {
- type: String,
- required: false,
- default: null,
- },
- projectId: {
- type: String,
- required: true,
- },
- params: {
- type: Object,
- required: true,
- },
- },
- data() {
- return {
- // Start with loading state to avoid a glitch when the empty state will be rendered
- isLoading: true,
- state: this.store.state,
- scope: getParameterByName('scope') || 'all',
- page: getParameterByName('page') || '1',
- requestData: {},
- isResetCacheButtonLoading: false,
- };
- },
- stateMap: {
- // with tabs
- loading: 'loading',
- tableList: 'tableList',
- error: 'error',
- emptyTab: 'emptyTab',
-
- // without tabs
- emptyState: 'emptyState',
- },
- scopes: {
- all: 'all',
- pending: 'pending',
- running: 'running',
- finished: 'finished',
- branches: 'branches',
- tags: 'tags',
- },
- computed: {
- /**
- * `hasGitlabCi` handles both internal and external CI.
- * The order on which the checks are made in this method is
- * important to guarantee we handle all the corner cases.
- */
- stateToRender() {
- const { stateMap } = this.$options;
-
- if (this.isLoading) {
- return stateMap.loading;
- }
-
- if (this.hasError) {
- return stateMap.error;
- }
-
- if (this.state.pipelines.length) {
- return stateMap.tableList;
- }
-
- if ((this.scope !== 'all' && this.scope !== null) || this.hasGitlabCi) {
- return stateMap.emptyTab;
- }
-
- return stateMap.emptyState;
- },
- /**
- * Tabs are rendered in all states except empty state.
- * They are not rendered before the first request to avoid a flicker on first load.
- */
- shouldRenderTabs() {
- const { stateMap } = this.$options;
- return (
- this.hasMadeRequest &&
- [stateMap.loading, stateMap.tableList, stateMap.error, stateMap.emptyTab].includes(
- this.stateToRender,
- )
- );
- },
-
- shouldRenderButtons() {
- return (
- (this.newPipelinePath || this.resetCachePath || this.ciLintPath) && this.shouldRenderTabs
- );
- },
-
- emptyTabMessage() {
- const { scopes } = this.$options;
- const possibleScopes = [scopes.pending, scopes.running, scopes.finished];
-
- if (possibleScopes.includes(this.scope)) {
- return sprintf(s__('Pipelines|There are currently no %{scope} pipelines.'), {
- scope: this.scope,
- });
- }
-
- return s__('Pipelines|There are currently no pipelines.');
- },
-
- tabs() {
- const { count } = this.state;
- const { scopes } = this.$options;
-
- return [
- {
- name: __('All'),
- scope: scopes.all,
- count: count.all,
- isActive: this.scope === 'all',
- },
- {
- name: __('Pending'),
- scope: scopes.pending,
- count: count.pending,
- isActive: this.scope === 'pending',
- },
- {
- name: __('Running'),
- scope: scopes.running,
- count: count.running,
- isActive: this.scope === 'running',
- },
- {
- name: __('Finished'),
- scope: scopes.finished,
- count: count.finished,
- isActive: this.scope === 'finished',
- },
- {
- name: __('Branches'),
- scope: scopes.branches,
- isActive: this.scope === 'branches',
- },
- {
- name: __('Tags'),
- scope: scopes.tags,
- isActive: this.scope === 'tags',
- },
- ];
- },
- canFilterPipelines() {
- return this.glFeatures.filterPipelinesSearch;
- },
- validatedParams() {
- return validateParams(this.params);
- },
- },
- created() {
- this.service = new PipelinesService(this.endpoint);
- this.requestData = { page: this.page, scope: this.scope, ...this.validatedParams };
- },
- methods: {
- successCallback(resp) {
- // Because we are polling & the user is interacting verify if the response received
- // matches the last request made
- if (isEqual(resp.config.params, this.requestData)) {
- this.store.storeCount(resp.data.count);
- this.store.storePagination(resp.headers);
- this.setCommonData(resp.data.pipelines);
- }
- },
- handleResetRunnersCache(endpoint) {
- this.isResetCacheButtonLoading = true;
-
- this.service
- .postAction(endpoint)
- .then(() => {
- this.isResetCacheButtonLoading = false;
- createFlash(s__('Pipelines|Project cache successfully reset.'), 'notice');
- })
- .catch(() => {
- this.isResetCacheButtonLoading = false;
- createFlash(s__('Pipelines|Something went wrong while cleaning runners cache.'));
- });
- },
- resetRequestData() {
- this.requestData = { page: this.page, scope: this.scope };
- },
- filterPipelines(filters) {
- this.resetRequestData();
-
- filters.forEach(filter => {
- // do not add Any for username query param, so we
- // can fetch all trigger authors
- if (
- filter.type &&
- filter.value.data !== ANY_TRIGGER_AUTHOR &&
- filter.type !== FILTER_TAG_IDENTIFIER
- ) {
- this.requestData[filter.type] = filter.value.data;
- }
-
- if (filter.type === FILTER_TAG_IDENTIFIER) {
- this.requestData.ref = filter.value.data;
- }
-
- if (!filter.type) {
- createFlash(RAW_TEXT_WARNING, 'warning');
- }
- });
-
- if (filters.length === 0) {
- this.resetRequestData();
- }
-
- this.updateContent(this.requestData);
- },
- },
-};
-</script>
-<template>
- <div class="pipelines-container">
- <div
- v-if="shouldRenderTabs || shouldRenderButtons"
- class="top-area scrolling-tabs-container inner-page-scroll-tabs"
- >
- <div class="fade-left"><i class="fa fa-angle-left" aria-hidden="true"> </i></div>
- <div class="fade-right"><i class="fa fa-angle-right" aria-hidden="true"> </i></div>
-
- <navigation-tabs
- v-if="shouldRenderTabs"
- :tabs="tabs"
- scope="pipelines"
- @onChangeTab="onChangeTab"
- />
-
- <navigation-controls
- v-if="shouldRenderButtons"
- :new-pipeline-path="newPipelinePath"
- :reset-cache-path="resetCachePath"
- :ci-lint-path="ciLintPath"
- :is-reset-cache-button-loading="isResetCacheButtonLoading"
- @resetRunnersCache="handleResetRunnersCache"
- />
- </div>
-
- <pipelines-filtered-search
- v-if="canFilterPipelines"
- :project-id="projectId"
- :params="validatedParams"
- @filterPipelines="filterPipelines"
- />
-
- <div class="content-list pipelines">
- <gl-loading-icon
- v-if="stateToRender === $options.stateMap.loading"
- :label="s__('Pipelines|Loading Pipelines')"
- size="lg"
- class="prepend-top-20"
- />
-
- <empty-state
- v-else-if="stateToRender === $options.stateMap.emptyState"
- :help-page-path="helpPagePath"
- :empty-state-svg-path="emptyStateSvgPath"
- :can-set-ci="canCreatePipeline"
- />
-
- <svg-blank-state
- v-else-if="stateToRender === $options.stateMap.error"
- :svg-path="errorStateSvgPath"
- :message="
- s__(`Pipelines|There was an error fetching the pipelines.
- Try again in a few moments or contact your support team.`)
- "
- />
-
- <svg-blank-state
- v-else-if="stateToRender === $options.stateMap.emptyTab"
- :svg-path="noPipelinesSvgPath"
- :message="emptyTabMessage"
- />
-
- <div v-else-if="stateToRender === $options.stateMap.tableList" class="table-holder">
- <pipelines-table-component
- :pipelines="state.pipelines"
- :update-graph-dropdown="updateGraphDropdown"
- :auto-devops-help-path="autoDevopsPath"
- :view-type="viewType"
- />
- </div>
-
- <table-pagination
- v-if="shouldRenderPagination"
- :change="onChangePage"
- :page-info="state.pageInfo"
- />
- </div>
- </div>
-</template>