diff --git a/app/assets/javascripts/ci_variable_list/components/ci_admin_variables.vue b/app/assets/javascripts/ci_variable_list/components/ci_admin_variables.vue new file mode 100644 index 0000000000000000000000000000000000000000..83bad9eb5186ab1ee947197634baec3c82ed1db5 --- /dev/null +++ b/app/assets/javascripts/ci_variable_list/components/ci_admin_variables.vue @@ -0,0 +1,101 @@ + + + diff --git a/app/assets/javascripts/ci_variable_list/components/ci_environments_dropdown.vue b/app/assets/javascripts/ci_variable_list/components/ci_environments_dropdown.vue index 8ee7132bb252f6e087b6ba7db5021a672bd94fac..c9002edc1abd9ed2728c1fa5a541c6799d241b00 100644 --- a/app/assets/javascripts/ci_variable_list/components/ci_environments_dropdown.vue +++ b/app/assets/javascripts/ci_variable_list/components/ci_environments_dropdown.vue @@ -33,9 +33,9 @@ export default { }, filteredEnvironments() { const lowerCasedSearchTerm = this.searchTerm.toLowerCase(); - return this.environments.filter((resultString) => - resultString.toLowerCase().includes(lowerCasedSearchTerm), - ); + return this.environments.filter((environment) => { + return environment.toLowerCase().includes(lowerCasedSearchTerm); + }); }, shouldRenderCreateButton() { return this.searchTerm && !this.environments.includes(this.searchTerm); diff --git a/app/assets/javascripts/ci_variable_list/components/ci_variable_modal.vue b/app/assets/javascripts/ci_variable_list/components/ci_variable_modal.vue index dc57f3fe4ced881d8af109da740e292a239d9ee3..5ba63de8c96306ff461a9777c32a94bd819e43c5 100644 --- a/app/assets/javascripts/ci_variable_list/components/ci_variable_modal.vue +++ b/app/assets/javascripts/ci_variable_list/components/ci_variable_modal.vue @@ -33,7 +33,7 @@ import { VARIABLE_ACTIONS, variableOptions, } from '../constants'; - +import { createJoinedEnvironments } from '../utils'; import CiEnvironmentsDropdown from './ci_environments_dropdown.vue'; import { awsTokens, awsTokenList } from './ci_variable_autocomplete_tokens'; @@ -98,9 +98,15 @@ export default { required: false, default: () => {}, }, + variables: { + type: Array, + required: false, + default: () => [], + }, }, data() { return { + newEnvironments: [], isTipDismissed: getCookie(AWS_TIP_DISMISSED_COOKIE_NAME) === 'true', typeOptions: variableOptions, validationErrorEventProperty: '', @@ -128,6 +134,9 @@ export default { isTipVisible() { return !this.isTipDismissed && AWS_TOKEN_CONSTANTS.includes(this.variable.key); }, + joinedEnvironments() { + return createJoinedEnvironments(this.variables, this.environments, this.newEnvironments); + }, maskedFeedback() { return this.displayMaskedError ? __('This variable can not be masked.') : ''; }, @@ -176,7 +185,7 @@ export default { this.$emit('add-variable', this.variable); }, createEnvironmentScope(env) { - this.$emit('create-environment-scope', env); + this.newEnvironments.push(env); }, deleteVariable() { this.$emit('delete-variable', this.variable); @@ -314,7 +323,7 @@ export default { v-if="areScopedVariablesAvailable" class="gl-w-full" :selected-environment-scope="variable.environmentScope" - :environments="environments" + :environments="joinedEnvironments" @select-environment="setEnvironmentScope" @create-environment-scope="createEnvironmentScope" /> diff --git a/app/assets/javascripts/ci_variable_list/components/ci_variable_settings.vue b/app/assets/javascripts/ci_variable_list/components/ci_variable_settings.vue index 29578c6f7106620237b2478d4603de688985b408..81e3a983ea31dcf6e0b1baa13821335ab820af0a 100644 --- a/app/assets/javascripts/ci_variable_list/components/ci_variable_settings.vue +++ b/app/assets/javascripts/ci_variable_list/components/ci_variable_settings.vue @@ -1,6 +1,5 @@