All files / ee/app/assets/javascripts/groups/settings/compliance_frameworks/components delete_modal.vue

95.24% Statements 20/21
100% Branches 2/2
85.71% Functions 6/7
95.24% Lines 20/21

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119  2x 2x   2x 2x 2x                                                 10x         6x   6x 6x 6x                                       4x   4x 1x   3x     2x       6x     3x 3x     3x                                             46x                                
<script>
import { GlModal, GlSprintf } from '@gitlab/ui';
import * as Sentry from '@sentry/browser';
 
import { __, s__, sprintf } from '~/locale';
import deleteComplianceFrameworkMutation from '../graphql/mutations/delete_compliance_framework.mutation.graphql';
import getComplianceFrameworkQuery from '../graphql/queries/get_compliance_framework.query.graphql';
 
export default {
  components: {
    GlModal,
    GlSprintf,
  },
  props: {
    name: {
      type: String,
      required: false,
      default: null,
    },
    id: {
      type: String,
      required: false,
      default: null,
    },
    groupPath: {
      type: String,
      required: true,
    },
  },
  computed: {
    title() {
      return sprintf(this.$options.i18n.title, { framework: this.name });
    },
  },
  methods: {
    async deleteFramework() {
      this.reportDeleting();
 
      try {
        const { id } = this;
        const {
          data: { destroyComplianceFramework },
        } = await this.$apollo.mutate({
          mutation: deleteComplianceFrameworkMutation,
          variables: {
            input: {
              id,
            },
          },
          awaitRefetchQueries: true,
          refetchQueries: [
            {
              query: getComplianceFrameworkQuery,
              variables: {
                fullPath: this.groupPath,
              },
            },
          ],
        });
 
        const [error] = destroyComplianceFramework.errors;
 
        if (error) {
          this.reportError(new Error(error));
        } else {
          this.reportSuccess(id);
        }
      } catch (error) {
        this.reportError(error);
      }
    },
    reportDeleting() {
      this.$emit('deleting');
    },
    reportError(error) {
      Sentry.captureException(error);
      this.$emit('error');
    },
    reportSuccess(id) {
      this.$emit('delete', id);
    },
    show() {
      this.$refs.modal.show();
    },
  },
  i18n: {
    title: s__('ComplianceFrameworks|Delete compliance framework %{framework}'),
    message: s__(
      'ComplianceFrameworks|You are about to permanently delete the compliance framework %{framework} from all projects which currently have it applied, which may remove other functionality. This cannot be undone.',
    ),
  },
  buttonProps: {
    primary: {
      text: s__('ComplianceFrameworks|Delete framework'),
      attributes: [{ category: 'primary' }, { variant: 'danger' }],
    },
    cancel: {
      text: __('Cancel'),
    },
  },
};
</script>
<template>
  <gl-modal
    ref="modal"
    :title="title"
    modal-id="delete-framework-modal"
    :action-primary="$options.buttonProps.primary"
    :action-cancel="$options.buttonProps.cancel"
    @primary="deleteFramework"
  >
    <gl-sprintf :message="$options.i18n.message">
      <template #framework>
        <strong>{{ name }}</strong>
      </template>
    </gl-sprintf>
  </gl-modal>
</template>