mirror of
https://github.com/hcengineering/platform.git
synced 2025-06-07 00:09:34 +00:00
[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:
parent
904a0614ed
commit
c1fac81f50
@ -11,7 +11,7 @@
|
|||||||
activeViewlet,
|
activeViewlet,
|
||||||
getViewOptions,
|
getViewOptions,
|
||||||
makeViewletKey,
|
makeViewletKey,
|
||||||
setActiveViewletId,
|
updateActiveViewlet,
|
||||||
viewOptionStore
|
viewOptionStore
|
||||||
} from '@hcengineering/view-resources'
|
} from '@hcengineering/view-resources'
|
||||||
import { onDestroy } from 'svelte'
|
import { onDestroy } from 'svelte'
|
||||||
@ -35,9 +35,9 @@
|
|||||||
$: if (query) updateSearchQuery(search)
|
$: if (query) updateSearchQuery(search)
|
||||||
let resultQuery: DocumentQuery<Issue> = { ...searchQuery }
|
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()
|
const viewletQuery = createQuery()
|
||||||
viewletQuery.query(
|
viewletQuery.query(
|
||||||
view.class.Viewlet,
|
view.class.Viewlet,
|
||||||
@ -60,13 +60,6 @@
|
|||||||
|
|
||||||
$: active = $activeViewlet[key]
|
$: 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) {
|
$: if (!label && title) {
|
||||||
translate(title, {}).then((res) => {
|
translate(title, {}).then((res) => {
|
||||||
label = res
|
label = res
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
-->
|
-->
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { DocumentQuery, Ref, WithLookup } from '@hcengineering/core'
|
import { DocumentQuery, WithLookup } from '@hcengineering/core'
|
||||||
import { IntlString } from '@hcengineering/platform'
|
import { IntlString } from '@hcengineering/platform'
|
||||||
import { createQuery } from '@hcengineering/presentation'
|
import { createQuery } from '@hcengineering/presentation'
|
||||||
import { Sprint } from '@hcengineering/tracker'
|
import { Sprint } from '@hcengineering/tracker'
|
||||||
@ -37,7 +37,7 @@
|
|||||||
activeViewlet,
|
activeViewlet,
|
||||||
getViewOptions,
|
getViewOptions,
|
||||||
makeViewletKey,
|
makeViewletKey,
|
||||||
setActiveViewletId,
|
updateActiveViewlet,
|
||||||
viewOptionStore
|
viewOptionStore
|
||||||
} from '@hcengineering/view-resources'
|
} from '@hcengineering/view-resources'
|
||||||
import { onDestroy } from 'svelte'
|
import { onDestroy } from 'svelte'
|
||||||
@ -72,9 +72,9 @@
|
|||||||
|
|
||||||
let resultQuery: DocumentQuery<Sprint> = { ...searchQuery }
|
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()
|
const viewletQuery = createQuery()
|
||||||
viewletQuery.query(view.class.Viewlet, { attachTo: tracker.class.Sprint }, (res) => (viewlets = res), {
|
viewletQuery.query(view.class.Viewlet, { attachTo: tracker.class.Sprint }, (res) => (viewlets = res), {
|
||||||
@ -93,11 +93,6 @@
|
|||||||
|
|
||||||
$: active = $activeViewlet[key]
|
$: 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 asideFloat: boolean = false
|
||||||
let asideShown: boolean = true
|
let asideShown: boolean = true
|
||||||
$: if (panelWidth < 900 && !asideFloat) asideFloat = true
|
$: if (panelWidth < 900 && !asideFloat) asideFloat = true
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
activeViewlet,
|
activeViewlet,
|
||||||
getViewOptions,
|
getViewOptions,
|
||||||
makeViewletKey,
|
makeViewletKey,
|
||||||
setActiveViewletId,
|
updateActiveViewlet,
|
||||||
viewOptionStore
|
viewOptionStore
|
||||||
} from '@hcengineering/view-resources'
|
} from '@hcengineering/view-resources'
|
||||||
import { onDestroy } from 'svelte'
|
import { onDestroy } from 'svelte'
|
||||||
@ -37,9 +37,9 @@
|
|||||||
$: if (query) updateSearchQuery(search)
|
$: if (query) updateSearchQuery(search)
|
||||||
let resultQuery: DocumentQuery<IssueTemplate> = { ...searchQuery }
|
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()
|
const viewletQuery = createQuery()
|
||||||
viewletQuery.query(view.class.Viewlet, { attachTo: tracker.class.IssueTemplate }, (res) => (viewlets = res), {
|
viewletQuery.query(view.class.Viewlet, { attachTo: tracker.class.IssueTemplate }, (res) => (viewlets = res), {
|
||||||
@ -58,11 +58,6 @@
|
|||||||
|
|
||||||
$: active = $activeViewlet[key]
|
$: 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) {
|
$: if (!label && title) {
|
||||||
translate(title, {}).then((res) => {
|
translate(title, {}).then((res) => {
|
||||||
label = res
|
label = res
|
||||||
|
@ -520,6 +520,35 @@ export function getActiveViewletId (): Ref<Viewlet> | null {
|
|||||||
return localStorage.getItem(key) as 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 type FixedWidthStore = Record<string, number>
|
||||||
|
|
||||||
export const fixedWidthStore = writable<FixedWidthStore>({})
|
export const fixedWidthStore = writable<FixedWidthStore>({})
|
||||||
|
@ -34,7 +34,8 @@
|
|||||||
ViewletSettingButton,
|
ViewletSettingButton,
|
||||||
activeViewlet,
|
activeViewlet,
|
||||||
makeViewletKey,
|
makeViewletKey,
|
||||||
setActiveViewletId
|
setActiveViewletId,
|
||||||
|
updateActiveViewlet
|
||||||
} from '@hcengineering/view-resources'
|
} from '@hcengineering/view-resources'
|
||||||
import { createEventDispatcher, onDestroy } from 'svelte'
|
import { createEventDispatcher, onDestroy } from 'svelte'
|
||||||
import Header from './Header.svelte'
|
import Header from './Header.svelte'
|
||||||
@ -62,7 +63,7 @@
|
|||||||
showPopup(createItemDialog as AnyComponent, { space: spaceId }, 'top')
|
showPopup(createItemDialog as AnyComponent, { space: spaceId }, 'top')
|
||||||
}
|
}
|
||||||
|
|
||||||
$: update(viewlets, active)
|
$: viewlet = updateActiveViewlet(viewlets, active)
|
||||||
|
|
||||||
$: if (prevSpaceId !== spaceId) {
|
$: if (prevSpaceId !== spaceId) {
|
||||||
search = ''
|
search = ''
|
||||||
@ -79,11 +80,6 @@
|
|||||||
|
|
||||||
$: active = $activeViewlet[key]
|
$: 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) => {
|
$: viewslist = viewlets.map((views) => {
|
||||||
return {
|
return {
|
||||||
id: views._id,
|
id: views._id,
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
activeViewlet,
|
activeViewlet,
|
||||||
getViewOptions,
|
getViewOptions,
|
||||||
makeViewletKey,
|
makeViewletKey,
|
||||||
setActiveViewletId,
|
updateActiveViewlet,
|
||||||
viewOptionStore
|
viewOptionStore
|
||||||
} from '@hcengineering/view-resources'
|
} from '@hcengineering/view-resources'
|
||||||
import type { ViewConfiguration } from '@hcengineering/workbench'
|
import type { ViewConfiguration } from '@hcengineering/workbench'
|
||||||
@ -82,8 +82,7 @@
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
if (header !== undefined) {
|
if (header !== undefined) {
|
||||||
viewlet = viewlets.find((viewlet) => viewlet._id === active) ?? viewlets[0]
|
viewlet = updateActiveViewlet(viewlets, active)
|
||||||
setActiveViewletId(viewlet._id)
|
|
||||||
}
|
}
|
||||||
_class = attachTo
|
_class = attachTo
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user