Skip to content

Commit af9c43d

Browse files
97chosinteractord
authored andcommitted
feat: TabLinkNavigator - Implemented injectedParameter example
1 parent 63546c1 commit af9c43d

26 files changed

Lines changed: 641 additions & 9 deletions
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import LinkNavigator
2+
3+
struct AppDependency: DependencyType { }

Examples/TabNavigator/01-TabBasic/TabBasic/Pages/Common/Step1/Step1Page.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ struct Step1Page: View {
1616
Text("Next to 'Step2'")
1717
}
1818

19+
Button(action: { navigator.close(isAnimated: true, completeAction: { }) }) {
20+
Text("Close Sheet")
21+
}
22+
1923
Spacer()
2024
}
2125
.onAppear {

Examples/TabNavigator/01-TabBasic/TabBasic/Pages/Common/Step2/Step2Page.swift

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,6 @@ struct Step2Page: View {
2020
Text("Open Full-Sheet 'Step1'")
2121
}
2222

23-
Button(action: { navigator.close(isAnimated: true, completeAction: { }) }) {
24-
Text("Close Sheet")
25-
}
26-
2723
Button(action: { navigator.back(isAnimated: true) }) {
2824
Text("Back")
2925
}

Examples/TabNavigator/01-TabBasic/TabBasic/TabBasicApp.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import LinkNavigator
55
struct TabBasicApp: App {
66
let tabLinkNavigator = TabLinkNavigator(
77
routeBuilderItemList: AppRouterBuilderGroup().routers,
8-
dependency: TabAppDependency())
8+
dependency: AppDependency())
99

1010
var body: some Scene {
1111
WindowGroup {

Examples/TabNavigator/01-TabBasic/TabBasic/TapAppDependency.swift

Lines changed: 0 additions & 3 deletions
This file was deleted.

Examples/TabNavigator/02-TabInjectionParameter/02-TabInjectionParameter.xcodeproj/project.pbxproj

Lines changed: 164 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,25 @@
1313
29758CFD2B44F95C00307B89 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 29758CFC2B44F95C00307B89 /* Preview Assets.xcassets */; };
1414
29AB43432B4557C800C32F2A /* LinkNavigator in Frameworks */ = {isa = PBXBuildFile; productRef = 29AB43422B4557C800C32F2A /* LinkNavigator */; };
1515
29AB43462B4557D700C32F2A /* PageTemplate in Frameworks */ = {isa = PBXBuildFile; productRef = 29AB43452B4557D700C32F2A /* PageTemplate */; };
16+
7E7A32C32B469BF50078DAFF /* AppDependency.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E7A32C22B469BF50078DAFF /* AppDependency.swift */; };
17+
7E7A32C52B469C010078DAFF /* AppRouteBuilderGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E7A32C42B469C010078DAFF /* AppRouteBuilderGroup.swift */; };
18+
7E7A32CB2B469CBD0078DAFF /* PathIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E7A32CA2B469CBD0078DAFF /* PathIndicator.swift */; };
19+
7E7A32E72B469D680078DAFF /* Tab1Page.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E7A32CF2B469D680078DAFF /* Tab1Page.swift */; };
20+
7E7A32E82B469D680078DAFF /* Tab1RouteBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E7A32D02B469D680078DAFF /* Tab1RouteBuilder.swift */; };
21+
7E7A32E92B469D680078DAFF /* Tab2RouteBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E7A32D22B469D680078DAFF /* Tab2RouteBuilder.swift */; };
22+
7E7A32EA2B469D680078DAFF /* Tab2Page.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E7A32D32B469D680078DAFF /* Tab2Page.swift */; };
23+
7E7A32EB2B469D680078DAFF /* Tab3RouteBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E7A32D52B469D680078DAFF /* Tab3RouteBuilder.swift */; };
24+
7E7A32EC2B469D680078DAFF /* Tab3Page.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E7A32D62B469D680078DAFF /* Tab3Page.swift */; };
25+
7E7A32ED2B469D680078DAFF /* Tab4RouteBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E7A32D82B469D680078DAFF /* Tab4RouteBuilder.swift */; };
26+
7E7A32EE2B469D680078DAFF /* Tab4Page.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E7A32D92B469D680078DAFF /* Tab4Page.swift */; };
27+
7E7A32EF2B469D680078DAFF /* Step4RouteBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E7A32DC2B469D680078DAFF /* Step4RouteBuilder.swift */; };
28+
7E7A32F02B469D680078DAFF /* Step4Page.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E7A32DD2B469D680078DAFF /* Step4Page.swift */; };
29+
7E7A32F12B469D680078DAFF /* Step3RouteBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E7A32DF2B469D680078DAFF /* Step3RouteBuilder.swift */; };
30+
7E7A32F22B469D680078DAFF /* Step3Page.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E7A32E02B469D680078DAFF /* Step3Page.swift */; };
31+
7E7A32F32B469D680078DAFF /* Step2RouteBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E7A32E22B469D680078DAFF /* Step2RouteBuilder.swift */; };
32+
7E7A32F42B469D680078DAFF /* Step2Page.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E7A32E32B469D680078DAFF /* Step2Page.swift */; };
33+
7E7A32F52B469D680078DAFF /* Step1RouteBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E7A32E52B469D680078DAFF /* Step1RouteBuilder.swift */; };
34+
7E7A32F62B469D680078DAFF /* Step1Page.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E7A32E62B469D680078DAFF /* Step1Page.swift */; };
1635
/* End PBXBuildFile section */
1736

1837
/* Begin PBXFileReference section */
@@ -22,6 +41,25 @@
2241
29758CF82B44F95C00307B89 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
2342
29758CFA2B44F95C00307B89 /* TabInjectionParameter.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = TabInjectionParameter.entitlements; sourceTree = "<group>"; };
2443
29758CFC2B44F95C00307B89 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = "<group>"; };
44+
7E7A32C22B469BF50078DAFF /* AppDependency.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDependency.swift; sourceTree = "<group>"; };
45+
7E7A32C42B469C010078DAFF /* AppRouteBuilderGroup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppRouteBuilderGroup.swift; sourceTree = "<group>"; };
46+
7E7A32CA2B469CBD0078DAFF /* PathIndicator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PathIndicator.swift; sourceTree = "<group>"; };
47+
7E7A32CF2B469D680078DAFF /* Tab1Page.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Tab1Page.swift; sourceTree = "<group>"; };
48+
7E7A32D02B469D680078DAFF /* Tab1RouteBuilder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Tab1RouteBuilder.swift; sourceTree = "<group>"; };
49+
7E7A32D22B469D680078DAFF /* Tab2RouteBuilder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Tab2RouteBuilder.swift; sourceTree = "<group>"; };
50+
7E7A32D32B469D680078DAFF /* Tab2Page.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Tab2Page.swift; sourceTree = "<group>"; };
51+
7E7A32D52B469D680078DAFF /* Tab3RouteBuilder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Tab3RouteBuilder.swift; sourceTree = "<group>"; };
52+
7E7A32D62B469D680078DAFF /* Tab3Page.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Tab3Page.swift; sourceTree = "<group>"; };
53+
7E7A32D82B469D680078DAFF /* Tab4RouteBuilder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Tab4RouteBuilder.swift; sourceTree = "<group>"; };
54+
7E7A32D92B469D680078DAFF /* Tab4Page.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Tab4Page.swift; sourceTree = "<group>"; };
55+
7E7A32DC2B469D680078DAFF /* Step4RouteBuilder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Step4RouteBuilder.swift; sourceTree = "<group>"; };
56+
7E7A32DD2B469D680078DAFF /* Step4Page.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Step4Page.swift; sourceTree = "<group>"; };
57+
7E7A32DF2B469D680078DAFF /* Step3RouteBuilder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Step3RouteBuilder.swift; sourceTree = "<group>"; };
58+
7E7A32E02B469D680078DAFF /* Step3Page.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Step3Page.swift; sourceTree = "<group>"; };
59+
7E7A32E22B469D680078DAFF /* Step2RouteBuilder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Step2RouteBuilder.swift; sourceTree = "<group>"; };
60+
7E7A32E32B469D680078DAFF /* Step2Page.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Step2Page.swift; sourceTree = "<group>"; };
61+
7E7A32E52B469D680078DAFF /* Step1RouteBuilder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Step1RouteBuilder.swift; sourceTree = "<group>"; };
62+
7E7A32E62B469D680078DAFF /* Step1Page.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Step1Page.swift; sourceTree = "<group>"; };
2563
/* End PBXFileReference section */
2664

2765
/* Begin PBXFrameworksBuildPhase section */
@@ -56,8 +94,12 @@
5694
29758CF32B44F95B00307B89 /* TabInjectionParameter */ = {
5795
isa = PBXGroup;
5896
children = (
97+
7E7A32C72B469C2D0078DAFF /* Pages */,
98+
7E7A32C62B469C280078DAFF /* Component */,
5999
29758CF42B44F95B00307B89 /* TabInjectionParameterApp.swift */,
60100
29758CF62B44F95B00307B89 /* ContentView.swift */,
101+
7E7A32C42B469C010078DAFF /* AppRouteBuilderGroup.swift */,
102+
7E7A32C22B469BF50078DAFF /* AppDependency.swift */,
61103
29758CF82B44F95C00307B89 /* Assets.xcassets */,
62104
29758CFA2B44F95C00307B89 /* TabInjectionParameter.entitlements */,
63105
29758CFB2B44F95C00307B89 /* Preview Content */,
@@ -73,6 +115,109 @@
73115
path = "Preview Content";
74116
sourceTree = "<group>";
75117
};
118+
7E7A32C62B469C280078DAFF /* Component */ = {
119+
isa = PBXGroup;
120+
children = (
121+
7E7A32CA2B469CBD0078DAFF /* PathIndicator.swift */,
122+
);
123+
path = Component;
124+
sourceTree = "<group>";
125+
};
126+
7E7A32C72B469C2D0078DAFF /* Pages */ = {
127+
isa = PBXGroup;
128+
children = (
129+
7E7A32DA2B469D680078DAFF /* Common */,
130+
7E7A32CE2B469D680078DAFF /* Tab1 */,
131+
7E7A32D12B469D680078DAFF /* Tab2 */,
132+
7E7A32D42B469D680078DAFF /* Tab3 */,
133+
7E7A32D72B469D680078DAFF /* Tab4 */,
134+
);
135+
path = Pages;
136+
sourceTree = "<group>";
137+
};
138+
7E7A32CE2B469D680078DAFF /* Tab1 */ = {
139+
isa = PBXGroup;
140+
children = (
141+
7E7A32CF2B469D680078DAFF /* Tab1Page.swift */,
142+
7E7A32D02B469D680078DAFF /* Tab1RouteBuilder.swift */,
143+
);
144+
path = Tab1;
145+
sourceTree = "<group>";
146+
};
147+
7E7A32D12B469D680078DAFF /* Tab2 */ = {
148+
isa = PBXGroup;
149+
children = (
150+
7E7A32D22B469D680078DAFF /* Tab2RouteBuilder.swift */,
151+
7E7A32D32B469D680078DAFF /* Tab2Page.swift */,
152+
);
153+
path = Tab2;
154+
sourceTree = "<group>";
155+
};
156+
7E7A32D42B469D680078DAFF /* Tab3 */ = {
157+
isa = PBXGroup;
158+
children = (
159+
7E7A32D52B469D680078DAFF /* Tab3RouteBuilder.swift */,
160+
7E7A32D62B469D680078DAFF /* Tab3Page.swift */,
161+
);
162+
path = Tab3;
163+
sourceTree = "<group>";
164+
};
165+
7E7A32D72B469D680078DAFF /* Tab4 */ = {
166+
isa = PBXGroup;
167+
children = (
168+
7E7A32D82B469D680078DAFF /* Tab4RouteBuilder.swift */,
169+
7E7A32D92B469D680078DAFF /* Tab4Page.swift */,
170+
);
171+
path = Tab4;
172+
sourceTree = "<group>";
173+
};
174+
7E7A32DA2B469D680078DAFF /* Common */ = {
175+
isa = PBXGroup;
176+
children = (
177+
7E7A32DB2B469D680078DAFF /* Step4 */,
178+
7E7A32DE2B469D680078DAFF /* Step3 */,
179+
7E7A32E12B469D680078DAFF /* Step2 */,
180+
7E7A32E42B469D680078DAFF /* Step1 */,
181+
);
182+
path = Common;
183+
sourceTree = "<group>";
184+
};
185+
7E7A32DB2B469D680078DAFF /* Step4 */ = {
186+
isa = PBXGroup;
187+
children = (
188+
7E7A32DC2B469D680078DAFF /* Step4RouteBuilder.swift */,
189+
7E7A32DD2B469D680078DAFF /* Step4Page.swift */,
190+
);
191+
path = Step4;
192+
sourceTree = "<group>";
193+
};
194+
7E7A32DE2B469D680078DAFF /* Step3 */ = {
195+
isa = PBXGroup;
196+
children = (
197+
7E7A32DF2B469D680078DAFF /* Step3RouteBuilder.swift */,
198+
7E7A32E02B469D680078DAFF /* Step3Page.swift */,
199+
);
200+
path = Step3;
201+
sourceTree = "<group>";
202+
};
203+
7E7A32E12B469D680078DAFF /* Step2 */ = {
204+
isa = PBXGroup;
205+
children = (
206+
7E7A32E22B469D680078DAFF /* Step2RouteBuilder.swift */,
207+
7E7A32E32B469D680078DAFF /* Step2Page.swift */,
208+
);
209+
path = Step2;
210+
sourceTree = "<group>";
211+
};
212+
7E7A32E42B469D680078DAFF /* Step1 */ = {
213+
isa = PBXGroup;
214+
children = (
215+
7E7A32E52B469D680078DAFF /* Step1RouteBuilder.swift */,
216+
7E7A32E62B469D680078DAFF /* Step1Page.swift */,
217+
);
218+
path = Step1;
219+
sourceTree = "<group>";
220+
};
76221
/* End PBXGroup section */
77222

78223
/* Begin PBXNativeTarget section */
@@ -151,8 +296,27 @@
151296
isa = PBXSourcesBuildPhase;
152297
buildActionMask = 2147483647;
153298
files = (
299+
7E7A32F32B469D680078DAFF /* Step2RouteBuilder.swift in Sources */,
300+
7E7A32E92B469D680078DAFF /* Tab2RouteBuilder.swift in Sources */,
301+
7E7A32C32B469BF50078DAFF /* AppDependency.swift in Sources */,
302+
7E7A32EF2B469D680078DAFF /* Step4RouteBuilder.swift in Sources */,
303+
7E7A32ED2B469D680078DAFF /* Tab4RouteBuilder.swift in Sources */,
304+
7E7A32CB2B469CBD0078DAFF /* PathIndicator.swift in Sources */,
305+
7E7A32EB2B469D680078DAFF /* Tab3RouteBuilder.swift in Sources */,
306+
7E7A32F62B469D680078DAFF /* Step1Page.swift in Sources */,
307+
7E7A32E82B469D680078DAFF /* Tab1RouteBuilder.swift in Sources */,
308+
7E7A32F12B469D680078DAFF /* Step3RouteBuilder.swift in Sources */,
309+
7E7A32C52B469C010078DAFF /* AppRouteBuilderGroup.swift in Sources */,
154310
29758CF72B44F95B00307B89 /* ContentView.swift in Sources */,
311+
7E7A32F02B469D680078DAFF /* Step4Page.swift in Sources */,
312+
7E7A32EC2B469D680078DAFF /* Tab3Page.swift in Sources */,
313+
7E7A32F52B469D680078DAFF /* Step1RouteBuilder.swift in Sources */,
314+
7E7A32E72B469D680078DAFF /* Tab1Page.swift in Sources */,
315+
7E7A32F42B469D680078DAFF /* Step2Page.swift in Sources */,
155316
29758CF52B44F95B00307B89 /* TabInjectionParameterApp.swift in Sources */,
317+
7E7A32F22B469D680078DAFF /* Step3Page.swift in Sources */,
318+
7E7A32EE2B469D680078DAFF /* Tab4Page.swift in Sources */,
319+
7E7A32EA2B469D680078DAFF /* Tab2Page.swift in Sources */,
156320
);
157321
runOnlyForDeploymentPostprocessing = 0;
158322
};
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import LinkNavigator
2+
3+
struct AppDependency: DependencyType { }
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import LinkNavigator
2+
3+
public typealias RootNavigatorType = TabLinkNavigatorProtocol & LinkNavigatorFindLocationUsable
4+
5+
struct AppRouterBuilderGroup<RootNavigator: RootNavigatorType> {
6+
init() { }
7+
8+
var routers: [RouteBuilderOf<RootNavigator>] {
9+
[
10+
Tab1RouteBuilder.generate(),
11+
Tab2RouteBuilder.generate(),
12+
Tab3RouteBuilder.generate(),
13+
Tab4RouteBuilder.generate(),
14+
Step1RouteBuilder.generate(),
15+
Step2RouteBuilder.generate(),
16+
Step3RouteBuilder.generate(),
17+
Step4RouteBuilder.generate(),
18+
]
19+
}
20+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import SwiftUI
2+
3+
public struct PathIndicator: View {
4+
let currentPath: String
5+
6+
public var body: some View {
7+
VStack(spacing: 16) {
8+
Text("currentPath")
9+
.font(.headline)
10+
11+
Text(currentPath)
12+
.font(.subheadline)
13+
}
14+
.padding()
15+
.frame(maxWidth: .infinity)
16+
.background(
17+
RoundedRectangle(cornerRadius: 12).fill(.green.opacity(0.3)))
18+
.padding(.horizontal)
19+
}
20+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import SwiftUI
2+
import LinkNavigator
3+
4+
struct Step1Page: View {
5+
let navigator: RootNavigatorType
6+
@State var currentPath: String = ""
7+
@State var message: String = ""
8+
9+
var nextTabPath: String {
10+
switch navigator.getCurrentPaths().first ?? "tab1" {
11+
case "tab1" : "tab2"
12+
case "tab2" : "tab3"
13+
case "tab3" : "tab4"
14+
case "tab4" : "tab1"
15+
default: "tab1"
16+
}
17+
}
18+
19+
var body: some View {
20+
VStack(spacing: 16) {
21+
PathIndicator(currentPath: currentPath)
22+
.padding(.top, 32)
23+
24+
TextField("Type message here", text: $message)
25+
.textFieldStyle(.roundedBorder)
26+
.padding(.horizontal)
27+
28+
Spacer()
29+
30+
Button(action: { navigator.next(linkItem: .init(
31+
path: "step2",
32+
items: Step2InjectionData(message: message).encoded()
33+
), isAnimated: true) }) {
34+
Text("Next to 'Step2'")
35+
}
36+
37+
Button(action: { navigator.close(isAnimated: true, completeAction: { }) }) {
38+
Text("Close Sheet")
39+
}
40+
41+
Spacer()
42+
}
43+
.onAppear {
44+
currentPath = navigator.getCurrentPaths().joined(separator: " > ")
45+
}
46+
}
47+
}
48+

0 commit comments

Comments
 (0)