diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-02-01 00:14:51 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-02-01 00:14:51 +0300 |
commit | f2ed38a6b50ee59ce280a3e7d5125b3a35c5f17e (patch) | |
tree | 5f91d58f1d458f629f8125d9516f131ff08c4a67 /app/assets/javascripts/pipeline_editor | |
parent | 634e9bccc65592100a40849912fe7bb0a52e1b24 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/assets/javascripts/pipeline_editor')
4 files changed, 81 insertions, 80 deletions
diff --git a/app/assets/javascripts/pipeline_editor/components/commit/commit_section.vue b/app/assets/javascripts/pipeline_editor/components/commit/commit_section.vue index 54c9688d88f..8ff1aea020f 100644 --- a/app/assets/javascripts/pipeline_editor/components/commit/commit_section.vue +++ b/app/assets/javascripts/pipeline_editor/components/commit/commit_section.vue @@ -1,11 +1,11 @@ <script> -import { mergeUrlParams, redirectTo } from '~/lib/utils/url_utility'; import { __, s__, sprintf } from '~/locale'; import { COMMIT_ACTION_CREATE, COMMIT_ACTION_UPDATE, COMMIT_FAILURE, COMMIT_SUCCESS, + COMMIT_SUCCESS_WITH_REDIRECT, } from '../../constants'; import commitCIFile from '../../graphql/mutations/commit_ci_file.mutation.graphql'; import updateCurrentBranchMutation from '../../graphql/mutations/client/update_current_branch.mutation.graphql'; @@ -15,9 +15,6 @@ import getCurrentBranch from '../../graphql/queries/client/current_branch.query. import CommitForm from './commit_form.vue'; -const MR_SOURCE_BRANCH = 'merge_request[source_branch]'; -const MR_TARGET_BRANCH = 'merge_request[target_branch]'; - export default { alertTexts: { [COMMIT_FAILURE]: s__('Pipelines|The GitLab CI configuration could not be updated.'), @@ -29,7 +26,7 @@ export default { components: { CommitForm, }, - inject: ['projectFullPath', 'ciConfigPath', 'newMergeRequestPath'], + inject: ['projectFullPath', 'ciConfigPath'], props: { ciFileContent: { type: String, @@ -74,16 +71,6 @@ export default { }, }, methods: { - redirectToNewMergeRequest(sourceBranch) { - const url = mergeUrlParams( - { - [MR_SOURCE_BRANCH]: sourceBranch, - [MR_TARGET_BRANCH]: this.currentBranch, - }, - this.newMergeRequestPath, - ); - redirectTo(url); - }, async onCommitSubmit({ message, targetBranch, openMergeRequest }) { this.isSaving = true; @@ -112,12 +99,25 @@ export default { if (errors?.length) { this.$emit('showError', { type: COMMIT_FAILURE, reasons: errors }); - } else if (openMergeRequest) { - this.redirectToNewMergeRequest(targetBranch); } else { - this.$emit('commit', { type: COMMIT_SUCCESS }); + const commitBranch = targetBranch; + const params = openMergeRequest + ? { + type: COMMIT_SUCCESS_WITH_REDIRECT, + params: { + sourceBranch: commitBranch, + targetBranch: this.currentBranch, + }, + } + : { type: COMMIT_SUCCESS }; + + this.$emit('commit', { + ...params, + }); + this.updateLastCommitBranch(targetBranch); this.updateCurrentBranch(targetBranch); + if (this.currentBranch === targetBranch) { this.$emit('updateCommitSha'); } diff --git a/app/assets/javascripts/pipeline_editor/components/ui/pipeline_editor_messages.vue b/app/assets/javascripts/pipeline_editor/components/ui/pipeline_editor_messages.vue index 7206f19d060..c72cff4c6f8 100644 --- a/app/assets/javascripts/pipeline_editor/components/ui/pipeline_editor_messages.vue +++ b/app/assets/javascripts/pipeline_editor/components/ui/pipeline_editor_messages.vue @@ -5,6 +5,7 @@ import { __, s__ } from '~/locale'; import { COMMIT_FAILURE, COMMIT_SUCCESS, + COMMIT_SUCCESS_WITH_REDIRECT, DEFAULT_FAILURE, DEFAULT_SUCCESS, LOAD_FAILURE_UNKNOWN, @@ -21,14 +22,18 @@ export default { GlAlert, CodeSnippetAlert, }, - errorTexts: { + + errors: { [COMMIT_FAILURE]: s__('Pipelines|The GitLab CI configuration could not be updated.'), [DEFAULT_FAILURE]: __('Something went wrong on our end.'), [LOAD_FAILURE_UNKNOWN]: s__('Pipelines|The CI configuration was not loaded, please try again.'), [PIPELINE_FAILURE]: s__('Pipelines|There was a problem with loading the pipeline data.'), }, - successTexts: { + success: { [COMMIT_SUCCESS]: __('Your changes have been successfully committed.'), + [COMMIT_SUCCESS_WITH_REDIRECT]: s__( + 'Pipelines|Your changes have been successfully committed. Now redirecting to the new merge request page.', + ), [DEFAULT_SUCCESS]: __('Your action succeeded.'), }, props: { @@ -65,42 +70,20 @@ export default { }, computed: { failure() { - switch (this.failureType) { - case LOAD_FAILURE_UNKNOWN: - return { - text: this.$options.errorTexts[LOAD_FAILURE_UNKNOWN], - variant: 'danger', - }; - case COMMIT_FAILURE: - return { - text: this.$options.errorTexts[COMMIT_FAILURE], - variant: 'danger', - }; - case PIPELINE_FAILURE: - return { - text: this.$options.errorTexts[PIPELINE_FAILURE], - variant: 'danger', - }; - default: - return { - text: this.$options.errorTexts[DEFAULT_FAILURE], - variant: 'danger', - }; - } + const { errors } = this.$options; + + return { + text: errors[this.failureType] ?? errors[DEFAULT_FAILURE], + variant: 'danger', + }; }, success() { - switch (this.successType) { - case COMMIT_SUCCESS: - return { - text: this.$options.successTexts[COMMIT_SUCCESS], - variant: 'info', - }; - default: - return { - text: this.$options.successTexts[DEFAULT_SUCCESS], - variant: 'info', - }; - } + const { success } = this.$options; + + return { + text: success[this.successType] ?? success[DEFAULT_SUCCESS], + variant: 'info', + }; }, }, created() { diff --git a/app/assets/javascripts/pipeline_editor/constants.js b/app/assets/javascripts/pipeline_editor/constants.js index bc79b0742e7..a65463d02aa 100644 --- a/app/assets/javascripts/pipeline_editor/constants.js +++ b/app/assets/javascripts/pipeline_editor/constants.js @@ -20,6 +20,7 @@ export const EDITOR_APP_VALID_STATUSES = [ export const COMMIT_FAILURE = 'COMMIT_FAILURE'; export const COMMIT_SUCCESS = 'COMMIT_SUCCESS'; +export const COMMIT_SUCCESS_WITH_REDIRECT = 'COMMIT_SUCCESS_WITH_REDIRECT'; export const DEFAULT_FAILURE = 'DEFAULT_FAILURE'; export const DEFAULT_SUCCESS = 'DEFAULT_SUCCESS'; diff --git a/app/assets/javascripts/pipeline_editor/pipeline_editor_app.vue b/app/assets/javascripts/pipeline_editor/pipeline_editor_app.vue index a042e011550..604f87a0cda 100644 --- a/app/assets/javascripts/pipeline_editor/pipeline_editor_app.vue +++ b/app/assets/javascripts/pipeline_editor/pipeline_editor_app.vue @@ -1,7 +1,7 @@ <script> import { GlLoadingIcon, GlModal } from '@gitlab/ui'; import { fetchPolicies } from '~/lib/graphql'; -import { queryToObject } from '~/lib/utils/url_utility'; +import { mergeUrlParams, queryToObject, redirectTo } from '~/lib/utils/url_utility'; import { __, s__ } from '~/locale'; import { unwrapStagesWithNeeds } from '~/pipelines/components/unwrapping_utils'; @@ -11,6 +11,7 @@ import PipelineEditorEmptyState from './components/ui/pipeline_editor_empty_stat import PipelineEditorMessages from './components/ui/pipeline_editor_messages.vue'; import { COMMIT_SHA_POLL_INTERVAL, + COMMIT_SUCCESS_WITH_REDIRECT, EDITOR_APP_STATUS_EMPTY, EDITOR_APP_STATUS_LOADING, EDITOR_APP_STATUS_LINT_UNAVAILABLE, @@ -27,6 +28,9 @@ import getTemplate from './graphql/queries/get_starter_template.query.graphql'; import getLatestCommitShaQuery from './graphql/queries/latest_commit_sha.query.graphql'; import PipelineEditorHome from './pipeline_editor_home.vue'; +const MR_SOURCE_BRANCH = 'merge_request[source_branch]'; +const MR_TARGET_BRANCH = 'merge_request[target_branch]'; + export default { components: { ConfirmUnsavedChangesDialog, @@ -36,14 +40,7 @@ export default { PipelineEditorHome, PipelineEditorMessages, }, - inject: { - ciConfigPath: { - default: '', - }, - projectFullPath: { - default: '', - }, - }, + inject: ['ciConfigPath', 'newMergeRequestPath', 'projectFullPath'], data() { return { ciConfigData: {}, @@ -57,7 +54,7 @@ export default { lastCommittedContent: '', shouldSkipStartScreen: false, showFailure: false, - showResetComfirmationModal: false, + showResetConfirmationModal: false, showStartScreen: false, showSuccess: false, starterTemplate: '', @@ -271,17 +268,39 @@ export default { this.checkShouldSkipStartScreen(); }, methods: { + checkShouldSkipStartScreen() { + const params = queryToObject(window.location.search); + this.shouldSkipStartScreen = Boolean(params?.add_new_config_file); + }, + confirmReset() { + if (this.hasUnsavedChanges) { + this.showResetConfirmationModal = true; + } + }, hideFailure() { this.showFailure = false; }, hideSuccess() { this.showSuccess = false; }, - confirmReset() { - if (this.hasUnsavedChanges) { - this.showResetComfirmationModal = true; + loadTemplateFromURL() { + const templateName = queryToObject(window.location.search)?.template; + + if (templateName) { + this.starterTemplateName = templateName; + this.setNewEmptyCiConfigFile(); } }, + redirectToNewMergeRequest(sourceBranch, targetBranch) { + const url = mergeUrlParams( + { + [MR_SOURCE_BRANCH]: sourceBranch, + [MR_TARGET_BRANCH]: targetBranch, + }, + this.newMergeRequestPath, + ); + redirectTo(url); + }, async refetchContent() { this.$apollo.queries.initialCiFileContent.skip = false; await this.$apollo.queries.initialCiFileContent.refetch(); @@ -298,7 +317,7 @@ export default { this.successType = type; }, resetContent() { - this.showResetComfirmationModal = false; + this.showResetConfirmationModal = false; this.currentCiFileContent = this.lastCommittedContent; }, setAppStatus(appStatus) { @@ -323,7 +342,7 @@ export default { this.isFetchingCommitSha = true; this.$apollo.queries.commitSha.refetch(); }, - updateOnCommit({ type }) { + async updateOnCommit({ type, params = {} }) { this.reportSuccess(type); if (this.isNewCiConfigFile) { @@ -333,19 +352,17 @@ export default { // Keep track of the latest committed content to know // if the user has made changes to the file that are unsaved. this.lastCommittedContent = this.currentCiFileContent; - }, - loadTemplateFromURL() { - const templateName = queryToObject(window.location.search)?.template; - if (templateName) { - this.starterTemplateName = templateName; - this.setNewEmptyCiConfigFile(); + if (type === COMMIT_SUCCESS_WITH_REDIRECT) { + const { sourceBranch, targetBranch } = params; + // This force update does 2 things for us: + // 1. It make sure `hasUnsavedChanges` is updated so + // we don't show a modal when the user creates an MR + // 2. Ensure the commit success banner is visible. + await this.$forceUpdate(); + this.redirectToNewMergeRequest(sourceBranch, targetBranch); } }, - checkShouldSkipStartScreen() { - const params = queryToObject(window.location.search); - this.shouldSkipStartScreen = Boolean(params?.add_new_config_file); - }, }, }; </script> @@ -382,7 +399,7 @@ export default { @updateCommitSha="updateCommitSha" /> <gl-modal - v-model="showResetComfirmationModal" + v-model="showResetConfirmationModal" modal-id="reset-content" :title="$options.i18n.resetModal.title" :action-cancel="$options.i18n.resetModal.actionCancel" |