piper-app/Piper/Sources/UI/Views/MenuBarView.swift
Javier Cicchelli 58ac646e25 [App] Open settings (#5)
This PR contains the work done to open the *Settings* view and also, implemented the rendering of its tab items.

Reviewed-on: #5
Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Co-committed-by: Javier Cicchelli <javier@rock-n-code.com>
2024-10-13 22:17:49 +00:00

100 lines
2.3 KiB
Swift

//
// MenuBarView.swift
// Piper ~ App
//
// Created by Javier Cicchelli on 06/10/2024.
// Copyright © 2024 Röck+Cöde. All rights reserved.
//
import SwiftUI
import SwiftData
struct MenuBarView: View {
// MARK: Properties
@Environment(\.openSettings) private var openSettings
@Query(sort: \Repository.sortOrder)
private var repositories: [Repository]
// MARK: Body
var body: some View {
List {
Section {
if repositories.isEmpty {
ListItemEmpty(
title: "menu-bar.item.empty.title.text",
button: "menu-bar.item.empty.button.text"
) {
openSettings()
}
.frame(height: Layout.heightEmpty)
} else {
ForEach(repositories) {
ListItem(repository: $0)
}
}
} header: {
ListHeader(
title: "menu-bar.section.repositories.title.text",
button: "menu-bar.section.repositories.button.text",
showButton: !repositories.isEmpty
) {
// ...
}
}
}
.frame(
width: Layout.widthView,
height: Layout.heightView
)
}
}
// MARK: - Layout
private extension MenuBarView {
enum Layout {
static let heightEmpty = CGFloat(200)
static let heightView = CGFloat(260)
static let widthView = CGFloat(400)
}
}
// MARK: - Previews
@available(macOS 15.0, *)
#Preview(
"Menu Bar view when no repositories found",
traits: .emptyData
) {
MenuBarView()
}
@available(macOS, obsoleted: 15)
#Preview("Menu Bar view when no repositories found") {
MenuBarView()
.modelContainer(.preview)
}
@available(macOS 15.0, *)
#Preview(
"Menu Bar view when some repositories found",
traits: .sampleData
) {
MenuBarView()
}
@available(macOS, obsoleted: 15)
#Preview("Menu Bar view when some repositories found") {
let container = ModelContainer.preview
Repository.samples(in: container)
return MenuBarView()
.modelContainer(container)
}