Refactor the SidebarView list into its own View so to reduce code duplication

This commit is contained in:
Maurice Parker
2020-06-29 13:14:03 -05:00
parent ba5e9cfaec
commit 0886cffcff
6 changed files with 109 additions and 96 deletions

View File

@@ -14,25 +14,17 @@ struct SceneNavigationView: View {
@Environment(\.horizontalSizeClass) private var horizontalSizeClass
#endif
@ViewBuilder var sidebar: some View {
#if os(iOS)
if horizontalSizeClass == .compact {
CompactNavigationView()
} else {
SidebarView()
}
#else
SidebarView()
#endif
}
var body: some View {
NavigationView {
#if os(macOS)
sidebar
RegularSidebarContainerView()
.frame(minWidth: 100, idealWidth: 150, maxWidth: 200, maxHeight: .infinity)
#else
sidebar
if horizontalSizeClass == .compact {
CompactSidebarContainerView()
} else {
RegularSidebarContainerView()
}
#endif
#if os(iOS)

View File

@@ -1,41 +0,0 @@
//
// CompactNavigationView.swift
// Multiplatform iOS
//
// Created by Stuart Breckenridge on 29/6/20.
// Copyright © 2020 Ranchero Software. All rights reserved.
//
import SwiftUI
struct CompactNavigationView: View {
@EnvironmentObject private var sceneModel: SceneModel
@StateObject private var sidebarModel = SidebarModel()
var body: some View {
List {
ForEach(sidebarModel.sidebarItems) { section in
OutlineGroup(sidebarModel.sidebarItems, children: \.children) { sidebarItem in
Text(sidebarItem.nameForDisplay)
}
}
}
.navigationBarTitle(Text("Feeds"))
.listStyle(PlainListStyle())
.onAppear {
sceneModel.sidebarModel = sidebarModel
sidebarModel.delegate = sceneModel
sidebarModel.rebuildSidebarItems()
}
}
}
struct CompactSidebarView_Previews: PreviewProvider {
static var previews: some View {
CompactNavigationView()
}
}

View File

@@ -0,0 +1,37 @@
//
// CompactNavigationView.swift
// Multiplatform iOS
//
// Created by Stuart Breckenridge on 29/6/20.
// Copyright © 2020 Ranchero Software. All rights reserved.
//
import SwiftUI
struct CompactSidebarContainerView: View {
@EnvironmentObject private var sceneModel: SceneModel
@StateObject private var sidebarModel = SidebarModel()
var body: some View {
SidebarView()
.environmentObject(sidebarModel)
.navigationBarTitle(Text("Feeds"))
.listStyle(PlainListStyle())
.onAppear {
sceneModel.sidebarModel = sidebarModel
sidebarModel.delegate = sceneModel
sidebarModel.rebuildSidebarItems()
}
}
}
struct CompactSidebarContainerView_Previews: PreviewProvider {
static var previews: some View {
CompactSidebarContainerView()
.environmentObject(SceneModel())
}
}

View File

@@ -0,0 +1,34 @@
//
// SidebarView.swift
// NetNewsWire
//
// Created by Maurice Parker on 6/28/20.
// Copyright © 2020 Ranchero Software. All rights reserved.
//
import SwiftUI
struct RegularSidebarContainerView: View {
@EnvironmentObject private var sceneModel: SceneModel
@StateObject private var sidebarModel = SidebarModel()
var body: some View {
SidebarView()
.environmentObject(sidebarModel)
.navigationTitle(Text("Feeds"))
.listStyle(SidebarListStyle())
.onAppear {
sceneModel.sidebarModel = sidebarModel
sidebarModel.delegate = sceneModel
sidebarModel.rebuildSidebarItems()
}
}
}
struct RegularSidebarContainerView_Previews: PreviewProvider {
static var previews: some View {
RegularSidebarContainerView()
.environmentObject(SceneModel())
}
}

View File

@@ -2,7 +2,7 @@
// SidebarView.swift
// NetNewsWire
//
// Created by Maurice Parker on 6/28/20.
// Created by Maurice Parker on 6/29/20.
// Copyright © 2020 Ranchero Software. All rights reserved.
//
@@ -10,10 +10,9 @@ import SwiftUI
struct SidebarView: View {
@EnvironmentObject private var sceneModel: SceneModel
@StateObject private var sidebarModel = SidebarModel()
@EnvironmentObject private var sidebarModel: SidebarModel
@ViewBuilder var body: some View {
var body: some View {
List {
ForEach(sidebarModel.sidebarItems) { section in
OutlineGroup(sidebarModel.sidebarItems, children: \.children) { sidebarItem in
@@ -21,20 +20,6 @@ struct SidebarView: View {
}
}
}
.navigationTitle(Text("Feeds"))
.listStyle(SidebarListStyle())
.onAppear {
sceneModel.sidebarModel = sidebarModel
sidebarModel.delegate = sceneModel
sidebarModel.rebuildSidebarItems()
}
}
}
struct SidebarView_Previews: PreviewProvider {
static var previews: some View {
SidebarView()
.environmentObject(SceneModel())
}
}