@pilotlab/data
Version:
A luxurious user experience framework, developed by your friends at Pilot.
55 lines (39 loc) • 1.78 kB
text/typescript
import { NodeType } from '@pilotlab/nodes';
import AttributeBase from '../attributeBase';
import Attributes from '../attributes';
import AttributeRoot from '../attributeRoot';
import Attribute from '../attribute';
import AttributeChangeOptions from '../attributeChangeOptions';
import AttributeEventArgs from '../attributeEventArgs';
import { AttributeChangeActions, DataType } from '../attributeEnums';
import IAttribute from '../interfaces/iAttribute';
export class AttributeSelect
extends AttributeBase<any, AttributeSelect, Attributes, AttributeRoot> {
constructor(value?:any, label?:string, key?:string, isInitialize:boolean = true) {
super(Attribute.create, null, DataType.SELECT, label, key, NodeType.COLLECTION, false);
this.selected = 'none';
if (isInitialize) this.initialize(value, DataType.SELECT, NodeType.COLLECTION);
this.attributes.isSignalChange = true;
this.attributes.changed.listen((args:AttributeEventArgs<any>) => {
if (args.node.value) {
this._singleSelect(args.node.key);
this.selected = args.node.key;
this.doChanged(AttributeChangeActions.SIGNAL_CHANGE);
}
});
}
selected:string;
select(key:string):this {
this.attributes.get(key).set(true, AttributeChangeOptions.save);
return this;
}
protected _singleSelect(key:string):void {
for (let i = 0, length = this.attributes.list.size; i < length; i++) {
const attribute:IAttribute = <IAttribute>this.attributes.list.item(i);
if (key !== attribute.key) {
attribute.set(false, AttributeChangeOptions.save);
}
}
}
} // End of class
export default AttributeSelect;