45 lines
1.3 KiB
JavaScript
45 lines
1.3 KiB
JavaScript
|
|
||
|
export class DialogSelect extends Dialog {
|
||
|
static extractIdNameImg(it) { return { id: it.id, name: it.name, img: it.img } }
|
||
|
|
||
|
static async select(selectData, onSelectChoice) {
|
||
|
const html = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/dialog-select.html", selectData)
|
||
|
|
||
|
const dialogData = {
|
||
|
title: selectData.title ?? selectData.label,
|
||
|
content: html,
|
||
|
buttons: {}
|
||
|
}
|
||
|
|
||
|
const dialogOptions = {
|
||
|
classes: ["rdd-dialog-select"],
|
||
|
width: 'fit-content',
|
||
|
height: 'fit-content',
|
||
|
'max-height': 600,
|
||
|
'z-index': 99999
|
||
|
}
|
||
|
new DialogSelect(dialogData, dialogOptions, selectData, onSelectChoice).render(true)
|
||
|
}
|
||
|
|
||
|
constructor(dialogData, dialogOptions, selectionData, onSelectChoice) {
|
||
|
super(dialogData, dialogOptions)
|
||
|
this.selectionData = selectionData
|
||
|
this.onSelectChoice = onSelectChoice
|
||
|
}
|
||
|
|
||
|
activateListeners(html) {
|
||
|
super.activateListeners(html)
|
||
|
this.html = html
|
||
|
this.html.find("li.select-choice").click(event =>
|
||
|
this.choiceSelected(this.html.find(event.currentTarget)?.data("id"))
|
||
|
)
|
||
|
}
|
||
|
|
||
|
choiceSelected(selectedId) {
|
||
|
const selected = this.selectionData.find(it => it.id == selectedId)
|
||
|
this.close()
|
||
|
if (selected) {
|
||
|
this.onSelectChoice(selected)
|
||
|
}
|
||
|
}
|
||
|
}
|