Skip to content

Commit 7c8f7fb

Browse files
authored
Merge pull request #7 from KaiTheRedNinja/main
Add IfQueryable, for conditionally showing a view
2 parents 147a87f + 2684998 commit 7c8f7fb

1 file changed

Lines changed: 40 additions & 0 deletions

File tree

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
//
2+
// IfQueryable.swift
3+
//
4+
//
5+
// Created by Kai Quan Tay on 12/1/24.
6+
//
7+
8+
import SwiftUI
9+
10+
public struct WithQuery<Item, Result, QueryContent: View>: View {
11+
@ObservedObject private var queryable: Queryable<Item, Result>
12+
private var queryContent: (_ item: Item, _ query: QueryResolver<Result>) -> QueryContent
13+
14+
public init(
15+
_ queryable: Queryable<Item, Result>,
16+
@ViewBuilder queryContent: @escaping (_ item: Item, _ query: QueryResolver<Result>) -> QueryContent
17+
) {
18+
self.queryable = queryable
19+
self.queryContent = queryContent
20+
}
21+
22+
public init(
23+
_ queryable: Queryable<Void, Result>,
24+
@ViewBuilder queryContent: @escaping (_ query: QueryResolver<Result>) -> QueryContent
25+
) where Item == Void {
26+
self.queryable = queryable
27+
self.queryContent = { _, query in queryContent(query) }
28+
}
29+
30+
public var body: some View {
31+
if let initialItemContainer = queryable.itemContainer {
32+
StableItemContainerView(itemContainer: initialItemContainer) { itemContainer in
33+
queryContent(itemContainer.item, initialItemContainer.resolver)
34+
.onDisappear {
35+
queryable.autoCancelContinuation(id: itemContainer.id, reason: .presentationEnded)
36+
}
37+
}
38+
}
39+
}
40+
}

0 commit comments

Comments
 (0)