@@ -25,12 +25,15 @@ const select = useMultiSelect(props, { selectableItemsList, selectButton });
2525const newValue = ref (' ' );
2626const lastActiveItemId = ref (- 1 );
2727
28+ const search = computed (() => newValue .value .trim ().toLocaleLowerCase ());
29+
30+ const selectedNames = computed (() => new Set ((select .selectedItems ?? []).map ((item : MultiSelectItem ) => item .name )));
31+
2832const filteredItemsList = computed (() => {
29- return (
30- select .selectableItems .filter ((selectable : MultiSelectItem ) => {
31- return ! select .selectedItems ?.find ((selected : MultiSelectItem ) => selectable .name === selected .name ) && selectable .name ?.includes (newValue .value .toLocaleLowerCase ());
32- }) ?? []
33- );
33+ return select .selectableItems .filter ((selectable : MultiSelectItem ) => {
34+ const name = selectable .name ?.toLocaleLowerCase () ?? ' ' ;
35+ return ! selectedNames .value .has (selectable .name ) && name .includes (search .value );
36+ });
3437});
3538
3639const handleItemClick = (item : any , setFocus = true , triggerSelect = true ) => {
@@ -76,26 +79,25 @@ const handleCreate = (e: Event) => {
7679 e .preventDefault ();
7780 e .stopPropagation ();
7881
79- const parsedValue = newValue .value ?.toLocaleLowerCase ().trim ();
80- if (! parsedValue ) return ;
82+ if (! search .value ) return ;
8183
82- if (select . selectableItemActive && ( select . selectableItemActive as unknown as MultiSelectItem ). name === parsedValue ) {
83- handleItemClick ( select . selectableItemActive );
84+ if (selectedNames . value . has ( search . value ) ) {
85+ toast . info ( ' This tag was already added ' );
8486 return ;
8587 }
8688
87- if (select .selectedItems . some (( item : MultiSelectItem ) => item .name === parsedValue ) ) {
88- toast . info ( ' This tag was already added ' );
89+ if (select .selectableItemActive && ( select . selectableItemActive as unknown as MultiSelectItem ) .name === search . value ) {
90+ handleItemClick ( select . selectableItemActive );
8991 return ;
9092 }
9193
92- const selectableFound = select .selectableItems .find ((item : MultiSelectItem ) => item .name === parsedValue );
94+ const selectableFound = select .selectableItems .find ((item : MultiSelectItem ) => item .name === search . value );
9395 if (selectableFound ) {
9496 handleItemClick (selectableFound );
9597 return ;
9698 }
9799
98- emit (' createAction' , parsedValue );
100+ emit (' createAction' , search . value );
99101
100102 newValue .value = ' ' ;
101103 select .toggleSelect (false );
@@ -128,7 +130,7 @@ onMounted(() => {
128130 // haha this is inefficient
129131 select .selectedItems = [];
130132 props .options .forEach ((element ) => {
131- if (props .defaultItems .find ((item ) => item .name === element .name )) {
133+ if (props .defaultItems .some ((item ) => item .name === element .name )) {
132134 handleItemClick (element , false );
133135 }
134136 });
0 commit comments