Skip to content
This repository has been archived by the owner on Jun 17, 2021. It is now read-only.

Commit

Permalink
Work on making iron-selector DDAU. 🤠
Browse files Browse the repository at this point in the history
  • Loading branch information
dunnkers committed Jan 2, 2017
1 parent 178a791 commit 4d01c4b
Show file tree
Hide file tree
Showing 4 changed files with 109 additions and 27 deletions.
58 changes: 40 additions & 18 deletions addon/components/iron-selector.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,37 +4,57 @@ const { computed } = Ember;
let IronSelector = Ember.Component.extend({
attributeBindings: [
'selected',
'role'
'role',
'attrForSelected',
'multi'
],

selectedItem: computed({
get() {
Ember.get(this, 'selectedItem');
get(key) {
// return Ember.get(this, key);
},

set(key, value) {
if (!!this.element) {
this.setBoundValue(value);
// if (!!this.element) {
// this.setBoundValue(value);
// }
let idx = this.getItemIndex();

if (this.getSelectedIndex() !== idx && idx !== -1) {
Ember.set(this, 'selected', idx);
}

return value;
}
}),

setBoundValue(value) {
let selected = this.getSelectedIndex();
let itemIndex = this.getItemIndex(value);

if (selected !== itemIndex) {
this.element.selectIndex(itemIndex);
// selected: computed({
// get(key) {
// return Ember.get(this, `_${key}`);
// },
//
// set(key, value) {
// Ember.set(this, `_${key}`, value);
// }
// }),
//
// setBoundValue(value) {
// let selected = this.getSelectedIndex();
// let itemIndex = this.getItemIndex(value);
//
// if (selected !== itemIndex) {
// this.element.selectIndex(itemIndex);
// }
// },
//
getItemIndex() {
if (!!this.get('items') && !!this.get('selectedItem')) {
return this.get('items').indexOf(this.get('selectedItem'));
} else {
return -1;
}
},

getItemIndex(item) {
// FIXME this might prevent functionality when not using items positional.
return this.get('items').indexOf(item);
},

getSelectedIndex() {
let el = this.element;

Expand Down Expand Up @@ -62,8 +82,10 @@ let IronSelector = Ember.Component.extend({
this.set('selectedItem', selectedItem);
});

if (!!this.get('selectedItem')) {
this.setBoundValue(this.get('selectedItem'));
// initial selection
if (!!this.get('items') && !!this.get('selectedItem')) {
let idx = this.get('items').indexOf(this.get('selectedItem'));
Ember.set(this, 'selected', idx);
}
}
});
Expand Down
6 changes: 5 additions & 1 deletion tests/dummy/app/components/snippets/paper-listbox.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
import Ember from 'ember';

export default Ember.Component.extend({
// BEGIN-SNIPPET block-usage
items: [ 'Dog', 'Cat', 'Elephant', 'Giraffe' ],
blockSelected: 'Cat'
blockSelected: 'Cat',
// END-SNIPPET block-usage

selectedAnimal: 2
});
60 changes: 53 additions & 7 deletions tests/dummy/app/templates/components/snippets/paper-listbox.hbs
Original file line number Diff line number Diff line change
@@ -1,14 +1,43 @@
Block usage:
{{#paper-listbox items selectedItem=blockSelected as |item|}}
<paper-item>{{item}}</paper-item>
{{/paper-listbox}}
<p>
Selected = {{blockSelected}}
</p>
<p>Block usage:</p>

{{#element-example name="block-usage" as |ex|}}
{{#ex.code}}
{{!-- BEGIN-SNIPPET block-usage --}}
{{#paper-listbox items selectedItem=blockSelected as |item|}}
<paper-item>{{item}}</paper-item>
{{/paper-listbox}}
{{!-- END-SNIPPET --}}
{{/ex.code}}

{{#ex.result}}
{{!-- BEGIN-SNIPPET block-usage-result --}}
Selected = {{blockSelected}}
{{!-- END-SNIPPET --}}
{{/ex.result}}
{{/element-example}}

<p>Another listbox to prove the values being bound.</p>

{{#paper-listbox items selectedItem=blockSelected as |item|}}
<paper-item>{{item}}</paper-item>
{{/paper-listbox}}

<p>Multi select:</p>

{{#element-example name="multi" as |ex|}}
{{#ex.code}}
{{!-- BEGIN-SNIPPET multi --}}
{{paper-listbox items selectedItem=multiSelected multi=true}}
{{!-- END-SNIPPET --}}
{{/ex.code}}

{{#ex.result}}
{{!-- BEGIN-SNIPPET multi-result --}}
Selected = {{multiSelected}}
{{!-- END-SNIPPET --}}
{{/ex.result}}
{{/element-example}}

Non block usage:
{{paper-listbox items selectedItem=nonBlockSelected}}
<p>
Expand All @@ -24,3 +53,20 @@ Without a positional param:
<p>
Selected = {{noPositionalSelected}}
</p>

With other attribute:
{{#paper-listbox selectedItem=withNameAttribute selected="b"
attrForSelected="name"}}
<paper-item name="a">Item a</paper-item>
<paper-item name="b">Item b</paper-item>
<paper-item name="c">Item c</paper-item>
{{/paper-listbox}}
<p>
Selected = {{withNameAttribute}}
</p>

Using just index:
{{paper-listbox items selected=selectedAnimal}}
<p>
Selected = {{selectedAnimal}}
</p>
Original file line number Diff line number Diff line change
@@ -1,7 +1,17 @@
{{#paper-toggle-button checked=toggled}}
{{#paper-toggle-button update=(action (mut toggled))}}
Toggle
{{/paper-toggle-button}}

<p>
Toggled: {{toggled}}
</p>

<p>We could also use a traditional two-way binding.</p>

{{#paper-toggle-button checked=onoff}}
On/Off
{{/paper-toggle-button}}

<p>
On: {{onoff}}
</p>

0 comments on commit 4d01c4b

Please sign in to comment.