@@ -21,16 +21,21 @@ struct TitleNavBarItem: View {
2121 }
2222}
2323
24+ class SessionConfig : ObservableObject {
25+ @Published var nReps : Int = 0
26+ @Published var nMinutes : Int = 0
27+ @Published var nSeconds : Int = 0
28+
29+ @Published var useReps : Bool = true
30+ }
31+
2432
2533struct ExerciseDetailsView : View {
2634 @EnvironmentObject var viewModel : ViewModel
35+ @StateObject var sessionConfig : SessionConfig = SessionConfig ( )
2736
2837 let exercise : Exercise
2938
30- @State private var nReps : Int = 1
31- @State private var nMinutes : Int = 1
32- @State private var nSeconds : Int = 0
33-
3439 @State var selection = 1
3540
3641 var body : some View {
@@ -52,7 +57,7 @@ struct ExerciseDetailsView: View {
5257 . font ( . headline)
5358 . padding ( . top, 8 )
5459
55- Picker ( " Reps " , selection: $nReps) {
60+ Picker ( " Reps " , selection: $sessionConfig . nReps) {
5661 ForEach ( 1 ... 100 , id: \. self) { number in
5762 Text ( " \( number) reps " )
5863 }
@@ -74,30 +79,30 @@ struct ExerciseDetailsView: View {
7479
7580 HStack {
7681
77- Picker ( " Minutes " , selection: $nMinutes) {
82+ Picker ( " Minutes " , selection: $sessionConfig . nMinutes) {
7883 ForEach ( 0 ... 30 , id: \. self) { number in
7984 Text ( " \( number) min " )
8085 }
8186 }
82- . onChange ( of: nMinutes) { min in
87+ . onChange ( of: sessionConfig . nMinutes) { min in
8388 // make sure that time is not 0
84- if ( min <= 0 && nSeconds <= 0 ) {
85- nMinutes = 0
86- nSeconds = 1
89+ if ( min <= 0 && sessionConfig . nSeconds <= 0 ) {
90+ sessionConfig . nMinutes = 0
91+ sessionConfig . nSeconds = 1
8792 }
8893 }
8994 . pickerStyle ( WheelPickerStyle ( ) )
9095
91- Picker ( " Seconds " , selection: $nSeconds) {
96+ Picker ( " Seconds " , selection: $sessionConfig . nSeconds) {
9297 ForEach ( 0 ... 59 , id: \. self) { number in
9398 Text ( " \( number) sec " )
9499 }
95100 }
96- . onChange ( of: nSeconds) { sec in
101+ . onChange ( of: sessionConfig . nSeconds) { sec in
97102 // make sure that time is not 0
98- if ( nMinutes <= 0 && sec <= 0 ) {
99- nMinutes = 1
100- nSeconds = 0
103+ if ( sessionConfig . nMinutes <= 0 && sec <= 0 ) {
104+ sessionConfig . nMinutes = 1
105+ sessionConfig . nSeconds = 0
101106 }
102107 }
103108 . pickerStyle ( WheelPickerStyle ( ) )
@@ -108,10 +113,14 @@ struct ExerciseDetailsView: View {
108113 . clipped ( )
109114 . cornerRadius ( 10 )
110115 . shadow ( color: Color . black. opacity ( 0.2 ) , radius: 4 , x: 0 , y: 2 )
111- . padding ( ) . pagerTabItem ( tag: 2 ) {
116+ . padding ( )
117+ . pagerTabItem ( tag: 2 ) {
112118 TitleNavBarItem ( title: " Timer " )
113119 }
114120 }
121+ . onChange ( of: selection) { newValue in
122+ sessionConfig. useReps = newValue == 1
123+ }
115124
116125 NavigationLink ( value: " Workout " ) {
117126 Text ( " Start workout " )
@@ -122,17 +131,11 @@ struct ExerciseDetailsView: View {
122131
123132 }
124133 . navigationDestination ( for: String . self) { _ in
125- WorkoutView ( exercise: exercise, nReps : selection == 1 ? nReps : nil , nSeconds : selection == 2 ? nMinutes * 60 + nSeconds : nil ) . environmentObject ( viewModel)
134+ WorkoutView ( exercise: exercise) . environmentObject ( viewModel) . environmentObject ( sessionConfig )
126135 }
127136
128137
129138 }
130139 . navigationBarTitle ( Text ( exercise. name) )
131140 }
132141}
133-
134- //struct ExerciseDetailsView_Previews: PreviewProvider {
135- // static var previews: some View {
136- // ExerciseDetailsView(exercise: Exercise(name: "Exercise 1", details: "Exercise 1 details"))
137- // }
138- //}
0 commit comments