All localized
This commit is contained in:
@@ -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)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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";
|
||||
|
||||
Reference in New Issue
Block a user