From a328e710356d83dc8a3230a4d8809eea6209a211 Mon Sep 17 00:00:00 2001 From: Thibaut Valentin Date: Wed, 5 Aug 2026 16:45:18 +0200 Subject: [PATCH] feat: add licence state to membre find result --- .../ffsaf/domain/service/LicenceService.java | 2 +- .../ffsaf/domain/service/MembreService.java | 14 +++++-- .../fr/titionfire/ffsaf/utils/PageResult.java | 9 ++-- src/main/webapp/src/pages/MemberList.jsx | 41 +++++-------------- 4 files changed, 26 insertions(+), 40 deletions(-) diff --git a/src/main/java/fr/titionfire/ffsaf/domain/service/LicenceService.java b/src/main/java/fr/titionfire/ffsaf/domain/service/LicenceService.java index 79335d9..9ffe236 100644 --- a/src/main/java/fr/titionfire/ffsaf/domain/service/LicenceService.java +++ b/src/main/java/fr/titionfire/ffsaf/domain/service/LicenceService.java @@ -107,7 +107,7 @@ public class LicenceService { return Panache.withTransaction(() -> repository.persist(model)); } - public Uni setLicence(long id, LicenceForm form) { + public Uni setLicence(long id, LicenceForm form) { // TODO add log if (form.getId() == -1) { return combRepository.findById(id).chain(membreModel -> { LicenceModel model = new LicenceModel(); diff --git a/src/main/java/fr/titionfire/ffsaf/domain/service/MembreService.java b/src/main/java/fr/titionfire/ffsaf/domain/service/MembreService.java index fa40500..24f4fee 100644 --- a/src/main/java/fr/titionfire/ffsaf/domain/service/MembreService.java +++ b/src/main/java/fr/titionfire/ffsaf/domain/service/MembreService.java @@ -184,11 +184,17 @@ public class MembreService { String finalSearch = search; return getLicenceListe(licenceRequest, payState) - .map(l -> l.stream().map(l2 -> l2.getMembre().getId()).toList()) - .chain(ids -> { + .chain(l -> { PanacheQuery query; - query = repository.find(queryStr, sort, finalSearch, ids, club).page(Page.ofSize(limit)); - return getPageResult(query, limit, page); + query = repository.find(queryStr, sort, finalSearch, + l.stream().map(l2 -> l2.getMembre().getId()).toList(), club).page(Page.ofSize(limit)); + return getPageResult(query, limit, page) + .call(r -> (r.getResult().isEmpty() || !l.isEmpty() ? + Uni.createFrom().item(l) : + licenceRepository.list("saison = ?1 AND membre.id IN ?2", Utils.getSaison(), + r.getResult().stream().map(SimpleMembre::getId).toList())) + .invoke(l2 -> r.setAdditionalData(l2.stream().map(SimpleLicence::fromModel))) + ); }); } diff --git a/src/main/java/fr/titionfire/ffsaf/utils/PageResult.java b/src/main/java/fr/titionfire/ffsaf/utils/PageResult.java index 5d86ed1..daab449 100644 --- a/src/main/java/fr/titionfire/ffsaf/utils/PageResult.java +++ b/src/main/java/fr/titionfire/ffsaf/utils/PageResult.java @@ -10,13 +10,14 @@ import java.util.List; @Data @RegisterForReflection public class PageResult { - @Schema(description = "Le numéro de la page courante.", example = "1") + @Schema(description = "Le numéro de la page courante.", examples = "1") private int page; - @Schema(description = "Le nombre d'éléments par page.", example = "10") + @Schema(description = "Le nombre d'éléments par page.", examples = "10") private int page_size; - @Schema(description = "Le nombre total de pages.", example = "5") + @Schema(description = "Le nombre total de pages.", examples = "5") private int page_count; - @Schema(description = "Le nombre total d'éléments.", example = "47") + @Schema(description = "Le nombre total d'éléments.", examples = "47") private long result_count; private List result = new ArrayList<>(); + private Object additionalData; } diff --git a/src/main/webapp/src/pages/MemberList.jsx b/src/main/webapp/src/pages/MemberList.jsx index 784d020..ce36510 100644 --- a/src/main/webapp/src/pages/MemberList.jsx +++ b/src/main/webapp/src/pages/MemberList.jsx @@ -23,8 +23,6 @@ export function MemberList({source}) { const {t} = useTranslation(); const [memberData, setMemberData] = useState([]); - const [licenceData, setLicenceData] = useState([]); - const [showLicenceState, setShowLicenceState] = useState((sessionStorage.getItem("showLicenceState") || "false") === "true"); const setFilter = (filter) => { navigate("#" + encodeURI(JSON.stringify(filter))) @@ -72,23 +70,11 @@ export function MemberList({source}) { club: e.club, categorie: e.categorie, licence_number: e.licence, - licence: showLicenceState ? licenceData.find(licence => licence.membre === e.id) : null + licence: data.additionalData?.find(licence => licence.membre === e.id) }) } setMemberData(data2); - }, [data, licenceData]); - - useEffect(() => { - sessionStorage.setItem("showLicenceState", showLicenceState); - if (!showLicenceState) - return; - - toast.promise( - apiAxios.get(`/licence/current/${source}`), getToastMessage("membre.toast.licences.load")) - .then(data => { - setLicenceData(data.data); - }); - }, [showLicenceState]); + }, [data]); const search = (search) => { if (search === filter.search) @@ -102,8 +88,8 @@ export function MemberList({source}) {
{data - ? setFilter({...filter, page: e})} source={source}/> + ? setFilter({...filter, page: e})} source={source}/> : error ? : @@ -130,9 +116,7 @@ export function MemberList({source}) {
{t('filtre')}
- setFilter({...filter, archived: e})} clubFilter={filter.club} setClubFilter={e => setFilter({...filter, club: e})} @@ -354,7 +338,7 @@ function FileInput() { ); } -function MakeCentralPanel({data, visibleMember, navigate, showLicenceState, page, setPage, source}) { +function MakeCentralPanel({data, visibleMember, navigate, page, setPage, source}) { const {t} = useTranslation(); const pages = [] @@ -374,7 +358,7 @@ function MakeCentralPanel({data, visibleMember, navigate, showLicenceState, page })}
{visibleMember.map(member => ( - ))} + ))}
@@ -391,11 +375,11 @@ function MakeCentralPanel({data, visibleMember, navigate, showLicenceState, page } -function MakeRow({member, showLicenceState, navigate, source}) { +function MakeRow({member, navigate, source}) { const rowContent = <>
{(member.licence_number ? String(member.licence_number).padStart(5, '0') : "-------") + " "} - {(showLicenceState && member.licence != null && member.licence.pay) ? : <>  } + {(member.licence != null && member.licence.pay) ? : <>  }
{member.fname} {member.lname}
@@ -411,7 +395,7 @@ function MakeRow({member, showLicenceState, navigate, source}) { - if (showLicenceState && member.licence != null) { + if (member.licence != null) { return 1 ? "warning" : "danger"))} style={{padding: "0 1em"}} @@ -509,8 +493,6 @@ function OrderBar({onOrderChange, defaultValues = "", source}) { } function FiltreBar({ - showLicenceState, - setShowLicenceState, showArchived, setShowArchived, clubFilter, @@ -526,9 +508,6 @@ function FiltreBar({ const {t} = useTranslation(); return
-
- -