Skip to content
This repository was archived by the owner on Nov 22, 2021. It is now read-only.

Commit 2d5e7c8

Browse files
committed
fix(tagsInput): Remove duplicate tags on paste
Closes #795.
1 parent 87d0e6b commit 2d5e7c8

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

src/tags-input.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -448,7 +448,12 @@ export default function TagsInputDirective($timeout, $document, $window, $q, tag
448448
.on('input-paste', event => {
449449
if (options.addOnPaste) {
450450
let data = event.getTextData();
451-
let tags = data.split(options.pasteSplitPattern);
451+
452+
let tags = data
453+
.split(options.pasteSplitPattern)
454+
.filter((element, index, array) =>
455+
array.indexOf(element, index + 1) === -1
456+
);
452457

453458
if (tags.length > 1) {
454459
tags.forEach(tag => {

test/tags-input.spec.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -723,6 +723,24 @@ describe('tags-input directive', () => {
723723
expect(eventData.preventDefault).toHaveBeenCalled();
724724
});
725725

726+
it('removes duplicate tags from split text (' + name + ')', () => {
727+
// Arrange
728+
compile('add-on-paste="true"');
729+
setup('tag1, tag2, tag2, tag3');
730+
731+
// Act
732+
let event = jQuery.Event('paste', eventData);
733+
getInput().trigger(event);
734+
735+
// Assert
736+
expect($scope.tags).toEqual([
737+
{ text: 'tag1' },
738+
{ text: 'tag2' },
739+
{ text: 'tag3' }
740+
]);
741+
expect(eventData.preventDefault).toHaveBeenCalled();
742+
});
743+
726744
it('doesn\'t split the pasted text into tags if there is just one tag (' + name + ')', () => {
727745
// Arrange
728746
compile('add-on-paste="true"');

0 commit comments

Comments
 (0)