Skip to content

Commit db49f92

Browse files
authored
Merge pull request #9 from anthony1810/develop
Update README examples to use StateUpdatable API
2 parents 368dcbf + 131e3d8 commit db49f92

1 file changed

Lines changed: 10 additions & 19 deletions

File tree

README.md

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -101,25 +101,12 @@ import ScreenStateKit
101101
import Observation
102102

103103
@Observable @MainActor
104-
final class FeatureViewState: ScreenState {
104+
final class FeatureViewState: LoadmoreScreenState, StateUpdatable {
105105
// UI Configuration
106106
let headerHeight: CGFloat = 120.0
107107

108108
// Data State
109-
private(set) var items: [Item] = []
110-
private(set) var shouldShowLoadMore: Bool = false
111-
112-
/// Safe property update helper
113-
func tryUpdate<T>(
114-
property: @autoclosure @MainActor () -> KeyPath<FeatureViewState, T>,
115-
newValue: T
116-
) {
117-
guard let keypath = property() as? ReferenceWritableKeyPath<FeatureViewState, T> else {
118-
assertionFailure("Read-only property")
119-
return
120-
}
121-
self[keyPath: keypath] = newValue
122-
}
109+
var items: [Item] = []
123110
}
124111
```
125112

@@ -193,13 +180,17 @@ actor FeatureViewStore: ScreenActionStore {
193180
// MARK: - Action Implementations
194181
private func fetchItems() async throws {
195182
let result = try await dataService.fetchItems(page: 1, limit: 20)
196-
await viewState?.tryUpdate(property: \.items, newValue: result.items)
183+
await viewState?.updateState { state in
184+
state.items = result.items
185+
}
197186
}
198187

199188
private func loadMoreItems() async throws {
189+
let currentItems = await viewState?.items ?? []
200190
let result = try await dataService.fetchItems(page: 2, limit: 20)
201-
let allItems = (await viewState?.items ?? []) + result.items
202-
await viewState?.tryUpdate(property: \.items, newValue: allItems)
191+
await viewState?.updateState { state in
192+
state.items = currentItems + result.items
193+
}
203194
}
204195
}
205196
```
@@ -257,7 +248,7 @@ struct FeatureView: View {
257248
}
258249

259250
// Load more indicator
260-
if viewState.shouldShowLoadMore {
251+
if !viewState.items.isEmpty && viewState.canShowLoadmore {
261252
ProgressView()
262253
.frame(maxWidth: .infinity)
263254
.onAppear {

0 commit comments

Comments
 (0)