fix: show collaborator connection errors (#9259)

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>
This commit is contained in:
Alexander Onnikov
2025-06-16 20:35:29 +07:00
committed by GitHub
parent 2babee059d
commit 995d5750fe
13 changed files with 48 additions and 41 deletions
+2 -1
View File
@@ -72,6 +72,7 @@
"SetTextColor": "Nastavit barvu textu",
"ConvertToLinkPreview": "Zobrazit jako odkaz",
"ConvertToEmbedPreview": "Zobrazit jako náhled obsahu",
"UnableToLoadEmbeddedContent": "Náhled odkazu nelze načíst kvůli nastavení oprávnění nebo nepodporovanému obsahu"
"UnableToLoadEmbeddedContent": "Náhled odkazu nelze načíst kvůli nastavení oprávnění nebo nepodporovanému obsahu",
"CannotConnectToCollaborationService": "Nelze se připojit k službě spolupráce"
}
}
+2 -1
View File
@@ -71,6 +71,7 @@
"SetTextColor": "Textfarbe ändern",
"ConvertToLinkPreview": "Als Link anzeigen",
"ConvertToEmbedPreview": "Als Inhaltsvorschau anzeigen",
"UnableToLoadEmbeddedContent": "Die Linkvorschau konnte aufgrund von Berechtigungseinstellungen oder nicht unterstütztem Inhalt nicht geladen werden"
"UnableToLoadEmbeddedContent": "Die Linkvorschau konnte aufgrund von Berechtigungseinstellungen oder nicht unterstütztem Inhalt nicht geladen werden",
"CannotConnectToCollaborationService": "Kann keine Verbindung zum Kollaborationsdienst herstellen"
}
}
+2 -1
View File
@@ -73,6 +73,7 @@
"ConvertToLinkPreview": "Show as a link",
"ConvertToEmbedPreview": "Show as a content preview",
"UnableToLoadEmbeddedContent": "Link preview couldn't be loaded due to permission settings or unsupported content"
"UnableToLoadEmbeddedContent": "Link preview couldn't be loaded due to permission settings or unsupported content",
"CannotConnectToCollaborationService": "Cannot connect to collaboration service"
}
}
+2 -1
View File
@@ -62,6 +62,7 @@
"DrawingBoard": "Tablero de dibujos",
"ConvertToLinkPreview": "Mostrar como enlace",
"ConvertToEmbedPreview": "Mostrar como vista previa de contenido",
"UnableToLoadEmbeddedContent": "No se pudo cargar la vista previa del enlace debido a la configuración de permisos o contenido no compatible"
"UnableToLoadEmbeddedContent": "No se pudo cargar la vista previa del enlace debido a la configuración de permisos o contenido no compatible",
"CannotConnectToCollaborationService": "No se puede conectar con el colaborador"
}
}
+2 -1
View File
@@ -62,6 +62,7 @@
"DrawingBoard": "Tableau de dessin",
"ConvertToLinkPreview": "Afficher comme lien",
"ConvertToEmbedPreview": "Afficher comme aperçu de contenu",
"UnableToLoadEmbeddedContent": "Laperçu du lien na pas pu être chargé en raison des paramètres dautorisation ou dun contenu non pris en charge"
"UnableToLoadEmbeddedContent": "Laperçu du lien na pas pu être chargé en raison des paramètres dautorisation ou dun contenu non pris en charge",
"CannotConnectToCollaborationService": "Impossible de se connecter au collaborateur"
}
}
+2 -1
View File
@@ -71,6 +71,7 @@
"SetTextColor": "Cambia il colore del testo",
"ConvertToLinkPreview": "Mostra come link",
"ConvertToEmbedPreview": "Mostra come anteprima del contenuto",
"UnableToLoadEmbeddedContent": "Impossibile caricare l'anteprima del link a causa delle impostazioni dei permessi o di contenuto non supportato"
"UnableToLoadEmbeddedContent": "Impossibile caricare l'anteprima del link a causa delle impostazioni dei permessi o di contenuto non supportato",
"CannotConnectToCollaborationService": "Impossibile connettersi al servizio di collaborazione"
}
}
+2 -1
View File
@@ -73,6 +73,7 @@
"ConvertToLinkPreview": "リンクとして表示",
"ConvertToEmbedPreview": "コンテンツプレビューとして表示",
"UnableToLoadEmbeddedContent": "リンクのプレビューを読み込めません。権限設定または非対応のコンテンツが原因です"
"UnableToLoadEmbeddedContent": "リンクのプレビューを読み込めません。権限設定または非対応のコンテンツが原因です",
"CannotConnectToCollaborationService": "コラボレーションサービスに接続できません"
}
}
+2 -1
View File
@@ -62,6 +62,7 @@
"DrawingBoard": "Quadro de desenho",
"ConvertToLinkPreview": "Mostrar como link",
"ConvertToEmbedPreview": "Mostrar como pré-visualização de conteúdo",
"UnableToLoadEmbeddedContent": "Não foi possível carregar a pré-visualização do link devido às permissões ou a conteúdo não suportado"
"UnableToLoadEmbeddedContent": "Não foi possível carregar a pré-visualização do link devido às permissões ou a conteúdo não suportado",
"CannotConnectToCollaborationService": "Não foi possível conectar ao serviço de colaboração"
}
}
+2 -1
View File
@@ -72,6 +72,7 @@
"SetTextColor": "Изменить цвет текста",
"ConvertToLinkPreview": "Показать как ссылку",
"ConvertToEmbedPreview": "Показать как превью контента",
"UnableToLoadEmbeddedContent": "Не удалось загрузить превью ссылки из-за настроек доступа или неподдерживаемого содержимого"
"UnableToLoadEmbeddedContent": "Не удалось загрузить превью ссылки из-за настроек доступа или неподдерживаемого содержимого",
"CannotConnectToCollaborationService": "Не удалось подключиться к сервису совместной работы"
}
}
+2 -1
View File
@@ -65,6 +65,7 @@
"ConvertToLinkPreview": "显示为链接",
"ConvertToEmbedPreview": "显示为内容预览",
"UnableToLoadEmbeddedContent": "由于权限设置或不支持的内容,无法加载链接预览"
"UnableToLoadEmbeddedContent": "由于权限设置或不支持的内容,无法加载链接预览",
"CannotConnectToCollaborationService": "无法连接到协作者"
}
}
@@ -152,8 +152,6 @@
let editor: Editor
let element: HTMLElement
let textToolbarElement: HTMLElement
let imageToolbarElement: HTMLElement
let editorPopupContainer: HTMLElement
let placeHolderStr: string = ''
@@ -242,10 +240,6 @@
needFocus = false
}
function handleFocus (): void {
needFocus = true
}
$: if (editor !== undefined) {
// When the content is invalid, we don't want to emit an update
// Preventing synchronization of the invalid content
@@ -253,9 +247,6 @@
editor.setEditable(editable, emitUpdate)
}
// TODO: should be inside the editor
$: showToolbar = canShowPopups
const optionalExtensions: AnyExtension[] = []
if (attachFile !== undefined) {
+6 -2
View File
@@ -15,6 +15,10 @@
//
import { textEditorId } from '@hcengineering/text-editor'
import { plugin } from '@hcengineering/platform'
import { type IntlString, plugin } from '@hcengineering/platform'
export default plugin(textEditorId, {})
export default plugin(textEditorId, {
string: {
CannotConnectToCollaborationService: '' as IntlString
}
})
@@ -15,12 +15,12 @@
import { type Blob, type CollaborativeDoc, type Ref, generateId } from '@hcengineering/core'
import { encodeDocumentId } from '@hcengineering/collaborator-client'
import { getMetadata } from '@hcengineering/platform'
import { OK, Severity, Status, getMetadata, setPlatformStatus } from '@hcengineering/platform'
import presentation from '@hcengineering/presentation'
import textEditor from '@hcengineering/text-editor'
import { Doc as Ydoc } from 'yjs'
import { CloudCollabProvider } from './cloud'
import plugin from '../plugin'
import { HocuspocusCollabProvider } from './hocuspocus'
import { IndexeddbProvider } from './indexeddb'
import { type Provider } from './types'
@@ -36,28 +36,30 @@ export function createLocalProvider (ydoc: Ydoc, doc: CollaborativeDoc): Provide
}
export function createRemoteProvider (ydoc: Ydoc, doc: CollaborativeDoc, content: Ref<Blob> | null): Provider {
const collaborator = getMetadata(textEditor.metadata.Collaborator)
const token = getMetadata(presentation.metadata.Token) ?? ''
const collaboratorUrl = getMetadata(presentation.metadata.CollaboratorUrl) ?? ''
const documentId = getDocumentId(doc)
return collaborator === 'cloud'
? new CloudCollabProvider({
url: collaboratorUrl,
name: documentId,
document: ydoc,
content,
token
})
: new HocuspocusCollabProvider({
url: collaboratorUrl,
name: documentId,
document: ydoc,
token,
parameters: { content }
})
const provider = new HocuspocusCollabProvider({
url: collaboratorUrl,
name: documentId,
document: ydoc,
token,
parameters: { content },
onConnect: () => {
void setPlatformStatus(OK)
},
onClose: (data) => {
if (data.event.code === 1006) {
console.error('Failed to connect to collaborator', data.event)
const status = new Status(Severity.ERROR, plugin.string.CannotConnectToCollaborationService, {})
void setPlatformStatus(status)
}
}
})
return provider
}
export const createTiptapCollaborationData = (