mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-01-15 21:21:08 +01:00
fix item list columns and pretier itemBrowser.mjs (#729)
This commit is contained in:
parent
7f3a83564b
commit
1c000c7cfe
2 changed files with 44 additions and 44 deletions
|
|
@ -17,7 +17,7 @@ export class ItemBrowser extends HandlebarsApplicationMixin(ApplicationV2) {
|
||||||
this.config = CONFIG.DH.ITEMBROWSER.compendiumConfig;
|
this.config = CONFIG.DH.ITEMBROWSER.compendiumConfig;
|
||||||
this.presets = options.presets;
|
this.presets = options.presets;
|
||||||
|
|
||||||
if(this.presets?.compendium && this.presets?.folder)
|
if (this.presets?.compendium && this.presets?.folder)
|
||||||
ItemBrowser.selectFolder.call(this, null, null, this.presets.compendium, this.presets.folder);
|
ItemBrowser.selectFolder.call(this, null, null, this.presets.compendium, this.presets.folder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -26,7 +26,6 @@ export class ItemBrowser extends HandlebarsApplicationMixin(ApplicationV2) {
|
||||||
id: 'itemBrowser',
|
id: 'itemBrowser',
|
||||||
classes: ['daggerheart', 'dh-style', 'dialog', 'compendium-browser'],
|
classes: ['daggerheart', 'dh-style', 'dialog', 'compendium-browser'],
|
||||||
tag: 'div',
|
tag: 'div',
|
||||||
// title: 'Item Browser',
|
|
||||||
window: {
|
window: {
|
||||||
frame: true,
|
frame: true,
|
||||||
title: 'Compendium Browser',
|
title: 'Compendium Browser',
|
||||||
|
|
@ -41,9 +40,8 @@ export class ItemBrowser extends HandlebarsApplicationMixin(ApplicationV2) {
|
||||||
sortList: this.sortList
|
sortList: this.sortList
|
||||||
},
|
},
|
||||||
position: {
|
position: {
|
||||||
top: 330,
|
left: 100,
|
||||||
left: 120,
|
width: 850,
|
||||||
width: 800,
|
|
||||||
height: 600
|
height: 600
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -88,16 +86,14 @@ export class ItemBrowser extends HandlebarsApplicationMixin(ApplicationV2) {
|
||||||
|
|
||||||
/** @inheritDoc */
|
/** @inheritDoc */
|
||||||
async _preFirstRender(context, options) {
|
async _preFirstRender(context, options) {
|
||||||
if(context.presets?.render?.noFolder || context.presets?.render?.lite)
|
if (context.presets?.render?.noFolder || context.presets?.render?.lite) options.position.width = 600;
|
||||||
options.position.width = 600;
|
|
||||||
|
|
||||||
await super._preFirstRender(context, options);
|
await super._preFirstRender(context, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @inheritDoc */
|
/** @inheritDoc */
|
||||||
async _preRender(context, options) {
|
async _preRender(context, options) {
|
||||||
|
if (context.presets?.render?.noFolder || context.presets?.render?.lite)
|
||||||
if(context.presets?.render?.noFolder || context.presets?.render?.lite)
|
|
||||||
options.parts.splice(options.parts.indexOf('sidebar'), 1);
|
options.parts.splice(options.parts.indexOf('sidebar'), 1);
|
||||||
|
|
||||||
await super._preRender(context, options);
|
await super._preRender(context, options);
|
||||||
|
|
@ -110,18 +106,17 @@ export class ItemBrowser extends HandlebarsApplicationMixin(ApplicationV2) {
|
||||||
this._createSearchFilter();
|
this._createSearchFilter();
|
||||||
this._createFilterInputs();
|
this._createFilterInputs();
|
||||||
this._createDragProcess();
|
this._createDragProcess();
|
||||||
|
|
||||||
if(context.presets?.render?.lite)
|
|
||||||
this.element.classList.add('lite');
|
|
||||||
|
|
||||||
if(context.presets?.render?.noFolder)
|
|
||||||
this.element.classList.add('no-folder');
|
|
||||||
|
|
||||||
if(context.presets?.render?.noFilter)
|
|
||||||
this.element.classList.add('no-filter');
|
|
||||||
|
|
||||||
if(this.presets?.filter) {
|
if (context.presets?.render?.lite) this.element.classList.add('lite');
|
||||||
Object.entries(this.presets.filter).forEach(([k,v]) => this.fieldFilter.find(c => c.name === k).value = v.value);
|
|
||||||
|
if (context.presets?.render?.noFolder) this.element.classList.add('no-folder');
|
||||||
|
|
||||||
|
if (context.presets?.render?.noFilter) this.element.classList.add('no-filter');
|
||||||
|
|
||||||
|
if (this.presets?.filter) {
|
||||||
|
Object.entries(this.presets.filter).forEach(
|
||||||
|
([k, v]) => (this.fieldFilter.find(c => c.name === k).value = v.value)
|
||||||
|
);
|
||||||
await this._onInputFilterBrowser();
|
await this._onInputFilterBrowser();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -198,6 +193,7 @@ export class ItemBrowser extends HandlebarsApplicationMixin(ApplicationV2) {
|
||||||
|
|
||||||
formatLabel(item, field) {
|
formatLabel(item, field) {
|
||||||
const property = foundry.utils.getProperty(item, field.key);
|
const property = foundry.utils.getProperty(item, field.key);
|
||||||
|
if (Array.isArray(property)) property.join(', ');
|
||||||
if (typeof field.format !== 'function') return property ?? '-';
|
if (typeof field.format !== 'function') return property ?? '-';
|
||||||
return field.format(property);
|
return field.format(property);
|
||||||
}
|
}
|
||||||
|
|
@ -315,19 +311,18 @@ export class ItemBrowser extends HandlebarsApplicationMixin(ApplicationV2) {
|
||||||
async _onInputFilterBrowser(event) {
|
async _onInputFilterBrowser(event) {
|
||||||
this.#filteredItems.browser.input.clear();
|
this.#filteredItems.browser.input.clear();
|
||||||
|
|
||||||
if(event) this.fieldFilter.find(f => f.name === event.target.name).value = event.target.value;
|
if (event) this.fieldFilter.find(f => f.name === event.target.name).value = event.target.value;
|
||||||
|
|
||||||
for (const li of this.element.querySelectorAll('.item-container')) {
|
for (const li of this.element.querySelectorAll('.item-container')) {
|
||||||
const itemUUID = li.dataset.itemUuid,
|
const itemUUID = li.dataset.itemUuid,
|
||||||
item = this.items.find(i => i.uuid === itemUUID);
|
item = this.items.find(i => i.uuid === itemUUID);
|
||||||
|
|
||||||
if(!item) continue;
|
if (!item) continue;
|
||||||
|
|
||||||
const matchesMenu =
|
const matchesMenu =
|
||||||
this.fieldFilter.length === 0 ||
|
this.fieldFilter.length === 0 ||
|
||||||
this.fieldFilter.every(f => (
|
this.fieldFilter.every(
|
||||||
!f.value && f.value !== false) ||
|
f => (!f.value && f.value !== false) || ItemBrowser.evaluateFilter(item, this.createFilterData(f))
|
||||||
ItemBrowser.evaluateFilter(item, this.createFilterData(f))
|
|
||||||
);
|
);
|
||||||
if (matchesMenu) this.#filteredItems.browser.input.add(item.id);
|
if (matchesMenu) this.#filteredItems.browser.input.add(item.id);
|
||||||
|
|
||||||
|
|
@ -335,21 +330,21 @@ export class ItemBrowser extends HandlebarsApplicationMixin(ApplicationV2) {
|
||||||
li.hidden = !(search.has(item.id) && matchesMenu);
|
li.hidden = !(search.has(item.id) && matchesMenu);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Foundry evaluateFilter doesn't allow you to match if filter values are included into item data
|
* Foundry evaluateFilter doesn't allow you to match if filter values are included into item data
|
||||||
* @param {*} obj
|
* @param {*} obj
|
||||||
* @param {*} filter
|
* @param {*} filter
|
||||||
*/
|
*/
|
||||||
static evaluateFilter(obj, filter) {
|
static evaluateFilter(obj, filter) {
|
||||||
let docValue = foundry.utils.getProperty(obj, filter.field);
|
let docValue = foundry.utils.getProperty(obj, filter.field);
|
||||||
let filterValue = filter.value;
|
let filterValue = filter.value;
|
||||||
switch (filter.operator) {
|
switch (filter.operator) {
|
||||||
case "contains2":
|
case 'contains2':
|
||||||
filterValue = Array.isArray(filterValue) ? filterValue : [filterValue];
|
filterValue = Array.isArray(filterValue) ? filterValue : [filterValue];
|
||||||
docValue = Array.isArray(docValue) ? docValue : [docValue];
|
docValue = Array.isArray(docValue) ? docValue : [docValue];
|
||||||
return docValue.some(dv => filterValue.includes(dv));
|
return docValue.some(dv => filterValue.includes(dv));
|
||||||
case "contains3":
|
case 'contains3':
|
||||||
return docValue.some(f => f.value === filterValue);
|
return docValue.some(f => f.value === filterValue);
|
||||||
default:
|
default:
|
||||||
return foundry.applications.ux.SearchFilter.evaluateFilter(obj, filter);
|
return foundry.applications.ux.SearchFilter.evaluateFilter(obj, filter);
|
||||||
|
|
@ -373,30 +368,33 @@ export class ItemBrowser extends HandlebarsApplicationMixin(ApplicationV2) {
|
||||||
this.render({ force: true });
|
this.render({ force: true });
|
||||||
}
|
}
|
||||||
|
|
||||||
static getFolderConfig(folder, property = "columns") {
|
static getFolderConfig(folder, property = 'columns') {
|
||||||
if(!folder) return [];
|
if (!folder) return [];
|
||||||
return folder[property] ?? CONFIG.DH.ITEMBROWSER.typeConfig[folder.listType]?.[property] ?? [];
|
return folder[property] ?? CONFIG.DH.ITEMBROWSER.typeConfig[folder.listType]?.[property] ?? [];
|
||||||
}
|
}
|
||||||
|
|
||||||
static sortList(_, target) {
|
static sortList(_, target) {
|
||||||
const key = target.dataset.sortKey,
|
const key = target.dataset.sortKey,
|
||||||
type = !target.dataset.sortType || target.dataset.sortType === "DESC" ? "ASC" : "DESC",
|
type = !target.dataset.sortType || target.dataset.sortType === 'DESC' ? 'ASC' : 'DESC',
|
||||||
itemListContainer = target.closest(".compendium-results").querySelector(".item-list"),
|
itemListContainer = target.closest('.compendium-results').querySelector('.item-list'),
|
||||||
itemList = itemListContainer.querySelectorAll(".item-container");
|
itemList = itemListContainer.querySelectorAll('.item-container');
|
||||||
|
|
||||||
target.closest(".item-list-header").querySelectorAll('[data-sort-key]').forEach(b => b.dataset.sortType = "");
|
target
|
||||||
|
.closest('.item-list-header')
|
||||||
|
.querySelectorAll('[data-sort-key]')
|
||||||
|
.forEach(b => (b.dataset.sortType = ''));
|
||||||
target.dataset.sortType = type;
|
target.dataset.sortType = type;
|
||||||
|
|
||||||
const newOrder = [...itemList].reverse().sort((a, b) => {
|
const newOrder = [...itemList].reverse().sort((a, b) => {
|
||||||
const aProp = a.querySelector(`[data-item-key="${key}"]`),
|
const aProp = a.querySelector(`[data-item-key="${key}"]`),
|
||||||
bProp = b.querySelector(`[data-item-key="${key}"]`)
|
bProp = b.querySelector(`[data-item-key="${key}"]`);
|
||||||
if(type === "DESC") {
|
if (type === 'DESC') {
|
||||||
return aProp.innerText < bProp.innerText ? 1 : -1;
|
return aProp.innerText < bProp.innerText ? 1 : -1;
|
||||||
} else {
|
} else {
|
||||||
return aProp.innerText > bProp.innerText ? 1 : -1;
|
return aProp.innerText > bProp.innerText ? 1 : -1;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
itemListContainer.replaceChildren(...newOrder);
|
itemListContainer.replaceChildren(...newOrder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -227,14 +227,16 @@
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
||||||
> * {
|
> * {
|
||||||
flex: 1;
|
flex: 2.5;
|
||||||
|
text-align: center;
|
||||||
}
|
}
|
||||||
.item-list-img {
|
.item-list-img {
|
||||||
width: 40px;
|
width: 40px;
|
||||||
flex: unset;
|
flex: unset;
|
||||||
}
|
}
|
||||||
.item-list-name {
|
.item-list-name {
|
||||||
flex-grow: 3 !important;
|
flex-grow: 3;
|
||||||
|
text-align: start;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue