[TSK-1304] Fix active viewlet if viewlet list is empty (#3043)

Signed-off-by: Sergei Ogorelkov <sergei.ogorelkov@icloud.com>
This commit is contained in:
Sergei Ogorelkov 2023-04-24 13:40:03 +04:00 committed by GitHub
parent 904a0614ed
commit c1fac81f50
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 44 additions and 37 deletions

View File

@ -11,7 +11,7 @@
activeViewlet,
getViewOptions,
makeViewletKey,
setActiveViewletId,
updateActiveViewlet,
viewOptionStore
} from '@hcengineering/view-resources'
import { onDestroy } from 'svelte'
@ -35,9 +35,9 @@
$: if (query) updateSearchQuery(search)
let resultQuery: DocumentQuery<Issue> = { ...searchQuery }
let viewlets: WithLookup<Viewlet>[] = []
let viewlets: WithLookup<Viewlet>[] | undefined
$: update(viewlets, active)
$: viewlet = viewlets && updateActiveViewlet(viewlets, active)
const viewletQuery = createQuery()
viewletQuery.query(
view.class.Viewlet,
@ -60,13 +60,6 @@
$: active = $activeViewlet[key]
async function update (viewlets: WithLookup<Viewlet>[], active: Ref<Viewlet> | null): Promise<void> {
viewlet = viewlets.find((viewlet) => viewlet._id === active) ?? viewlets[0]
if (viewlet !== undefined) {
setActiveViewletId(viewlet._id)
}
}
$: if (!label && title) {
translate(title, {}).then((res) => {
label = res

View File

@ -13,7 +13,7 @@
// limitations under the License.
-->
<script lang="ts">
import { DocumentQuery, Ref, WithLookup } from '@hcengineering/core'
import { DocumentQuery, WithLookup } from '@hcengineering/core'
import { IntlString } from '@hcengineering/platform'
import { createQuery } from '@hcengineering/presentation'
import { Sprint } from '@hcengineering/tracker'
@ -37,7 +37,7 @@
activeViewlet,
getViewOptions,
makeViewletKey,
setActiveViewletId,
updateActiveViewlet,
viewOptionStore
} from '@hcengineering/view-resources'
import { onDestroy } from 'svelte'
@ -72,9 +72,9 @@
let resultQuery: DocumentQuery<Sprint> = { ...searchQuery }
let viewlets: WithLookup<Viewlet>[] = []
let viewlets: WithLookup<Viewlet>[] | undefined
$: update(viewlets, active)
$: viewlet = viewlets && updateActiveViewlet(viewlets, active)
const viewletQuery = createQuery()
viewletQuery.query(view.class.Viewlet, { attachTo: tracker.class.Sprint }, (res) => (viewlets = res), {
@ -93,11 +93,6 @@
$: active = $activeViewlet[key]
async function update (viewlets: WithLookup<Viewlet>[], active: Ref<Viewlet> | null): Promise<void> {
viewlet = viewlets.find((viewlet) => viewlet._id === active) ?? viewlets[0]
setActiveViewletId(viewlet._id)
}
let asideFloat: boolean = false
let asideShown: boolean = true
$: if (panelWidth < 900 && !asideFloat) asideFloat = true

View File

@ -11,7 +11,7 @@
activeViewlet,
getViewOptions,
makeViewletKey,
setActiveViewletId,
updateActiveViewlet,
viewOptionStore
} from '@hcengineering/view-resources'
import { onDestroy } from 'svelte'
@ -37,9 +37,9 @@
$: if (query) updateSearchQuery(search)
let resultQuery: DocumentQuery<IssueTemplate> = { ...searchQuery }
let viewlets: WithLookup<Viewlet>[] = []
let viewlets: WithLookup<Viewlet>[] | undefined
$: update(viewlets, active)
$: viewlet = viewlets && updateActiveViewlet(viewlets, active)
const viewletQuery = createQuery()
viewletQuery.query(view.class.Viewlet, { attachTo: tracker.class.IssueTemplate }, (res) => (viewlets = res), {
@ -58,11 +58,6 @@
$: active = $activeViewlet[key]
async function update (viewlets: WithLookup<Viewlet>[], active: Ref<Viewlet> | null): Promise<void> {
viewlet = viewlets.find((viewlet) => viewlet._id === active) ?? viewlets[0]
if (viewlet !== undefined) setActiveViewletId(viewlet._id)
}
$: if (!label && title) {
translate(title, {}).then((res) => {
label = res

View File

@ -520,6 +520,35 @@ export function getActiveViewletId (): Ref<Viewlet> | null {
return localStorage.getItem(key) as Ref<Viewlet> | null
}
/**
* Updates the active viewlet, if one was found.
* Otherwise sets the default viewlet.
*
* @export
* @param {readonly Viewlet[]} viewlets
* @param {(Ref<Viewlet> | null | undefined)} activeViewletId
* @returns {(Viewlet | undefined)}
*/
export function updateActiveViewlet (
viewlets: readonly Viewlet[],
activeViewletId: Ref<Viewlet> | null | undefined
): Viewlet | undefined {
if (viewlets.length === 0) {
return
}
let viewlet: Viewlet | undefined
if (activeViewletId !== null && activeViewletId !== undefined) {
viewlet = viewlets.find((viewlet) => viewlet._id === activeViewletId)
}
viewlet ??= viewlets[0]
setActiveViewletId(viewlet._id)
return viewlet
}
export type FixedWidthStore = Record<string, number>
export const fixedWidthStore = writable<FixedWidthStore>({})

View File

@ -34,7 +34,8 @@
ViewletSettingButton,
activeViewlet,
makeViewletKey,
setActiveViewletId
setActiveViewletId,
updateActiveViewlet
} from '@hcengineering/view-resources'
import { createEventDispatcher, onDestroy } from 'svelte'
import Header from './Header.svelte'
@ -62,7 +63,7 @@
showPopup(createItemDialog as AnyComponent, { space: spaceId }, 'top')
}
$: update(viewlets, active)
$: viewlet = updateActiveViewlet(viewlets, active)
$: if (prevSpaceId !== spaceId) {
search = ''
@ -79,11 +80,6 @@
$: active = $activeViewlet[key]
async function update (viewlets: WithLookup<Viewlet>[], active: Ref<Viewlet> | null): Promise<void> {
viewlet = viewlets.find((viewlet) => viewlet._id === active) ?? viewlets[0]
setActiveViewletId(viewlet._id)
}
$: viewslist = viewlets.map((views) => {
return {
id: views._id,

View File

@ -22,7 +22,7 @@
activeViewlet,
getViewOptions,
makeViewletKey,
setActiveViewletId,
updateActiveViewlet,
viewOptionStore
} from '@hcengineering/view-resources'
import type { ViewConfiguration } from '@hcengineering/workbench'
@ -82,8 +82,7 @@
}
)
if (header !== undefined) {
viewlet = viewlets.find((viewlet) => viewlet._id === active) ?? viewlets[0]
setActiveViewletId(viewlet._id)
viewlet = updateActiveViewlet(viewlets, active)
}
_class = attachTo
}