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(selectionData, onSelectChoice) {
 | 
						|
    const html = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/dialog-select.html", selectionData)
 | 
						|
 | 
						|
    const dialogData = {
 | 
						|
      title: selectionData.title ?? selectionData.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, selectionData, 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.list.find(it => it.id == selectedId)
 | 
						|
    this.close()
 | 
						|
    if (selected) {
 | 
						|
      this.onSelectChoice(selected)
 | 
						|
    }
 | 
						|
  }
 | 
						|
} |