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>
86 lines
1.9 KiB
Swift
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)
|
|
}
|