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 }) => {