You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: Sources/ComposableNavigator/Navigator/Navigator.swift
+49Lines changed: 49 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -1,13 +1,18 @@
1
1
import Foundation
2
2
3
3
publicstructNavigator{
4
+
privatelet_path:()->[IdentifiedScreen]
4
5
privatelet_go:(AnyScreen,ScreenID)->Void
5
6
privatelet_goBack:(AnyScreen)->Void
6
7
privatelet_replace:([AnyScreen])->Void
7
8
privatelet_dismiss:(ScreenID)->Void
8
9
privatelet_dismissSuccessor:(ScreenID)->Void
9
10
privatelet_didAppear:(ScreenID)->Void
10
11
12
+
func path()->[IdentifiedScreen]{
13
+
_path()
14
+
}
15
+
11
16
publicfunc go<S:Screen>(to screen:S, on id:ScreenID){
12
17
_go(screen.eraseToAnyScreen(), id)
13
18
}
@@ -37,13 +42,15 @@ public struct Navigator {
37
42
}
38
43
39
44
publicinit(
45
+
path:@escaping()->[IdentifiedScreen],
40
46
go:@escaping(AnyScreen,ScreenID)->Void,
41
47
goBack:@escaping(AnyScreen)->Void,
42
48
replace:@escaping([AnyScreen])->Void,
43
49
dismiss:@escaping(ScreenID)->Void,
44
50
dismissSuccessor:@escaping(ScreenID)->Void,
45
51
didAppear:@escaping(ScreenID)->Void
46
52
){
53
+
self._path = path
47
54
self._go = go
48
55
self._goBack = goBack
49
56
self._replace = replace
@@ -53,8 +60,10 @@ public struct Navigator {
53
60
}
54
61
}
55
62
63
+
// MARK: - Stub
56
64
publicextensionNavigator{
57
65
staticfunc stub(
66
+
path:@escaping()->[IdentifiedScreen]={fatalError("path() unimplemented in stub. Make sure to wrap your application in a Root view or inject Navigator via .environment(\\.navigator, navigator) for testing purposes.")},
58
67
go:@escaping(AnyScreen,ScreenID)->Void={ _, _ infatalError("go(to:) unimplemented in stub. Make sure to wrap your application in a Root view or inject Navigator via .environment(\\.navigator, navigator) for testing purposes.")},
59
68
goBack:@escaping(AnyScreen)->Void={ _ infatalError("goBack(to:) unimplemented in stub. Make sure to wrap your application in a Root view or inject Navigator via .environment(\\.navigator, navigator) for testing purposes.")},
60
69
replace:@escaping([AnyScreen])->Void={ _ infatalError("replace(path:) unimplemented in stub. Make sure to wrap your application in a Root view or inject Navigator via .environment(\\.navigator, navigator) for testing purposes.")},
@@ -63,6 +72,7 @@ public extension Navigator {
63
72
didAppear:@escaping(ScreenID)->Void={ _ infatalError("didAppear(id:) unimplemented in stub. Make sure to wrap your application in a Root view or inject Navigator via .environment(\\.navigator, navigator) for testing purposes.")}
64
73
)->Navigator{
65
74
Navigator(
75
+
path: path,
66
76
go: go,
67
77
goBack: goBack,
68
78
replace: replace,
@@ -72,3 +82,42 @@ public extension Navigator {
72
82
)
73
83
}
74
84
}
85
+
86
+
// MARK: - Debug
87
+
publicextensionNavigator{
88
+
func debug()->Navigator{
89
+
Navigator(
90
+
path: path,
91
+
go:{(screen, id)in
92
+
_go(screen, id)
93
+
print("Sent go(to: \(screen), on: \(id)).\nNew path:")
0 commit comments