Files
SonarDesk/SonarDesk-iOS/Views/IOSProjectsView.swift
2026-10-06 08:58:01 +01:00

42 lines
1.7 KiB
Swift

import SwiftUI
struct IOSProjectsView: View {
@EnvironmentObject private var appState: AppState
@State private var searchText = ""
private var filtered: [ProjectSnapshot] {
guard !searchText.isEmpty else { return appState.projects }
return appState.projects.filter {
$0.project.name.localizedCaseInsensitiveContains(searchText) ||
$0.project.key.localizedCaseInsensitiveContains(searchText)
}
}
var body: some View {
NavigationStack {
List(filtered) { snapshot in
NavigationLink {
IOSProjectDetailView(snapshot: snapshot)
} label: {
HStack(spacing: 12) {
Image(systemName: snapshot.qualityGate.uppercased() == "OK" ? "checkmark.circle.fill" : "xmark.octagon.fill")
.foregroundStyle(snapshot.qualityGate.uppercased() == "OK" ? .green : .red)
VStack(alignment: .leading, spacing: 3) {
Text(snapshot.project.name).fontWeight(.semibold)
Text(snapshot.project.key).font(.caption).foregroundStyle(.secondary)
}
}
}
}
.navigationTitle("Projects")
.searchable(text: $searchText, prompt: "Search projects")
.refreshable { await appState.refresh() }
.overlay {
if appState.projects.isEmpty && !appState.isLoading {
ContentUnavailableView("No Projects", systemImage: "square.stack.3d.up", description: Text(appState.errorMessage ?? "No SonarQube projects are available."))
}
}
}
}
}