NetNewsWire/Multiplatform/Shared/Sidebar/SidebarToolbar.swift

98 lines
2.3 KiB
Swift
Raw Normal View History

//
// SidebarToolbar.swift
// Multiplatform iOS
//
// Created by Stuart Breckenridge on 30/6/20.
// Copyright © 2020 Ranchero Software. All rights reserved.
//
import SwiftUI
2020-07-03 18:06:43 +02:00
fileprivate enum ToolbarSheets {
case none, web, twitter, reddit, folder, settings
}
2020-07-03 18:10:47 +02:00
fileprivate class SidebarToolbarViewModel: ObservableObject {
2020-07-03 18:06:43 +02:00
@Published var showSheet: Bool = false
@Published var sheetToShow: ToolbarSheets = .none {
didSet {
sheetToShow != .none ? (showSheet = true) : (showSheet = false)
}
}
2020-07-03 18:06:43 +02:00
@Published var showActionSheet: Bool = false
@Published var showAddSheet: Bool = false
}
2020-07-03 18:06:43 +02:00
struct SidebarToolbar: View {
@EnvironmentObject private var appSettings: AppDefaults
2020-07-03 18:10:47 +02:00
@StateObject private var viewModel = SidebarToolbarViewModel()
2020-07-03 18:06:43 +02:00
var addActionSheetButtons = [
Button(action: {}, label: { Text("Add Feed") })
]
var body: some View {
VStack {
Divider()
HStack(alignment: .center) {
Button(action: {
2020-07-03 18:06:43 +02:00
viewModel.sheetToShow = .settings
}, label: {
Image(systemName: "gear")
.font(.title3)
.foregroundColor(.accentColor)
}).help("Settings")
2020-07-03 18:06:43 +02:00
Spacer()
2020-07-03 18:06:43 +02:00
Text("Last updated")
.font(.caption)
.foregroundColor(.secondary)
2020-07-03 18:06:43 +02:00
Spacer()
2020-07-03 18:06:43 +02:00
Button(action: {
2020-07-03 18:06:43 +02:00
viewModel.showActionSheet = true
}, label: {
Image(systemName: "plus")
.font(.title3)
.foregroundColor(.accentColor)
})
.help("Add")
2020-07-03 18:06:43 +02:00
.actionSheet(isPresented: $viewModel.showActionSheet) {
ActionSheet(title: Text("Add"), buttons: [
.cancel(),
2020-07-03 18:06:43 +02:00
.default(Text("Add Web Feed"), action: { viewModel.sheetToShow = .web }),
.default(Text("Add Twitter Feed")),
.default(Text("Add Reddit Feed")),
.default(Text("Add Folder"))
])
}
}
.padding(.horizontal, 16)
.padding(.bottom, 12)
.padding(.top, 4)
}
.background(VisualEffectBlur(blurStyle: .systemChromeMaterial).edgesIgnoringSafeArea(.bottom))
2020-07-03 18:06:43 +02:00
.sheet(isPresented: $viewModel.showSheet, onDismiss: { viewModel.sheetToShow = .none }) {
if viewModel.sheetToShow == .web {
AddWebFeedView()
}
2020-07-03 18:06:43 +02:00
if viewModel.sheetToShow == .settings {
SettingsView().modifier(PreferredColorSchemeModifier(preferredColorScheme: appSettings.userInterfaceColorPalette))
}
}
}
}
struct SidebarToolbar_Previews: PreviewProvider {
static var previews: some View {
SidebarToolbar()
}
}