From 7a67cb7ceab451e621c452d0b0da59aa4b7ffe7f Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Fri, 20 Jan 2023 03:25:40 +0100 Subject: [PATCH] Prise en compte des milieux MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Les filtrages par milieux prennent en compte la rareté/fréquence du milieu --- module/environnement.js | 1 + module/item.js | 27 ++- module/item/raretes.js | 47 +--- module/item/sheet-base-inventaire.js | 9 +- module/migrations.js | 2 +- module/tirage/fenetre-recherche-tirage.js | 209 +++++++++++------- templates/tirage/fenetre-recherche-tirage.hbs | 34 ++- 7 files changed, 182 insertions(+), 147 deletions(-) diff --git a/module/environnement.js b/module/environnement.js index 91b412fe..2cb70e9c 100644 --- a/module/environnement.js +++ b/module/environnement.js @@ -12,6 +12,7 @@ export class Environnement { name: COMPENDIUMS_RECHERCHE, default: [ SystemCompendiums.getCompendium('faune-flore-mineraux'), + SystemCompendiums.getCompendium('meditations-et-ecrits'), SystemCompendiums.getCompendium('equipement') ], scope: "world", diff --git a/module/item.js b/module/item.js index b526521e..e2364291 100644 --- a/module/item.js +++ b/module/item.js @@ -178,28 +178,35 @@ export class RdDItem extends Item { isHerbeAPotion() { return this.type == 'herbe' && (this.system.categorie == 'Soin' || this.system.categorie == 'Repos'); } isPresentDansMilieux(milieux) { - return this.getEnvironnement(milieux).length > 0 + return this.getEnvironnements(milieux).length > 0 } - getEnvironnement(milieux = undefined) { - const environnements = this.isInventaire() ? this.system?.environnement ?? [] : []; - return environnements.filter(env => !milieux || milieux.includes(env.milieu)) + getEnvironnements(milieux = undefined) { + const environnements = this.isInventaire() ? this.system.environnement : undefined; + if (milieux == undefined || !environnements) { + return environnements ?? []; + } + return environnements.filter(env => milieux.includes(env.milieu)) } getMilieux() { - return this.getEnvironnement().map(env => env.milieu); + return this.getEnvironnements().map(env => env.milieu); } - - getRarete(milieux = undefined) { + getRaretes(milieux = undefined) { if (this.isInventaire()) { - return RdDRaretes.selonEnvironnement(this, milieux) + const raretes = this.getEnvironnements(milieux).map(env => RdDRaretes.byCode(env.rarete)); + if (milieux == undefined && raretes.length == 0) { + return [RdDRaretes.rareteFrequente()]; + } + return raretes; } - return RdDRaretes.rareteFrequente(); + return [RdDRaretes.rareteEgale()]; } getFrequence(milieux = undefined) { - return this.getRarete(milieux)?.frequence ?? 0; + const frequences = this.getEnvironnements(milieux).map(it => it.frequence); + return frequences.length == 0 ? 0 : Math.max(...frequences); } getItemGroup() { diff --git a/module/item/raretes.js b/module/item/raretes.js index 22398ed3..eab72a12 100644 --- a/module/item/raretes.js +++ b/module/item/raretes.js @@ -4,6 +4,7 @@ const RARETE_FREQUENTE = { code: 'Frequente', label: 'Fréquente', frequence: 18 const RARETE_RARE = { code: 'Rare', label: 'Rare', frequence: 6, min: 3, max: 12 }; const RARETE_RARISSIME = { code: 'Rarissime', label: 'Rarissime', frequence: 2, min: 1, max: 4 }; const RARETE_INEXISTANT = { code: 'Inexistant', label: 'Inexistant', frequence: 0, min: 0, max: 0 }; +const RARETE_EGALE = { code: 'eqal', label: 'Egal', frequence: 1, min: 1, max: 1 }; const RARETES = [ RARETE_COMMUNE, @@ -15,50 +16,16 @@ const RARETES = [ export class RdDRaretes { - static getRareteByCode(code = undefined) { + static rareteFrequente() { return RARETE_FREQUENTE; } + static rareteEgale() { return RARETE_EGALE; } + static raretes() { return RARETES; } + + static byCode(code = undefined) { return RARETES.find(it => it.code == code) ?? RARETE_FREQUENTE; } static getChamp(rarete, field = undefined) { - const selected = this.getRareteByCode(rarete); - return field ? selected[field] : selected[frequence]; + return RdDRaretes.byCode(rarete)[field ?? 'frequence']; } - static rareteFrequente() { - return RARETE_FREQUENTE; - } - - static raretes() { - return RARETES; - } - - static selonEnvironnement(item, milieux = undefined) { - const list = item.getEnvironnement(milieux); - const freqMax = Math.max(0, ...list.map(env => env.frequence)); - const env = list.find(env => env.frequence == freqMax); - if (env) { - return RdDRaretes.getRareteByCode(env.rarete) - } - if (milieux == undefined) { - return RdDRaretes.selonQualite(item) - } - return RARETE_INEXISTANT; - } - - static selonQualite(item) { - const qualite = item.system.qualite ?? 0; - if (qualite <= 0) { - return RARETE_COMMUNE - } - if (qualite <= 3) { - return RARETE_FREQUENTE - } - if (qualite <= 6) { - return RARETE_RARE - } - if (qualite <= 9) { - return RARETE_RARISSIME - } - return RARETE_INEXISTANT - } } \ No newline at end of file diff --git a/module/item/sheet-base-inventaire.js b/module/item/sheet-base-inventaire.js index 1c7a8996..e680471d 100644 --- a/module/item/sheet-base-inventaire.js +++ b/module/item/sheet-base-inventaire.js @@ -70,7 +70,7 @@ export class RdDItemInventaireSheet extends RdDItemSheet { $changeRarete(event, updated) { const code = this.html.find(event.currentTarget).val(); - const rarete = RdDRaretes.getRareteByCode(code); + const rarete = RdDRaretes.byCode(code); updated.rarete = rarete.code; updated.frequence = rarete.frequence; } @@ -81,21 +81,22 @@ export class RdDItemInventaireSheet extends RdDItemSheet { ui.notifications.warn(`Choisissez le milieu dans lequel se trouve le/la ${this.item.name}`); return } - const list = this.item.getEnvironnement(); + const list = this.item.getEnvironnements(); const exists = list.find(it => it.milieu == milieu); if (exists) { ui.notifications.warn(`${this.item.name} a déjà une rareté ${exists.rarete} en ${milieu} (fréquence: ${exists.frequence})`); return } const rarete = RdDRaretes.rareteFrequente(); - const newList = [...list, { milieu, rarete: rarete.code, frequence: rarete.frequence }].sort(Misc.ascending(it => it.milieu)) + const added = { milieu, rarete: rarete.code, frequence: rarete.frequence }; + const newList = [added, ...list].sort(Misc.ascending(it => it.milieu)) await this.item.update({ 'system.environnement': newList }) } async onDeleteMilieu(event) { const milieu = this.$getEventMilieu(event); if (milieu != undefined) { - const newList = this.item.getEnvironnement().filter(it => it.milieu != milieu) + const newList = this.item.getEnvironnements().filter(it => it.milieu != milieu) .sort(Misc.ascending(it => it.milieu)); await this.item.update({ 'system.environnement': newList }); } diff --git a/module/migrations.js b/module/migrations.js index c5544ded..8b97047c 100644 --- a/module/migrations.js +++ b/module/migrations.js @@ -288,7 +288,7 @@ class _10_3_0_FrequenceEnvironnement extends Migration { } _updatesFrequences(it) { - const rarete = RdDRaretes.getRareteByCode(it.system.rarete); + const rarete = RdDRaretes.byCode(it.system.rarete); return { _id: it.id, 'system.rarete': undefined, diff --git a/module/tirage/fenetre-recherche-tirage.js b/module/tirage/fenetre-recherche-tirage.js index f3c6eeb7..1fdd1554 100644 --- a/module/tirage/fenetre-recherche-tirage.js +++ b/module/tirage/fenetre-recherche-tirage.js @@ -8,7 +8,6 @@ const FILTER_GROUPS = [ { group: 'type', label: "Type d'objet" }, { group: 'comestible', label: 'Alimentaire' }, { group: 'categorie', label: 'Utilisation' }, - { group: 'milieu', label: 'Milieu' }, { group: 'rarete', label: 'Rarete' }, { group: 'qualite', label: 'Qualité' }, { group: 'enc', label: 'Encombrement' }, @@ -16,60 +15,77 @@ const FILTER_GROUPS = [ ] const FILTERS = [ - { group: 'comestible', code: 'comestible', label: 'Comestible', check: item => item.getUtilisation() == 'cuisine' }, - { group: 'comestible', code: 'pret', label: 'Préparé', check: item => item.getUtilisationCuisine() == 'pret' }, - { group: 'comestible', code: 'brut', label: 'A préparer', check: item => item.getUtilisationCuisine() == 'brut' }, - { group: 'comestible', code: 'boisson', label: 'Boisson', check: item => item.isBoisson() }, - { group: 'comestible', code: 'alcool', label: 'Alcool', check: item => item.isAlcool() }, - { group: 'comestible', code: 'immangeable', label: 'Immangeable', check: item => item.isInventaire() && item.getUtilisation() != 'cuisine' }, + { group: 'comestible', code: 'comestible', label: 'Comestible', check: (item, milieux) => item.getUtilisation() == 'cuisine' }, + { group: 'comestible', code: 'pret', label: 'Préparé', check: (item, milieux) => item.getUtilisationCuisine() == 'pret' }, + { group: 'comestible', code: 'brut', label: 'A préparer', check: (item, milieux) => item.getUtilisationCuisine() == 'brut' }, + { group: 'comestible', code: 'boisson', label: 'Boisson', check: (item, milieux) => item.isBoisson() }, + { group: 'comestible', code: 'alcool', label: 'Alcool', check: (item, milieux) => item.isAlcool() }, + { group: 'comestible', code: 'immangeable', label: 'Immangeable', check: (item, milieux) => item.isInventaire() && item.getUtilisation() != 'cuisine' }, - { group: 'categorie', code: 'alchimie', label: 'Alchimique', check: item => item.isInventaire() && item.getUtilisation() == 'alchimie' }, - { group: 'categorie', code: 'soins', label: 'Médical', check: item => item.isInventaire() && item.getUtilisation() == 'soins' }, - { group: 'categorie', code: 'poison', label: 'Toxique', check: item => item.isInventaire() && item.getUtilisation() == 'poison' }, - { group: 'categorie', code: 'autres', label: 'Autres', check: item => !item.isInventaire() || item.getUtilisation() == '' }, + { group: 'categorie', code: 'alchimie', label: 'Alchimique', check: (item, milieux) => item.isInventaire() && item.getUtilisation() == 'alchimie' }, + { group: 'categorie', code: 'soins', label: 'Médical', check: (item, milieux) => item.isInventaire() && item.getUtilisation() == 'soins' }, + { group: 'categorie', code: 'poison', label: 'Toxique', check: (item, milieux) => item.isInventaire() && item.getUtilisation() == 'poison' }, + { group: 'categorie', code: 'autres', label: 'Autres', check: (item, milieux) => !item.isInventaire() || item.getUtilisation() == '' }, - { group: "qualite", code: "mauvaise", label: "Mauvaise (négative)", check: item => item.isInventaire() && item.system.qualite < 0 }, - { group: "qualite", code: "quelconque", label: "Quelconque (0)", check: item => item.isInventaire() && item.system.qualite == 0 }, - { group: "qualite", code: "correcte", label: "Correcte (1-3)", check: item => item.isInventaire() && 1 <= item.system.qualite && item.system.qualite <= 3 }, - { group: "qualite", code: "bonne", label: "Bonne (4-6)", check: item => item.isInventaire() && 4 <= item.system.qualite && item.system.qualite <= 6 }, - { group: "qualite", code: "excellente", label: "Excellente (7-9)", check: item => item.isInventaire() && 7 <= item.system.qualite && item.system.qualite <= 9 }, - { group: "qualite", code: "mythique", label: "Mythique (10+)", check: item => item.isInventaire() && 10 <= item.system.qualite }, + { group: "qualite", code: "mauvaise", label: "Mauvaise (négative)", check: (item, milieux) => item.isInventaire() && item.system.qualite < 0 }, + { group: "qualite", code: "quelconque", label: "Quelconque (0)", check: (item, milieux) => item.isInventaire() && item.system.qualite == 0 }, + { group: "qualite", code: "correcte", label: "Correcte (1-3)", check: (item, milieux) => item.isInventaire() && 1 <= item.system.qualite && item.system.qualite <= 3 }, + { group: "qualite", code: "bonne", label: "Bonne (4-6)", check: (item, milieux) => item.isInventaire() && 4 <= item.system.qualite && item.system.qualite <= 6 }, + { group: "qualite", code: "excellente", label: "Excellente (7-9)", check: (item, milieux) => item.isInventaire() && 7 <= item.system.qualite && item.system.qualite <= 9 }, + { group: "qualite", code: "mythique", label: "Mythique (10+)", check: (item, milieux) => item.isInventaire() && 10 <= item.system.qualite }, - { group: "enc", code: "negligeable", label: "Négligeable (jusqu'à 0.1)", check: item => item.isInventaire() && item.system.encombrement <= 0.1 }, - { group: "enc", code: "leger", label: "Léger (0.1 à 0.5)", check: item => item.isInventaire() && 0.1 < item.system.encombrement && item.system.encombrement <= 0.5 }, - { group: "enc", code: "moyen", label: "Moyen (0.5 à 1.5)", check: item => item.isInventaire() && 0.5 < item.system.encombrement && item.system.encombrement <= 1.5 }, - { group: "enc", code: "lourd", label: "Lourd (1.5 à 3)", check: item => item.isInventaire() && 1.5 < item.system.encombrement && item.system.encombrement <= 3 }, - { group: "enc", code: "massif", label: "Massif (3 à 10)", check: item => item.isInventaire() && 3 < item.system.encombrement && item.system.encombrement <= 10 }, - { group: "enc", code: "anemort", label: "Un âne mort (plus de 10)", check: item => item.isInventaire() && 10 < item.system.encombrement }, + { group: "enc", code: "negligeable", label: "Négligeable (jusqu'à 0.1)", check: (item, milieux) => item.isInventaire() && item.system.encombrement <= 0.1 }, + { group: "enc", code: "leger", label: "Léger (0.1 à 0.5)", check: (item, milieux) => item.isInventaire() && 0.1 < item.system.encombrement && item.system.encombrement <= 0.5 }, + { group: "enc", code: "moyen", label: "Moyen (0.5 à 1.5)", check: (item, milieux) => item.isInventaire() && 0.5 < item.system.encombrement && item.system.encombrement <= 1.5 }, + { group: "enc", code: "lourd", label: "Lourd (1.5 à 3)", check: (item, milieux) => item.isInventaire() && 1.5 < item.system.encombrement && item.system.encombrement <= 3 }, + { group: "enc", code: "massif", label: "Massif (3 à 10)", check: (item, milieux) => item.isInventaire() && 3 < item.system.encombrement && item.system.encombrement <= 10 }, + { group: "enc", code: "anemort", label: "Un âne mort (plus de 10)", check: (item, milieux) => item.isInventaire() && 10 < item.system.encombrement }, - { group: "prix", code: "gratuit", label: "Gratuit", check: item => item.isInventaire() && item.system.cout == 0 }, - { group: "prix", code: "deniers", label: "Deniers (étain)", check: item => item.isInventaire() && 0 < item.system.cout && item.system.cout < 0.1 }, - { group: "prix", code: "bronze", label: "Sous (bronze)", check: item => item.isInventaire() && 0.1 <= item.system.cout && item.system.cout < 1 }, - { group: "prix", code: "sols", label: "Sols (argent)", check: item => item.isInventaire() && 1 <= item.system.cout && item.system.cout < 10 }, - { group: "prix", code: "dragons", label: "Dragons (or)", check: item => item.isInventaire() && 10 <= item.system.cout }, + { group: "prix", code: "gratuit", label: "Gratuit", check: (item, milieux) => item.isInventaire() && item.system.cout == 0 }, + { group: "prix", code: "deniers", label: "Deniers (étain)", check: (item, milieux) => item.isInventaire() && 0 < item.system.cout && item.system.cout < 0.1 }, + { group: "prix", code: "bronze", label: "Sous (bronze)", check: (item, milieux) => item.isInventaire() && 0.1 <= item.system.cout && item.system.cout < 1 }, + { group: "prix", code: "sols", label: "Sols (argent)", check: (item, milieux) => item.isInventaire() && 1 <= item.system.cout && item.system.cout < 10 }, + { group: "prix", code: "dragons", label: "Dragons (or)", check: (item, milieux) => item.isInventaire() && 10 <= item.system.cout }, ] -function $typeToFilter(type) { return { group: 'type', code: type, label: Misc.typeName('Item', type), check: item => item.type == type }; } - function $filterMilieux(milieux) { - return milieux.map(m => { return { group: 'milieu', code: m, label: m, check: item => item.isPresentDansMilieux(m) } }) + return milieux.map(m => { + return { + code: m, + label: m, + check: (item, milieux) => item.isPresentDansMilieux(m) + } + }) } function $filterRarete() { return RdDRaretes.raretes() .filter(it => it.frequence > 0) - .map(r => { return { group: 'rarete', code: r.code, label: r.label, check: item => item.getRarete()?.code == r.code }; }); + .map(r => { + return { + group: 'rarete', + code: r.code, + label: r.label, + check: (item, milieux) => item.getRaretes(milieux).map(it => it.code).includes(r.code) + } + }); } function $filterTypes() { - return RdDItem.getItemTypesInventaire().map(it => $typeToFilter(it)); + return RdDItem.getItemTypesInventaire().map(type => { + return { + group: 'type', + code: type, + label: Misc.typeName('Item', type), + check: (item, milieux) => item.type == type + }; + }); } -function $getAllFilters(milieux) { +function $getAllFilters() { return FILTERS .concat($filterTypes()) - .concat($filterMilieux(milieux)) .concat($filterRarete()); } @@ -111,8 +127,10 @@ export class FenetreRechercheTirage extends Application { } static async create() { + const milieux = await game.system.rdd.environnement.milieux(); const parameters = { - milieux: await game.system.rdd.environnement.milieux(), + milieux: milieux, + filterMilieux: $filterMilieux(milieux), filterGroups: duplicate(FILTER_GROUPS).filter(it => it.group), } const options = {} @@ -127,17 +145,12 @@ export class FenetreRechercheTirage extends Application { } async getData() { - let formData = super.getData(); - mergeObject(formData, this.parameters) - return formData; + return mergeObject(await super.getData(), this.parameters) } - _canDragStart() { - return true; - } - _onDragStart(event) { - console.log('_onDragStart', event) - } + _canDragStart() { return true; } + _onDragStart(event) { } + _getHeaderButtons() { let buttons = super._getHeaderButtons(); if (game.user.isGM) { @@ -155,17 +168,15 @@ export class FenetreRechercheTirage extends Application { super.activateListeners(html); this.html = html; - HtmlUtility.showControlWhen(this.html.find('div.group-filters'), false); - HtmlUtility.showControlWhen(this.html.find('i.filter-group-hide'), false); - HtmlUtility.showControlWhen(this.html.find('i.filter-group-show'), true); + this.showFilterGroup(this.html, false); - this.html.find("a.filter-group-toggle").click(event => { - const groupDiv = this.html.find(event.currentTarget)?.parents('div.filter-group').first(); - const visible = groupDiv.find('div.group-filters').first().is(":visible"); + this.html.find("a.section-filters-toggle").click(event => { + const groupDiv = this.html.find(event.currentTarget)?.parents('div.section-filters-root').first(); + const visible = groupDiv.find('div.section-filters-content').first().is(":visible"); this.showFilterGroup(groupDiv, !visible) }); - this.html.find("input.activate-filter").change(event => this.changeListeFiltresActifs()) + this.html.find("input:is(.activate-filter-group,.activate-filter-milieu)").change(event => this.changeListeFiltresActifs()) this.html.find("a.supprimer-filtres").click(async event => this.supprimerFiltres()) @@ -178,9 +189,18 @@ export class FenetreRechercheTirage extends Application { }) } + showFilterGroup(groupDiv, show) { + if (groupDiv) { + HtmlUtility.showControlWhen(groupDiv.find('div.section-filters-content'), show); + HtmlUtility.showControlWhen(groupDiv.find('i.section-filters-hide'), show); + HtmlUtility.showControlWhen(groupDiv.find('i.section-filters-show'), !show); + } + } + supprimerFiltres() { + this.html.find('input:is(.activate-filter-group,.activate-filter-milieu)').prop("checked", false); this.html.find('div.liste-resultats').html(''); - return this.html.find('input.activate-filter:checked').prop("checked", false); + this.changeListeFiltresActifs(); } async recherche() { @@ -191,53 +211,72 @@ export class FenetreRechercheTirage extends Application { } async buildTable() { - return await game.system.rdd.environnement.buildTable(it => it.getFrequence(), this.buildCheckedItemsFilter()) + const milieux = this.getSelectedMilieux(); + const filterItemMilieux = this.buildCheckedGroupFilter(milieux); + const filter = it => filterItemMilieux(it, milieux); + const itemFrequence = it => it.getFrequence(milieux); + return await game.system.rdd.environnement.buildTable(itemFrequence, filter) } - buildCheckedItemsFilter() { - const byGroup = this.getCheckedFiltersByGroup(); - const groupSummaries = Object.entries(byGroup).map(([key, list]) => { - const group = this.parameters.filterGroups.find(g => key == g.group); - const filters = list.map(it => it.code).map(code => group.filters.find(f => code == f.code)) - return filters - .map(f => f.check) - .reduce((a, b) => { return it => a(it) || b(it) });; - }); - if (groupSummaries.length == 0) { - return it => true; + buildMilieuxFilter(milieux) { + if (milieux) { + return this.buildOrFilter(this.parameters.filterMilieux.filter(it => milieux.includes(it.code)).map(f => f.check)); } - return groupSummaries.reduce((a, b) => { return it => a(it) && b(it) }) + return (it, mi) => true; } - showFilterGroup(groupDiv, show) { - if (groupDiv) { - HtmlUtility.showControlWhen(groupDiv.find('div.group-filters'), show); - HtmlUtility.showControlWhen(groupDiv.find('i.filter-group-hide'), show); - HtmlUtility.showControlWhen(groupDiv.find('i.filter-group-show'), !show); + buildCheckedGroupFilter(milieux) { + const filtersList = this.getGroupCheckedFilters() + .map(gf => this.buildOrFilter(gf.filters.map(f => f.check))); + if (milieux) { + filtersList.push(this.buildMilieuxFilter(milieux)); } + return this.buildAndFilter(filtersList) } + buildAndFilter(filters) { return filters.reduce((f1, f2) => { return (it, mi) => f1(it, mi) && f2(it, mi); }); } + buildOrFilter(filters) { return filters.reduce((f1, f2) => { return (it, mi) => f1(it, mi) || f2(it, mi); }); } + changeListeFiltresActifs() { - const byGroup = this.getCheckedFiltersByGroup(); - const groupSummaries = Object.entries(byGroup).map(([key, list]) => { - const group = this.parameters.filterGroups.find(g => key == g.group); - const filters = list.map(it => it.code).map(code => group.filters.find(f => code == f.code)) - return group.label + ': ' + filters - .map(f => f.label) - .reduce(Misc.joining(', '));; - }); - const fullText = groupSummaries.length == 0 ? "" : groupSummaries.reduce(Misc.joining(' - ')); + const milieux = this.getSelectedMilieux(); + const summariesList = this.getGroupCheckedFilters() + .map(gf => { + return gf.group.label + ': ' + gf.filters + .map(f => f.label) + .reduce(Misc.joining(', ')) + }); + if (milieux) { + summariesList.push('Milieux: ' + this.parameters.filterMilieux.filter(f => milieux.includes(f.code)).map(f => f.label).reduce(Misc.joining(', '))) + } + const fullText = summariesList.length == 0 ? "" : summariesList.reduce(Misc.joining(' - ')); this.html.find('span.liste-filtres-actifs').text(fullText); } - getCheckedFiltersByGroup() { - const selectedFilters = jQuery.map(this.html.find('input.activate-filter:checked'), it => { - const element = this.html.find(it); - return { group: element.data('group'), code: element.data('code') }; + getGroupCheckedFilters() { + const checkedGroupFilters = jQuery.map(this.html.find('input.activate-filter-group:checked'), it => this.html.find(it)) + .map(element => { + return { + group: element.data('group'), + code: element.data('code') + }; + }).filter(it => it.group); + + const entries = Object.entries(Misc.classify(checkedGroupFilters, it => it.group)); + return entries.map(([key, list]) => { + const group = this.parameters.filterGroups.find(g => g.group == key); + const filters = list.map(it => group.filters.find(f => it.code == f.code)); + return { group, filters }; }); - return Misc.classify(selectedFilters, it => it.group); } + getSelectedMilieux() { + const milieux = jQuery.map(this.html.find('input.activate-filter-milieu:checked'), it => { + return this.html.find(it).data('code'); + }); + return milieux.length == 0 ? undefined : milieux + } + + async configurer() { FenetreRechercheConfiguration.create(); } diff --git a/templates/tirage/fenetre-recherche-tirage.hbs b/templates/tirage/fenetre-recherche-tirage.hbs index 5d168164..3cbc9ab2 100644 --- a/templates/tirage/fenetre-recherche-tirage.hbs +++ b/templates/tirage/fenetre-recherche-tirage.hbs @@ -12,19 +12,39 @@

Filtres

- {{#each filterGroups as |group|}} -
-

{{group.label}} + +
+

+ Milieux - - + +

-
+
+ {{#each filterMilieux as |filter|}} +
+ + +
+ {{/each}} +
+
+ + {{#each filterGroups as |group|}} +
+

{{group.label}} + + + + + +

+
{{#each group.filters as |filter|}}
-