diff --git a/plugins/tracker-resources/src/components/issues/IssuesView.svelte b/plugins/tracker-resources/src/components/issues/IssuesView.svelte index edaabf22e1..fb2e94dd0f 100644 --- a/plugins/tracker-resources/src/components/issues/IssuesView.svelte +++ b/plugins/tracker-resources/src/components/issues/IssuesView.svelte @@ -1,18 +1,20 @@ -{#if categories.length === 0}} +{#if categories.length === 0} {:else} diff --git a/plugins/workbench-resources/src/components/SpaceHeader.svelte b/plugins/workbench-resources/src/components/SpaceHeader.svelte index 6f53fd2462..9e0f8821a2 100644 --- a/plugins/workbench-resources/src/components/SpaceHeader.svelte +++ b/plugins/workbench-resources/src/components/SpaceHeader.svelte @@ -20,15 +20,21 @@ import { AnyComponent, Button, - deviceOptionsStore as deviceInfo, IconAdd, SearchEdit, - showPopup, - TabList + TabList, + deviceOptionsStore as deviceInfo, + location, + showPopup } from '@hcengineering/ui' - import { Viewlet, ViewOptions } from '@hcengineering/view' - import { getActiveViewletId, setActiveViewletId, ViewletSettingButton } from '@hcengineering/view-resources' - import { createEventDispatcher } from 'svelte' + import { ViewOptions, Viewlet } from '@hcengineering/view' + import { + ViewletSettingButton, + activeViewlet, + makeViewletKey, + setActiveViewletId + } from '@hcengineering/view-resources' + import { createEventDispatcher, onDestroy } from 'svelte' import Header from './Header.svelte' export let spaceId: Ref | undefined @@ -54,19 +60,28 @@ showPopup(createItemDialog as AnyComponent, { space: spaceId }, 'top') } - $: updateViewlets(viewlets) + $: update(viewlets, active) $: if (prevSpaceId !== spaceId) { search = '' dispatch('search', '') } - function updateViewlets (viewlets: WithLookup[]) { - const _id = getActiveViewletId() - const index = viewlets.findIndex((p) => p._id === (viewlet?._id ?? _id)) - viewlet = index === -1 ? viewlets[0] : viewlets[index] + let key = makeViewletKey() + + onDestroy( + location.subscribe((loc) => { + key = makeViewletKey(loc) + }) + ) + + $: active = $activeViewlet[key] + + async function update (viewlets: WithLookup[], active: Ref | null): Promise { + viewlet = viewlets.find((viewlet) => viewlet._id === active) ?? viewlets[0] setActiveViewletId(viewlet._id) } + $: viewslist = viewlets.map((views) => { return { id: views._id, diff --git a/plugins/workbench-resources/src/components/SpaceView.svelte b/plugins/workbench-resources/src/components/SpaceView.svelte index fb74bd0b42..21e406635a 100644 --- a/plugins/workbench-resources/src/components/SpaceView.svelte +++ b/plugins/workbench-resources/src/components/SpaceView.svelte @@ -16,10 +16,17 @@ import core, { Class, Doc, Ref, Space, WithLookup } from '@hcengineering/core' import { IntlString } from '@hcengineering/platform' import { getClient } from '@hcengineering/presentation' - import { AnyComponent, Component } from '@hcengineering/ui' + import { AnyComponent, Component, location } from '@hcengineering/ui' import view, { Viewlet } from '@hcengineering/view' - import { getActiveViewletId, getViewOptions, viewOptionStore } from '@hcengineering/view-resources' + import { + activeViewlet, + getViewOptions, + makeViewletKey, + setActiveViewletId, + viewOptionStore + } from '@hcengineering/view-resources' import type { ViewConfiguration } from '@hcengineering/workbench' + import { onDestroy } from 'svelte' import SpaceContent from './SpaceContent.svelte' import SpaceHeader from './SpaceHeader.svelte' @@ -38,9 +45,22 @@ let viewlets: WithLookup[] = [] - $: update(currentSpace, currentView?.class) + let key = makeViewletKey() + onDestroy( + location.subscribe((loc) => { + key = makeViewletKey(loc) + }) + ) - async function update (currentSpace?: Ref, attachTo?: Ref>): Promise { + $: active = $activeViewlet[key] + + $: update(active, currentSpace, currentView?.class) + + async function update ( + active: Ref | null, + currentSpace?: Ref, + attachTo?: Ref> + ): Promise { if (currentSpace === undefined) { space = undefined return @@ -62,8 +82,8 @@ } ) if (header !== undefined) { - const _id = getActiveViewletId() - viewlet = viewlets.find((viewlet) => viewlet._id === _id) || viewlets[0] + viewlet = viewlets.find((viewlet) => viewlet._id === active) ?? viewlets[0] + setActiveViewletId(viewlet._id) } _class = attachTo } diff --git a/plugins/workbench-resources/src/components/SpecialView.svelte b/plugins/workbench-resources/src/components/SpecialView.svelte index 4b6ba85034..d762d67e68 100644 --- a/plugins/workbench-resources/src/components/SpecialView.svelte +++ b/plugins/workbench-resources/src/components/SpecialView.svelte @@ -20,25 +20,28 @@ AnyComponent, Button, Component, - deviceOptionsStore as deviceInfo, Icon, IconAdd, Label, Loading, SearchEdit, - showPopup, - TabList + TabList, + deviceOptionsStore as deviceInfo, + location, + showPopup } from '@hcengineering/ui' import view, { Viewlet, ViewletDescriptor, ViewletPreference } from '@hcengineering/view' import { FilterBar, FilterButton, - getActiveViewletId, - getViewOptions, - setActiveViewletId, ViewletSettingButton, + activeViewlet, + getViewOptions, + makeViewletKey, + setActiveViewletId, viewOptionStore } from '@hcengineering/view-resources' + import { onDestroy } from 'svelte' export let _class: Ref> export let space: Ref | undefined = undefined @@ -67,9 +70,35 @@ let viewlets: WithLookup[] = [] - $: update(_class, descriptors) + const viewletQuery = createQuery() + $: viewletQuery.query( + view.class.Viewlet, + { attachTo: _class, variant: { $exists: false } }, + (res) => (viewlets = res), + { + lookup: { + descriptor: view.class.ViewletDescriptor + } + } + ) - async function update (_class: Ref>, descriptors?: Ref[]): Promise { + let key = makeViewletKey() + + onDestroy( + location.subscribe((loc) => { + key = makeViewletKey(loc) + }) + ) + + $: active = $activeViewlet[key] + + $: update(_class, active, descriptors) + + async function update ( + _class: Ref>, + active: Ref | null, + descriptors?: Ref[] + ): Promise { loading = true viewlets = await client.findAll( view.class.Viewlet, @@ -84,9 +113,9 @@ } } ) - const _id = getActiveViewletId() preference = undefined - viewlet = viewlets.find((viewlet) => viewlet._id === _id) || viewlets[0] + viewlet = viewlets.find((viewlet) => viewlet._id === active) ?? viewlets[0] + setActiveViewletId(viewlet._id) loading = false } diff --git a/tests/sanity/tests/recruit.spec.ts b/tests/sanity/tests/recruit.spec.ts index ae91eab6a7..48916f5ea1 100644 --- a/tests/sanity/tests/recruit.spec.ts +++ b/tests/sanity/tests/recruit.spec.ts @@ -55,8 +55,8 @@ test.describe('recruit tests', () => { const panel = page.locator('.popupPanel') await panel.locator('[id="gmail\\:string\\:Email"]').scrollIntoViewIfNeeded() - await panel.locator('[id="gmail\\:string\\:Email"]').hover() - await expect(page.locator(`text=${email}`).first()).toBeVisible() + await panel.locator('[id="gmail\\:string\\:Email"]').click() + expect(await page.locator('.cover-channel >> input').inputValue()).toEqual(email) }) test('create-application', async ({ page }) => {