From 3082f316e4483d14c6faeb2e2f37352631ac3361 Mon Sep 17 00:00:00 2001
From: Andrey Sobolev <haiodo@users.noreply.github.com>
Date: Tue, 3 Oct 2023 17:02:37 +0700
Subject: [PATCH] UBER-974: Fix saved views and mode in filters (#3780)

Signed-off-by: Andrey Sobolev <haiodo@gmail.com>
---
 .../src/components/issues/Issues.svelte       | 59 ++++++++++---------
 .../src/components/filter/FilterButton.svelte |  6 +-
 2 files changed, 36 insertions(+), 29 deletions(-)

diff --git a/plugins/tracker-resources/src/components/issues/Issues.svelte b/plugins/tracker-resources/src/components/issues/Issues.svelte
index 24fcb2d674..2ff506ea10 100644
--- a/plugins/tracker-resources/src/components/issues/Issues.svelte
+++ b/plugins/tracker-resources/src/components/issues/Issues.svelte
@@ -16,7 +16,7 @@
   import { DocumentQuery, Ref } from '@hcengineering/core'
   import { IntlString } from '@hcengineering/platform'
   import { createQuery } from '@hcengineering/presentation'
-  import { Issue, Project } from '@hcengineering/tracker'
+  import { Issue, IssueStatus, Project } from '@hcengineering/tracker'
   import { resolvedLocationStore } from '@hcengineering/ui'
   import { createEventDispatcher } from 'svelte'
 
@@ -33,32 +33,6 @@
   let query: DocumentQuery<Issue> | undefined = undefined
   let modeSelectorProps: IModeSelector | undefined = undefined
 
-  $: spaceQuery = currentSpace ? { space: currentSpace } : { space: { $nin: archived } }
-
-  $: all = { ...baseQuery, ...spaceQuery }
-
-  const activeStatusQuery = createQuery()
-  let active: DocumentQuery<Issue>
-  $: activeStatusQuery.query(
-    tracker.class.IssueStatus,
-    {
-      category: { $in: [tracker.issueStatusCategory.Unstarted, tracker.issueStatusCategory.Started] }
-    },
-    (result) => {
-      active = { status: { $in: result.map(({ _id }) => _id) }, ...spaceQuery }
-    }
-  )
-
-  const backlogStatusQuery = createQuery()
-  let backlog: DocumentQuery<Issue> = {}
-  $: backlogStatusQuery.query(
-    tracker.class.IssueStatus,
-    { category: tracker.issueStatusCategory.Backlog },
-    (result) => {
-      backlog = { status: { $in: result.map(({ _id }) => _id) }, ...spaceQuery }
-    }
-  )
-
   const archivedProjectQuery = createQuery()
   let archived: Ref<Project>[] = []
 
@@ -70,6 +44,37 @@
     },
     { projection: { _id: 1 } }
   )
+  $: spaceQuery = currentSpace ? { space: currentSpace } : { space: { $nin: archived } }
+
+  $: all = { ...baseQuery, ...spaceQuery }
+
+  const activeStatusQuery = createQuery()
+
+  let activeStatuses: Ref<IssueStatus>[] = []
+
+  $: activeStatusQuery.query(
+    tracker.class.IssueStatus,
+    { category: { $in: [tracker.issueStatusCategory.Unstarted, tracker.issueStatusCategory.Started] } },
+    (result) => {
+      activeStatuses = result.map(({ _id }) => _id)
+    }
+  )
+
+  let active: DocumentQuery<Issue>
+  $: active = { status: { $in: activeStatuses }, ...spaceQuery }
+
+  const backlogStatusQuery = createQuery()
+
+  let backlogStatuses: Ref<IssueStatus>[] = []
+  let backlog: DocumentQuery<Issue> = {}
+  $: backlogStatusQuery.query(
+    tracker.class.IssueStatus,
+    { category: tracker.issueStatusCategory.Backlog },
+    (result) => {
+      backlogStatuses = result.map(({ _id }) => _id)
+    }
+  )
+  $: backlog = { status: { $in: backlogStatuses }, ...spaceQuery }
 
   $: queries = { all, active, backlog }
   $: mode = $resolvedLocationStore.query?.mode ?? undefined
diff --git a/plugins/view-resources/src/components/filter/FilterButton.svelte b/plugins/view-resources/src/components/filter/FilterButton.svelte
index e3f0593153..cf1c9d7dc5 100644
--- a/plugins/view-resources/src/components/filter/FilterButton.svelte
+++ b/plugins/view-resources/src/components/filter/FilterButton.svelte
@@ -17,7 +17,7 @@
   import { getClient } from '@hcengineering/presentation'
   import { Button, IconFilter, eventToHTMLElement, resolvedLocationStore, showPopup } from '@hcengineering/ui'
   import { Filter } from '@hcengineering/view'
-  import { filterStore, getFilterKey, setFilters } from '../../filter'
+  import { filterStore, getFilterKey, selectedFilterStore, setFilters } from '../../filter'
   import view from '../../plugin'
   import FilterTypePopup from './FilterTypePopup.svelte'
   import IconClose from '../icons/Close.svelte'
@@ -30,7 +30,9 @@
   const hierarchy = client.getHierarchy()
 
   resolvedLocationStore.subscribe(() => {
-    load(_class)
+    if ($selectedFilterStore === undefined) {
+      load(_class)
+    }
   })
 
   function load (_class: Ref<Class<Doc>> | undefined) {