import { BaseItem } from './base-item'; export class SelectorItem extends BaseItem { constructor(id, title, items) { super(id, title); this.items = items; this.entries = []; } getDOMNode() { this.container = document.createElement('div'); this.listContainer = document.createElement('ul'); this.label = document.createElement('legend'); this.fieldSet = document.createElement('fieldset'); this.fieldSet.setAttribute('class', 'radiogroup'); this.fieldSet.id = `fs_selector_${this.id}`; const name = document.createTextNode(this.title); this.label.appendChild(name); this.fieldSet.appendChild(this.label); this.buildEntries(); this.container.appendChild(this.fieldSet); this.container.addEventListener('focus', this.onFocus.bind(this)); return this.container; } buildEntries() { this.items.forEach((item, index) => { const node = document.createElement('input'); node.type = 'radio'; node.id = `${this.id}_${item.id}`; node.name = this.id; node.value = item.id || `${index}`; node.addEventListener('focus', this.onItemFocus.bind(this)); node.addEventListener('select', this.onSelectItem.bind(this)); node.addEventListener('change', this.onChangeItem.bind(this)); this.entries.push(node); const label = document.createElement('label'); label.setAttribute('for', `${this.id}_${item.id}`); label.textContent = item.title; this.fieldSet.append(node); this.fieldSet.append(label); }); } onItemFocus(event) { console.log(`Item focused: `, event); this.emit('focus', this.id); } getContents() { return this.currentValue; } onSelectItem(event) { } onChangeItem(event) { const node = document.querySelector(`input[name = "${this.id}"]:checked`); this.currentValue = this.items.find((item) => `${this.id}_${item.id}` === node.id); this.emit('update', { type: 'selector', value: this.currentValue }); } focus() { const node = document.querySelector(`input[name = "${this.id}"]:checked`) || this.entries[0]; node.focus(); } }