Erro pequeno no console após upload bem-sucedido de arquivo CSV para tags

Se você fizer o upload de um arquivo CSV com tags, o console exibirá um erro após um upload bem-sucedido.


Aqui está uma análise.

O problema subjacente é essencialmente que o modal fecha rápido demais com a lógica atual.

O erro acontece em uppy-upload.js.
As propriedades falharam ao serem definidas porque o elemento (uppy-upload) já foi destruído.

Como isso é possível? this._uppyInstance?.cancelAll();

Para referência, _reset é chamado de _allUploadsComplete.

No upload bem-sucedido, esta é a ordem das funções:
uploadDone_allUploadsComplete → [ _reset ]

Quando uploadDone é chamado, o modal é fechado imediatamente.
Isso significa que o elemento uppy-upload será destruído no final do frame.
https://github.com/discourse/discourse/blob/main/app/assets/javascripts/admin/addon/components/tags-uploader.js#L22-L26

Voltando a this._uppyInstance?.cancelAll();. Isso acionará o evento abaixo.
Essa é a razão pela qual falha. Por causa de run(), as propriedades serão definidas depois que o elemento for destruído.

Esta é uma regressão menor. Introduzida aqui:

uppy-upload.js

tags-upload.js

Possíveis soluções que funcionam:

  • Fechar o modal um pouco mais tarde
  uploadDone() {
    this.refresh();
    this.dialog
      .alert(I18n.t("tagging.upload_successful"))
      .finally(() => this.closeModal());
  }
  • Mover a verificação para fora do loop run().
    this._uppyInstance.on("file-removed", (file, reason) => {
      // lidamos especificamente com o evento cancel-all, então não há necessidade
      // de fazer nada aqui. este evento também é disparado quando alguns arquivos
      // são tratados por um manipulador de upload
      if (reason === "cancel-all") {
        return;
      }

      run(() => {

Não tenho certeza se existe uma solução melhor. Então, estou postando aqui.
É muito texto para um problema menor e não bloqueante, mas não era evidente inicialmente. :smile:

3 curtidas