/** * A Dialog to prompt the user to select from a list of items. * @type {Dialog} */ export default class SelectItemsPrompt extends Dialog { constructor(items, dialogData = {}, options = {}) { super(dialogData, options); this.options.classes = ["sw5e", "dialog", "select-items-prompt", "sheet"]; /** * Store a reference to the Item entities being used * @type {Array} */ this.items = items; } activateListeners(html) { super.activateListeners(html); // render the item's sheet if its image is clicked html.on("click", ".item-image", (event) => { const item = this.items.find((feature) => feature.id === event.currentTarget.dataset?.itemId); item?.sheet.render(true); }); } /** * A constructor function which displays the AddItemPrompt app for a given Actor and Item set. * Returns a Promise which resolves to the dialog FormData once the workflow has been completed. * @param {Array} items * @param {Object} options * @param {string} options.hint - Localized hint to display at the top of the prompt * @return {Promise} - list of item ids which the user has selected */ static async create(items, {hint}) { // Render the ability usage template const html = await renderTemplate("systems/sw5e/templates/apps/select-items-prompt.html", {items, hint}); return new Promise((resolve) => { const dlg = new this(items, { title: game.i18n.localize("SW5E.SelectItemsPromptTitle"), content: html, buttons: { apply: { icon: ``, label: game.i18n.localize("SW5E.Apply"), callback: (html) => { const fd = new FormDataExtended(html[0].querySelector("form")).toObject(); const selectedIds = Object.keys(fd).filter((itemId) => fd[itemId]); resolve(selectedIds); } }, cancel: { icon: '', label: game.i18n.localize("SW5E.Skip"), callback: () => resolve([]) } }, default: "apply", close: () => resolve([]) }); dlg.render(true); }); } }