|
import { QuickReplySet } from './QuickReplySet.js'; |
|
|
|
export class QuickReplySetLink { |
|
static from(props) { |
|
props.set = QuickReplySet.get(props.set); |
|
|
|
const instance = Object.assign(new this(), props); |
|
return instance; |
|
} |
|
|
|
|
|
|
|
|
|
set; |
|
isVisible = true; |
|
|
|
index; |
|
|
|
onUpdate; |
|
onRequestEditSet; |
|
onDelete; |
|
|
|
settingsDom; |
|
|
|
|
|
|
|
|
|
renderSettings(idx) { |
|
this.index = idx; |
|
const item = document.createElement('div'); { |
|
this.settingsDom = item; |
|
item.classList.add('qr--item'); |
|
item.setAttribute('data-order', String(this.index)); |
|
const drag = document.createElement('div'); { |
|
drag.classList.add('drag-handle'); |
|
drag.classList.add('ui-sortable-handle'); |
|
drag.textContent = '☰'; |
|
item.append(drag); |
|
} |
|
const set = document.createElement('select'); { |
|
set.classList.add('qr--set'); |
|
|
|
set.addEventListener('touchstart', (evt)=>evt.stopPropagation()); |
|
set.addEventListener('change', ()=>{ |
|
this.set = QuickReplySet.get(set.value); |
|
this.update(); |
|
}); |
|
QuickReplySet.list.toSorted((a,b)=>a.name.toLowerCase().localeCompare(b.name.toLowerCase())).forEach(qrs=>{ |
|
const opt = document.createElement('option'); { |
|
opt.value = qrs.name; |
|
opt.textContent = qrs.name; |
|
opt.selected = qrs == this.set; |
|
set.append(opt); |
|
} |
|
}); |
|
item.append(set); |
|
} |
|
const visible = document.createElement('label'); { |
|
visible.classList.add('qr--visible'); |
|
visible.title = 'Show buttons'; |
|
const cb = document.createElement('input'); { |
|
cb.type = 'checkbox'; |
|
cb.checked = this.isVisible; |
|
cb.addEventListener('click', ()=>{ |
|
this.isVisible = cb.checked; |
|
this.update(); |
|
}); |
|
visible.append(cb); |
|
} |
|
visible.append('Buttons'); |
|
item.append(visible); |
|
} |
|
const edit = document.createElement('div'); { |
|
edit.classList.add('menu_button'); |
|
edit.classList.add('menu_button_icon'); |
|
edit.classList.add('fa-solid'); |
|
edit.classList.add('fa-pencil'); |
|
edit.title = 'Edit quick reply set'; |
|
edit.addEventListener('click', ()=>this.requestEditSet()); |
|
item.append(edit); |
|
} |
|
const del = document.createElement('div'); { |
|
del.classList.add('qr--del'); |
|
del.classList.add('menu_button'); |
|
del.classList.add('menu_button_icon'); |
|
del.classList.add('fa-solid'); |
|
del.classList.add('fa-trash-can'); |
|
del.title = 'Remove quick reply set'; |
|
del.addEventListener('click', ()=>this.delete()); |
|
item.append(del); |
|
} |
|
} |
|
return this.settingsDom; |
|
} |
|
unrenderSettings() { |
|
this.settingsDom?.remove(); |
|
this.settingsDom = null; |
|
} |
|
|
|
|
|
|
|
|
|
update() { |
|
if (this.onUpdate) { |
|
this.onUpdate(this); |
|
} |
|
} |
|
requestEditSet() { |
|
if (this.onRequestEditSet) { |
|
this.onRequestEditSet(this.set); |
|
} |
|
} |
|
delete() { |
|
this.unrenderSettings(); |
|
if (this.onDelete) { |
|
this.onDelete(); |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
toJSON() { |
|
return { |
|
set: this.set.name, |
|
isVisible: this.isVisible, |
|
}; |
|
} |
|
} |
|
|