Commit 6c475235 authored by Fatih Acet's avatar Fatih Acet

Merge branch 'leipert-decouple-security-reports-modal' into 'master'

Decouple Security Reports Modal from Store

See merge request gitlab-org/gitlab-ee!7834
parents b7f88d4b be06e700
<script> <script>
import { mapActions, mapState } from 'vuex'; import { s__ } from '~/locale';
import { s__ } from '~/locale'; import Modal from '~/vue_shared/components/gl_modal.vue';
import Modal from '~/vue_shared/components/gl_modal.vue'; import LoadingButton from '~/vue_shared/components/loading_button.vue';
import LoadingButton from '~/vue_shared/components/loading_button.vue'; import Icon from '~/vue_shared/components/icon.vue';
import Icon from '~/vue_shared/components/icon.vue'; import ExpandButton from '~/vue_shared/components/expand_button.vue';
import ExpandButton from '~/vue_shared/components/expand_button.vue';
export default { export default {
components: { components: {
Modal, Modal,
LoadingButton, LoadingButton,
ExpandButton, ExpandButton,
Icon, Icon,
},
props: {
modal: {
type: Object,
required: true,
}, },
computed: { vulnerabilityFeedbackHelpPath: {
...mapState([ type: String,
'modal', required: false,
'vulnerabilityFeedbackHelpPath', default: '',
'canCreateIssuePermission',
'canCreateFeedbackPermission',
]),
revertTitle() {
return this.modal.vulnerability.isDismissed
? s__('ciReport|Revert dismissal')
: s__('ciReport|Dismiss vulnerability');
},
hasDismissedBy() {
return (
this.modal.vulnerability.dismissalFeedback &&
this.modal.vulnerability.dismissalFeedback.pipeline &&
this.modal.vulnerability.dismissalFeedback.author
);
},
/**
* The slot for the footer should be rendered if any of the conditions is true.
*/
shouldRenderFooterSection() {
return (
!this.modal.isResolved &&
(this.canCreateFeedbackPermission || this.canCreateIssuePermission)
);
},
}, },
methods: { canCreateIssuePermission: {
...mapActions(['dismissIssue', 'revertDismissIssue', 'createNewIssue']), type: Boolean,
handleDismissClick() { required: false,
if (this.modal.vulnerability.isDismissed) { default: false,
this.revertDismissIssue();
} else {
this.dismissIssue();
}
},
isLastValue(index, values) {
return index < values.length - 1;
},
hasValue(field) {
return field.value && field.value.length > 0;
},
hasInstances(field, key) {
return key === 'instances' && this.hasValue(field);
},
hasIdentifiers(field, key) {
return key === 'identifiers' && this.hasValue(field);
},
hasLinks(field, key) {
return key === 'links' && this.hasValue(field);
},
}, },
}; canCreateFeedbackPermission: {
type: Boolean,
required: false,
default: false,
},
},
computed: {
revertTitle() {
return this.modal.vulnerability.isDismissed
? s__('ciReport|Revert dismissal')
: s__('ciReport|Dismiss vulnerability');
},
hasDismissedBy() {
return (
this.modal.vulnerability &&
this.modal.vulnerability.dismissalFeedback &&
this.modal.vulnerability.dismissalFeedback.pipeline &&
this.modal.vulnerability.dismissalFeedback.author
);
},
/**
* The slot for the footer should be rendered if any of the conditions is true.
*/
shouldRenderFooterSection() {
return (
!this.modal.isResolved &&
(this.canCreateFeedbackPermission || this.canCreateIssuePermission)
);
},
},
methods: {
handleDismissClick() {
if (this.modal.vulnerability.isDismissed) {
this.$emit('revertDismissIssue');
} else {
this.$emit('dismissIssue');
}
},
isLastValue(index, values) {
return index < values.length - 1;
},
hasValue(field) {
return field.value && field.value.length > 0;
},
hasInstances(field, key) {
return key === 'instances' && this.hasValue(field);
},
hasIdentifiers(field, key) {
return key === 'identifiers' && this.hasValue(field);
},
hasLinks(field, key) {
return key === 'links' && this.hasValue(field);
},
},
};
</script> </script>
<template> <template>
<modal <modal
...@@ -196,6 +210,7 @@ ...@@ -196,6 +210,7 @@
>#{{ modal.vulnerability.dismissalFeedback.pipeline.id }}</a>. >#{{ modal.vulnerability.dismissalFeedback.pipeline.id }}</a>.
</template> </template>
<a <a
v-if="vulnerabilityFeedbackHelpPath"
:href="vulnerabilityFeedbackHelpPath" :href="vulnerabilityFeedbackHelpPath"
class="js-link-vulnerabilityFeedbackHelpPath" class="js-link-vulnerabilityFeedbackHelpPath"
> >
...@@ -245,7 +260,7 @@ ...@@ -245,7 +260,7 @@
:disabled="modal.isCreatingNewIssue" :disabled="modal.isCreatingNewIssue"
:label="__('Create issue')" :label="__('Create issue')"
container-class="js-create-issue-btn btn btn-success btn-inverted" container-class="js-create-issue-btn btn btn-success btn-inverted"
@click="createNewIssue" @click="$emit('createNewIssue')"
/> />
</template> </template>
</div> </div>
......
...@@ -120,7 +120,16 @@ export default { ...@@ -120,7 +120,16 @@ export default {
}, },
componentNames, componentNames,
computed: { computed: {
...mapState(['sast', 'sastContainer', 'dast', 'dependencyScanning', 'summaryCounts']), ...mapState([
'sast',
'sastContainer',
'dast',
'dependencyScanning',
'summaryCounts',
'modal',
'canCreateIssuePermission',
'canCreateFeedbackPermission',
]),
...mapGetters([ ...mapGetters([
'groupedSastText', 'groupedSastText',
'groupedSummaryText', 'groupedSummaryText',
...@@ -207,6 +216,9 @@ export default { ...@@ -207,6 +216,9 @@ export default {
'setPipelineId', 'setPipelineId',
'setCanCreateIssuePermission', 'setCanCreateIssuePermission',
'setCanCreateFeedbackPermission', 'setCanCreateFeedbackPermission',
'dismissIssue',
'revertDismissIssue',
'createNewIssue',
]), ]),
}, },
}; };
...@@ -311,7 +323,15 @@ export default { ...@@ -311,7 +323,15 @@ export default {
/> />
</template> </template>
<issue-modal /> <issue-modal
:modal="modal"
:vulnerability-feedback-help-path="vulnerabilityFeedbackHelpPath"
:can-create-issue-permission="canCreateIssuePermission"
:can-create-feedback-permission="canCreateFeedbackPermission"
@createNewIssue="createNewIssue"
@dismissIssue="dismissIssue"
@revertDismissIssue="revertDismissIssue"
/>
</div> </div>
</report-section> </report-section>
</template> </template>
...@@ -92,7 +92,15 @@ export default { ...@@ -92,7 +92,15 @@ export default {
}, },
componentNames, componentNames,
computed: { computed: {
...mapState(['sast', 'dependencyScanning', 'sastContainer', 'dast']), ...mapState([
'sast',
'dependencyScanning',
'sastContainer',
'dast',
'modal',
'canCreateIssuePermission',
'canCreateFeedbackPermission',
]),
sastText() { sastText() {
return this.summaryTextBuilder(messages.SAST, this.sast.newIssues.length); return this.summaryTextBuilder(messages.SAST, this.sast.newIssues.length);
...@@ -188,6 +196,9 @@ export default { ...@@ -188,6 +196,9 @@ export default {
'setPipelineId', 'setPipelineId',
'setCanCreateIssuePermission', 'setCanCreateIssuePermission',
'setCanCreateFeedbackPermission', 'setCanCreateFeedbackPermission',
'dismissIssue',
'revertDismissIssue',
'createNewIssue',
]), ]),
summaryTextBuilder(reportType, issuesCount = 0) { summaryTextBuilder(reportType, issuesCount = 0) {
if (issuesCount === 0) { if (issuesCount === 0) {
...@@ -265,6 +276,14 @@ export default { ...@@ -265,6 +276,14 @@ export default {
class="js-dast-widget split-report-section" class="js-dast-widget split-report-section"
/> />
<issue-modal /> <issue-modal
:modal="modal"
:vulnerability-feedback-help-path="vulnerabilityFeedbackHelpPath"
:can-create-issue-permission="canCreateIssuePermission"
:can-create-feedback-permission="canCreateFeedbackPermission"
@createNewIssue="createNewIssue"
@dismissIssue="dismissIssue"
@revertDismissIssue="revertDismissIssue"
/>
</div> </div>
</template> </template>
...@@ -36,7 +36,6 @@ export const RECEIVE_DEPENDENCY_SCANNING_ERROR = 'RECEIVE_DEPENDENCY_SCANNING_ER ...@@ -36,7 +36,6 @@ export const RECEIVE_DEPENDENCY_SCANNING_ERROR = 'RECEIVE_DEPENDENCY_SCANNING_ER
// Dismiss security issue // Dismiss security issue
export const SET_ISSUE_MODAL_DATA = 'SET_ISSUE_MODAL_DATA'; export const SET_ISSUE_MODAL_DATA = 'SET_ISSUE_MODAL_DATA';
export const CLEAR_ISSUE_MODAL_DATA = 'CLEAR_ISSUE_MODAL_DATA';
export const REQUEST_DISMISS_ISSUE = 'REQUEST_DISMISS_ISSUE'; export const REQUEST_DISMISS_ISSUE = 'REQUEST_DISMISS_ISSUE';
export const RECEIVE_DISMISS_ISSUE_SUCCESS = 'RECEIVE_DISMISS_ISSUE_SUCCESS'; export const RECEIVE_DISMISS_ISSUE_SUCCESS = 'RECEIVE_DISMISS_ISSUE_SUCCESS';
export const RECEIVE_DISMISS_ISSUE_ERROR = 'RECEIVE_DISMISS_ISSUE_ERROR'; export const RECEIVE_DISMISS_ISSUE_ERROR = 'RECEIVE_DISMISS_ISSUE_ERROR';
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment