BlockchainEtSociete / DevFest_CodeLabs

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

bug : L'ajout de jury ne retient que le dernier jury sélectionné #28

Closed bpresles closed 12 months ago

bpresles commented 1 year ago

Dans le composant CompetitionJuryForm seul l'id du dernier jury sélectionné est enregistré et envoyé à la blockchain.

const [idJury, setIdJury]: any = useState(0);
...

const updateIdsJuryCompetition = (e: React.ChangeEvent<HTMLInputElement>) => setIdJury(Number(e.target.value));

Ceci devrait en réalité être une liste d'ids sélectionnés:

const [selectedIdsJury, setSelectedIdsJurys]: any = useState([]);
...

const updateIdJuryCompetition = (e: React.ChangeEvent<HTMLInputElement>) => {
  if (!selectedIdsJury.includes(Number(e.target.value))
    setSelectedIdsJury([...selectedIdsJury, Number(e.target.value));
  }
}

De ce fait, dans la fonction d'ajout des jurys qui appelle le smart contrat, il faudra parcourir la liste:

const addJurysCompetition = async () => {
        setMinting(true);
        const signer = await provider?.getSigner();
        // building smart contract call
        const contract = new ethers.Contract(contractsInterface.contracts.Competitions.address, contractsInterface.contracts.Competitions.abi, signer );

        for (const  idJury of selectedIdsJury) {
          let transaction;

          try {
              transaction = await contract.addJuryToCompetition(tokenId, idJury);
          } catch(e) {
           ...
          }
        }
        ...
}

Il faut aussi changer l'élément de formulaire en checkbox plutôt que bouton radio:

<input name="jury" type="checkbox" onChange={updateIdsJuryCompetition} value={jurys[jury].id} />
devsheder commented 12 months ago

https://github.com/BlockchainEtSociete/DevFest_CodeLabs/pull/30