Skip to content

Commit

Permalink
Merge pull request #21 from kvyatkovskys/feature/ver_0.2.3
Browse files Browse the repository at this point in the history
some fixes and improvements
  • Loading branch information
kvyatkovskys authored Oct 4, 2024
2 parents 869add0 + 648e415 commit 366605c
Show file tree
Hide file tree
Showing 10 changed files with 288 additions and 185 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,21 @@ struct ContentCoordinatorView: View {
@ObservedObject var coordinator: ContentCoordinator

var body: some View {
FlowCoordinatorView(coordinator) {
bodyView
}
bodyView
.flowCoordinator(coordinator)
.flowLink(for: ContentViewModel.LinkType.self) { item in
switch item {
case .linkFirstWithParams(let title),
.linkThirdWithParams(let title):
NavigationLinkView(title: title)
case .linkSecond:
NavigationLinkView(title: "Test Second Link")
case .linkSecondCoordinator:
SecondContentCoordinatorView(coordinator: coordinator.secondContentCoordinator)
case .linkSecondCoordinator2:
SecondContentCoordinatorView(coordinator: coordinator.secondContentCoordinator)
}
}
}

private var bodyView: some View {
Expand All @@ -30,19 +42,6 @@ struct ContentCoordinatorView: View {
SheetView(title: title)
}
}
.navigationDestination(for: ContentViewModel.LinkType.self) { (item) in
switch item {
case .linkFirstWithParams(let title),
.linkThirdWithParams(let title):
NavigationLinkView(title: title)
case .linkSecond:
NavigationLinkView(title: "Test Second Link")
case .linkSecondCoordinator:
SecondContentCoordinatorView(coordinator: coordinator.secondContentCoordinator)
case .linkSecondCoordinator2:
SecondContentCoordinatorView(coordinator: coordinator.secondContentCoordinator)
}
}
}

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ struct ContentView: View {
Button("Open Link") {
vm.openFirstLink()
}
Button("Open links") {
vm.openLinks()
}
Button("Complex Btn Link") {
vm.openComplexLink()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ final class ContentViewModel: ObservableObject {
coordinator.linkType = .linkSecond
}

func openLinks() {
coordinator.linksType = [.linkFirstWithParams("First Link View"), .linkSecond]
}

func openSheetFirst(autoClose: Bool) {
if autoClose {
coordinator.sheetType = .sheetFirst("Auto Close Sheet")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,23 +13,22 @@ struct SecondContentCoordinatorView: View {
@ObservedObject var coordinator: SecondContentCoordinator

var body: some View {
FlowCoordinatorView(coordinator) {
SecondContentView(vm: coordinator.vm)
.sheet(item: $coordinator.sheetType) { item in
switch item {
case .sheet(let title):
SheetView(title: title)
}
SecondContentView(vm: coordinator.vm)
.flowCoordinator(coordinator)
.sheet(item: $coordinator.sheetType) { item in
switch item {
case .sheet(let title):
SheetView(title: title)
}
.navigationDestination(for: SecondContentViewModel.SecondDetailLink.self) { (item) in
switch item {
case .detailLink:
DetailNavigationLinkView(coordinator: coordinator)
case .detailLink2:
DetailNavigationLinkView2(coordinator: coordinator)
}
}
.navigationDestination(for: SecondContentViewModel.SecondDetailLink.self) { (item) in
switch item {
case .detailLink:
DetailNavigationLinkView(coordinator: coordinator)
case .detailLink2:
DetailNavigationLinkView2(coordinator: coordinator)
}
}
}
}
}

Expand Down
49 changes: 23 additions & 26 deletions DemoFlowCoordinators/DemoFlowCoordinators/DemoCoordinatorView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,40 +13,37 @@ struct DemoCoordinatorView: View {

var body: some View {
if UIDevice.current.userInterfaceIdiom != .phone {
fullBodyView
CoordinatorFullSplitView()
} else {
FlowCoordinatorView(coordinator) {
commonView
}
commonView
.flowCoordinator(coordinator)
}
}

private var fullBodyView: some View {
FlowCoordinatorView(coordinator) {
VStack(spacing: 30) {
Button("Full Split View") {
coordinator.openLink(.fullSplit)
}
Button("Split View") {
coordinator.openLink(.split)
}
Button("Common View") {
coordinator.openLink(.usual)
}
VStack(spacing: 30) {
Button("Full Split View") {
coordinator.openLink(.fullSplit)
}
Button("Split View") {
coordinator.openLink(.split)
}
.navigationTitle("Demo Coordinator")
Button("Common View") {
coordinator.openLink(.usual)
}
}
.navigationTitle("Demo Coordinator")
#if !os(macOS)
.navigationBarTitleDisplayMode(.inline)
.navigationBarTitleDisplayMode(.inline)
#endif
.navigationDestination(for: DemoFlowCoordinator.LinkType.self) { item in
switch item {
case .fullSplit:
CoordinatorFullSplitView(parent: coordinator)
case .split:
CoordinatorSplitView(parent: coordinator)
case .usual:
commonView
}
.flowLink(for: DemoFlowCoordinator.LinkType.self) { item in
switch item {
case .fullSplit:
CoordinatorFullSplitView(parent: coordinator)
case .split:
CoordinatorSplitView(parent: coordinator)
case .usual:
commonView
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,59 +10,63 @@ import KVKFlowCoordinators

struct CoordinatorFullSplitView: View {

@StateObject private var sideBarCoordinator: SplitSideBarCoordinator
@StateObject private var contentCoordinator: SplitContentCoordinator
@ObservedObject private var sideBarCoordinator: SplitSideBarCoordinator
@ObservedObject private var contentCoordinator: SplitContentCoordinator

init(parent: DemoFlowCoordinator? = nil) {
_sideBarCoordinator = StateObject(wrappedValue: SplitSideBarCoordinator(parent: parent))
_contentCoordinator = StateObject(wrappedValue: SplitContentCoordinator())
sideBarCoordinator = SplitSideBarCoordinator(parent: parent)
contentCoordinator = SplitContentCoordinator()
}

var body: some View {
FlowCoordinatorSplitView(sideBarCoordinator: sideBarCoordinator, contentCoordinator: contentCoordinator, detailCoordinator: sideBarCoordinator.detailCoordinator) {
SideBarSplitView(vm: sideBarCoordinator.vm)
.navigationDestination(for: SplitCoordinator.LinkTestType.self) { item in
switch item {
case .linkSideBar:
VStack(spacing: 30) {
Text("Link View")
Button("Pop View") {
sideBarCoordinator.popView()
}
SideBarSplitView(vm: sideBarCoordinator.vm)
.flowLink(for: SplitCoordinator.LinkTestType.self) { item in
switch item {
case .linkSideBar:
VStack(spacing: 30) {
Text("Link View")
Button("Pop View") {
sideBarCoordinator.popView()
}
default:
EmptyView()
}
default:
EmptyView()
}
} content: {
ContentSplitView(coordinator: contentCoordinator)
} detail: {
DetailSplitView(vm: sideBarCoordinator.detailCoordinator.vm)
.navigationDestination(for: SplitCoordinator.LinkTestType.self) { item in
switch item {
case .linkDetail:
VStack(spacing: 30) {
Text("Link View")
Button("Pop to View") {
sideBarCoordinator.detailCoordinator.popView()
}
.flowSplitCoordinator(
sideBarCoordinator: sideBarCoordinator,
contentCoordinator: contentCoordinator,
detailCoordinator: sideBarCoordinator.detailCoordinator,
content: {
ContentSplitView(coordinator: contentCoordinator)
},
detail: {
DetailSplitView(vm: sideBarCoordinator.detailCoordinator.vm)
.flowLink(for: SplitCoordinator.LinkTestType.self) { item in
switch item {
case .linkDetail:
VStack(spacing: 30) {
Text("Link View")
Button("Pop to View") {
sideBarCoordinator.detailCoordinator.popView()
}
}
default:
EmptyView()
}
}
default:
EmptyView()
}
}
}
.sheet(item: $contentCoordinator.sheetType) { item in
switch item {
case .sheet:
SheetView(title: "Conent Sheet View")
)
.sheet(item: $contentCoordinator.sheetType) { item in
switch item {
case .sheet:
SheetView(title: "Conent Sheet View")
}
}
}
}
}

private struct ContentSplitView: View {

@ObservedObject var coordinator: SplitContentCoordinator

var body: some View {
Expand All @@ -76,7 +80,6 @@ private struct ContentSplitView: View {
}

private struct SideBarSplitView: View {

@ObservedObject var vm: SplitSideBarVM

var body: some View {
Expand Down Expand Up @@ -120,44 +123,46 @@ private struct DetailSplitView: View {

struct CoordinatorSplitView: View {

@StateObject private var sideBarCoordinator: SplitSideBarCoordinator
@ObservedObject private var sideBarCoordinator: SplitSideBarCoordinator

init(parent: DemoFlowCoordinator? = nil) {
_sideBarCoordinator = StateObject(wrappedValue: SplitSideBarCoordinator(parent: parent))
init(parent: DemoFlowCoordinator) {
sideBarCoordinator = SplitSideBarCoordinator(parent: parent)
}

var body: some View {
FlowCoordinatorSplitView(sideBarCoordinator: sideBarCoordinator, detailCoordinator: sideBarCoordinator.detailCoordinator) {
SideBarSplitView(vm: sideBarCoordinator.vm)
.navigationDestination(for: SplitCoordinator.LinkTestType.self) { item in
switch item {
case .linkSideBar:
VStack(spacing: 30) {
Text("Link View")
Button("Pop View") {
sideBarCoordinator.popView()
}
SideBarSplitView(vm: sideBarCoordinator.vm)
.flowLink(for: SplitCoordinator.LinkTestType.self) { item in
switch item {
case .linkSideBar:
VStack(spacing: 30) {
Text("Link View")
Button("Pop View") {
sideBarCoordinator.popView()
}
default:
EmptyView()
}
default:
EmptyView()
}
} detail: {
DetailSplitView(vm: sideBarCoordinator.detailCoordinator.vm)
.navigationDestination(for: SplitCoordinator.LinkTestType.self) { item in
switch item {
case .linkDetail:
VStack(spacing: 30) {
Text("Link View")
Button("Pop to View") {
sideBarCoordinator.detailCoordinator.popToRoot()
}
.flowSplitCoordinator(
sideBarCoordinator: sideBarCoordinator,
detailCoordinator: sideBarCoordinator.detailCoordinator
) {
DetailSplitView(vm: sideBarCoordinator.detailCoordinator.vm)
.flowLink(for: SplitCoordinator.LinkTestType.self) { item in
switch item {
case .linkDetail:
VStack(spacing: 30) {
Text("Link View")
Button("Pop to View") {
sideBarCoordinator.detailCoordinator.popToRoot()
}
}
default:
EmptyView()
}
default:
EmptyView()
}
}
}
}
}
}

Expand All @@ -168,5 +173,5 @@ struct CoordinatorSplitView: View {

@available(iOS 17.0, *)
#Preview("Split View", traits: .landscapeLeft) {
CoordinatorSplitView()
CoordinatorSplitView(parent: .init())
}
Loading

0 comments on commit 366605c

Please sign in to comment.