diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-03-16 00:07:57 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-03-16 00:07:57 +0300 |
commit | 512177dcc7369c6c3f4ae54cc8a0abcb73828f71 (patch) | |
tree | 3ceb4aba221a235c570f6f7e5398b88a381e3ead /app/assets/javascripts/releases | |
parent | 7f08e6916d8259a8ed1549cb54460f0b746d9d8b (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/assets/javascripts/releases')
3 files changed, 23 insertions, 5 deletions
diff --git a/app/assets/javascripts/releases/components/asset_links_form.vue b/app/assets/javascripts/releases/components/asset_links_form.vue index b9601428850..b81da399a7b 100644 --- a/app/assets/javascripts/releases/components/asset_links_form.vue +++ b/app/assets/javascripts/releases/components/asset_links_form.vue @@ -56,6 +56,9 @@ export default { hasDuplicateUrl(link) { return Boolean(this.getLinkErrors(link).isDuplicate); }, + hasDuplicateName(link) { + return Boolean(this.getLinkErrors(link).isTitleDuplicate); + }, hasBadFormat(link) { return Boolean(this.getLinkErrors(link).isBadFormat); }, @@ -72,7 +75,7 @@ export default { return !this.hasDuplicateUrl(link) && !this.hasBadFormat(link) && !this.hasEmptyUrl(link); }, isNameValid(link) { - return !this.hasEmptyName(link); + return !this.hasEmptyName(link) && !this.hasDuplicateName(link); }, /** @@ -121,7 +124,7 @@ export default { <p> {{ __( - 'Point to any links you like: documentation, built binaries, or other related materials. These can be internal or external links from your GitLab instance. Duplicate URLs are not allowed.', + 'Point to any links you like: documentation, built binaries, or other related materials. These can be internal or external links from your GitLab instance. Each URL and link title must be unique.', ) }} </p> @@ -165,7 +168,7 @@ export default { </gl-sprintf> </span> <span v-else-if="hasDuplicateUrl(link)" class="invalid-feedback d-inline"> - {{ __('This URL is already used for another link; duplicate URLs are not allowed') }} + {{ __('This URL already exists.') }} </span> </template> </gl-form-group> @@ -191,6 +194,9 @@ export default { <span v-if="hasEmptyName(link)" class="invalid-feedback d-inline"> {{ __('Link title is required') }} </span> + <span v-else-if="hasDuplicateName(link)" class="invalid-feedback d-inline"> + {{ __('This title already exists.') }} + </span> </template> </gl-form-group> diff --git a/app/assets/javascripts/releases/stores/modules/edit_new/actions.js b/app/assets/javascripts/releases/stores/modules/edit_new/actions.js index 576f099248e..b3ba4f9263a 100644 --- a/app/assets/javascripts/releases/stores/modules/edit_new/actions.js +++ b/app/assets/javascripts/releases/stores/modules/edit_new/actions.js @@ -162,7 +162,7 @@ const createReleaseLink = async ({ state, link }) => { input: { projectPath: state.projectPath, tagName: state.tagName, - name: link.name, + name: link.name.trim(), url: link.url, linkType: link.linkType.toUpperCase(), directAssetPath: link.directAssetPath, diff --git a/app/assets/javascripts/releases/stores/modules/edit_new/getters.js b/app/assets/javascripts/releases/stores/modules/edit_new/getters.js index d83ec05872a..d4f49e53619 100644 --- a/app/assets/javascripts/releases/stores/modules/edit_new/getters.js +++ b/app/assets/javascripts/releases/stores/modules/edit_new/getters.js @@ -1,5 +1,6 @@ import { isEmpty } from 'lodash'; import { hasContent } from '~/lib/utils/text_utility'; +import { getDuplicateItemsFromArray } from '~/lib/utils/array_utility'; /** * @returns {Boolean} `true` if the app is editing an existing release. @@ -95,6 +96,17 @@ export const validationErrors = (state) => { } }); + // check for duplicated Link Titles + const linkTitles = state.release.assets.links.map((link) => link.name.trim()); + const duplicatedTitles = getDuplicateItemsFromArray(linkTitles); + + // add a validation error for each link that shares Link Title + state.release.assets.links.forEach((link) => { + if (hasContent(link.name) && duplicatedTitles.includes(link.name.trim())) { + errors.assets.links[link.id].isTitleDuplicate = true; + } + }); + return errors; }; @@ -131,7 +143,7 @@ export const releaseCreateMutatationVariables = (state, getters) => { ref: state.createFrom, assets: { links: getters.releaseLinksToCreate.map(({ name, url, linkType }) => ({ - name, + name: name.trim(), url, linkType: linkType.toUpperCase(), })), |