Remove all items refactoring

This commit is contained in:
Josh Johnson 2016-04-12 14:54:07 +01:00
parent 673e937327
commit 1f0b0e467f
2 changed files with 46 additions and 41 deletions

File diff suppressed because one or more lines are too long

View file

@ -118,7 +118,8 @@ export class Choices {
* @return * @return
*/ */
onKeyDown(e) { onKeyDown(e) {
const storeValues = this.store.getState(); const state = this.store.getState();
const items = state.items;
const ctrlDownKey = e.ctrlKey || e.metaKey; const ctrlDownKey = e.ctrlKey || e.metaKey;
const deleteKey = 8 || 46; const deleteKey = 8 || 46;
const enterKey = 13; const enterKey = 13;
@ -154,7 +155,7 @@ export class Choices {
// If no duplicates are allowed, and the value already exists // If no duplicates are allowed, and the value already exists
// in the array, don't update // in the array, don't update
if (this.options.allowDuplicates === false && this.passedElement.value) { if (this.options.allowDuplicates === false && this.passedElement.value) {
canUpdate = !storeValues.some((item) => { canUpdate = !items.some((item) => {
return item.value === value; return item.value === value;
}); });
} }
@ -194,18 +195,18 @@ export class Choices {
let lastItem = currentListItems[currentListItems.length - 1]; let lastItem = currentListItems[currentListItems.length - 1];
let inputIsFocussed = this.input === document.activeElement; let inputIsFocussed = this.input === document.activeElement;
if(lastItem && !this.options.editItems && inputIsFocussed && this.options.removeItems) { if(currentListItems && lastItem && !this.options.editItems && inputIsFocussed && this.options.removeItems) {
this.selectItem(lastItem); this.selectItem(lastItem);
} }
// If editing the last item is allowed and there is a last item and // If editing the last item is allowed and there is a last item and
// there are not other selected items (minus the last item), we can edit // there are not other selected items (minus the last item), we can edit
// the item value. Otherwise if we can remove items, remove all items // the item value. Otherwise if we can remove items, remove all items
if(this.options.removeItems && this.options.editItems && lastItem && selectedItems.length === 0 && inputIsFocussed) { if(currentListItems && this.options.removeItems && this.options.editItems && lastItem && selectedItems.length === 0 && inputIsFocussed) {
this.input.value = lastItem.innerHTML; this.input.value = lastItem.innerHTML;
this.removeItem(lastItem); this.removeItem(lastItem);
} else { } else {
this.removeAllItems(); this.removeAllItems(true);
} }
} }
}; };
@ -385,6 +386,7 @@ export class Choices {
* @param * @param
*/ */
removeItem(itemOrValue, callback = this.options.callbackOnRemoveItem) { removeItem(itemOrValue, callback = this.options.callbackOnRemoveItem) {
if(!itemOrValue) { if(!itemOrValue) {
console.error('removeItem: No item or value was passed to be removed'); console.error('removeItem: No item or value was passed to be removed');
return; return;
@ -426,21 +428,24 @@ export class Choices {
/** /**
* Remove all items from array * Remove all items from array
* @param {Array} items Items to remove from store * @param {Boolean} selectedOnly Optionally remove only selected items
* @return * @return
*/ */
removeAllItems() { removeAllItems(selectedOnly = false) {
const items = this.store.getState().items; let state = this.store.getState();
let items = state.items;
console.log(items); items.forEach((item) => {
if(selectedOnly) {
for (let i = 0; i < items.length; i++) { if(item.selected && item.active && item.value){
const item = items[i]; this.removeItem(item.value);
}
if (item.selected) { } else {
this.removeItem(item.value); if(item.active && item.value) {
this.removeItem(item.value);
}
} }
}; });
} }
toggleDropdown() { toggleDropdown() {
@ -731,57 +736,57 @@ document.addEventListener('DOMContentLoaded', () => {
delimiter: ' ', delimiter: ' ',
editItems: true, editItems: true,
maxItems: 5, maxItems: 5,
// callbackOnRemoveItem: function(value) { callbackOnRemoveItem: function(value) {
// console.log(value); console.log(value);
// }, },
// callbackOnAddItem: function(item, value) { callbackOnAddItem: function(item, value) {
// console.log(item, value); console.log(item, value);
// }, },
// callbackOnRender: function(items) { callbackOnRender: function(items) {
// console.log(items); console.log(items);
// } }
}); });
let choices2 = new Choices('#choices-2', { let choices2 = new Choices('#choices-2', {
allowDuplicates: false, allowDuplicates: false,
editItems: true, editItems: true,
// callbackOnRender: function(items) { callbackOnRender: function(items) {
// console.log(items); console.log(items);
// } }
}); });
let choices3 = new Choices('#choices-3', { let choices3 = new Choices('#choices-3', {
allowDuplicates: false, allowDuplicates: false,
editItems: true, editItems: true,
regexFilter: /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/, regexFilter: /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
// callbackOnRender: function(items) { callbackOnRender: function(items) {
// console.log(items); console.log(items);
// } }
}); });
let choices4 = new Choices('#choices-4', { let choices4 = new Choices('#choices-4', {
addItems: false, addItems: false,
removeItems: false, removeItems: false,
// callbackOnRender: function(items) { callbackOnRender: function(items) {
// console.log(items); console.log(items);
// } }
}); });
let choices5 = new Choices('#choices-5', { let choices5 = new Choices('#choices-5', {
prependValue: 'item-', prependValue: 'item-',
appendValue: `-${Date.now()}`, appendValue: `-${Date.now()}`,
// callbackOnRender: function(items) { callbackOnRender: function(items) {
// console.log(items); console.log(items);
// } }
}); });
choices5.removeAllItems(); choices5.removeAllItems();
let choices6 = new Choices('#choices-6', { let choices6 = new Choices('#choices-6', {
items: ['josh@joshuajohnson.co.uk', 'joe@bloggs.co.uk'], items: ['josh@joshuajohnson.co.uk', 'joe@bloggs.co.uk'],
// callbackOnRender: function(items) { callbackOnRender: function(items) {
// console.log(items); console.log(items);
// } }
}); });
let choices7 = new Choices('#choices-7', { let choices7 = new Choices('#choices-7', {