Javier Cicchelli 3d78c599d1 [App] Repositories in the Menu Bar view (#4)
This PR contains the work done to implement the rendering of the (lack of) repositories in the `MenuBarView` view UI interface. For this purpose, some components have been created: `ListHeader`, `ListItemEmpty`, and `ListItem`. Furthermore, some preview-specific code have been implemented as well, specially to add dummy repositories to the previews.

Reviewed-on: #4
Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Co-committed-by: Javier Cicchelli <javier@rock-n-code.com>
2024-10-06 11:50:36 +00:00

86 lines
1.9 KiB
Swift

//
// ListItem.swift
// Piper ~ App
//
// Created by Javier Cicchelli on 06/10/2024.
// Copyright © 2024 Röck+Cöde. All rights reserved.
//
import SwiftUI
struct ListItem: View {
// MARK: Properties
let repository: Repository
// MARK: Body
var body: some View {
Label {
VStack(
alignment: .leading,
spacing: 4
) {
Text(repository.name)
.font(.title)
.fontWeight(.semibold)
.foregroundStyle(.primary)
Text(repository.path.relativePath)
.font(.subheadline)
.foregroundStyle(.secondary)
}
} icon: {
Image(systemName: "folder")
.resizable()
}
.labelStyle(ItemLabelStyle())
.padding(.vertical, 8)
}
}
// MARK: - Label Styles
struct ItemLabelStyle: LabelStyle {
func makeBody(configuration: Configuration) -> some View {
HStack(
alignment: .center,
spacing: 16
) {
configuration.icon
.frame(width: 44)
configuration.title
.frame(maxWidth: .infinity, alignment: .leading)
}
}
}
// MARK: - Previews
#Preview("List Item component") {
List {
ListItem(
repository: .init(
.init(filePath: "/full/path/to/repository/name.git")!,
sortOrder: 0
)
)
ListItem(
repository: .init(
.init(filePath: "/full/path/to/repository/name.git")!,
sortOrder: 0
)
)
ListItem(
repository: .init(
.init(filePath: "/full/path/to/repository/name.git")!,
sortOrder: 0
)
)
}
.frame(width: 400, height: 220)
}