diff --git a/plugins/tracker-resources/src/components/myissues/MyIssues.svelte b/plugins/tracker-resources/src/components/myissues/MyIssues.svelte index 2fe9847a67..b7dda3f1cc 100644 --- a/plugins/tracker-resources/src/components/myissues/MyIssues.svelte +++ b/plugins/tracker-resources/src/components/myissues/MyIssues.svelte @@ -30,15 +30,23 @@ ['subscribed', tracker.string.Subscribed] ] const currentUser = getCurrentAccount() as EmployeeAccount - const queries: { [n: string]: DocumentQuery<Issue> | undefined } = { assigned: { assignee: currentUser.employee } } + const assigned = { assignee: currentUser.employee } + const created = { _id: { $in: [] as Ref<Issue>[] } } + const subscribed = { _id: { $in: [] as Ref<Issue>[] } } const createdQuery = createQuery() $: createdQuery.query<TxCollectionCUD<Issue, Issue>>( core.class.TxCollectionCUD, - { modifiedBy: currentUser._id, objectClass: tracker.class.Issue, collection: 'subIssues' }, + { + modifiedBy: currentUser._id, + objectClass: tracker.class.Issue, + collection: 'subIssues', + 'tx._class': core.class.TxCreateDoc + }, (result) => { - queries.created = { _id: { $in: result.map(({ tx: { objectId } }) => objectId) } } - } + created._id.$in = result.map(({ tx: { objectId } }) => objectId) + }, + { sort: { _id: 1 } } ) const subscribedQuery = createQuery() @@ -46,8 +54,13 @@ notification.class.LastView, { user: getCurrentAccount()._id, attachedToClass: tracker.class.Issue, lastView: { $gte: 0 } }, (result) => { - queries.subscribed = { _id: { $in: result.map(({ attachedTo }) => attachedTo as Ref<Issue>) } } - } + const newSub = result.map(({ attachedTo }) => attachedTo as Ref<Issue>) + const curSub = subscribed._id.$in + if (curSub.length !== newSub.length || curSub.some((id, i) => newSub[i] !== id)) { + subscribed._id.$in = newSub + } + }, + { sort: { _id: 1 } } ) let [[mode]] = config @@ -55,9 +68,14 @@ if (newMode === mode) return mode = newMode } + + function getQuery (mode: string, queries: { [key: string]: DocumentQuery<Issue> }) { + return queries[mode] + } + $: query = getQuery(mode, { assigned, created, subscribed }) </script> -<IssuesView query={queries[mode]} title={tracker.string.MyIssues}> +<IssuesView {query} title={tracker.string.MyIssues}> <svelte:fragment slot="afterHeader"> <ModeSelector {config} {mode} onChange={handleChangeMode} /> </svelte:fragment>