diff --git a/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_filter_selector.vue b/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_filter_selector.vue index 1e7ec6974b9bad22b6fcccfcf7c160c791ca5777..fa03cedac0f9acff126a4e3515f428f97278ef87 100644 --- a/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_filter_selector.vue +++ b/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_filter_selector.vue @@ -17,6 +17,11 @@ export default { GlBadge, }, props: { + disabledFilters: { + type: Array, + required: false, + default: () => [], + }, disabled: { type: Boolean, required: false, @@ -32,11 +37,6 @@ export default { required: false, default: () => ({}), }, - shouldDisableFilter: { - type: Function, - required: false, - default: () => false, - }, buttonText: { type: String, required: false, @@ -53,7 +53,7 @@ export default { default: '', }, customFilterTooltip: { - type: Function, + type: Object, required: false, default: () => null, }, @@ -70,13 +70,15 @@ export default { }, methods: { filterDisabled(value) { - return this.shouldDisableFilter(value) || Boolean(this.selected[value]); + return this.disabledFilters.includes(value) || Boolean(this.selected[value]); }, selectFilter({ value }) { this.$emit('select', value); }, filterTooltip(filter) { - return this.customFilterTooltip(filter) || filter.tooltip; + return ( + this.customFilterTooltip[filter.value] || this.customFilterTooltip.default || filter.tooltip + ); }, }, }; diff --git a/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result/editor_component.vue b/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result/editor_component.vue index a7179ddb34de05946e1b303e7a2185b170f0588b..3224ba19d37f7138e13b21f3fbdca7dc4cfc5fd0 100644 --- a/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result/editor_component.vue +++ b/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result/editor_component.vue @@ -42,6 +42,8 @@ import FallbackAndEdgeCasesSection from './advanced_settings/fallback_and_edge_c import PolicyExceptions from './advanced_settings/policy_exceptions/policy_exceptions.vue'; import { ACTION_LISTBOX_ITEMS, + ACTION_OPTIONS, + WARN_ACTION_OPTION, BLOCK_GROUP_BRANCH_MODIFICATION, buildAction, buildSettingsList, @@ -235,6 +237,23 @@ export default { .filter(({ type }) => type === REQUIRE_APPROVAL_TYPE) .slice(0, MAX_ALLOWED_APPROVER_ACTION_LENGTH); }, + disabledActionFilters() { + const filters = { ...ACTION_OPTIONS, ...WARN_ACTION_OPTION }; + + if (!this.hasWarnAction) { + delete filters[WARN_TYPE]; + } + + if (this.hasWarnAction || this.botActions.length <= 0) { + delete filters[BOT_MESSAGE_TYPE]; + } + + if (this.hasWarnAction || this.approversActions.length < MAX_ALLOWED_APPROVER_ACTION_LENGTH) { + delete filters[REQUIRE_APPROVAL_TYPE]; + } + + return Object.keys(filters); + }, botActions() { const botActions = this.actions.filter(({ type }) => type === BOT_MESSAGE_TYPE); return botActions.filter(({ enabled }) => enabled); @@ -502,28 +521,14 @@ export default { } } }, - shouldDisableActionSelector(filter) { - if (filter === WARN_TYPE) { - return this.hasWarnAction; - } - - if (filter === BOT_MESSAGE_TYPE) { - return !this.hasWarnAction && this.botActions.length > 0; - } - - return ( - !this.hasWarnAction && this.approversActions.length >= MAX_ALLOWED_APPROVER_ACTION_LENGTH - ); - }, toggleCollapse() { this.isExpanded = !this.isExpanded; }, - customFilterSelectorTooltip(filter) { - if (filter.value === BOT_MESSAGE_TYPE) { - return this.$options.i18n.botActionTooltip; - } - - return this.$options.i18n.approverActionTooltip; + customFilterSelectorTooltip() { + return { + [BOT_MESSAGE_TYPE]: this.$options.i18n.botActionTooltip, + default: this.$options.i18n.approverActionTooltip, + }; }, }, }; @@ -646,10 +651,10 @@ export default { diff --git a/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result/lib/actions.js b/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result/lib/actions.js index 8de4c9fa8f2f932470fc5974571d50c6a89f730a..892e54156580dda1f1923030e3ed295fe30b35a5 100644 --- a/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result/lib/actions.js +++ b/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result/lib/actions.js @@ -119,6 +119,8 @@ export const ACTION_OPTIONS = { [BOT_MESSAGE_TYPE]: s__('SecurityOrchestration|Send bot message'), }; +export const WARN_ACTION_OPTION = { [WARN_TYPE]: WARN_TYPE_TEXT }; + export const ACTION_LISTBOX_ITEMS = () => { const options = { ...ACTION_OPTIONS,