-
Notifications
You must be signed in to change notification settings - Fork 9
/
FullScreenOverlayCoordinator+Reducer.swift
61 lines (50 loc) · 1.29 KB
/
FullScreenOverlayCoordinator+Reducer.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import ComposableArchitecture
import SwiftUI
public struct FullScreenOverlayCoordinator: Sendable, FeatureReducer {
public struct State: Sendable, Hashable, Identifiable {
public let id: UUID = .init()
public var root: Root.State
public init(root: Root.State) {
self.root = root
}
}
@CasePathable
public enum ChildAction: Sendable, Equatable {
case root(Root.Action)
}
public enum DelegateAction: Sendable, Equatable {
case claimWallet(ClaimWallet.DelegateAction)
case dismiss
}
public struct Root: Sendable, Hashable, Reducer {
@CasePathable
public enum State: Sendable, Hashable {
case claimWallet(ClaimWallet.State)
}
@CasePathable
public enum Action: Sendable, Equatable {
case claimWallet(ClaimWallet.Action)
}
public var body: some ReducerOf<Self> {
Scope(state: \.claimWallet, action: \.claimWallet) {
ClaimWallet()
}
}
}
public init() {}
public var body: some ReducerOf<Self> {
Scope(state: \.root, action: \.child.root) {
Root()
}
Reduce(core)
}
public func reduce(into state: inout State, childAction: ChildAction) -> Effect<Action> {
switch childAction {
// Forward all delegate actions, re-wrapped
case let .root(.claimWallet(.delegate(action))):
.send(.delegate(.claimWallet(action)))
default:
.none
}
}
}