BlockchainEtSociete / DevFest_CodeLabs

GNU General Public License v2.0
0 stars 1 forks source link

optimisation: La gestion du filtrage des jurys déjà sélectionnés dans l'affichage de la sélection des jurys est trop complexe #29

Closed bpresles closed 1 year ago

bpresles commented 1 year ago

Actuellement, le filtrage des jurys sélectionné se fait en rafraichissant les ids jury depuis la blockchain filtré pour ne pas récupérés ceux déjà sélectionnés:

    /**
     * Récupération des ids jury deja ajouté à la competition et les enlevers de la liste
     */
    const getIdsJury = async () => {
        try {
            await fetchIdsByFilter(tokenId, null, contractsInterface.contracts.Competitions.address, contractsInterface.contracts.Competitions.abi, setIdsCompetition, setIdsJurys);
            !idsJury.includes(idJury) ? idsJury.push(idJury) : '';
        } catch (e) {
            setMinting(false);
            setMessage(`Minting in error`)
            setSeverity('error')
            setOpen(true)
            setTimeout(
                function () {
                    setOpen(false)
                }, 5000);
        }
    }

Sachant que c'est un besoin purement d'affichage et que le composant dispose déjà de la liste de jurys qui a été chargée depuis la blockchain et se met à jour automatiquement en cas d'événement d'ajout, ça n'a pas de sens de passer par une nouvelle récupération d'events depuis la blockchain pour ce besoin.

Cette fonction n'est donc pas utile et est à supprimer.

Il vaut mieux utiliser l'état "selectedIdsJury" (cf ticket de bug) pour n'afficher que les jurys n'étant pas dans cette liste dans la partie vue du composant:

<div style={{display: 'flex', justifyContent: 'center', flexDirection: 'column'}}>
                { jurys && Object.keys(jurys).length > 0 && Object.keys(jurys).map((jury: any) => {
                    const fullName = jurys[jury].Lastname + " " + jurys[jury].Firstname;
                    return (
                        <label key={jurys[jury].id} style={{ display: !selectedIdsJury.includes(jurys[jury].id) ? 'none': 'block' }}> {fullName} :
                            <input name="jury" type="radio" onChange={updateIdJuryCompetition}
                                   value={jurys[jury].id} />
                        </label>
                    )}
            )}
            </div>