Petite erreur dans la console après un téléchargement réussi du fichier CSV pour les tags

Si vous téléchargez un fichier CSV avec des tags, la console affichera une erreur après un téléchargement réussi.


Voici quelques recherches.

Le problème sous-jacent est essentiellement que la modale se ferme trop rapidement avec la logique actuelle.

L’erreur se produit dans uppy-upload.js.
Les propriétés n’ont pas pu être définies car l’élément (uppy-upload) a déjà été détruit.

Comment est-ce possible ? this._uppyInstance?.cancelAll();

Pour référence, _reset est appelé depuis _allUploadsComplete.

Lors d’un téléchargement réussi, voici l’ordre des fonctions :
uploadDone_allUploadsComplete → [ _reset ]

Lorsque uploadDone est appelé, la modale est fermée immédiatement.
Cela signifie que l’élément uppy-upload sera détruit à la fin de l’image.
https://github.com/discourse/discourse/blob/main/app/assets/javascripts/admin/addon/components/tags-uploader.js#L22-L26

Retour à this._uppyInstance?.cancelAll();. Cela déclenchera l’événement ci-dessous.
C’est la raison pour laquelle cela échoue. À cause de run(), les propriétés seront définies après la destruction de l’élément.

Ceci est une régression mineure. Introduite ici :

uppy-upload.js

tags-upload.js

Solutions possibles :

  • Fermer la modale un peu plus tard
  uploadDone() {
    this.refresh();
    this.dialog
      .alert(I18n.t("tagging.upload_successful"))
      .finally(() => this.closeModal());
  }
  • Déplacer la vérification hors de la boucle run().
    this._uppyInstance.on("file-removed", (file, reason) => {
      // nous gérons l'événement cancel-all spécifiquement, donc pas besoin
      // de faire quoi que ce soit ici. cet événement est également déclenché lorsque certains fichiers
      // sont traités par un gestionnaire de téléchargement
      if (reason === "cancel-all") {
        return;
      }

      run(() => {

Je ne suis pas sûr s’il existe une meilleure solution. Je poste donc ici.
C’est beaucoup de texte pour un problème mineur non bloquant, mais il n’était pas évident au départ. :smile:

3 « J'aime »