blob: 72249d4288bb747f8aaf66d13b032eeea52c06d3 [file] [log] [blame]
<link rel="import" href="../../../../../third-party/polymer/polymer.html">
<link rel="import" href="../../../../../third-party/paper-checkbox/paper-checkbox.html">
<link rel="import" href="../../../../../third-party/paper-radio-button/paper-radio-button.html">
<link rel="import" href="../../../../../third-party/paper-radio-group/paper-radio-group.html">
<polymer-element name="p2b-grid-filter-select" attributes="multiple key label" grid-filter expects-grid-state>
<template>
<link rel="stylesheet" href="component.css">
<link rel="stylesheet" href="../common.css">
<content id="content" select="*"></content>
<div class="filter-container">
<h3>{{label}}</h3>
<template if="{{ multiple }}" bind>
<core-selector id="multiSelector" multi selectedAttribute="checked" valueattr="value" core-select="{{updateGridState}}" selected="{{ selected }}">
<template repeat="{{ item in items }}">
<paper-checkbox value="{{ item.value }}" on-change="{{ updateGridState }}" label="{{ item.label }}"></paper-checkbox>
</template>
</core-selector>
</template>
<template if="{{ !multiple }}" bind>
<paper-radio-group id="singleSelector" valueattr="value" selected="{{ selected }}">
<template repeat="{{ item in items }}">
<paper-radio-button value="{{ item.value }}" on-change="{{ updateGridState }}" label="{{ item.label }}"></paper-radio-button>
</template>
</paper-radio-group>
</template>
</div>
</template>
<script>
Polymer('p2b-grid-filter-select', {
/*
* Whether multiple items can be selected
* @type {boolean}
*/
multiple: false,
/*
* Key that will be added to filters map passed to the fetch() function of your data source.
* @type {string}
*/
key: '',
ready: function() {
// find the selected items from the child nodes
this.items = Array.prototype.slice.call(this.$.content.getDistributedNodes());
for(var i=0; i < this.items.length; i++){
if(this.items[i].checked) {
if(this.multiple) {
this.selected = this.selected || [];
this.selected.push(this.items[i].value);
} else {
this.selected = this.items[i].value;
}
}
}
},
updateGridState: function() {
if( this.multiple ) {
// quirk: we need to copy the array so change is observed. .slice() does that
this.gridState.filters[this.key] = this.$.multiSelector.selected.slice();
} else {
this.gridState.filters[this.key] = this.$.singleSelector.selected.slice();
}
}
});
</script>
</polymer-element>