@@ -26,35 +26,63 @@ final class FilterCoordinator {
2626 let capturedLogicMode = logicMode
2727 parent. confirmDiscardChangesIfNeeded ( action: . filter) { [ weak self] confirmed in
2828 guard let self, confirmed else { return }
29- guard capturedTabIndex < parent. tabManager. tabs. count else { return }
29+ commitFilters (
30+ capturedFilters,
31+ logicMode: capturedLogicMode,
32+ tabIndex: capturedTabIndex,
33+ tableName: capturedTableName
34+ )
35+ }
36+ }
3037
31- if let capturedLogicMode {
32- parent. tabManager. mutate ( at: capturedTabIndex) {
33- $0. filterState. filterLogicMode = capturedLogicMode
34- $0. filterState. isVisible = true
35- }
38+ /// Writes the one predicate a reference jump carries and re-queries for it.
39+ ///
40+ /// The caller has already taken the discard guard, because it also records the view the tab is
41+ /// leaving and both have to land on the same side of a refusal.
42+ func commitReferenceFilter( _ filter: TableFilter ) {
43+ guard let ( tab, tabIndex) = parent. tabManager. selectedTabAndIndex,
44+ let tableName = tab. tableContext. tableName else { return }
45+ setFKFilter ( filter)
46+ commitFilters ( [ filter] , logicMode: nil , tabIndex: tabIndex, tableName: tableName)
47+ }
48+
49+ private func commitFilters(
50+ _ filters: [ TableFilter ] ,
51+ logicMode: FilterLogicMode ? ,
52+ tabIndex: Int ,
53+ tableName: String
54+ ) {
55+ guard tabIndex < parent. tabManager. tabs. count else { return }
56+
57+ if let logicMode {
58+ parent. tabManager. mutate ( at: tabIndex) {
59+ $0. filterState. filterLogicMode = logicMode
60+ $0. filterState. isVisible = true
3661 }
37- parent. tabManager. mutate ( at: capturedTabIndex) { $0. pagination. reset ( ) }
62+ }
63+ parent. tabManager. mutate ( at: tabIndex) { $0. pagination. reset ( ) }
3864
39- let tab = parent. tabManager. tabs [ capturedTabIndex ]
40- let queryColumns = parent. queryColumns ( for: tab)
41- let newQuery = parent. queryBuilder. buildFilteredQuery (
42- tableName: capturedTableName ,
43- schemaName: tab. tableContext. schemaName,
44- filters: capturedFilters ,
45- logicMode: tab. filterState. filterLogicMode,
46- sortState: tab. sortState,
47- columns: queryColumns. columns,
48- columnTypes: queryColumns. columnTypes,
49- selectColumns: parent. selectColumns ( for: tab) ,
50- limit: tab. pagination. pageSize,
51- offset: tab. pagination. currentOffset
52- )
65+ let tab = parent. tabManager. tabs [ tabIndex ]
66+ let queryColumns = parent. queryColumns ( for: tab)
67+ let newQuery = parent. queryBuilder. buildFilteredQuery (
68+ tableName: tableName ,
69+ schemaName: tab. tableContext. schemaName,
70+ filters: filters ,
71+ logicMode: tab. filterState. filterLogicMode,
72+ sortState: tab. sortState,
73+ columns: queryColumns. columns,
74+ columnTypes: queryColumns. columnTypes,
75+ selectColumns: parent. selectColumns ( for: tab) ,
76+ limit: tab. pagination. pageSize,
77+ offset: tab. pagination. currentOffset
78+ )
5379
54- parent. tabManager. mutate ( at: capturedTabIndex ) { $0 . content . query = newQuery }
55- saveLastFilters ( for : capturedTableName )
56- parent . runQuery ( )
80+ parent. tabManager. mutate ( at: tabIndex ) {
81+ $0 . content . query = newQuery
82+ $0 . filterState . executedFilters = filters
5783 }
84+ saveLastFilters ( for: tableName)
85+ parent. runQuery ( )
5886 }
5987
6088 func clearFiltersAndReload( ) {
@@ -81,7 +109,10 @@ final class FilterCoordinator {
81109 offset: tab. pagination. currentOffset
82110 )
83111
84- parent. tabManager. mutate ( at: capturedTabIndex) { $0. content. query = newQuery }
112+ parent. tabManager. mutate ( at: capturedTabIndex) {
113+ $0. content. query = newQuery
114+ $0. filterState. executedFilters = [ ]
115+ }
85116 clearLastFilters ( for: capturedTableName)
86117 parent. runQuery ( )
87118 }
@@ -216,7 +247,11 @@ final class FilterCoordinator {
216247 )
217248 }
218249
219- parent. tabManager. mutate ( at: tabIndex) { $0. content. query = newQuery }
250+ let executed = hasFilters ? tab. filterState. appliedFilters : [ ]
251+ parent. tabManager. mutate ( at: tabIndex) {
252+ $0. content. query = newQuery
253+ $0. filterState. executedFilters = executed
254+ }
220255 }
221256
222257 // MARK: - Filter State
0 commit comments