Pequeño error en la consola después de una carga exitosa de archivo CSV para etiquetas

Si subes un archivo CSV con etiquetas, la consola mostrará un error después de una carga exitosa.


Aquí hay una investigación.

El problema subyacente es esencialmente que el modal se cierra demasiado rápido con la lógica actual.

El error ocurre en uppy-upload.js.
Las propiedades no se pudieron establecer porque el elemento (uppy-upload) ya se había destruido.

¿Cómo es posible? this._uppyInstance?.cancelAll();

Como referencia, _reset se llama desde _allUploadsComplete.

En una carga exitosa, este es el orden de las funciones:
uploadDone_allUploadsComplete → [ _reset ]

Cuando se llama a uploadDone, el modal se cierra de inmediato.
Esto significa que el elemento uppy-upload se destruirá al final del frame.
https://github.com/discourse/discourse/blob/main/app/assets/javascripts/admin/addon/components/tags-uploader.js#L22-L26

Volviendo a this._uppyInstance?.cancelAll();. Esto activará el evento a continuación.
Esa es la razón por la que falla. Debido a run(), las propiedades se establecerán después de que el elemento sea destruido.

Esta es una regresión menor. Introducida aquí:

uppy-upload.js

tags-upload.js

Posibles soluciones funcionales:

  • Cerrar el modal un poco más tarde
  uploadDone() {
    this.refresh();
    this.dialog
      .alert(I18n.t("tagging.upload_successful"))
      .finally(() => this.closeModal());
  }
  • Mover la verificación fuera del bucle run().
    this._uppyInstance.on("file-removed", (file, reason) => {
      // manejamos el evento cancel-all específicamente, así que no hay necesidad
      // de hacer nada aquí. este evento también se dispara cuando algunos archivos
      // son manejados por un manejador de carga
      if (reason === "cancel-all") {
        return;
      }

      run(() => {

No estoy seguro de si hay una solución mejor. Así que, lo publico aquí.
Es mucho texto para un problema menor no bloqueante, pero no era evidente inicialmente. :smile:

3 Me gusta