All localized

This commit is contained in:
Stefan Lange-Hegermann
2025-10-21 13:55:44 +02:00
parent 2a2c48e89f
commit df315ea7d8
3 changed files with 69 additions and 44 deletions

View File

@@ -1,6 +1,7 @@
import SwiftUI
struct BatteriesView: View {
@Binding var editMode: EditMode
let system: ElectricalSystem
let batteries: [SavedBattery]
let onEdit: (SavedBattery) -> Void
@@ -120,6 +121,7 @@ struct BatteriesView: View {
init(
system: ElectricalSystem,
batteries: [SavedBattery],
editMode: Binding<EditMode> = .constant(.inactive),
onEdit: @escaping (SavedBattery) -> Void = { _ in },
onDelete: @escaping (IndexSet) -> Void = { _ in }
) {
@@ -127,6 +129,7 @@ struct BatteriesView: View {
self.batteries = batteries
self.onEdit = onEdit
self.onDelete = onDelete
self._editMode = editMode
}
var body: some View {
@@ -145,6 +148,7 @@ struct BatteriesView: View {
batteryRow(for: battery)
}
.buttonStyle(.plain)
.disabled(editMode == .active)
.listRowInsets(.init(top: 12, leading: 16, bottom: 12, trailing: 16))
.listRowSeparator(.hidden)
.listRowBackground(Color.clear)
@@ -153,6 +157,7 @@ struct BatteriesView: View {
}
.listStyle(.plain)
.scrollContentBackground(.hidden)
.environment(\.editMode, $editMode)
}
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
@@ -599,6 +604,7 @@ private enum BatteriesViewPreviewData {
#Preview {
BatteriesView(
system: BatteriesViewPreviewData.system,
batteries: BatteriesViewPreviewData.batteries
batteries: BatteriesViewPreviewData.batteries,
editMode: .constant(.inactive)
)
}

View File

@@ -64,9 +64,11 @@ struct LoadsView: View {
BatteriesView(
system: system,
batteries: savedBatteries,
editMode: $editMode,
onEdit: { editBattery($0) },
onDelete: deleteBatteries
)
.environment(\.editMode, $editMode)
.tag(ComponentTab.batteries)
.tabItem {
Label(
@@ -91,7 +93,6 @@ struct LoadsView: View {
)
}
}
.environment(\.editMode, $editMode)
}
}
.navigationBarTitleDisplayMode(.inline)
@@ -145,11 +146,9 @@ struct LoadsView: View {
.disabled(selectedComponentTab == .chargers)
if selectedComponentTab == .components {
EditButton()
.environment(\.editMode, $editMode)
.disabled(savedLoads.isEmpty)
} else if selectedComponentTab == .batteries {
EditButton()
.environment(\.editMode, $editMode)
.disabled(savedBatteries.isEmpty)
}
}
@@ -236,11 +235,12 @@ struct LoadsView: View {
}
}
}
.onChange(of: selectedComponentTab) { newValue in
.onChange(of: selectedComponentTab) { oldValue, newValue in
if newValue == .chargers {
editMode = .inactive
}
}
.environment(\.editMode, $editMode)
}
private var summarySection: some View {
@@ -326,6 +326,7 @@ struct LoadsView: View {
loadRow(for: load)
}
.buttonStyle(.plain)
.disabled(editMode == .active)
.listRowInsets(.init(top: 12, leading: 16, bottom: 12, trailing: 16))
.listRowSeparator(.hidden)
.listRowBackground(Color.clear)
@@ -335,6 +336,7 @@ struct LoadsView: View {
.listStyle(.plain)
.scrollContentBackground(.hidden)
.accessibilityIdentifier("loads-list")
.environment(\.editMode, $editMode)
}
.background(Color(.systemGroupedBackground))
}
@@ -375,44 +377,7 @@ struct LoadsView: View {
.foregroundStyle(.secondary)
}
ViewThatFits(in: .horizontal) {
HStack(spacing: 12) {
metricBadge(
label: fuseMetricLabel,
value: "\(recommendedFuse(for: load)) A",
tint: .pink
)
metricBadge(
label: cableMetricLabel,
value: wireGaugeString(for: load),
tint: .teal
)
metricBadge(
label: lengthMetricLabel,
value: lengthString(for: load),
tint: .orange
)
Spacer()
}
VStack(alignment: .leading, spacing: 8) {
metricBadge(
label: fuseMetricLabel,
value: "\(recommendedFuse(for: load)) A",
tint: .pink
)
metricBadge(
label: cableMetricLabel,
value: wireGaugeString(for: load),
tint: .teal
)
metricBadge(
label: lengthMetricLabel,
value: lengthString(for: load),
tint: .orange
)
}
}
metricsSection(for: load)
}
.padding(.vertical, 16)
.padding(.horizontal, 16)
@@ -455,6 +420,59 @@ struct LoadsView: View {
}
}
@ViewBuilder
private func metricsSection(for load: SavedLoad) -> some View {
if editMode == .active {
horizontalMetrics(for: load)
} else {
ViewThatFits(in: .horizontal) {
horizontalMetrics(for: load)
verticalMetrics(for: load)
}
}
}
private func horizontalMetrics(for load: SavedLoad) -> some View {
HStack(spacing: 12) {
metricBadge(
label: fuseMetricLabel,
value: "\(recommendedFuse(for: load)) A",
tint: .pink
)
metricBadge(
label: cableMetricLabel,
value: wireGaugeString(for: load),
tint: .teal
)
metricBadge(
label: lengthMetricLabel,
value: lengthString(for: load),
tint: .orange
)
Spacer(minLength: 0)
}
}
private func verticalMetrics(for load: SavedLoad) -> some View {
VStack(alignment: .leading, spacing: 8) {
metricBadge(
label: fuseMetricLabel,
value: "\(recommendedFuse(for: load)) A",
tint: .pink
)
metricBadge(
label: cableMetricLabel,
value: wireGaugeString(for: load),
tint: .teal
)
metricBadge(
label: lengthMetricLabel,
value: lengthString(for: load),
tint: .orange
)
}
}
private var fuseMetricLabel: String {
NSLocalizedString(
"loads.metric.fuse",
@@ -809,3 +827,4 @@ struct LoadsView: View {
case chargers
}
}

View File

@@ -150,7 +150,7 @@
"loads.overview.status.missing_details.plural" = "Verbraucher";
"loads.overview.status.missing_details.banner" = "Konfiguration deiner Verbraucher abschließen";
"loads.metric.fuse" = "Sicherung";
"loads.metric.cable" = "Querschnitt";
"loads.metric.cable" = "Schnitt";
"loads.metric.length" = "Länge";
"battery.bank.header.title" = "Batteriebank";