diff --git a/packages/presentation/src/pulse.ts b/packages/presentation/src/pulse.ts index 9dfc305900b..e0019da98fe 100644 --- a/packages/presentation/src/pulse.ts +++ b/packages/presentation/src/pulse.ts @@ -15,24 +15,50 @@ import { HulypulseClient } from '@hcengineering/hulypulse-client' import { getMetadata } from '@hcengineering/platform' import presentation from './plugin' -let pulseClient: HulypulseClient | undefined +let currentWorkspaceUuid: string | undefined let currentToken: string | undefined +let promise: Promise | undefined export async function createPulseClient (): Promise { - const token = getMetadata(presentation.metadata.Token) - if (token !== currentToken) { + const pulseUrl = getMetadata(presentation.metadata.PulseUrl) ?? '' + const token = getMetadata(presentation.metadata.Token) ?? '' + const workspaceUuid = getMetadata(presentation.metadata.WorkspaceUuid) ?? '' + + if (pulseUrl === '' || token === '' || workspaceUuid === '') { + return undefined + } + + // Token or workspace changed, need to reconnect + if (token !== currentToken || workspaceUuid !== currentWorkspaceUuid) { closePulseClient() } - if (pulseClient === undefined) { - const wsPulseUrl = getMetadata(presentation.metadata.PulseUrl) - if (wsPulseUrl == null || wsPulseUrl.trim().length === 0) return undefined - pulseClient = await HulypulseClient.connect(`${wsPulseUrl}?token=${token}`) - currentToken = token + + if (promise !== undefined) { + // eslint-disable-next-line @typescript-eslint/return-await + return promise } - return pulseClient + + promise = new Promise((resolve) => { + HulypulseClient.connect(`${pulseUrl}?token=${token}`) + .then(resolve) + .catch(() => { + resolve(undefined) + }) + }) + currentToken = token + currentWorkspaceUuid = workspaceUuid + + // eslint-disable-next-line @typescript-eslint/return-await + return promise } export function closePulseClient (): void { - pulseClient?.close() - pulseClient = undefined + if (promise !== undefined) { + void promise.then((client) => { + client?.close() + }) + } + promise = undefined + currentToken = undefined + currentWorkspaceUuid = undefined } diff --git a/packages/ui/src/components/internal/RootBarExtension.svelte b/packages/ui/src/components/internal/RootBarExtension.svelte index baeb3b231dc..91c98a70536 100644 --- a/packages/ui/src/components/internal/RootBarExtension.svelte +++ b/packages/ui/src/components/internal/RootBarExtension.svelte @@ -1,5 +1,5 @@ -{#each sorted as ext (ext[1].id)} - {#if ext[0] === position} -
- { - rootBarExtensions.update((cur) => { - return cur.filter((it) => it[1].id !== ext[1].id) - }) - }} - /> -
- {/if} -{/each} +{#key $workspaceId} + {#each sorted as ext (ext[1].id)} + {#if ext[0] === position} +
+ { + rootBarExtensions.update((cur) => { + return cur.filter((it) => it[1].id !== ext[1].id) + }) + }} + /> +
+ {/if} + {/each} +{/key} diff --git a/plugins/chunter-resources/src/components/ChannelTypingInfo.svelte b/plugins/chunter-resources/src/components/ChannelTypingInfo.svelte index 0353a40bd7d..1cbe484a3d5 100644 --- a/plugins/chunter-resources/src/components/ChannelTypingInfo.svelte +++ b/plugins/chunter-resources/src/components/ChannelTypingInfo.svelte @@ -15,8 +15,8 @@