From b0e96d70380091a9c03b92da7d7df1c3d38c5884 Mon Sep 17 00:00:00 2001 From: Mike Robertson Date: Mon, 30 Jan 2017 14:48:55 -0500 Subject: [PATCH 1/3] use result.id instead of the index in all places that do that --- assets/scripts/src/choices.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/assets/scripts/src/choices.js b/assets/scripts/src/choices.js index 5a763ea..24de403 100644 --- a/assets/scripts/src/choices.js +++ b/assets/scripts/src/choices.js @@ -790,7 +790,7 @@ class Choices { const isSelected = result.selected ? result.selected : false; const isDisabled = result.disabled ? result.disabled : false; if (result.choices) { - this._addGroup(result, index, value, label); + this._addGroup(result, result.id, value, label); } else { this._addChoice(isSelected, isDisabled, result[value], result[label]); } @@ -1120,7 +1120,7 @@ class Choices { const isSelected = result.selected ? result.selected : false; const isDisabled = result.disabled ? result.disabled : false; if (result.choices) { - this._addGroup(result, index, value, label); + this._addGroup(result, result.id, value, label); } else { this._addChoice(isSelected, isDisabled, result[value], result[label]); } @@ -2172,8 +2172,8 @@ class Choices { this.isSearching = false; if (passedGroups && passedGroups.length) { - passedGroups.forEach((group, index) => { - this._addGroup(group, index); + passedGroups.forEach((group) => { + this._addGroup(group, group.id); }); } else { const passedOptions = Array.from(this.passedElement.options); From c3c31edc04713a505e1e02aa1fa18891e362e53d Mon Sep 17 00:00:00 2001 From: Mike Robertson Date: Tue, 31 Jan 2017 11:30:21 -0500 Subject: [PATCH 2/3] Throw an error if id field is missing from group object at addGroup function invocation. --- assets/scripts/src/choices.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/assets/scripts/src/choices.js b/assets/scripts/src/choices.js index 24de403..224c92e 100644 --- a/assets/scripts/src/choices.js +++ b/assets/scripts/src/choices.js @@ -790,6 +790,7 @@ class Choices { const isSelected = result.selected ? result.selected : false; const isDisabled = result.disabled ? result.disabled : false; if (result.choices) { + if (result.id === undefined || result.id === null) throw new Error('Group id field missing'); this._addGroup(result, result.id, value, label); } else { this._addChoice(isSelected, isDisabled, result[value], result[label]); @@ -1120,6 +1121,7 @@ class Choices { const isSelected = result.selected ? result.selected : false; const isDisabled = result.disabled ? result.disabled : false; if (result.choices) { + if (result.id === undefined || result.id === null) throw new Error('Group id field missing'); this._addGroup(result, result.id, value, label); } else { this._addChoice(isSelected, isDisabled, result[value], result[label]); @@ -2173,6 +2175,7 @@ class Choices { if (passedGroups && passedGroups.length) { passedGroups.forEach((group) => { + if (group.id === undefined || group.id === null) throw new Error('Group id field missing'); this._addGroup(group, group.id); }); } else { From cfd03b9302a0496debd39e7b44f4f25f7dadaf5f Mon Sep 17 00:00:00 2001 From: Josh Johnson Date: Sun, 5 Feb 2017 09:41:59 +0000 Subject: [PATCH 3/3] Create unique group id if none passed --- assets/scripts/src/choices.js | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/assets/scripts/src/choices.js b/assets/scripts/src/choices.js index 224c92e..7aa811f 100644 --- a/assets/scripts/src/choices.js +++ b/assets/scripts/src/choices.js @@ -790,8 +790,7 @@ class Choices { const isSelected = result.selected ? result.selected : false; const isDisabled = result.disabled ? result.disabled : false; if (result.choices) { - if (result.id === undefined || result.id === null) throw new Error('Group id field missing'); - this._addGroup(result, result.id, value, label); + this._addGroup(result, (result.id || null), value, label); } else { this._addChoice(isSelected, isDisabled, result[value], result[label]); } @@ -1121,8 +1120,7 @@ class Choices { const isSelected = result.selected ? result.selected : false; const isDisabled = result.disabled ? result.disabled : false; if (result.choices) { - if (result.id === undefined || result.id === null) throw new Error('Group id field missing'); - this._addGroup(result, result.id, value, label); + this._addGroup(result, (result.id || null), value, label); } else { this._addChoice(isSelected, isDisabled, result[value], result[label]); } @@ -1978,7 +1976,7 @@ class Choices { */ _addGroup(group, id, valueKey = 'value', labelKey = 'label') { const groupChoices = isType('Object', group) ? group.choices : Array.from(group.getElementsByTagName('OPTION')); - const groupId = id; + const groupId = id ? id : Math.floor(new Date().valueOf() * Math.random()); const isDisabled = group.disabled ? group.disabled : false; if (groupChoices) { @@ -2175,8 +2173,7 @@ class Choices { if (passedGroups && passedGroups.length) { passedGroups.forEach((group) => { - if (group.id === undefined || group.id === null) throw new Error('Group id field missing'); - this._addGroup(group, group.id); + this._addGroup(group, (group.id || null)); }); } else { const passedOptions = Array.from(this.passedElement.options);