export default class DhpItem extends Item { _preCreate(data, changes, user) { super._preCreate(data, changes, user); } prepareData() { super.prepareData(); if (this.type === 'class') { // Bad. Make this better. // this.system.domains = CONFIG.daggerheart.DOMAIN.classDomainMap[Object.keys(CONFIG.daggerheart.DOMAIN.classDomainMap).find(x => x === this.name.toLowerCase())]; } } isInventoryItem() { return ['weapon', 'armor', 'miscellaneous', 'consumable'].includes(this.type); } _onUpdate(data, options, userId) { super._onUpdate(data, options, userId); } static async createDialog(data = {}, { parent = null, pack = null, ...options } = {}) { const documentName = this.metadata.name; const types = game.documentTypes[documentName].filter(t => t !== CONST.BASE_DOCUMENT_TYPE); let collection; if (!parent) { if (pack) collection = game.packs.get(pack); else collection = game.collections.get(documentName); } const folders = collection?._formatFolderSelectOptions() ?? []; const label = game.i18n.localize(this.metadata.label); const title = game.i18n.format('DOCUMENT.Create', { type: label }); const typeObjects = types.reduce((obj, t) => { const label = CONFIG[documentName]?.typeLabels?.[t] ?? t; obj[t] = { value: t, label: game.i18n.has(label) ? game.i18n.localize(label) : t }; return obj; }, {}); // Render the document creation form const html = await renderTemplate('systems/daggerheart/templates/sidebar/documentCreate.hbs', { folders, name: data.name || game.i18n.format('DOCUMENT.New', { type: label }), folder: data.folder, hasFolders: folders.length >= 1, type: data.type || CONFIG[documentName]?.defaultType || typeObjects.armor, types: { Items: [typeObjects.armor, typeObjects.weapon, typeObjects.consumable, typeObjects.miscellaneous], Character: [ typeObjects.class, typeObjects.subclass, typeObjects.ancestry, typeObjects.community, typeObjects.feature, typeObjects.domainCard ] }, hasTypes: types.length > 1 }); // Render the confirmation dialog window return Dialog.prompt({ title: title, content: html, label: title, callback: html => { const form = html[0].querySelector('form'); const fd = new FormDataExtended(form); foundry.utils.mergeObject(data, fd.object, { inplace: true }); if (!data.folder) delete data.folder; if (types.length === 1) data.type = types[0]; if (!data.name?.trim()) data.name = this.defaultName(); return this.create(data, { parent, pack, renderSheet: true }); }, rejectClose: false, options }); } }