From f3db01da507f86cfed412c7d337e3747744cc914 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Fri, 6 Nov 2020 18:09:07 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .../components/alerts_integrations_list.vue | 44 ++++++++- .../components/alerts_settings_form_new.vue | 94 +++++++++++------- .../components/alerts_settings_wrapper.vue | 94 ++++++++++-------- .../javascripts/alerts_settings/constants.js | 2 + .../destroy_http_integration.mutation.graphql | 10 ++ .../alerts_settings/utils/cache_updates.js | 84 ++++++++++++++++ .../alerts_settings/utils/error_messages.js | 9 ++ .../components/details_page/tags_list.vue | 8 +- .../components/details_page/tags_list_row.vue | 6 +- .../registry/explorer/pages/details.vue | 6 +- .../states/commit_message_dropdown.vue | 14 +-- .../framework/broadcast_messages.scss | 8 -- .../concerns/issuable_collections.rb | 2 +- .../projects/merge_requests_controller.rb | 2 - app/finders/issuable_finder.rb | 6 +- app/finders/merge_requests_finder.rb | 7 -- app/helpers/projects_helper.rb | 2 +- app/models/merge_request.rb | 13 --- app/models/resource_timebox_event.rb | 4 +- .../layouts/nav/sidebar/_project.html.haml | 2 +- .../merge_requests/_nav_btns.html.haml | 8 +- .../operations/_error_tracking.html.haml | 2 +- app/views/shared/_broadcast_message.html.haml | 4 +- ...ntainer-registry-is-not-visible-on-nar.yml | 5 + ...lDropdown-in-app-assets-javascripts-vu.yml | 5 + .../unreleased/bvl-handle-invalid-headers.yml | 5 + .../nicolasdular-fix-bm-close-icon.yml | 5 + ...l-fix-operations-settings-wo-pipelines.yml | 5 + .../export_merge_requests_as_csv.yml | 7 -- doc/administration/audit_reports.md | 12 +-- .../geo/disaster_recovery/index.md | 6 ++ .../runbooks/planned_failover_multi_node.md | 3 + doc/administration/geo/index.md | 3 + .../replication/version_specific_updates.md | 7 ++ doc/api/releases/index.md | 2 +- doc/api/releases/links.md | 20 ++-- doc/ci/docker/using_docker_build.md | 2 +- doc/ci/yaml/README.md | 50 +++++----- doc/gitlab-basics/command-line-commands.md | 12 +-- doc/user/project/merge_requests/csv_export.md | 38 +------- doc/user/project/settings/import_export.md | 8 ++ .../graphql/loaders/batch_model_loader.rb | 11 +-- .../middleware/handle_malformed_strings.rb | 23 ++++- .../issue_activity_unique_counter.rb | 25 ----- locale/gitlab.pot | 15 +++ .../merge_requests_controller_spec.rb | 16 --- .../features/dashboard/merge_requests_spec.rb | 19 +--- .../multipart_invalid_uploads_spec.rb | 6 +- .../user_exports_as_csv_spec.rb | 33 ++----- spec/finders/merge_requests_finder_spec.rb | 85 ++++------------ .../alerts_settings_form_new_spec.js | 24 ++--- .../alerts_settings_wrapper_spec.js | 87 ++++++++++++++++- .../alerts_settings/mocks/apollo_mock.js | 97 +++++++++++++++++++ .../details_page/tags_list_row_spec.js | 4 +- .../components/details_page/tags_list_spec.js | 24 ++--- .../registry/explorer/pages/details_spec.js | 2 +- .../mr_widget_commit_message_dropdown_spec.js | 4 +- .../loaders/batch_model_loader_spec.rb | 23 +++-- .../handle_malformed_strings_spec.rb | 48 ++++++--- .../issue_activity_unique_counter_spec.rb | 30 ------ .../user_sends_malformed_strings_spec.rb | 10 +- .../operations/show.html.haml_spec.rb | 2 +- 62 files changed, 741 insertions(+), 473 deletions(-) create mode 100644 app/assets/javascripts/alerts_settings/graphql/mutations/destroy_http_integration.mutation.graphql create mode 100644 app/assets/javascripts/alerts_settings/utils/cache_updates.js create mode 100644 app/assets/javascripts/alerts_settings/utils/error_messages.js create mode 100644 changelogs/unreleased/251136-delete-selected-button-in-container-registry-is-not-visible-on-nar.yml create mode 100644 changelogs/unreleased/Replace-GlDeprecatedDropdown-with-GlDropdown-in-app-assets-javascripts-vu.yml create mode 100644 changelogs/unreleased/bvl-handle-invalid-headers.yml create mode 100644 changelogs/unreleased/nicolasdular-fix-bm-close-icon.yml create mode 100644 changelogs/unreleased/pl-fix-operations-settings-wo-pipelines.yml delete mode 100644 config/feature_flags/development/export_merge_requests_as_csv.yml diff --git a/app/assets/javascripts/alerts_settings/components/alerts_integrations_list.vue b/app/assets/javascripts/alerts_settings/components/alerts_integrations_list.vue index 5ecb2dd3e58..f24c52f61da 100644 --- a/app/assets/javascripts/alerts_settings/components/alerts_integrations_list.vue +++ b/app/assets/javascripts/alerts_settings/components/alerts_integrations_list.vue @@ -4,12 +4,15 @@ import { GlButton, GlIcon, GlLoadingIcon, + GlModal, + GlModalDirective, GlTable, GlTooltipDirective, + GlSprintf, } from '@gitlab/ui'; import { s__, __ } from '~/locale'; import Tracking from '~/tracking'; -import { trackAlertIntegrationsViewsOptions } from '../constants'; +import { trackAlertIntegrationsViewsOptions, integrationToDeleteDefault } from '../constants'; export const i18n = { title: s__('AlertsIntegrations|Current integrations'), @@ -36,10 +39,13 @@ export default { GlButton, GlIcon, GlLoadingIcon, + GlModal, GlTable, + GlSprintf, }, directives: { GlTooltip: GlTooltipDirective, + GlModal: GlModalDirective, }, props: { integrations: { @@ -71,6 +77,11 @@ export default { label: __('Actions'), }, ], + data() { + return { + integrationToDelete: integrationToDeleteDefault, + }; + }, computed: { tbodyTrClass() { return { @@ -86,6 +97,14 @@ export default { const { category, action } = trackAlertIntegrationsViewsOptions; Tracking.event(category, action); }, + intergrationToDelete({ name, id }) { + this.integrationToDelete.id = id; + this.integrationToDelete.name = name; + }, + deleteIntergration() { + this.$emit('delete-integration', { id: this.integrationToDelete.id }); + this.integrationToDelete = { ...integrationToDeleteDefault }; + }, }, }; @@ -127,7 +146,11 @@ export default { @@ -143,5 +166,22 @@ export default { + + + + + diff --git a/app/assets/javascripts/alerts_settings/components/alerts_settings_form_new.vue b/app/assets/javascripts/alerts_settings/components/alerts_settings_form_new.vue index 059623ba11c..946da8ef34c 100644 --- a/app/assets/javascripts/alerts_settings/components/alerts_settings_form_new.vue +++ b/app/assets/javascripts/alerts_settings/components/alerts_settings_form_new.vue @@ -22,14 +22,12 @@ import { JSON_VALIDATE_DELAY, targetPrometheusUrlPlaceholder, typeSet, - defaultFormState, } from '../constants'; export default { targetPrometheusUrlPlaceholder, JSON_VALIDATE_DELAY, typeSet, - defaultFormState, i18n: { integrationFormSteps: { step1: { @@ -113,14 +111,18 @@ export default { data() { return { selectedIntegration: integrationTypesNew[0].value, - active: false, options: integrationTypesNew, + active: false, formVisible: false, + integrationTestPayload: { + json: null, + error: null, + }, }; }, computed: { jsonIsValid() { - return this.integrationForm.integrationTestPayload.error === null; + return this.integrationTestPayload.error === null; }, selectedIntegrationType() { switch (this.selectedIntegration) { @@ -129,43 +131,42 @@ export default { case this.$options.typeSet.prometheus: return this.prometheus; default: - return this.defaultFormState; + return {}; } }, integrationForm() { return { name: this.currentIntegration?.name || '', - integrationTestPayload: { - json: null, - error: null, - }, active: this.currentIntegration?.active || false, - token: this.currentIntegration?.token || '', - url: this.currentIntegration?.url || '', + token: this.currentIntegration?.token || this.selectedIntegrationType.token, + url: this.currentIntegration?.url || this.selectedIntegrationType.url, apiUrl: this.currentIntegration?.apiUrl || '', }; }, }, watch: { currentIntegration(val) { + if (val === null) { + return this.reset(); + } this.selectedIntegration = val.type; this.active = val.active; - this.onIntegrationTypeSelect(); + return this.integrationTypeSelect(); }, }, methods: { - onIntegrationTypeSelect() { + integrationTypeSelect() { if (this.selectedIntegration === integrationTypesNew[0].value) { this.formVisible = false; } else { this.formVisible = true; } }, - onSubmitWithTestPayload() { + submitWithTestPayload() { // TODO: Test payload before saving via GraphQL - this.onSubmit(); + this.submit(); }, - onSubmit() { + submit() { const { name, apiUrl } = this.integrationForm; const variables = this.selectedIntegration === this.$options.typeSet.http @@ -179,27 +180,45 @@ export default { return this.$emit('create-new-integration', integrationPayload); }, - onReset() { - this.integrationForm = this.defaultFormState; + reset() { this.selectedIntegration = integrationTypesNew[0].value; - this.onIntegrationTypeSelect(); + this.integrationTypeSelect(); + + if (this.currentIntegration) { + return this.$emit('clear-current-integration'); + } + + return this.resetFormValues(); }, - onResetAuthKey() { + resetFormValues() { + this.integrationForm.name = ''; + this.integrationForm.apiUrl = ''; + this.integrationTestPayload = { + json: null, + error: null, + }; + this.active = false; + }, + resetAuthKey() { + if (!this.currentIntegration) { + return; + } + this.$emit('reset-token', { type: this.selectedIntegration, variables: { id: this.currentIntegration.id }, }); }, validateJson() { - this.integrationForm.integrationTestPayload.error = null; - if (this.integrationForm.integrationTestPayload.json === '') { + this.integrationTestPayload.error = null; + if (this.integrationTestPayload.json === '') { return; } try { - JSON.parse(this.integrationForm.integrationTestPayload.json); + JSON.parse(this.integrationTestPayload.json); } catch (e) { - this.integrationForm.integrationTestPayload.error = JSON.stringify(e.message); + this.integrationTestPayload.error = JSON.stringify(e.message); } }, }, @@ -207,7 +226,7 @@ export default {