mirror of
https://github.com/Ranchero-Software/NetNewsWire
synced 2025-08-12 06:26:36 +00:00
Refactor the SidebarView list into its own View so to reduce code duplication
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
@@ -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())
|
||||
}
|
||||
}
|
||||
@@ -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())
|
||||
}
|
||||
}
|
||||
@@ -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())
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user