Piccolo errore nella console dopo il caricamento riuscito di un file CSV per i tag

Se carichi un file CSV con tag, la console visualizzerà un errore dopo un caricamento riuscito.


Ecco alcune indagini.

Il problema di fondo è essenzialmente che la modale si chiude troppo velocemente con la logica attuale.

L’errore si verifica in uppy-upload.js.
Le proprietà non sono state impostate perché l’elemento (uppy-upload) era già stato distrutto.

Com’è possibile? this._uppyInstance?.cancelAll();

Per riferimento, _reset viene chiamato da _allUploadsComplete.

Al caricamento riuscito, questo è l’ordine delle funzioni:
uploadDone_allUploadsComplete → [ _reset ]

Quando viene chiamata uploadDone, la modale viene chiusa immediatamente.
Ciò significa che l’elemento uppy-upload verrà distrutto alla fine del frame.
https://github.com/discourse/discourse/blob/main/app/assets/javascripts/admin/addon/components/tags-uploader.js#L22-L26

Tornando a this._uppyInstance?.cancelAll();. Questo attiverà l’evento sottostante.
Questo è il motivo per cui fallisce. A causa di run(), le proprietà verranno impostate dopo che l’elemento è stato distrutto.

Questa è una regressione minore. Introdotta qui:

uppy-upload.js

tags-upload.js

Possibili soluzioni funzionanti:

  • Chiudere la modale un po’ più tardi
  uploadDone() {
    this.refresh();
    this.dialog
      .alert(I18n.t("tagging.upload_successful"))
      .finally(() => this.closeModal());
  }
  • Spostare il controllo fuori dal ciclo run().
    this._uppyInstance.on("file-removed", (file, reason) => {
      // gestiamo specificamente l'evento cancel-all, quindi non è necessario
      // fare nulla qui. questo evento viene anche attivato quando alcuni file
      // vengono gestiti da un gestore di caricamento
      if (reason === "cancel-all") {
        return;
      }

      run(() => {

Non sono sicuro se ci sia una soluzione migliore. Quindi, sto postando qui.
È un testo lungo per un problema minore non bloccante, ma non era inizialmente evidente. :smile:

3 Mi Piace