diff --git a/plugins/love-resources/src/components/Hall.svelte b/plugins/love-resources/src/components/Hall.svelte index 829ee04544..aaa5b08c22 100644 --- a/plugins/love-resources/src/components/Hall.svelte +++ b/plugins/love-resources/src/components/Hall.svelte @@ -29,7 +29,7 @@ myRequests, rooms, selectedFloor, - storePromise + waitForOfficeLoaded } from '../stores' import { connectToMeeting, tryConnect } from '../utils' import Floor from './Floor.svelte' @@ -72,11 +72,11 @@ const { sessionId, meetId, ...query } = loc.query ?? {} loc.query = Object.keys(query).length === 0 ? undefined : query navigate(loc, true) - if (sessionId != null) { - await $storePromise + if (sessionId) { + await waitForOfficeLoaded() await connectToSession(sessionId) - } else if (meetId != null) { - await $storePromise + } else if (meetId) { + await waitForOfficeLoaded() await connectToMeeting($personByIdStore, $myInfo, $infos, $myRequests, $invites, meetId) } }) diff --git a/plugins/love-resources/src/components/Main.svelte b/plugins/love-resources/src/components/Main.svelte index 4220408264..07f0c69c3b 100644 --- a/plugins/love-resources/src/components/Main.svelte +++ b/plugins/love-resources/src/components/Main.svelte @@ -23,7 +23,7 @@ import { getMetadata } from '@hcengineering/platform' import love from '../plugin' import { tryConnect, isConnected, isCurrentInstanceConnected, screenSharing } from '../utils' - import { infos, invites, myInfo, myRequests, storePromise, currentRoom } from '../stores' + import { infos, invites, myInfo, myRequests, waitForOfficeLoaded, currentRoom } from '../stores' const localNav: boolean = $deviceInfo.navigator.visible const savedNav = localStorage.getItem('love-visibleNav') @@ -41,7 +41,7 @@ return } - await $storePromise + await waitForOfficeLoaded() const room = $currentRoom if (room === undefined) return diff --git a/plugins/love-resources/src/components/Room.svelte b/plugins/love-resources/src/components/Room.svelte index 67332e6413..34012a52ef 100644 --- a/plugins/love-resources/src/components/Room.svelte +++ b/plugins/love-resources/src/components/Room.svelte @@ -34,7 +34,7 @@ import { aiBotSocialIdentityStore } from '@hcengineering/ai-bot-resources' import love from '../plugin' - import { storePromise, currentRoom, infos, invites, myInfo, myRequests } from '../stores' + import { waitForOfficeLoaded, currentRoom, infos, invites, myInfo, myRequests } from '../stores' import { awaitConnect, isConnected, @@ -231,7 +231,7 @@ configured = true - await $storePromise + await waitForOfficeLoaded() if ( !$isConnected && diff --git a/plugins/love-resources/src/stores.ts b/plugins/love-resources/src/stores.ts index 1e280e6f1d..ffa7208b3a 100644 --- a/plugins/love-resources/src/stores.ts +++ b/plugins/love-resources/src/stores.ts @@ -72,7 +72,7 @@ function filterParticipantInfo (value: ParticipantInfo[]): ParticipantInfo[] { return Array.from(map.values()) } -export const storePromise = writable>(new Promise((resolve) => {})) +const officeLoaded = writable(false) const query = createQuery(true) const statusQuery = createQuery(true) @@ -124,19 +124,25 @@ onClient(() => { resolve() }) ) - storePromise.set( - new Promise((resolve) => { - void Promise.all([ - roomPromise, - infoPromise, - floorPromise, - requestPromise, - preferencePromise, - invitesPromise - ]).then(() => { - resolve() - }) - }) + + void Promise.all([roomPromise, infoPromise, floorPromise, requestPromise, preferencePromise, invitesPromise]).then( + () => { + officeLoaded.set(true) + } ) }) + +export async function waitForOfficeLoaded (): Promise { + if (!get(officeLoaded)) { + await new Promise((resolve) => { + const unsubscribe = officeLoaded.subscribe((loaded) => { + if (loaded) { + unsubscribe() + resolve(null) + } + }) + }) + } +} + export const lockedRoom = writable('')