diff --git a/plugins/workbench-resources/src/components/SelectWorkspaceMenu.svelte b/plugins/workbench-resources/src/components/SelectWorkspaceMenu.svelte index 61dc75a6e4..336f8d425d 100644 --- a/plugins/workbench-resources/src/components/SelectWorkspaceMenu.svelte +++ b/plugins/workbench-resources/src/components/SelectWorkspaceMenu.svelte @@ -19,27 +19,45 @@ navigateToWorkspace, selectWorkspace, setLoginInfo, - Workspace + Workspace, + WorkspaceLoginInfo } from '@hcengineering/login-resources' import { getEmbeddedLabel } from '@hcengineering/platform' - import { Loading, locationToUrl, Menu, navigate } from '@hcengineering/ui' + import { fetchMetadataLocalStorage, Loading, locationToUrl, Menu, navigate } from '@hcengineering/ui' import { workbenchId } from '@hcengineering/workbench' import { onMount } from 'svelte' import workbench from '../plugin' - - let workspaces: Workspace[] = [] + import { workspacesStore } from '../utils' onMount(() => { getWorkspaces().then((ws: Workspace[]) => { - workspaces = ws + $workspacesStore = ws }) }) + async function getLoginIngo (ws: string): Promise { + const tokens: Record = fetchMetadataLocalStorage(login.metadata.LoginTokens) ?? {} + const endpoint = fetchMetadataLocalStorage(login.metadata.LoginEndpoint) + const email = fetchMetadataLocalStorage(login.metadata.LoginEmail) + const token = tokens[ws] + if (token && email && endpoint) { + return { + token, + endpoint, + email, + workspace: ws + } + } else { + const loginInfo = (await selectWorkspace(ws))[1] + return loginInfo + } + } + $: actions = [ - ...workspaces.map((w) => ({ + ...$workspacesStore.map((w) => ({ label: getEmbeddedLabel(w.workspace), action: async () => { - const loginInfo = (await selectWorkspace(w.workspace))[1] + const loginInfo = await getLoginIngo(w.workspace) navigateToWorkspace(w.workspace, loginInfo) }, isSubmenuRightClicking: true, @@ -49,7 +67,7 @@ { label: workbench.string.OpenInNewTab, action: async () => { - const loginInfo = (await selectWorkspace(w.workspace))[1] + const loginInfo = await getLoginIngo(w.workspace) if (!loginInfo) { return @@ -72,8 +90,8 @@ ] -{#if workspaces.length} +{#if $workspacesStore.length} {:else} - +
{/if} diff --git a/plugins/workbench-resources/src/components/Workbench.svelte b/plugins/workbench-resources/src/components/Workbench.svelte index aa310635b0..8d29f0ad54 100644 --- a/plugins/workbench-resources/src/components/Workbench.svelte +++ b/plugins/workbench-resources/src/components/Workbench.svelte @@ -47,7 +47,7 @@ import { getContext, onDestroy, onMount, tick } from 'svelte' import { subscribeMobile } from '../mobile' import workbench from '../plugin' - import { doNavigate } from '../utils' + import { doNavigate, workspacesStore } from '../utils' import AccountPopup from './AccountPopup.svelte' import AppItem from './AppItem.svelte' import Applications from './Applications.svelte' @@ -55,6 +55,7 @@ import NavHeader from './NavHeader.svelte' import Navigator from './Navigator.svelte' import SpaceView from './SpaceView.svelte' + import { getWorkspaces, Workspace } from '@hcengineering/login-resources' export let client: Client let contentPanel: HTMLElement @@ -84,6 +85,10 @@ apps = result }) + getWorkspaces().then((ws: Workspace[]) => { + $workspacesStore = ws + }) + let panelInstance: PanelInstance let visibileNav: boolean = true diff --git a/plugins/workbench-resources/src/utils.ts b/plugins/workbench-resources/src/utils.ts index b2862117d2..b96e1b2ab9 100644 --- a/plugins/workbench-resources/src/utils.ts +++ b/plugins/workbench-resources/src/utils.ts @@ -24,6 +24,8 @@ import { closePanel, getCurrentLocation, navigate } from '@hcengineering/ui' import { getClient } from '@hcengineering/presentation' import type { Application } from '@hcengineering/workbench' import preference from '@hcengineering/preference' +import { writable } from 'svelte/store' +import { Workspace } from '@hcengineering/login-resources' export function classIcon (client: Client, _class: Ref>): Asset | undefined { return client.getHierarchy().getClass(_class).icon @@ -135,3 +137,5 @@ export async function showApplication (app: Application): Promise { await client.remove(current) } } + +export const workspacesStore = writable([]) diff --git a/tests/sanity/tests/login.spec.ts b/tests/sanity/tests/login.spec.ts index 05d2df2e21..2cb192efd2 100644 --- a/tests/sanity/tests/login.spec.ts +++ b/tests/sanity/tests/login.spec.ts @@ -23,7 +23,6 @@ test.describe('login test', () => { expect(await button.isEnabled()).toBe(true) await button.click() - await page.waitForNavigation() await page.click('text=sanity-ws') })