Attachment menu disabled ("shared from another cloud") in fileless embeds — breaks Deck card descriptions
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 76/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- javascript
- Área
- frontend
Línea de trabajo
Comienza en src/createEditor.ts y sigue la ruta fileless createMarkdownContentEditor; después, inspecciona las comprobaciones de adjuntos en src/components/Menu/ActionAttachmentUpload.vue y src/components/SuggestionsBar.vue. Reproduce el Deck description embed descrito en el issue y verifica que el menú de adjuntos siga habilitado, que el hook onFileInsert proporcionado por el host sea accesible y que las entradas exclusivas de carga permanezcan ocultas.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Describe the bug
Any host app that embeds Text without a fileId (i.e. createEditor/createMarkdownContentEditor, the fileless "markdown content" path) gets its attachment menu permanently disabled, with the misleading tooltip:
Attachments cannot be created or uploaded because this file is shared from another cloud.
There is no federated share and no other cloud involved — there is no file at all.
The most visible victim is Deck card descriptions, reported as nextcloud/deck#7748 (still open, no root cause posted). I traced it and the defect is here in Text, not in Deck.
Root cause
The gate introduced in #7154 (hasOwner, merged 2025-05-06, fixing #7092) assumes a document session always exists. In the fileless embed path it never does.
-
Deck embeds Text with content only, no
fileId:
https://github.com/nextcloud/deck/blob/main/src/components/card/Description.vuethis.editor = await window.OCA.Text.createEditor({ el: this.$refs.editor, content: this.card.description, readOnly: !this.canEdit, onFileInsert: () => { this.showAttachmentModal() }, // <-- host-provided hook }) -
In
src/createEditor.ts,optionsForCollaboration()isBoolean(options.fileId) && (options.useSession ?? true)→ false, socreateMarkdownContentEditor()rendersMarkdownContentEditorApp.vue. -
provideConnection()is called only fromsrc/components/CollaborativeEditor.vue. The markdown-content path never calls it, so the injectedopenDatastaysundefined. -
src/components/Menu/ActionAttachmentUpload.vue:isUploadDisabled() { return !this.openData?.hasOwner || !this.networkOnline }undefined?.hasOwner→undefined→ falsy → disabled, andmenuTitlefalls through to the federated-share string.
src/components/SuggestionsBar.vue:107 has the identical check and the identical wrong message.
The irony: provideHooks() in createEditor.ts does provide ACTION_ATTACHMENT_PROMPT from options.onFileInsert, so the host app has already supplied a working "insert file" implementation — Text disables the button before that hook can ever fire. Meanwhile EDITOR_UPLOAD is only provided on the collaborative path, so "Upload from computer" is already correctly hidden in this mode. The only entry that should be reachable is "Insert from Files", which delegates to the host and does not need a file owner.
Steps to reproduce
- Install and enable Deck and Text.
- Open any Deck card, edit the description with the rich text editor.
- Hover the paperclip in the toolbar.
- It is greyed out with the "shared from another cloud" tooltip. Uploading via the card's Attachments tab works fine (that path does not go through Text).
Expected behaviour
In the fileless / createMarkdownContentEditor embed, the attachment menu should stay enabled and "Insert from Files" should call the host-provided onFileInsert hook. The hasOwner restriction from #7154 is meaningful only when a document session exists.
Suggested fix
Only apply the owner gate when a connection was actually provided, rather than treating "no session" as "no owner". Something like:
isUploadDisabled() {
if (!this.networkOnline) { return true }
// No connection at all => fileless embed; the host app owns attachment handling.
if (this.openData === undefined && !this.$editorUpload) { return false }
return !this.openData?.hasOwner
}
and the same in SuggestionsBar.vue. Separately, the tooltip should not claim "shared from another cloud" for every falsy hasOwner — worth distinguishing "no owner" from "federated".
Versions
Reproduced on:
| Nextcloud | 34.0.1 |
| Text | 8.0.0 |
| Deck | 1.18.2 |
| PHP | 8.3 |
| DB | PostgreSQL 17 |
| Browser | Chrome |
Also reported against NC 32.0.4 / Deck 1.16.3 and NC 33.0.3 in nextcloud/deck#7748, i.e. present since the #7154 merge.
- Lenguaje dominante
- JavaScript
- Estrellas
- 665
- Forks
- 133
- Merge medio
- 1 d 17 h
- PR fusionados (30 d)
- 172
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 nextcloud/text
-
0. Needs triage bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 67/100
nextcloud/text#9482 · 1 reacción ·
Los mantenedores suelen responder en 1 día
-
0. Needs triage bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Los mantenedores suelen responder en 1 día
-
folder description not shows when using folder tree to navigateQuizá libre de nuevo Un pull request para esta issue se cerró sin fusionarse. Abiertobug feature: folder description
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 1 día
-
1. to develop design call discuss discussion ux
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 3/5 1-2 días Aptitud para principiantes 58/100
nextcloud/text#9334 · 1 comentario ·
Los mantenedores suelen responder en 1 día
Todos los issues de nextcloud/text
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 73/100
microsoft/monaco-editor#5563 ·
Los mantenedores suelen responder en 1 día
-
Package downloads never retry: getUrlWithResuming's retry catch cannot see a rejected requestAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
Los mantenedores suelen responder en 1 día
-
account: profile bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 5 días
-
ai-driven-fuzzing bug claude Minor
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
linagora/cozy-client#1777 · 1 comentario · 1 reacción ·
Los mantenedores suelen responder en 1 día