diff --git a/app/assets/javascripts/api.js b/app/assets/javascripts/api.js
index 833a529be4d..1ecc22957e8 100644
--- a/app/assets/javascripts/api.js
+++ b/app/assets/javascripts/api.js
@@ -727,11 +727,9 @@ const Api = {
.replace(':id', encodeURIComponent(id))
.replace(':merge_request_iid', mergeRequestId);
- const params = {};
-
- if (gon.features.asyncMergeRequestPipelineCreation) {
- params.async = true;
- }
+ const params = {
+ async: true,
+ };
return axios.post(url, params);
},
diff --git a/app/assets/javascripts/commit/pipelines/legacy_pipelines_table_wrapper.vue b/app/assets/javascripts/commit/pipelines/legacy_pipelines_table_wrapper.vue
index aa2ca316ede..d5c8dcf72f4 100644
--- a/app/assets/javascripts/commit/pipelines/legacy_pipelines_table_wrapper.vue
+++ b/app/assets/javascripts/commit/pipelines/legacy_pipelines_table_wrapper.vue
@@ -9,7 +9,6 @@ import PipelinesMixin from '~/ci/pipeline_details/mixins/pipelines_mixin';
import PipelinesService from '~/ci/pipelines_page/services/pipelines_service';
import PipelineStore from '~/ci/pipeline_details/stores/pipelines_store';
import TablePagination from '~/vue_shared/components/pagination/table_pagination.vue';
-import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
import { s__, __ } from '~/locale';
export default {
@@ -23,8 +22,13 @@ export default {
PipelinesTable,
TablePagination,
},
- mixins: [PipelinesMixin, glFeatureFlagMixin()],
+ mixins: [PipelinesMixin],
props: {
+ canCreatePipelineInTargetProject: {
+ type: Boolean,
+ required: false,
+ default: false,
+ },
endpoint: {
type: String,
required: true,
@@ -37,16 +41,21 @@ export default {
type: String,
required: true,
},
- viewType: {
- type: String,
- required: false,
- default: 'root',
- },
- canCreatePipelineInTargetProject: {
+ isMergeRequestTable: {
type: Boolean,
required: false,
default: false,
},
+ mergeRequestId: {
+ type: Number,
+ required: false,
+ default: 0,
+ },
+ projectId: {
+ type: String,
+ required: false,
+ default: '',
+ },
sourceProjectFullPath: {
type: String,
required: false,
@@ -57,15 +66,10 @@ export default {
required: false,
default: '',
},
- projectId: {
+ viewType: {
type: String,
required: false,
- default: '',
- },
- mergeRequestId: {
- type: Number,
- required: false,
- default: 0,
+ default: 'root',
},
},
@@ -82,9 +86,6 @@ export default {
},
computed: {
- isUsingAsyncPipelineCreation() {
- return this.glFeatures?.asyncMergeRequestPipelineCreation;
- },
shouldRenderTable() {
return !this.isLoading && this.state.pipelines.length > 0 && !this.hasError;
},
@@ -145,7 +146,7 @@ export default {
const pipelines = resp.data.pipelines || resp.data;
this.store.storePagination(resp.headers);
- this.setCommonData(pipelines, this.isUsingAsyncPipelineCreation);
+ this.setCommonData(pipelines, this.isMergeRequestTable);
if (resp.headers?.['x-total']) {
const updatePipelinesEvent = new CustomEvent('update-pipelines-count', {
@@ -172,7 +173,7 @@ export default {
eventHub.$emit('runMergeRequestPipeline', {
projectId: this.projectId,
mergeRequestId: this.mergeRequestId,
- isAsync: this.isUsingAsyncPipelineCreation,
+ isAsync: this.isMergeRequestTable,
});
},
tryRunPipeline() {
diff --git a/app/assets/javascripts/environments/environment_details/index.vue b/app/assets/javascripts/environments/environment_details/index.vue
index ec97a6334fb..affbea29933 100644
--- a/app/assets/javascripts/environments/environment_details/index.vue
+++ b/app/assets/javascripts/environments/environment_details/index.vue
@@ -83,9 +83,6 @@ export default {
kubernetes: 'kubernetes-overview',
},
methods: {
- linkClass(index) {
- return index === this.currentTabIndex ? 'gl-shadow-inner-b-2-theme-accent' : '';
- },
updateCurrentTab() {
const hasKubernetesIntegration = this.environment?.clusterAgent;
const selectedTabFromUrl = getParameterValues('tab');
@@ -109,7 +106,6 @@ export default {
-
+
{{ $options.i18n.deploymentHistory }}
{{ environment.deploymentsDisplayCount }}
diff --git a/app/assets/javascripts/labels/labels_select.js b/app/assets/javascripts/labels/labels_select.js
index 813d94cf7ce..28e198a1af8 100644
--- a/app/assets/javascripts/labels/labels_select.js
+++ b/app/assets/javascripts/labels/labels_select.js
@@ -440,7 +440,7 @@ export default class LabelsSelect {
const tooltipTitleTemplate = template(
[
'<% if (isScopedLabel(label) && enableScopedLabels) { %>',
- "Scoped label",
+ "Scoped label",
'
',
'<%= escapeStr(label.description) %>',
'<% } else { %>',
diff --git a/app/assets/javascripts/lib/utils/search_utils.js b/app/assets/javascripts/lib/utils/search_utils.js
new file mode 100644
index 00000000000..761668bc539
--- /dev/null
+++ b/app/assets/javascripts/lib/utils/search_utils.js
@@ -0,0 +1,54 @@
+import { pick, has } from 'lodash';
+
+/**
+ * @param source
+ * @param properties original list of searched collection
+ * @returns {{}} reduced source to only include properties
+ */
+export const pickProperties = (source, properties = []) => {
+ if (!source) {
+ return {};
+ }
+
+ /**
+ * If no properties provided
+ * search would be executed on provided properties
+ */
+ if (!properties || properties.length === 0) {
+ return source;
+ }
+
+ properties.forEach((property) => {
+ if (!has(source, property)) {
+ throw new Error(`${property} does not exist on object. Please provide valid property list.`);
+ }
+ });
+
+ return pick(source, properties);
+};
+
+/**
+ * Search among provided properties on items
+ * @param items original list of searched collection
+ * @param properties list of properties to search in
+ * @param searchQuery search query
+ * @returns {*[]}
+ */
+export const searchInItemsProperties = ({ items = [], properties = [], searchQuery = '' } = {}) => {
+ if (!items || items.length === 0) {
+ return [];
+ }
+
+ if (searchQuery === '') {
+ return items;
+ }
+
+ const containsValue = (value) =>
+ value.toString().toLowerCase().includes(searchQuery.toLowerCase());
+
+ return items.filter((item) => {
+ const reducedSource = pickProperties(item, properties);
+
+ return Object.values(reducedSource).some((value) => containsValue(value));
+ });
+};
diff --git a/app/assets/javascripts/merge_request_tabs.js b/app/assets/javascripts/merge_request_tabs.js
index 3ad97819bce..1177e2376ed 100644
--- a/app/assets/javascripts/merge_request_tabs.js
+++ b/app/assets/javascripts/merge_request_tabs.js
@@ -119,6 +119,7 @@ function mountPipelines() {
targetProjectFullPath: mrWidgetData?.target_project_full_path || '',
projectId: pipelineTableViewEl.dataset.projectId,
mergeRequestId: mrWidgetData ? mrWidgetData.iid : null,
+ isMergeRequestTable: true,
},
});
},
diff --git a/app/assets/javascripts/vue_shared/components/ci_icon/ci_icon.stories.js b/app/assets/javascripts/vue_shared/components/ci_icon/ci_icon.stories.js
index 66012cefeaf..bee923f5807 100644
--- a/app/assets/javascripts/vue_shared/components/ci_icon/ci_icon.stories.js
+++ b/app/assets/javascripts/vue_shared/components/ci_icon/ci_icon.stories.js
@@ -16,7 +16,7 @@ Default.args = {
status: {
icon: 'status_success',
text: 'Success',
- detailsPath: 'https://gitab.com/',
+ detailsPath: 'https://gitlab.com/',
},
};
@@ -25,7 +25,7 @@ WithText.args = {
status: {
icon: 'status_success',
text: 'Success',
- detailsPath: 'https://gitab.com/',
+ detailsPath: 'https://gitlab.com/',
},
showStatusText: true,
};
diff --git a/app/assets/javascripts/vue_shared/components/listbox_input/listbox_input.vue b/app/assets/javascripts/vue_shared/components/listbox_input/listbox_input.vue
index d20593d104e..2687655931a 100644
--- a/app/assets/javascripts/vue_shared/components/listbox_input/listbox_input.vue
+++ b/app/assets/javascripts/vue_shared/components/listbox_input/listbox_input.vue
@@ -1,6 +1,7 @@