summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/registry/settings/components/settings_form.vue
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts/registry/settings/components/settings_form.vue')
-rw-r--r--app/assets/javascripts/registry/settings/components/settings_form.vue313
1 files changed, 0 insertions, 313 deletions
diff --git a/app/assets/javascripts/registry/settings/components/settings_form.vue b/app/assets/javascripts/registry/settings/components/settings_form.vue
deleted file mode 100644
index 1360e09a75d..00000000000
--- a/app/assets/javascripts/registry/settings/components/settings_form.vue
+++ /dev/null
@@ -1,313 +0,0 @@
-<script>
-import { GlCard, GlButton, GlSprintf } from '@gitlab/ui';
-import {
- UPDATE_SETTINGS_ERROR_MESSAGE,
- UPDATE_SETTINGS_SUCCESS_MESSAGE,
- SET_CLEANUP_POLICY_BUTTON,
- KEEP_HEADER_TEXT,
- KEEP_INFO_TEXT,
- KEEP_N_LABEL,
- NAME_REGEX_KEEP_LABEL,
- NAME_REGEX_KEEP_DESCRIPTION,
- REMOVE_HEADER_TEXT,
- REMOVE_INFO_TEXT,
- EXPIRATION_SCHEDULE_LABEL,
- NAME_REGEX_LABEL,
- NAME_REGEX_PLACEHOLDER,
- NAME_REGEX_DESCRIPTION,
- CADENCE_LABEL,
- EXPIRATION_POLICY_FOOTER_NOTE,
-} from '~/registry/settings/constants';
-import updateContainerExpirationPolicyMutation from '~/registry/settings/graphql/mutations/update_container_expiration_policy.mutation.graphql';
-import { updateContainerExpirationPolicy } from '~/registry/settings/graphql/utils/cache_update';
-import { formOptionsGenerator } from '~/registry/settings/utils';
-import Tracking from '~/tracking';
-import ExpirationDropdown from './expiration_dropdown.vue';
-import ExpirationInput from './expiration_input.vue';
-import ExpirationRunText from './expiration_run_text.vue';
-import ExpirationToggle from './expiration_toggle.vue';
-
-export default {
- components: {
- GlCard,
- GlButton,
- GlSprintf,
- ExpirationDropdown,
- ExpirationInput,
- ExpirationToggle,
- ExpirationRunText,
- },
- mixins: [Tracking.mixin()],
- inject: ['projectPath'],
- props: {
- value: {
- type: Object,
- required: true,
- },
- isLoading: {
- type: Boolean,
- required: false,
- default: false,
- },
- isEdited: {
- type: Boolean,
- required: false,
- default: false,
- },
- },
-
- formOptions: formOptionsGenerator(),
- i18n: {
- KEEP_HEADER_TEXT,
- KEEP_INFO_TEXT,
- KEEP_N_LABEL,
- NAME_REGEX_KEEP_LABEL,
- SET_CLEANUP_POLICY_BUTTON,
- NAME_REGEX_KEEP_DESCRIPTION,
- REMOVE_HEADER_TEXT,
- REMOVE_INFO_TEXT,
- EXPIRATION_SCHEDULE_LABEL,
- NAME_REGEX_LABEL,
- NAME_REGEX_PLACEHOLDER,
- NAME_REGEX_DESCRIPTION,
- CADENCE_LABEL,
- EXPIRATION_POLICY_FOOTER_NOTE,
- },
- data() {
- return {
- tracking: {
- label: 'docker_container_retention_and_expiration_policies',
- },
- apiErrors: {},
- localErrors: {},
- mutationLoading: false,
- };
- },
- computed: {
- prefilledForm() {
- return {
- ...this.value,
- cadence: this.findDefaultOption('cadence'),
- keepN: this.findDefaultOption('keepN'),
- olderThan: this.findDefaultOption('olderThan'),
- };
- },
- showLoadingIcon() {
- return this.isLoading || this.mutationLoading;
- },
- fieldsAreValid() {
- return Object.values(this.localErrors).every((error) => error);
- },
- isSubmitButtonDisabled() {
- return !this.fieldsAreValid || this.showLoadingIcon;
- },
- isCancelButtonDisabled() {
- return !this.isEdited || this.isLoading || this.mutationLoading;
- },
- isFieldDisabled() {
- return this.showLoadingIcon || !this.value.enabled;
- },
- mutationVariables() {
- return {
- projectPath: this.projectPath,
- enabled: this.prefilledForm.enabled,
- cadence: this.prefilledForm.cadence,
- olderThan: this.prefilledForm.olderThan,
- keepN: this.prefilledForm.keepN,
- nameRegex: this.prefilledForm.nameRegex,
- nameRegexKeep: this.prefilledForm.nameRegexKeep,
- };
- },
- },
- methods: {
- findDefaultOption(option) {
- return this.value[option] || this.$options.formOptions[option].find((f) => f.default)?.key;
- },
- reset() {
- this.track('reset_form');
- this.apiErrors = {};
- this.localErrors = {};
- this.$emit('reset');
- },
- setApiErrors(response) {
- this.apiErrors = response.graphQLErrors.reduce((acc, curr) => {
- curr.extensions.problems.forEach((item) => {
- acc[item.path[0]] = item.message;
- });
- return acc;
- }, {});
- },
- setLocalErrors(state, model) {
- this.localErrors = {
- ...this.localErrors,
- [model]: state,
- };
- },
- submit() {
- this.track('submit_form');
- this.apiErrors = {};
- this.mutationLoading = true;
- return this.$apollo
- .mutate({
- mutation: updateContainerExpirationPolicyMutation,
- variables: {
- input: this.mutationVariables,
- },
- update: updateContainerExpirationPolicy(this.projectPath),
- })
- .then(({ data }) => {
- const errorMessage = data?.updateContainerExpirationPolicy?.errors[0];
- if (errorMessage) {
- this.$toast.show(errorMessage, { type: 'error' });
- } else {
- this.$toast.show(UPDATE_SETTINGS_SUCCESS_MESSAGE, { type: 'success' });
- }
- })
- .catch((error) => {
- this.setApiErrors(error);
- this.$toast.show(UPDATE_SETTINGS_ERROR_MESSAGE, { type: 'error' });
- })
- .finally(() => {
- this.mutationLoading = false;
- });
- },
- onModelChange(newValue, model) {
- this.$emit('input', { ...this.value, [model]: newValue });
- this.apiErrors[model] = undefined;
- },
- },
-};
-</script>
-
-<template>
- <form ref="form-element" @submit.prevent="submit" @reset.prevent="reset">
- <expiration-toggle
- :value="prefilledForm.enabled"
- :disabled="showLoadingIcon"
- class="gl-mb-0!"
- data-testid="enable-toggle"
- @input="onModelChange($event, 'enabled')"
- />
-
- <div class="gl-display-flex gl-mt-7">
- <expiration-dropdown
- v-model="prefilledForm.cadence"
- :disabled="isFieldDisabled"
- :form-options="$options.formOptions.cadence"
- :label="$options.i18n.CADENCE_LABEL"
- name="cadence"
- class="gl-mr-7 gl-mb-0!"
- data-testid="cadence-dropdown"
- @input="onModelChange($event, 'cadence')"
- />
- <expiration-run-text
- :value="prefilledForm.nextRunAt"
- :enabled="prefilledForm.enabled"
- class="gl-mb-0!"
- />
- </div>
- <gl-card class="gl-mt-7">
- <template #header>
- {{ $options.i18n.KEEP_HEADER_TEXT }}
- </template>
- <template #default>
- <div>
- <p>
- <gl-sprintf :message="$options.i18n.KEEP_INFO_TEXT">
- <template #strong="{ content }">
- <strong>{{ content }}</strong>
- </template>
- <template #secondStrong="{ content }">
- <strong>{{ content }}</strong>
- </template>
- </gl-sprintf>
- </p>
- <expiration-dropdown
- v-model="prefilledForm.keepN"
- :disabled="isFieldDisabled"
- :form-options="$options.formOptions.keepN"
- :label="$options.i18n.KEEP_N_LABEL"
- name="keep-n"
- data-testid="keep-n-dropdown"
- @input="onModelChange($event, 'keepN')"
- />
- <expiration-input
- v-model="prefilledForm.nameRegexKeep"
- :error="apiErrors.nameRegexKeep"
- :disabled="isFieldDisabled"
- :label="$options.i18n.NAME_REGEX_KEEP_LABEL"
- :description="$options.i18n.NAME_REGEX_KEEP_DESCRIPTION"
- name="keep-regex"
- data-testid="keep-regex-input"
- @input="onModelChange($event, 'nameRegexKeep')"
- @validation="setLocalErrors($event, 'nameRegexKeep')"
- />
- </div>
- </template>
- </gl-card>
- <gl-card class="gl-mt-7">
- <template #header>
- {{ $options.i18n.REMOVE_HEADER_TEXT }}
- </template>
- <template #default>
- <div>
- <p>
- <gl-sprintf :message="$options.i18n.REMOVE_INFO_TEXT">
- <template #strong="{ content }">
- <strong>{{ content }}</strong>
- </template>
- <template #secondStrong="{ content }">
- <strong>{{ content }}</strong>
- </template>
- </gl-sprintf>
- </p>
- <expiration-dropdown
- v-model="prefilledForm.olderThan"
- :disabled="isFieldDisabled"
- :form-options="$options.formOptions.olderThan"
- :label="$options.i18n.EXPIRATION_SCHEDULE_LABEL"
- name="older-than"
- data-testid="older-than-dropdown"
- @input="onModelChange($event, 'olderThan')"
- />
- <expiration-input
- v-model="prefilledForm.nameRegex"
- :error="apiErrors.nameRegex"
- :disabled="isFieldDisabled"
- :label="$options.i18n.NAME_REGEX_LABEL"
- :placeholder="$options.i18n.NAME_REGEX_PLACEHOLDER"
- :description="$options.i18n.NAME_REGEX_DESCRIPTION"
- name="remove-regex"
- data-testid="remove-regex-input"
- @input="onModelChange($event, 'nameRegex')"
- @validation="setLocalErrors($event, 'nameRegex')"
- />
- </div>
- </template>
- </gl-card>
- <div class="gl-mt-7 gl-display-flex gl-align-items-center">
- <gl-button
- data-testid="save-button"
- type="submit"
- :disabled="isSubmitButtonDisabled"
- :loading="showLoadingIcon"
- category="primary"
- variant="confirm"
- class="js-no-auto-disable gl-mr-4"
- >
- {{ $options.i18n.SET_CLEANUP_POLICY_BUTTON }}
- </gl-button>
- <gl-button
- data-testid="cancel-button"
- type="reset"
- :disabled="isCancelButtonDisabled"
- class="gl-mr-4"
- >
- {{ __('Cancel') }}
- </gl-button>
- <span class="gl-font-style-italic gl-text-gray-400">{{
- $options.i18n.EXPIRATION_POLICY_FOOTER_NOTE
- }}</span>
- </div>
- </form>
-</template>