feat: cm admin comb selector

This commit is contained in:
Thibaut Valentin 2025-11-30 19:16:32 +01:00
parent 936392f8bd
commit 00701fb874
5 changed files with 51 additions and 7 deletions

View File

@ -12,6 +12,7 @@ import jakarta.inject.Inject;
import org.hibernate.reactive.mutiny.Mutiny;
import java.util.ArrayList;
import java.util.List;
@WithSession
@ApplicationScoped
@ -22,7 +23,7 @@ public class RRegister {
CompetitionRepository competitionRepository;
@WSReceiver(code = "getRegister", permission = PermLevel.ADMIN)
public Uni<?> getRegister(WebSocketConnection connection, Object o) {
public Uni<List<CombEntity>> getRegister(WebSocketConnection connection, Object o) {
return competitionRepository.find("uuid", connection.pathParam("uuid")).firstResult()
.call(cm -> Mutiny.fetch(cm.getInsc()))
.call(cm -> Mutiny.fetch(cm.getGuests()))

View File

@ -34,7 +34,7 @@ public class SRegister {
}
public Uni<Void> sendRegisterRemove(String uuid, Long combId) {
return send(uuid, "sendRegister", combId);
return send(uuid, "sendRegisterRemove", combId);
}
public Uni<Void> send(String uuid, String code, Object data) {

View File

@ -290,7 +290,7 @@ function Modal({sendRegister, modalState, setModalState, source}) {
const [cat, setCat] = useState(0)
const [gcat, setGCat] = useState("")
const [club, setClub] = useState("")
const [country_, setCountry_] = useState("fr")
const [country_, setCountry_] = useState("FR")
const [genre, setGenre] = useState("NA")
const [editMode, setEditMode] = useState(false)
const [lockEdit, setLockEdit] = useState(false)
@ -307,7 +307,7 @@ function Modal({sendRegister, modalState, setModalState, source}) {
setLockEdit(false)
setClub("")
setGCat("")
setCountry_("fr")
setCountry_("FR")
setGenre("NA")
} else {
setLicence(modalState.licence ? modalState.licence : "")
@ -319,7 +319,7 @@ function Modal({sendRegister, modalState, setModalState, source}) {
setLockEdit(modalState.lockEdit)
setClub(modalState.club ? modalState.club.name : "")
setGCat(modalState.categorie ? modalState.categorie : "")
setCountry_(modalState.country ? modalState.country : "fr")
setCountry_(modalState.country ? modalState.country : "FR")
setGenre(modalState.genre ? modalState.genre : "NA")
}
}, [modalState]);

View File

@ -104,8 +104,33 @@ export function CategoryContent({cat, catId, setCat}) {
}
function AddComb({groups, setGroups}) {
const {data} = useRequestWS("getRegister", null)
const {data, setData} = useRequestWS("getRegister", null)
const combDispatch = useCombsDispatch();
const {dispatch} = useWS();
useEffect(() => {
const sendRegister = ({data}) => {
setData(prev => {
if (prev === null)
return [data];
return [...prev.filter(d => d.id !== data.id), data];
})
}
const sendRegisterRemove = ({data}) => {
setData(prev => {
if (prev === null)
return null;
return [...prev.filter(d => d.id !== data)];
})
}
dispatch({type: 'addListener', payload: {callback: sendRegister, code: 'sendRegister'}})
dispatch({type: 'addListener', payload: {callback: sendRegisterRemove, code: 'sendRegisterRemove'}})
return () => {
dispatch({type: 'removeListener', payload: {callback: sendRegister, code: 'sendRegister'}})
dispatch({type: 'removeListener', payload: {callback: sendRegisterRemove, code: 'sendRegisterRemove'}})
}
}, []);
useEffect(() => {
if (data === null)

View File

@ -2,6 +2,7 @@ import {useCountries} from "../../../hooks/useCountries.jsx";
import {useEffect, useReducer, useState} from "react";
import {CatList, getCatName} from "../../../utils/Tools.js";
import {CombName} from "../../../hooks/useComb.jsx";
import {useWS} from "../../../hooks/useWS.jsx";
function SelectReducer(state, action) {
switch (action.type) {
@ -40,6 +41,10 @@ function SelectReducer(state, action) {
}
});
return filteredState2;
case 'REMOVE_ID':
const newState2 = {...state};
delete newState2[action.payload];
return newState2;
case 'REMOVE_ALL':
return {};
default:
@ -49,6 +54,7 @@ function SelectReducer(state, action) {
export function SelectCombModalContent({data, setGroups}) {
const country = useCountries('fr')
const {dispatch} = useWS()
const [dispo, dispoReducer] = useReducer(SelectReducer, {})
const [select, selectReducer] = useReducer(SelectReducer, {})
@ -74,7 +80,19 @@ export function SelectCombModalContent({data, setGroups}) {
dispoReducer({type: 'ADD_ALL', payload: data.map(d => d.id)})
}
useEffect(() => { // TODO: add ws listener
useEffect(() => {
const sendRegisterRemove = ({data}) => {
dispoReducer({type: 'REMOVE_ID', payload: data})
selectReducer({type: 'REMOVE_ID', payload: data})
}
dispatch({type: 'addListener', payload: {callback: sendRegisterRemove, code: 'sendRegisterRemove'}})
return () => {
dispatch({type: 'removeListener', payload: {callback: sendRegisterRemove, code: 'sendRegisterRemove'}})
}
}, []);
useEffect(() => {
if (data == null)
return
const selectedIds = Object.keys(select).map(g => Number(g))