A failed upload from a file drop or paste leaves a stuck "Loading..." block
Los mantenedores suelen responder en 1 día
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 35/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Estancado
- Stack tecnológico
- react, typescript
- Área
- frontend, full-stack
Línea de trabajo
The report identifies handleFileInsertion, editor.uploadFile, and editor.updateBlock, but gives no file path or test name. Start by locating handleFileInsertion and tracing the drop and paste upload flow. Reproduce with uploadFile resolving to an empty string and with a rejected promise; done means a failed upload no longer leaves a Loading block and rejections are handled. An open linked pull request (#3247) already addresses this issue.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
What’s broken?
When uploadFile fails for a file that was dropped or pasted into the editor, the inserted file block keeps showing "Loading..." forever. The user has to delete it by hand.
handleFileInsertion inserts a file block, awaits editor.uploadFile(file, blockId) and then always calls editor.updateBlock(blockId, { props: { url } }).
- If
uploadFileresolves with""to report a failure, the props don't change, so the block doesn't render again. Its vanilla render replaced the "Add file" button with.bn-file-loading-previewinonUploadStart, and nothing restores it when the upload ends. - If
uploadFilerejects, the rejection isn't caught.updateBlocknever runs, the promise rejection is unhandled, and the block stays on "Loading..." as well.
The file panel's upload tab doesn't show this, because it sets name together with url. The block renders again and offers "Add file".
What did you expect to happen?
A failed upload doesn't leave a stuck placeholder. The block is either removed or goes back to its "Add file" state, and a rejected uploadFile is caught. A documented way for uploadFile to report a failure would help too.
Steps to reproduce
- Create an editor whose
uploadFilefails:const editor = useCreateBlockNote({ uploadFile: () => Promise.resolve(""), }); - Drag any file from your computer into the editor, or paste one.
- A file block showing "Loading..." stays in the document.
With uploadFile: () => Promise.reject(new Error("rejected")) the block stays as well, and the console shows an unhandled promise rejection.
BlockNote version
@blocknote/core, @blocknote/react, @blocknote/mantine 0.55.0
Environment
No response
Additional context
We work around it by listening to onUploadEnd and, in a timeout after BlockNote's updateBlock, removing the block if it still renders .bn-file-loading-preview.
Contribution
- I'd be interested in contributing a fix for this issue
Sponsor
- I'm a sponsor and would appreciate if you could look into this sooner than later 💖
- Lenguaje dominante
- TypeScript
- Estrellas
- 10.3k
- Forks
- 780
- Merge medio
- 3 d 6 h
- PR fusionados (30 d)
- 48
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de TypeCellOS/BlockNote
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
TypeCellOS/BlockNote#2949 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
a11y
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
TypeCellOS/BlockNote#2855 ·
Los mantenedores suelen responder en 1 día
-
a11y
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
TypeCellOS/BlockNote#2829 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Comment thread actions: hover-only controls and unlabeled buttons in ThreadsSidebaPosiblemente ocupada @matthewlipski la tomó hace 1 día. Abiertoa11y
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
TypeCellOS/BlockNote#2824 · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 58/100
TypeCellOS/BlockNote#3245 ·
Los mantenedores suelen responder en 1 día
Todos los issues de TypeCellOS/BlockNote
Issues similares
-
area: image-engine bug priority: low
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
snapotter-hq/SnapOtter#3885 ·
Los mantenedores suelen responder en 1 día
-
Mend: dependency security vulnerability
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 3 días
-
pending triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Los mantenedores suelen responder en 1 día
-
bug P3 UI/UX
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 1 día
-
clawsweeper:fix-shape-clear clawsweeper:queueable-fix clawsweeper:source-repro impact:ux-friction issue-rating: 🦞 diamond lobster no-stale P3
Dificultad 2/5 1-3 horas Aptitud para principiantes 73/100
openclaw/openclaw#182077 · 1 comentario · 1 reacción ·
Los mantenedores suelen responder en 1 día