Skip to content

Commit 97edf65

Browse files
authored
Improve the behavior of input fields (#91)
1 parent 44f1a70 commit 97edf65

File tree

4 files changed

+81
-73
lines changed

4 files changed

+81
-73
lines changed

Sources/BadaApp/Logbook/LogbookAddReducer.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ struct LogbookAddReducer: Reducer {
4444
var diveSite: DiveSite?
4545
var diveCenter: String = ""
4646
var diveStyle: DiveStyle = .boat
47-
var entryTime: Date = Date(timeIntervalSince1970: 0)
48-
var exitTime: Date = Date(timeIntervalSince1970: 0)
47+
var entryTime: Date = Date(timeIntervalSince1970: UnitValue.Time.hour(9).timeInterval)
48+
var exitTime: Date = Date(timeIntervalSince1970: UnitValue.Time.hour(9).timeInterval)
4949
var bottomTime: UnitValue.Time?
5050
var surfaceInterval: UnitValue.Time?
5151
var entryAir: UnitValue.Pressure?

Sources/BadaApp/Logbook/LogbookAddSheet.swift

Lines changed: 35 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,13 @@ struct LogbookAddSheet: View {
6565
selection: store.binding(\.entryTime, send: { .setEntryTime($0) }),
6666
displayedComponents: .hourAndMinute
6767
)
68+
.environment(\.timeZone, TimeZone.gmt)
6869
DatePicker(
6970
L10n.Logbook.exitTime,
7071
selection: store.binding(\.exitTime, send: { .setExitTime($0) }),
7172
displayedComponents: .hourAndMinute
7273
)
74+
.environment(\.timeZone, TimeZone.gmt)
7375
LabeledFormattedTextField(
7476
value: Binding(
7577
get: { store.state.bottomTime?.rawValue },
@@ -99,7 +101,7 @@ struct LogbookAddSheet: View {
99101
format: .number,
100102
prompt: L10n.Logbook.Placeholder.meter,
101103
label: L10n.Logbook.maximum,
102-
keyboardType: .numberPad
104+
keyboardType: .decimalPad
103105
)
104106
.focused($focusedField, equals: .maximumDepth)
105107
LabeledFormattedTextField(
@@ -109,10 +111,32 @@ struct LogbookAddSheet: View {
109111
format: .number,
110112
prompt: L10n.Logbook.Placeholder.meter,
111113
label: L10n.Logbook.average,
112-
keyboardType: .numberPad
114+
keyboardType: .decimalPad
113115
)
114116
.focused($focusedField, equals: .averageDepth)
115117
}
118+
Section(header: Text(L10n.Logbook.temperature)) {
119+
LabeledFormattedTextField(
120+
value: Binding(
121+
get: { store.state.surfaceTemperature?.rawValue },
122+
set: { store.send(.setSurfaceTemperature($0)) }),
123+
format: .number,
124+
prompt: "",
125+
label: L10n.Logbook.surface,
126+
keyboardType: .decimalPad
127+
)
128+
.focused($focusedField, equals: .surfaceTemperature)
129+
LabeledFormattedTextField(
130+
value: Binding(
131+
get: { store.state.bottomTemperature?.rawValue },
132+
set: { store.send(.setBottomTemperature($0)) }),
133+
format: .number,
134+
prompt: "",
135+
label: L10n.Logbook.bottom,
136+
keyboardType: .decimalPad
137+
)
138+
.focused($focusedField, equals: .bottomTemperature)
139+
}
116140
Section(header: Text(L10n.Logbook.airPressure)) {
117141
LabeledFormattedTextField(
118142
value: Binding(
@@ -121,7 +145,7 @@ struct LogbookAddSheet: View {
121145
format: .number,
122146
prompt: L10n.Logbook.Placeholder.bar,
123147
label: L10n.Logbook.entry,
124-
keyboardType: .numberPad
148+
keyboardType: .decimalPad
125149
)
126150
.focused($focusedField, equals: .entryAir)
127151
LabeledFormattedTextField(
@@ -131,32 +155,10 @@ struct LogbookAddSheet: View {
131155
format: .number,
132156
prompt: L10n.Logbook.Placeholder.bar,
133157
label: L10n.Logbook.exit,
134-
keyboardType: .numberPad
158+
keyboardType: .decimalPad
135159
)
136160
.focused($focusedField, equals: .exitAir)
137161
}
138-
Section(header: Text(L10n.Logbook.temperature)) {
139-
LabeledFormattedTextField(
140-
value: Binding(
141-
get: { store.state.surfaceTemperature?.rawValue },
142-
set: { store.send(.setSurfaceTemperature($0)) }),
143-
format: .number,
144-
prompt: "",
145-
label: L10n.Logbook.surface,
146-
keyboardType: .numberPad
147-
)
148-
.focused($focusedField, equals: .minimumWaterTemperature)
149-
LabeledFormattedTextField(
150-
value: Binding(
151-
get: { store.state.bottomTemperature?.rawValue },
152-
set: { store.send(.setBottomTemperature($0)) }),
153-
format: .number,
154-
prompt: "",
155-
label: L10n.Logbook.bottom,
156-
keyboardType: .numberPad
157-
)
158-
.focused($focusedField, equals: .averageWaterTemperature)
159-
}
160162
Section {
161163
Picker(
162164
L10n.Logbook.Weather.title,
@@ -195,6 +197,8 @@ struct LogbookAddSheet: View {
195197
.frame(height: 100)
196198
.autocorrectionDisabled()
197199
.textInputAutocapitalization(.never)
200+
.submitLabel(.return)
201+
.focused($focusedField, equals: .notes)
198202
}
199203
}
200204
.navigationTitle(L10n.Logbook.addTitle)
@@ -291,13 +295,13 @@ extension LogbookAddSheet {
291295
case diveCenter
292296
case bottomTime
293297
case surfaceInterval
294-
case entryAir
295-
case exitAir
296298
case maximumDepth
297299
case averageDepth
298-
case maximumWaterTemperature
299-
case minimumWaterTemperature
300-
case averageWaterTemperature
300+
case surfaceTemperature
301+
case bottomTemperature
302+
case entryAir
303+
case exitAir
304+
case notes
301305

302306
var previous: Field? {
303307
guard let currentIndex = Field.allCases.firstIndex(of: self) else { return nil }

Sources/BadaApp/Logbook/LogbookDetailView.swift

Lines changed: 35 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -71,11 +71,13 @@ struct LogbookDetailView: View {
7171
selection: store.binding(\.entryTime, send: { .setEntryTime($0) }),
7272
displayedComponents: .hourAndMinute
7373
)
74+
.environment(\.timeZone, TimeZone.gmt)
7475
DatePicker(
7576
L10n.Logbook.exitTime,
7677
selection: store.binding(\.exitTime, send: { .setExitTime($0) }),
7778
displayedComponents: .hourAndMinute
7879
)
80+
.environment(\.timeZone, TimeZone.gmt)
7981
LabeledFormattedTextField(
8082
value: Binding(
8183
get: { store.state.bottomTime?.rawValue },
@@ -105,7 +107,7 @@ struct LogbookDetailView: View {
105107
format: .number,
106108
prompt: L10n.Logbook.Placeholder.meter,
107109
label: L10n.Logbook.maximum,
108-
keyboardType: .numberPad
110+
keyboardType: .decimalPad
109111
)
110112
.focused($focusedField, equals: .maximumDepth)
111113
LabeledFormattedTextField(
@@ -115,10 +117,32 @@ struct LogbookDetailView: View {
115117
format: .number,
116118
prompt: L10n.Logbook.Placeholder.meter,
117119
label: L10n.Logbook.average,
118-
keyboardType: .numberPad
120+
keyboardType: .decimalPad
119121
)
120122
.focused($focusedField, equals: .averageDepth)
121123
}
124+
Section(header: Text(L10n.Logbook.temperature)) {
125+
LabeledFormattedTextField(
126+
value: Binding(
127+
get: { store.state.surfaceTemperature?.rawValue },
128+
set: { store.send(.setSurfaceTemperature($0)) }),
129+
format: .number,
130+
prompt: "",
131+
label: L10n.Logbook.surface,
132+
keyboardType: .decimalPad
133+
)
134+
.focused($focusedField, equals: .surfaceTemperature)
135+
LabeledFormattedTextField(
136+
value: Binding(
137+
get: { store.state.bottomTemperature?.rawValue },
138+
set: { store.send(.setBottomTemperature($0)) }),
139+
format: .number,
140+
prompt: "",
141+
label: L10n.Logbook.bottom,
142+
keyboardType: .decimalPad
143+
)
144+
.focused($focusedField, equals: .bottomTemperature)
145+
}
122146
Section(header: Text(L10n.Logbook.airPressure)) {
123147
LabeledFormattedTextField(
124148
value: Binding(
@@ -127,7 +151,7 @@ struct LogbookDetailView: View {
127151
format: .number,
128152
prompt: L10n.Logbook.Placeholder.bar,
129153
label: L10n.Logbook.entry,
130-
keyboardType: .numberPad
154+
keyboardType: .decimalPad
131155
)
132156
.focused($focusedField, equals: .entryAir)
133157
LabeledFormattedTextField(
@@ -137,32 +161,10 @@ struct LogbookDetailView: View {
137161
format: .number,
138162
prompt: L10n.Logbook.Placeholder.bar,
139163
label: L10n.Logbook.exit,
140-
keyboardType: .numberPad
164+
keyboardType: .decimalPad
141165
)
142166
.focused($focusedField, equals: .exitAir)
143167
}
144-
Section(header: Text(L10n.Logbook.temperature)) {
145-
LabeledFormattedTextField(
146-
value: Binding(
147-
get: { store.state.surfaceTemperature?.rawValue },
148-
set: { store.send(.setSurfaceTemperature($0)) }),
149-
format: .number,
150-
prompt: "",
151-
label: L10n.Logbook.surface,
152-
keyboardType: .numberPad
153-
)
154-
.focused($focusedField, equals: .minimumWaterTemperature)
155-
LabeledFormattedTextField(
156-
value: Binding(
157-
get: { store.state.bottomTemperature?.rawValue },
158-
set: { store.send(.setBottomTemperature($0)) }),
159-
format: .number,
160-
prompt: "",
161-
label: L10n.Logbook.bottom,
162-
keyboardType: .numberPad
163-
)
164-
.focused($focusedField, equals: .averageWaterTemperature)
165-
}
166168
Section {
167169
Picker(
168170
L10n.Logbook.Weather.title,
@@ -202,6 +204,8 @@ struct LogbookDetailView: View {
202204
.frame(height: 100)
203205
.autocorrectionDisabled()
204206
.textInputAutocapitalization(.never)
207+
.submitLabel(.return)
208+
.focused($focusedField, equals: .notes)
205209
}
206210
Button(role: .destructive) {
207211
store.send(.delete)
@@ -296,13 +300,13 @@ extension LogbookDetailView {
296300
case diveCenter
297301
case bottomTime
298302
case surfaceInterval
299-
case entryAir
300-
case exitAir
301303
case maximumDepth
302304
case averageDepth
303-
case maximumWaterTemperature
304-
case minimumWaterTemperature
305-
case averageWaterTemperature
305+
case surfaceTemperature
306+
case bottomTemperature
307+
case entryAir
308+
case exitAir
309+
case notes
306310

307311
var previous: Field? {
308312
guard let currentIndex = Field.allCases.firstIndex(of: self) else { return nil }

Tests/BadaAppTests/LogbookAddReducerTests.swift

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,10 @@ struct LogbookAddReducerTests {
9090
reducer: LogbookAddReducer(),
9191
state: LogbookAddReducer.State()
9292
)
93-
await sut.expect(\.entryTime, Date(timeIntervalSince1970: 0))
94-
await sut.expect(\.exitTime, Date(timeIntervalSince1970: 0))
95-
await sut.send(.setEntryTime(Date(timeIntervalSince1970: 2 * 60)))
96-
await sut.expect(\.entryTime, Date(timeIntervalSince1970: 2 * 60))
93+
await sut.expect(\.entryTime, Date(timeIntervalSince1970: 9 * 60 * 60)) // 9:00 AM
94+
await sut.expect(\.exitTime, Date(timeIntervalSince1970: 9 * 60 * 60))
95+
await sut.send(.setEntryTime(Date(timeIntervalSince1970: 9 * 60 * 60 + 2 * 60)))
96+
await sut.expect(\.entryTime, Date(timeIntervalSince1970: 9 * 60 * 60 + 2 * 60))
9797
await sut.expect(\.bottomTime, .minute(-2))
9898
}
9999

@@ -103,10 +103,10 @@ struct LogbookAddReducerTests {
103103
reducer: LogbookAddReducer(),
104104
state: LogbookAddReducer.State()
105105
)
106-
await sut.expect(\.entryTime, Date(timeIntervalSince1970: 0))
107-
await sut.expect(\.exitTime, Date(timeIntervalSince1970: 0))
108-
await sut.send(.setExitTime(Date(timeIntervalSince1970: 2 * 60)))
109-
await sut.expect(\.exitTime, Date(timeIntervalSince1970: 2 * 60))
106+
await sut.expect(\.entryTime, Date(timeIntervalSince1970: 9 * 60 * 60)) // 9:00 AM
107+
await sut.expect(\.exitTime, Date(timeIntervalSince1970: 9 * 60 * 60))
108+
await sut.send(.setExitTime(Date(timeIntervalSince1970: 9 * 60 * 60 + 2 * 60)))
109+
await sut.expect(\.exitTime, Date(timeIntervalSince1970: 9 * 60 * 60 + 2 * 60))
110110
await sut.expect(\.bottomTime, .minute(2))
111111
}
112112

@@ -119,7 +119,7 @@ struct LogbookAddReducerTests {
119119
await sut.expect(\.bottomTime, nil)
120120
await sut.send(.setBottomTime(12))
121121
await sut.expect(\.bottomTime, .minute(12))
122-
await sut.expect(\.exitTime, Date(timeIntervalSince1970: 12 * 60))
122+
await sut.expect(\.exitTime, Date(timeIntervalSince1970: 9 * 60 * 60 + 12 * 60))
123123
}
124124

125125
@Test

0 commit comments

Comments
 (0)