diff --git a/README.md b/README.md index b0926d4..231e83b 100755 --- a/README.md +++ b/README.md @@ -291,6 +291,60 @@ A dropdown menu containing multiple options. } ``` +If you wish to use optgroups, then use the following format: + +```javascript +{ + "type": "select", + "appKey": "flavor", + "defaultValue": "grape", + "label": "Favorite Flavor", + "options": [ + { + "label": "", + "value": "" + }, + { + "label": "Fruits", + "value": [ + { + "label": "Berry", + "value": "berry" + }, + { + "label": "Grape", + "value": "grape" + }, + { + "label": "Banana", + "value": "banana" + } + ] + }, + { + "label": "Candy", + "value": [ + { + "label": "Chocolate", + "value": "chocolate" + }, + { + "label": "Cream", + "value": "cream" + }, + { + "label": "Lollipop", + "value": "lollipop" + } + ] + } + ], + "attributes": { + "required": "required" + } +} +``` + --- #### Color Picker diff --git a/dev/config.js b/dev/config.js index da97fc1..8067e4d 100644 --- a/dev/config.js +++ b/dev/config.js @@ -122,7 +122,14 @@ module.exports = [ { "label": "", "value": "" }, { "label": "Berry", "value": "berry" }, { "label": "This Option is Selected", "value": "grape" }, - { "label": "Banana", "value": "banana" } + { "label": "Banana", "value": "banana" }, + { + "label": "This is an optgroup", + "value": [ + { "label": "Peach", "value": "peach" }, + { "label": "Mango", "value": "mango" } + ] + } ], "attributes": { "required": "required" diff --git a/src/templates/components/select.tpl b/src/templates/components/select.tpl index a721604..60fe0fb 100755 --- a/src/templates/components/select.tpl +++ b/src/templates/components/select.tpl @@ -4,7 +4,15 @@ diff --git a/test/spec/components/select.js b/test/spec/components/select.js index 8ea8b2e..48f8702 100644 --- a/test/spec/components/select.js +++ b/test/spec/components/select.js @@ -21,4 +21,26 @@ describe('component - select', function() { selectItem.set('value-2'); assert.strictEqual($valueDisplay.get('innerHTML'), 'label 2'); }); + + it('sets the value display to the correct value on change when using optgroups', + function() { + var clayConfig = fixture.clayConfig([ + { + type: 'select', + defaultValue: 'value-1', + options: [ + { label: 'label 1', value: 'value-1' }, + { label: 'group', value: [ + { label: 'label 2', value: 'value-2' }, + { label: 'label 3', value: 'value-3' } + ]} + ] + } + ]); + var selectItem = clayConfig.getItemsByType('select')[0]; + var $valueDisplay = selectItem.$element.select('.value'); + assert.strictEqual($valueDisplay.get('innerHTML'), 'label 1'); + selectItem.set('value-2'); + assert.strictEqual($valueDisplay.get('innerHTML'), 'label 2'); + }); });