Files
Foundry-VTT-Docker/resources/app/client/apps/forms/default-sheets-config.js

71 lines
2.5 KiB
JavaScript
Raw Normal View History

2025-01-04 00:34:03 +01:00
/**
* An Application responsible for allowing GMs to configure the default sheets that are used for the Documents in their
* world.
*/
class DefaultSheetsConfig extends PackageConfiguration {
/** @inheritdoc */
static get defaultOptions() {
return foundry.utils.mergeObject(super.defaultOptions, {
title: game.i18n.localize("SETTINGS.DefaultSheetsL"),
id: "default-sheets-config",
categoryTemplate: "templates/sidebar/apps/default-sheets-config.html",
submitButton: true
});
}
/* -------------------------------------------- */
/** @inheritdoc */
_prepareCategoryData() {
let total = 0;
const categories = [];
for ( const cls of Object.values(foundry.documents) ) {
const documentName = cls.documentName;
if ( !cls.hasTypeData ) continue;
const subTypes = game.documentTypes[documentName].filter(t => t !== CONST.BASE_DOCUMENT_TYPE);
if ( !subTypes.length ) continue;
const title = game.i18n.localize(cls.metadata.labelPlural);
categories.push({
title,
id: documentName,
count: subTypes.length,
subTypes: subTypes.map(t => {
const typeLabel = CONFIG[documentName].typeLabels?.[t];
const name = typeLabel ? game.i18n.localize(typeLabel) : t;
const {defaultClasses, defaultClass} = DocumentSheetConfig.getSheetClassesForSubType(documentName, t);
return {type: t, name, defaultClasses, defaultClass};
})
});
total += subTypes.length;
}
return {categories, total};
}
/* -------------------------------------------- */
/** @inheritdoc */
async _updateObject(event, formData) {
const current = game.settings.get("core", "sheetClasses");
const settings = Object.entries(formData).reduce((obj, [name, sheetId]) => {
const [documentName, ...rest] = name.split(".");
const subType = rest.join(".");
const cfg = CONFIG[documentName].sheetClasses?.[subType]?.[sheetId];
// Do not create an entry in the settings object if the class is already the default.
if ( cfg?.default && !current[documentName]?.[subType] ) return obj;
const entry = obj[documentName] ??= {};
entry[subType] = sheetId;
return obj;
}, {});
return game.settings.set("core", "sheetClasses", settings);
}
/* -------------------------------------------- */
/** @inheritdoc */
async _onResetDefaults(event) {
event.preventDefault();
await game.settings.set("core", "sheetClasses", {});
return SettingsConfig.reloadConfirm({world: true});
}
}