keyValueSelector
Syntax
monster.ui.keyValueSelector(args)
Parameters
args
is a mandatory Object
parameter with the following properties:
Key | Description | Type | Default | Required |
---|
isEditable | Whether new categories can be added (set to true when choices is empty/not provided). | Boolean | false | false |
existing | Map existing categories to existing items (generated form choices when not provided). | Object | | false |
existing[] | List of existing items per category. | Array(String()) | | true |
choices | List of categories/items to render. | Array (#/choice) | | false |
i18n | Custom internationalization labels. | Object (#/i18n) | | false |
normalizer | Used to normalize user input for comparison against existing category/item IDs. | Function | lodash#snakeCase | false |
onSelect | Callback on select action, invoked with two parameters exposing the category/item selected: (caterogy, item) | Function | | false |
choice
Key | Description | Type | Default | Required |
---|
id | Category identifier. | String | | true |
label | Category label. | String | | true |
isEditable | Whether new items can be added for this category. | Boolean | false | false |
items | Category label. | Array | | true |
items[] | | Object | | true |
items[].id | Item identifier. | String | | true |
items[].label | Item label. | String | | true |
i18n
Key | Description | Type | Default | Required |
---|
title | Dialog title label. | String | Select a pair of category/item | false |
categories | Categories title label | String | Categories | false |
items | Items title label. | String | Items | false |
newCategory | New category radio label. | String | New Category | false |
newItem | New item radio label. | String | New Item | false |
categoryName | New category input placeholder. | String | Category Name | false |
itemName | New item input placeholder. | String | Item Name | false |
cancel | Cancel button label. | String | Cancel | false |
select | Select button label. | String | Select | false |
Description
Example
var existing = {
fruits: [
'apple', 'peach', 'pear', 'clementine', 'banana'
],
vegetables: [
'lettuce', 'aspargus', 'chard', 'spinach', 'broccoli'
],
meats: [
'veal', 'bison', 'chicken', 'beef', 'pork'
]
};
monster.ui.keyValueSelector({
onSelect: function(key, value) {
window.alert('category: ' + key + '\nitem: ' + value);
},
isEditable: true,
choices: _
.chain(existing)
.keys()
.map(function(category) {
return {
id: category,
label: _.startCase(category),
isEditable: true,
items: _
.chain(existing)
.get(category)
.map(function(item) {
return {
id: item,
label: _.startCase(item)
};
})
.sortBy('label')
.value()
};
})
.sortBy('label')
.value()
});