Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts/badges/components/badge_form.vue')
-rw-r--r--app/assets/javascripts/badges/components/badge_form.vue73
1 files changed, 49 insertions, 24 deletions
diff --git a/app/assets/javascripts/badges/components/badge_form.vue b/app/assets/javascripts/badges/components/badge_form.vue
index 1a80030c7e6..2be59f00773 100644
--- a/app/assets/javascripts/badges/components/badge_form.vue
+++ b/app/assets/javascripts/badges/components/badge_form.vue
@@ -1,6 +1,7 @@
<script>
import { GlLoadingIcon, GlFormInput, GlFormGroup, GlButton } from '@gitlab/ui';
import { escape, debounce } from 'lodash';
+// eslint-disable-next-line no-restricted-imports
import { mapActions, mapState } from 'vuex';
import SafeHtml from '~/vue_shared/directives/safe_html';
import { createAlert, VARIANT_INFO } from '~/alert';
@@ -28,6 +29,11 @@ export default {
type: Boolean,
required: true,
},
+ inModal: {
+ type: Boolean,
+ required: false,
+ default: false,
+ },
},
data() {
return {
@@ -119,16 +125,28 @@ export default {
exampleUrl,
});
},
+ cancelButtonType() {
+ return this.isEditing ? 'button' : 'reset';
+ },
+ saveText() {
+ return this.isEditing ? s__('Badges|Save changes') : s__('Badges|Add badge');
+ },
+ },
+ mounted() {
+ // declared here to make it cancel-able
+ this.debouncedPreview = debounce(function search() {
+ this.renderBadge();
+ }, badgePreviewDelayInMilliseconds);
},
methods: {
...mapActions(['addBadge', 'renderBadge', 'saveBadge', 'stopEditing', 'updateBadgeInForm']),
- debouncedPreview: debounce(function preview() {
- this.renderBadge();
- }, badgePreviewDelayInMilliseconds),
- onCancel() {
- this.stopEditing();
+ updatePreview() {
+ this.debouncedPreview();
},
onSubmit() {
+ this.debouncedPreview.cancel();
+ this.renderBadge();
+
const form = this.$el;
if (!form.checkValidity()) {
this.wasValidated = true;
@@ -161,6 +179,7 @@ export default {
variant: VARIANT_INFO,
});
this.wasValidated = false;
+ this.$emit('close-add-form');
})
.catch((error) => {
createAlert({
@@ -171,6 +190,17 @@ export default {
throw error;
});
},
+ closeForm() {
+ this.$refs.form.reset();
+ this.$emit('close-add-form');
+ },
+ handleCancel() {
+ if (this.isEditing) {
+ this.stopEditing();
+ } else {
+ this.closeForm();
+ }
+ },
},
safeHtmlConfig: { ALLOW_TAGS: ['a', 'code'] },
};
@@ -178,12 +208,13 @@ export default {
<template>
<form
+ ref="form"
:class="{ 'was-validated': wasValidated }"
class="gl-mt-3 gl-mb-3 needs-validation"
novalidate
@submit.prevent.stop="onSubmit"
>
- <gl-form-group :label="s__('Badges|Name')" label-for="badge-name">
+ <gl-form-group :label="s__('Badges|Name')" label-for="badge-name" class="gl-max-w-48">
<gl-form-input id="badge-name" v-model="name" data-qa-selector="badge_name_field" />
</gl-form-group>
@@ -195,9 +226,9 @@ export default {
v-model="linkUrl"
data-qa-selector="badge_link_url_field"
type="URL"
- class="form-control gl-form-input"
+ class="form-control gl-form-input gl-max-w-80"
required
- @input="debouncedPreview"
+ @input="updatePreview"
/>
<div class="invalid-feedback">{{ s__('Badges|Enter a valid URL') }}</div>
<span class="form-text text-muted">{{ badgeLinkUrlExample }}</span>
@@ -211,9 +242,9 @@ export default {
v-model="imageUrl"
data-qa-selector="badge_image_url_field"
type="URL"
- class="form-control gl-form-input"
+ class="form-control gl-form-input gl-max-w-80"
required
- @input="debouncedPreview"
+ @input="updatePreview"
/>
<div class="invalid-feedback">{{ s__('Badges|Enter a valid URL') }}</div>
<span class="form-text text-muted">{{ badgeImageUrlExample }}</span>
@@ -235,29 +266,23 @@ export default {
</p>
</div>
- <div v-if="isEditing" class="row-content-block">
- <gl-button class="btn-cancel gl-mr-4" data-testid="cancelEditing" @click="onCancel">
- {{ __('Cancel') }}
- </gl-button>
+ <div v-if="!inModal" class="form-group" data-testid="action-buttons">
<gl-button
:loading="isSaving"
type="submit"
variant="confirm"
category="primary"
- data-testid="saveEditing"
+ data-qa-selector="add_badge_button"
+ class="gl-mr-3"
>
- {{ s__('Badges|Save changes') }}
+ {{ saveText }}
</gl-button>
- </div>
- <div v-else class="form-group">
<gl-button
- :loading="isSaving"
- type="submit"
- variant="confirm"
- category="primary"
- data-qa-selector="add_badge_button"
+ :type="cancelButtonType"
+ data-qa-selector="cancel_badge_button"
+ @click="handleCancel"
>
- {{ s__('Badges|Add badge') }}
+ {{ __('Cancel') }}
</gl-button>
</div>
</form>