|
5 | 5 | import { Issue, TrackerEvents } from '@hcengineering/tracker' |
6 | 6 | import { IModeSelector, themeStore } from '@hcengineering/ui' |
7 | 7 | import { ViewOptions, Viewlet } from '@hcengineering/view' |
8 | | - import { FilterBar, SpaceHeader, ViewletContentView, ViewletSettingButton } from '@hcengineering/view-resources' |
| 8 | + import { FilterBar, SpaceHeader, ViewletContentView, ViewletSettingButton, setFilters, filterStore, createFilter } from '@hcengineering/view-resources' |
9 | 9 | import tracker from '../../plugin' |
10 | 10 | import CreateIssue from '../CreateIssue.svelte' |
11 | 11 | import { get } from 'svelte/store' |
|
50 | 50 | } |
51 | 51 |
|
52 | 52 | async function restoreTrackerIssueState (): Promise<void> { |
53 | | - console.log('[DEBUG_STATE_ISSUES] Restore State: Starting for tab', get(tabIdStore)) |
| 53 | + await tick() |
| 54 | + await tick() |
| 55 | +
|
54 | 56 | const tabId = get(tabIdStore) |
55 | 57 | if (!tabId) { |
56 | | - console.log('[DEBUG_STATE_ISSUES] Restore State: No tabId, skipping.') |
57 | 58 | return |
58 | 59 | } |
59 | | - console.log('[DEBUG_STATE_ISSUES] Restore State: Awaiting ticks for component render.') |
60 | | - await tick() |
61 | | - await tick() |
62 | | - console.log('[DEBUG_STATE_ISSUES] Restore State: Ticks complete, searching tab state.') |
| 60 | +
|
63 | 61 | const tab = get(tabsStore).find((t) => t._id === tabId) |
64 | 62 | if (tab?.uiState) { |
65 | | - console.log('[DEBUG_STATE_ISSUES] Restore State: uiState found.', tab.uiState) |
66 | 63 | const savedViewletId = tab.uiState.viewletId |
67 | 64 | const savedFilterBarQuery = tab.uiState.filterBarState |
68 | | - console.log( |
69 | | - '[DEBUG_STATE_ISSUES] Restore State: Found saved Viewlet ID:', |
70 | | - savedViewletId, |
71 | | - 'Saved Filter State:', |
72 | | - savedFilterBarQuery |
73 | | - ) |
74 | | -
|
75 | | - if (!viewletsReady) { |
76 | | - console.log('[DEBUG_STATE_ISSUES] Restore State: Viewlets not yet marked as ready. Exiting to re-trigger.') |
77 | | - return |
78 | | - } |
79 | 65 |
|
80 | | - if (savedViewletId && viewlets && viewlets.length > 0) { |
| 66 | + if (viewletsReady && viewlets && viewlets.length > 0) { |
81 | 67 | const foundViewlet = viewlets.find((v) => v._id === savedViewletId) |
82 | | - if (foundViewlet) { |
83 | | - viewlet = foundViewlet |
84 | | - console.log('[DEBUG_STATE_ISSUES] Restore State: Viewlet restored to ID:', viewlet?._id) |
85 | | - } else { |
86 | | - viewlet = viewlets[0] |
87 | | - console.log( |
88 | | - '[DEBUG_STATE_ISSUES] Restore State: Saved Viewlet not found, set to first available:', |
89 | | - viewlet?._id |
90 | | - ) |
91 | | - } |
92 | | - } else { |
93 | | - console.log('[DEBUG_STATE_ISSUES] Restore State: No saved Viewlet ID or viewlets not ready/empty.') |
| 68 | + viewlet = foundViewlet || viewlets[0] |
94 | 69 | } |
| 70 | +
|
95 | 71 | if (savedFilterBarQuery) { |
96 | | - resultQuery = { ...searchQuery, ...savedFilterBarQuery } |
97 | | - console.log('[DEBUG_STATE_ISSUES] Restore State: FilterBar query restored:', resultQuery) |
| 72 | + resultQuery = { ...savedFilterBarQuery } |
98 | 73 | } else { |
99 | 74 | resultQuery = { ...searchQuery } |
100 | | - console.log('[DEBUG_STATE_ISSUES] Restore State: No saved FilterBar query, set to initial:', resultQuery) |
101 | 75 | } |
102 | 76 | } else { |
103 | 77 | resultQuery = { ...searchQuery } |
104 | | - console.log('[DEBUG_STATE_ISSUES] Restore State: No uiState found, set FilterBar to initial:', resultQuery) |
105 | 78 | } |
106 | | - console.log('[DEBUG_STATE_ISSUES] Restore State: Finished.') |
107 | 79 | } |
108 | 80 |
|
109 | 81 | $: { |
|
178 | 150 | label = res |
179 | 151 | }) |
180 | 152 | } |
| 153 | +
|
| 154 | + $: { |
| 155 | + if (search && resultQuery.$search !== search) { |
| 156 | + resultQuery = { ...resultQuery, $search: search } |
| 157 | + } else if (!search && '$search' in resultQuery) { |
| 158 | + const { $search, ...rest } = resultQuery |
| 159 | + resultQuery = rest |
| 160 | + } |
| 161 | + } |
181 | 162 | </script> |
182 | 163 |
|
183 | 164 | <SpaceHeader |
|
212 | 193 | /> |
213 | 194 | </svelte:fragment> |
214 | 195 | </SpaceHeader> |
215 | | -<FilterBar |
216 | | - _class={tracker.class.Issue} |
217 | | - {space} |
218 | | - query={searchQuery} |
219 | | - {viewOptions} |
220 | | - on:change={(e) => (resultQuery = e.detail)} |
221 | | -/> |
| 196 | +<FilterBar _class={tracker.class.Issue} {space} bind:query={resultQuery} {viewOptions} /> |
222 | 197 | <slot name="afterHeader" /> |
223 | 198 | {#if viewlet && viewOptions} |
224 | 199 | <ViewletContentView |
|
0 commit comments