Skip to content

Commit 1e22b32

Browse files
Merge pull request #512 from TechnologyEnhancedLearning/Develope/fixes/TD-4430-Issue-when-adding-duplicate-keywords-on-Keywords-section-when-contributing-resources-and-on-Admin-section
TD-4430 : Issue when adding duplicate keywords on 'Keywords' section when contributing resources and on Admin section
2 parents 4e9a215 + 9c14763 commit 1e22b32

File tree

4 files changed

+39
-17
lines changed

4 files changed

+39
-17
lines changed

AdminUI/LearningHub.Nhs.AdminUI/Views/Catalogue/Edit.cshtml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,11 @@
162162
<span class="input-validation-error keyword-maxlength" style="display: none;">The maximum length is 50 characters.</span>
163163
</div>
164164
</div>
165+
<div class="row">
166+
<div class="col-12">
167+
<span id="keyword-error-span" class="field-validation-error" style="display: none;"></span>
168+
</div>
169+
</div>
165170

166171
</div>
167172
<div class="col-12">
@@ -341,6 +346,9 @@
341346
} else {
342347
$('#add-keyword').removeAttr('disabled');
343348
}
349+
350+
$('#keyword-error-span').hide();
351+
$('#keyword-error-span').html('');
344352
});
345353
346354
$('#add-keyword').on('click', function () {
@@ -355,6 +363,8 @@
355363
return item.trim();
356364
});
357365
366+
var duplicateKeywords = [];
367+
$('#keyword-error-span').hide();
358368
values.forEach(function (value) {
359369
if (value && keywords.indexOf(value) === -1) {
360370
keywords.push(value);
@@ -368,6 +378,12 @@
368378
$(x).attr('name', "Keywords[" + i + "]");
369379
});
370380
}
381+
else
382+
{
383+
duplicateKeywords.push(value);
384+
$('#keyword-error-span').show();
385+
$('#keyword-error-span').html('The keyword(s) have already been added : ' + duplicateKeywords.join(', '))
386+
}
371387
});
372388
373389
$keywordInput.val("");

LearningHub.Nhs.WebUI/Scripts/vuesrc/contribute-resource/components/KeyWordsEditor.vue

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<div class="row">
55
<div class="form-group" v-bind:class="{ 'input-validation-error': keywordError }">
66
<div class="col-12 mb-0 error-text" v-if="keywordError">
7-
<span class="text-danger">This keyword has already been added.</span>
7+
<span class="text-danger">The keyword(s) have already been added : {{formattedkeywordErrorMessage}}</span>
88
</div>
99
<div class="col-12 mb-0 error-text" v-if="keywordLengthExceeded">
1010
<span class="text-danger">
@@ -60,6 +60,7 @@
6060
newKeyword: '',
6161
keywordError: false,
6262
keywordLengthExceeded: false,
63+
keywordErrorMessage: []
6364
}
6465
},
6566
computed: {
@@ -69,17 +70,20 @@
6970
newKeywordTrimmed(): string {
7071
return this.newKeyword?.trim().replace(/ +(?= )/g, '').toLowerCase();
7172
},
73+
formattedkeywordErrorMessage(): string {
74+
return this.keywordErrorMessage.join(', ');
75+
},
7276
},
7377
methods: {
7478
keywordChange() {
7579
this.keywordError = false;
7680
this.keywordLengthExceeded = false;
81+
this.keywordErrorMessage = [];
7782
},
7883
async addKeyword() {
7984
if (this.newKeyword && this.newKeywordTrimmed.length > 0) {
8085
let allTrimmedKeyword = this.newKeywordTrimmed.toLowerCase().split(',');
8186
allTrimmedKeyword = allTrimmedKeyword.filter(e => String(e).trim());
82-
if (!this.resourceDetails.resourceKeywords.find(_keyword => allTrimmedKeyword.includes(_keyword.keyword.toLowerCase()))) {
8387
for (var i = 0; i < allTrimmedKeyword.length; i++) {
8488
let item = allTrimmedKeyword[i];
8589
if (item.length > 0 && item.length <= 50) {
@@ -90,8 +94,10 @@
9094
newKeywordObj = await resourceData.addKeyword(this.resourceVersionId, newKeywordObj);
9195
if (newKeywordObj.id > 0) {
9296
this.resourceDetails.resourceKeywords.push(newKeywordObj);
93-
this.keywordError = false;
9497
this.newKeyword = '';
98+
} else if (newKeywordObj.id == 0) {
99+
this.keywordError = true;
100+
this.keywordErrorMessage.push(item);
95101
}
96102
else {
97103
this.keywordError = true;
@@ -103,10 +109,6 @@
103109
this.keywordLengthExceeded = true;
104110
}
105111
}
106-
}
107-
else {
108-
this.keywordError = true;
109-
}
110112
}
111113
},
112114
async deleteKeyword(keywordId: number) {

LearningHub.Nhs.WebUI/Scripts/vuesrc/contribute/ContentCommon.vue

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@
8484
<div class="row">
8585
<div class="form-group" v-bind:class="{ 'input-validation-error': keywordError }">
8686
<div class="col-12 mb-0 error-text" v-if="keywordError">
87-
<span class="text-danger">This keyword has already been added.</span>
87+
<span class="text-danger">The keyword(s) have already been added : {{formattedkeywordErrorMessage}}</span>
8888
</div>
8989
<div class="col-12 mb-0 error-text" v-if="keywordLengthExceeded">
9090
<span class="text-danger">
@@ -292,6 +292,7 @@
292292
ResourceType,
293293
resourceProviderId: null,
294294
keywordLengthExceeded: false,
295+
keywordErrorMessage:[]
295296
};
296297
},
297298
computed: {
@@ -340,6 +341,9 @@
340341
return this.$store.state.userProviders.length > 0;
341342
}
342343
},
344+
formattedkeywordErrorMessage(): string {
345+
return this.keywordErrorMessage.join(', ');
346+
},
343347
},
344348
created() {
345349
this.setInitialValues();
@@ -485,6 +489,7 @@
485489
keywordChange() {
486490
this.keywordError = false;
487491
this.keywordLengthExceeded = false;
492+
this.keywordErrorMessage = [];
488493
},
489494
resetSelectedLicence() {
490495
this.resourceLicenceId = 0;
@@ -534,7 +539,6 @@
534539
if (this.newKeyword && this.newKeywordTrimmed.length > 0) {
535540
let allTrimmedKeyword = this.newKeywordTrimmed.toLowerCase().split(',');
536541
allTrimmedKeyword = allTrimmedKeyword.filter(e => String(e).trim());
537-
if (!this.keywords.find(_keyword => allTrimmedKeyword.includes(_keyword.keyword.toLowerCase()))) {
538542
for (var i = 0; i < allTrimmedKeyword.length; i++) {
539543
let item = allTrimmedKeyword[i];
540544
if (item.length > 0 && item.length <= 50) {
@@ -548,22 +552,21 @@
548552
if (this.resourceDetail.resourceVersionId == 0) {
549553
this.$store.commit('setResourceVersionId', newkeywordObj.resourceVersionId)
550554
}
551-
this.keywordError = false;
552555
this.newKeyword = '';
553-
} else {
556+
} else if (newkeywordObj.id == 0) {
554557
this.keywordError = true;
555-
break;
558+
this.keywordErrorMessage.push(item);
556559
}
560+
else {
561+
this.keywordError = true;
562+
break;
563+
}
557564
}
558565
else {
559566
this.keywordLengthExceeded = true;
560567
break;
561568
}
562569
}
563-
}
564-
else {
565-
this.keywordError = true;
566-
}
567570
}
568571
else {
569572
this.newKeyword = '';

WebAPI/LearningHub.Nhs.Services/ResourceService.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1772,7 +1772,8 @@ public async Task<LearningHubValidationResult> AddResourceVersionKeywordAsync(Re
17721772
bool doesKeywordAlreadyExist = await this.resourceVersionKeywordRepository.DoesResourceVersionKeywordAlreadyExistAsync(rvk.ResourceVersionId, rvk.Keyword);
17731773
if (doesKeywordAlreadyExist)
17741774
{
1775-
return new LearningHubValidationResult(false, "This keyword has already been added.");
1775+
retVal.CreatedId = 0;
1776+
return retVal;
17761777
}
17771778

17781779
retVal.CreatedId = await this.resourceVersionKeywordRepository.CreateAsync(userId, rvk);

0 commit comments

Comments
 (0)