Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Attachment menu disabled ("shared from another cloud") in fileless embeds — breaks Deck card descriptions

Abierto
#9,150 0 comentarios 0 reacciones 0 asignados Ver en GitHub

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.

  1. Deck embeds Text with content only, no fileId:
    https://github.com/nextcloud/deck/blob/main/src/components/card/Description.vue

    this.editor = await window.OCA.Text.createEditor({
      el: this.$refs.editor,
      content: this.card.description,
      readOnly: !this.canEdit,
      onFileInsert: () => { this.showAttachmentModal() },   // <-- host-provided hook
    })
    
  2. In src/createEditor.ts, optionsForCollaboration() is Boolean(options.fileId) && (options.useSession ?? true) → false, so createMarkdownContentEditor() renders MarkdownContentEditorApp.vue.

  3. provideConnection() is called only from src/components/CollaborativeEditor.vue. The markdown-content path never calls it, so the injected openData stays undefined.

  4. src/components/Menu/ActionAttachmentUpload.vue:

    isUploadDisabled() {
      return !this.openData?.hasOwner || !this.networkOnline
    }
    

    undefined?.hasOwner → undefined → falsy → disabled, and menuTitle falls 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
  1. Install and enable Deck and Text.
  2. Open any Deck card, edit the description with the rich text editor.
  3. Hover the paperclip in the toolbar.
  4. 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

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de nextcloud/text

Todos los issues de nextcloud/text

Issues similares

Más issues de JavaScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.