mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-03-07 22:46:12 +01:00
FEAT: add filters getters on FilterMenu class
This commit is contained in:
parent
77edc73b2c
commit
0ad4c8d71e
5 changed files with 122 additions and 51 deletions
|
|
@ -571,23 +571,7 @@ export default class CharacterSheet extends DaggerheartSheet(ActorSheetV2) {
|
|||
content: '.items-section',
|
||||
callback: this._onMenuFilterInventory.bind(this),
|
||||
target: '.filter-button',
|
||||
filters: [{
|
||||
group: "Type",
|
||||
name: "Weapons",
|
||||
filter: {
|
||||
field: "type",
|
||||
operator: foundry.applications.ux.SearchFilter.OPERATORS.EQUALS,
|
||||
value: "weapon",
|
||||
}
|
||||
}, {
|
||||
group: "Type",
|
||||
name: "Armor",
|
||||
filter: {
|
||||
field: "type",
|
||||
operator: foundry.applications.ux.SearchFilter.OPERATORS.EQUALS,
|
||||
value: "armor",
|
||||
}
|
||||
}],
|
||||
filters: FilterMenu.invetoryFilters,
|
||||
},
|
||||
{
|
||||
key: 'loadout',
|
||||
|
|
@ -595,7 +579,7 @@ export default class CharacterSheet extends DaggerheartSheet(ActorSheetV2) {
|
|||
content: '.items-section',
|
||||
callback: this._onMenuFilterLoadout.bind(this),
|
||||
target: '.filter-button',
|
||||
filters: [],
|
||||
filters: FilterMenu.cardsFilters,
|
||||
}
|
||||
];
|
||||
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ export default class FilterMenu extends foundry.applications.ux.ContextMenu {
|
|||
await super.render(target, { ...options, animate: false });
|
||||
|
||||
// Create menu structure
|
||||
const menu = document.createElement("div");
|
||||
const menu = document.createElement("menu");
|
||||
menu.className = "filter-menu";
|
||||
|
||||
// Group items by their group property
|
||||
|
|
@ -158,4 +158,87 @@ export default class FilterMenu extends foundry.applications.ux.ContextMenu {
|
|||
this.callback(event, this.contentElement, filters);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate and return a sorted array of inventory filters.
|
||||
* @returns {Array<Object>} An array of filter objects, sorted by name within each group.
|
||||
*/
|
||||
static get invetoryFilters() {
|
||||
const { OPERATORS } = foundry.applications.ux.SearchFilter;
|
||||
|
||||
const typesFilters = Object.entries(CONFIG.Item.dataModels)
|
||||
.filter(([, { metadata }]) => metadata.isInventoryItem)
|
||||
.map(([type, { metadata }]) => ({
|
||||
group: game.i18n.localize("Type"),
|
||||
name: game.i18n.localize(metadata.label),
|
||||
filter: {
|
||||
field: "type",
|
||||
operator: OPERATORS.EQUALS,
|
||||
value: type
|
||||
}
|
||||
}));
|
||||
|
||||
const burdenFilter = Object.values(CONFIG.daggerheart.GENERAL.burden).map(({ value, label }) => ({
|
||||
group: game.i18n.localize("DAGGERHEART.Sheets.Weapon.Burden"),
|
||||
name: game.i18n.localize(label),
|
||||
filter: {
|
||||
field: "system.burden",
|
||||
operator: OPERATORS.EQUALS,
|
||||
value: value
|
||||
}
|
||||
}));
|
||||
|
||||
const damageTypeFilter = Object.values(CONFIG.daggerheart.GENERAL.damageTypes).map(({ id, abbreviation }) => ({
|
||||
group: "Damage Type", //TODO localize
|
||||
name: game.i18n.localize(abbreviation),
|
||||
filter: {
|
||||
field: "system.damage.type",
|
||||
operator: OPERATORS.EQUALS,
|
||||
value: id
|
||||
}
|
||||
}));
|
||||
|
||||
|
||||
return [
|
||||
...game.i18n.sortObjects(typesFilters, "name"),
|
||||
...game.i18n.sortObjects(burdenFilter, "name"),
|
||||
...game.i18n.sortObjects(damageTypeFilter, "name"),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate and return a sorted array of inventory filters.
|
||||
* @returns {Array<Object>} An array of filter objects, sorted by name within each group.
|
||||
*/
|
||||
static get cardsFilters() {
|
||||
const { OPERATORS } = foundry.applications.ux.SearchFilter;
|
||||
|
||||
const typesFilters = Object.values(CONFIG.daggerheart.DOMAIN.cardTypes)
|
||||
.map(({ id, label }) => ({
|
||||
group: game.i18n.localize("Type"),
|
||||
name: game.i18n.localize(label),
|
||||
filter: {
|
||||
field: "system.type",
|
||||
operator: OPERATORS.EQUALS,
|
||||
value: id
|
||||
}
|
||||
}));
|
||||
|
||||
const domainFilter = Object.values(CONFIG.daggerheart.DOMAIN.domains).map(({id, label}) => ({
|
||||
group: game.i18n.localize("DAGGERHEART.Sheets.DomainCard.Domain"),
|
||||
name: game.i18n.localize(label),
|
||||
filter: {
|
||||
field: "system.domain",
|
||||
operator: OPERATORS.EQUALS,
|
||||
value: id
|
||||
}
|
||||
}))
|
||||
|
||||
const sort = (arr) => game.i18n.sortObjects(arr, "name");
|
||||
|
||||
return [
|
||||
...sort(typesFilters),
|
||||
...sort(domainFilter),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue