diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-06-16 21:25:58 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-06-16 21:25:58 +0300 |
commit | a5f4bba440d7f9ea47046a0a561d49adf0a1e6d4 (patch) | |
tree | fb69158581673816a8cd895f9d352dcb3c678b1e /app/assets/javascripts/issue_show/components/edit_actions.vue | |
parent | d16b2e8639e99961de6ddc93909f3bb5c1445ba1 (diff) |
Add latest changes from gitlab-org/gitlab@14-0-stable-eev14.0.0-rc42
Diffstat (limited to 'app/assets/javascripts/issue_show/components/edit_actions.vue')
-rw-r--r-- | app/assets/javascripts/issue_show/components/edit_actions.vue | 138 |
1 files changed, 95 insertions, 43 deletions
diff --git a/app/assets/javascripts/issue_show/components/edit_actions.vue b/app/assets/javascripts/issue_show/components/edit_actions.vue index 7733e366c4f..5b7d232fde7 100644 --- a/app/assets/javascripts/issue_show/components/edit_actions.vue +++ b/app/assets/javascripts/issue_show/components/edit_actions.vue @@ -1,17 +1,24 @@ <script> -import { GlButton } from '@gitlab/ui'; +import { GlButton, GlModal, GlModalDirective } from '@gitlab/ui'; +import { uniqueId } from 'lodash'; import { __, sprintf } from '~/locale'; import eventHub from '../event_hub'; import updateMixin from '../mixins/update'; +import getIssueStateQuery from '../queries/get_issue_state.query.graphql'; const issuableTypes = { issue: __('Issue'), epic: __('Epic'), + incident: __('Incident'), }; export default { components: { GlButton, + GlModal, + }, + directives: { + GlModal: GlModalDirective, }, mixins: [updateMixin], props: { @@ -36,19 +43,56 @@ export default { data() { return { deleteLoading: false, + skipApollo: false, + issueState: {}, + modalId: uniqueId('delete-issuable-modal-'), }; }, + apollo: { + issueState: { + query: getIssueStateQuery, + skip() { + return this.skipApollo; + }, + result() { + this.skipApollo = true; + }, + }, + }, computed: { + deleteIssuableButtonText() { + return sprintf(__('Delete %{issuableType}'), { + issuableType: this.typeToShow.toLowerCase(), + }); + }, + deleteIssuableModalText() { + return this.issuableType === 'epic' + ? __('Delete this epic and all descendants?') + : sprintf(__('%{issuableType} will be removed! Are you sure?'), { + issuableType: this.typeToShow, + }); + }, isSubmitEnabled() { return this.formState.title.trim() !== ''; }, + modalActionProps() { + return { + primary: { + text: this.deleteIssuableButtonText, + attributes: [{ variant: 'danger' }, { loading: this.deleteLoading }], + }, + cancel: { + text: __('Cancel'), + }, + }; + }, shouldShowDeleteButton() { return this.canDestroy && this.showDeleteButton; }, - deleteIssuableButtonText() { - return sprintf(__('Delete %{issuableType}'), { - issuableType: issuableTypes[this.issuableType].toLowerCase(), - }); + typeToShow() { + const { issueState, issuableType } = this; + const type = issueState.issueType ?? issuableType; + return issuableTypes[type]; }, }, methods: { @@ -56,49 +100,57 @@ export default { eventHub.$emit('close.form'); }, deleteIssuable() { - const confirmMessage = - this.issuableType === 'epic' - ? __('Delete this epic and all descendants?') - : sprintf(__('%{issuableType} will be removed! Are you sure?'), { - issuableType: issuableTypes[this.issuableType], - }); - // eslint-disable-next-line no-alert - if (window.confirm(confirmMessage)) { - this.deleteLoading = true; - - eventHub.$emit('delete.issuable', { destroy_confirm: true }); - } + this.deleteLoading = true; + eventHub.$emit('delete.issuable', { destroy_confirm: true }); }, }, }; </script> <template> - <div class="gl-mt-3 gl-mb-3 clearfix"> - <gl-button - :loading="formState.updateLoading" - :disabled="formState.updateLoading || !isSubmitEnabled" - category="primary" - variant="confirm" - class="float-left qa-save-button gl-mr-3" - type="submit" - @click.prevent="updateIssuable" - > - {{ __('Save changes') }} - </gl-button> - <gl-button @click="closeForm"> - {{ __('Cancel') }} - </gl-button> - <gl-button - v-if="shouldShowDeleteButton" - :loading="deleteLoading" - :disabled="deleteLoading" - category="secondary" - variant="danger" - class="float-right qa-delete-button" - @click="deleteIssuable" - > - {{ deleteIssuableButtonText }} - </gl-button> + <div class="gl-mt-3 gl-mb-3 gl-display-flex gl-justify-content-space-between"> + <div> + <gl-button + :loading="formState.updateLoading" + :disabled="formState.updateLoading || !isSubmitEnabled" + category="primary" + variant="confirm" + class="qa-save-button gl-mr-3" + data-testid="issuable-save-button" + type="submit" + @click.prevent="updateIssuable" + > + {{ __('Save changes') }} + </gl-button> + <gl-button data-testid="issuable-cancel-button" @click="closeForm"> + {{ __('Cancel') }} + </gl-button> + </div> + <div v-if="shouldShowDeleteButton"> + <gl-button + v-gl-modal="modalId" + :loading="deleteLoading" + :disabled="deleteLoading" + category="secondary" + variant="danger" + class="qa-delete-button" + data-testid="issuable-delete-button" + > + {{ deleteIssuableButtonText }} + </gl-button> + <gl-modal + ref="removeModal" + :modal-id="modalId" + size="sm" + :action-primary="modalActionProps.primary" + :action-cancel="modalActionProps.cancel" + @primary="deleteIssuable" + > + <template #modal-title>{{ deleteIssuableButtonText }}</template> + <div> + <p class="gl-mb-1">{{ deleteIssuableModalText }}</p> + </div> + </gl-modal> + </div> </div> </template> |