Remove independent form components; each form is now responsible for its components.

Commit
cb19fb54154b921e46a602dee4874861afd2f3fa
Author
Marius Peter <marius.peter@tutanota.com>
Author date
Committer
Marius Peter <marius.peter@tutanota.com>
Committer date
Changed files
src/MyFitnessTracker-Components/MFTConfirmForm.class.st
index 07873f88..e3cfb5ac 100644..100644
@@ -1,6 +1,9 @@
1 1 Class {
2 2 #name : 'MFTConfirmForm',
3 3 #superclass : 'MFTForm',
4 Added: #instVars : [
5 Added: 'message'
6 Added: ],
4 7 #category : 'MyFitnessTracker-Components-Forms',
5 8 #package : 'MyFitnessTracker-Components',
6 9 #tag : 'Forms'
@@ -25,6 +28,38 @@
25 28
26 29 super initialize .
27 30 heading := 'Heads up!'
31 Added: ]
32 Added:
33 Added: { #category : 'accessing' }
34 Added: MFTConfirmForm >> message: anObject [
35 Added:
36 Added: message := anObject
37 Added: ]
38 Added:
39 Added: { #category : 'rendering' }
40 Added: MFTConfirmForm >> renderContentOn: html [
41 Added:
42 Added: self renderFormOn: html with: [
43 Added: html
44 Added: text: message;
45 Added: break;
46 Added: text: 'To avoid this warning, go back and fix this issue.' ]
47 Added: ]
48 Added:
49 Added: { #category : 'as yet unclassified' }
50 Added: MFTConfirmForm >> renderSubmitOn: html [
51 Added:
52 Added: html buttonGroup: [
53 Added: html formButton
54 Added: beSubmit;
55 Added: bePrimary;
56 Added: callback: [ self submitForm ];
57 Added: with: 'Confirm'.
58 Added: html formButton
59 Added: beSubmit;
60 Added: beSecondary;
61 Added: callback: [ self cancelForm ];
62 Added: with: 'Cancel' ]
28 63 ]
29 64
30 65 { #category : 'as yet unclassified' }
src/MyFitnessTracker-Components/MFTDateFormComponent.class.st
index c8eb264e..00000000 100644..000000
@@ -1,24 +0,0 @@
1 Removed: Class {
2 Removed: #name : 'MFTDateFormComponent',
3 Removed: #superclass : 'MFTFormComponent',
4 Removed: #category : 'MyFitnessTracker-Components-Forms',
5 Removed: #package : 'MyFitnessTracker-Components',
6 Removed: #tag : 'Forms'
7 Removed: }
8 Removed:
9 Removed: { #category : 'initialization' }
10 Removed: MFTDateFormComponent >> initialize [
11 Removed:
12 Removed: super initialize.
13 Removed: heading := 'Date'
14 Removed: ]
15 Removed:
16 Removed: { #category : 'rendering' }
17 Removed: MFTDateFormComponent >> renderContentOn: html [
18 Removed:
19 Removed: self renderFormComponentOn: html with: [
20 Removed: html dateInput5 formControl
21 Removed: value: modelObject date yyyymmdd;
22 Removed: callback: [ :value |
23 Removed: modelObject date: (Date readFrom: value pattern: 'yyyy-mm-dd') ] ]
24 Removed: ]
src/MyFitnessTracker-Components/MFTExercisesForm.class.st
index 1a54a41e..9639106d 100644..100644
@@ -1,6 +1,9 @@
1 1 Class {
2 2 #name : 'MFTExercisesForm',
3 3 #superclass : 'MFTForm',
4 Added: #instVars : [
5 Added: 'exercises'
6 Added: ],
4 7 #category : 'MyFitnessTracker-Components-Forms',
5 8 #package : 'MyFitnessTracker-Components',
6 9 #tag : 'Forms'
@@ -14,33 +17,43 @@
14 17 1 to: anInteger do: [ :i |
15 18 exercises add: (MFTSQLite3Database allExercises at: i) ].
16 19 ^ self new
17 Removed: modelObject: exercises;
20 Added: exercises: exercises;
18 21 yourself
19 22 ]
20 23
24 Added: { #category : 'accessing' }
25 Added: MFTExercisesForm >> exercises: anObject [
26 Added:
27 Added: exercises := anObject
28 Added: ]
29 Added:
21 30 { #category : 'initialization' }
22 31 MFTExercisesForm >> initialize [
23 32
24 33 super initialize.
25 Removed: modelObject := OrderedCollection new.
26 Removed: heading := 'Exercises'
34 Added: heading := 'Exercises'.
35 Added: exercises := OrderedCollection new
27 36 ]
28 37
29 38 { #category : 'rendering' }
30 39 MFTExercisesForm >> renderContentOn: html [
31 40
32 Removed: self renderFormOn: html with: [ self renderSelectExercisesOn: html ]
41 Added: self renderFormOn: html with: [
42 Added: exercises doWithIndex: [ :selectedExercise :i |
43 Added: html div
44 Added: class: 'form-floating';
45 Added: marginBottom: 3;
46 Added: with: [
47 Added: html formSelect formControl
48 Added: list: MFTSQLite3Database allExercises;
49 Added: selected: selectedExercise;
50 Added: callback: [ :exercise | exercises at: i put: exercise ];
51 Added: labels: #englishName.
52 Added: html label: 'Exercise ' , i asString ] ] ]
33 53 ]
34 54
35 Removed: { #category : 'rendering' }
36 Removed: MFTExercisesForm >> renderSelectExercisesOn: html [
55 Added: { #category : 'as yet unclassified' }
56 Added: MFTExercisesForm >> submitForm [
37 57
38 Removed: modelObject doWithIndex: [ :selectedExercise :i |
39 Removed: html formGroup: [
40 Removed: html label: 'Exercise ' , i asString.
41 Removed: html select formControl
42 Removed: list: MFTSQLite3Database allExercises;
43 Removed: selected: selectedExercise;
44 Removed: callback: [ :exercise | modelObject at: i put: exercise ];
45 Removed: labels: [ :each | each englishName ] ] ]
58 Added: self answer: exercises
46 59 ]
src/MyFitnessTracker-Components/MFTForm.class.st
index 609b3b21..a4bf98bf 100644..100644
@@ -8,7 +8,6 @@
8 8 #name : 'MFTForm',
9 9 #superclass : 'SBSComponent',
10 10 #instVars : [
11 Removed: 'modelObject',
12 11 'heading'
13 12 ],
14 13 #category : 'MyFitnessTracker-Components-Forms',
@@ -29,22 +28,10 @@
29 28 heading := 'Form heading'
30 29 ]
31 30
32 Removed: { #category : 'accessing' }
33 Removed: MFTForm >> modelObject [
34 Removed:
35 Removed: ^ modelObject
36 Removed: ]
37 Removed:
38 Removed: { #category : 'accessing' }
39 Removed: MFTForm >> modelObject: anObject [
40 Removed:
41 Removed: modelObject := anObject
42 Removed: ]
43 Removed:
44 31 { #category : 'rendering' }
45 32 MFTForm >> renderContentOn: html [
46 33
47 Removed: self renderFormOn: html with: [ html render: modelObject ]
34 Added: self subclassResponsibility
48 35 ]
49 36
50 37 { #category : 'as yet unclassified' }
@@ -81,5 +68,5 @@
81 68 { #category : 'as yet unclassified' }
82 69 MFTForm >> submitForm [
83 70
84 Removed: self answer: modelObject
71 Added: self subclassResponsibility
85 72 ]
src/MyFitnessTracker-Components/MFTFormComponent.class.st
index ec3ee682..00000000 100644..000000
@@ -1,92 +0,0 @@
1 Removed: "
2 Removed: When instantiated with the `MFTFormComponent class>>#set:` message, I return an instance of the appropriate subclass for setting the model object attribute.
3 Removed: "
4 Removed: Class {
5 Removed: #name : 'MFTFormComponent',
6 Removed: #superclass : 'SBSComponent',
7 Removed: #instVars : [
8 Removed: 'heading',
9 Removed: 'modelObject'
10 Removed: ],
11 Removed: #category : 'MyFitnessTracker-Components-Forms',
12 Removed: #package : 'MyFitnessTracker-Components',
13 Removed: #tag : 'Forms'
14 Removed: }
15 Removed:
16 Removed: { #category : 'as yet unclassified' }
17 Removed: MFTFormComponent class >> formComponentFor: anAttribute [
18 Removed:
19 Removed: | formComponents |
20 Removed: formComponents := Dictionary newFrom: {
21 Removed: (#date -> MFTDateFormComponent).
22 Removed: (#setGroups -> MFTSetGroupsFormComponent).
23 Removed: (#primaryMuscleGroup
24 Removed: -> MFTPrimaryMuscleGroupFormComponent).
25 Removed: (#secondaryMuscleGroups
26 Removed: -> MFTSecondaryMuscleGroupsFormComponent) }.
27 Removed:
28 Removed: ^ formComponents at: anAttribute ifAbsent: [
29 Removed: self error:
30 Removed: ('no appropriate {1} subclass for setting attribute "{2}"'
31 Removed: format: {
32 Removed: self.
33 Removed: anAttribute }) ]
34 Removed: ]
35 Removed:
36 Removed: { #category : 'as yet unclassified' }
37 Removed: MFTFormComponent class >> set: anAttribute [
38 Removed:
39 Removed: | formComponent |
40 Removed: formComponent := self formComponentFor: anAttribute.
41 Removed: ^ formComponent new
42 Removed: modelObject: thisContext sender receiver modelObject;
43 Removed: yourself
44 Removed: ]
45 Removed:
46 Removed: { #category : 'accessing' }
47 Removed: MFTFormComponent >> heading [
48 Removed:
49 Removed: ^ heading
50 Removed: ]
51 Removed:
52 Removed: { #category : 'accessing' }
53 Removed: MFTFormComponent >> heading: anObject [
54 Removed:
55 Removed: heading := anObject
56 Removed: ]
57 Removed:
58 Removed: { #category : 'initialization' }
59 Removed: MFTFormComponent >> initialize [
60 Removed:
61 Removed: super initialize
62 Removed: ]
63 Removed:
64 Removed: { #category : 'accessing' }
65 Removed: MFTFormComponent >> modelObject [
66 Removed:
67 Removed: ^ modelObject
68 Removed: ]
69 Removed:
70 Removed: { #category : 'accessing' }
71 Removed: MFTFormComponent >> modelObject: anObject [
72 Removed:
73 Removed: modelObject := anObject
74 Removed: ]
75 Removed:
76 Removed: { #category : 'rendering' }
77 Removed: MFTFormComponent >> renderContentOn: html [
78 Removed:
79 Removed: self renderFormComponentOn: html with: [ html render: modelObject ]
80 Removed: ]
81 Removed:
82 Removed: { #category : 'as yet unclassified' }
83 Removed: MFTFormComponent >> renderFormComponentOn: html with: aBlock [
84 Removed:
85 Removed: html formGroup
86 Removed: class: 'my-4';
87 Removed: with: [
88 Removed: html paragraph
89 Removed: heading: 3;
90 Removed: with: [ html text: heading ].
91 Removed: aBlock value ]
92 Removed: ]
src/MyFitnessTracker-Components/MFTPrimaryMuscleGroupFormComponent.class.st
index 9eca34af..00000000 100644..000000
@@ -1,32 +0,0 @@
1 Removed: Class {
2 Removed: #name : 'MFTPrimaryMuscleGroupFormComponent',
3 Removed: #superclass : 'MFTFormComponent',
4 Removed: #category : 'MyFitnessTracker-Components-Forms',
5 Removed: #package : 'MyFitnessTracker-Components',
6 Removed: #tag : 'Forms'
7 Removed: }
8 Removed:
9 Removed: { #category : 'initialization' }
10 Removed: MFTPrimaryMuscleGroupFormComponent >> initialize [
11 Removed:
12 Removed: super initialize.
13 Removed: heading := 'Primary Group'
14 Removed: ]
15 Removed:
16 Removed: { #category : 'rendering' }
17 Removed: MFTPrimaryMuscleGroupFormComponent >> renderContentOn: html [
18 Removed:
19 Removed: | allMuscleGroups selectedMuscleGroup |
20 Removed: allMuscleGroups := MFTSQLite3Database allMuscleGroups.
21 Removed: selectedMuscleGroup := modelObject primaryMuscleGroup ifNotNil: [
22 Removed: allMuscleGroups detect: [ :muscleGroup |
23 Removed: muscleGroup englishName
24 Removed: = modelObject primaryMuscleGroup englishName ] ].
25 Removed:
26 Removed: self renderFormComponentOn: html with: [
27 Removed: html select formControl
28 Removed: list: allMuscleGroups;
29 Removed: selected: selectedMuscleGroup;
30 Removed: labels: [ :muscleGroup | muscleGroup englishName ];
31 Removed: callback: [ :group | modelObject primaryMuscleGroup: group ] ]
32 Removed: ]
src/MyFitnessTracker-Components/MFTSecondaryMuscleGroupsFormComponent.class.st
index d65d407d..00000000 100644..000000
@@ -1,40 +0,0 @@
1 Removed: Class {
2 Removed: #name : 'MFTSecondaryMuscleGroupsFormComponent',
3 Removed: #superclass : 'MFTFormComponent',
4 Removed: #instVars : [
5 Removed: 'allMuscleGroups'
6 Removed: ],
7 Removed: #category : 'MyFitnessTracker-Components-Forms',
8 Removed: #package : 'MyFitnessTracker-Components',
9 Removed: #tag : 'Forms'
10 Removed: }
11 Removed:
12 Removed: { #category : 'as yet unclassified' }
13 Removed: MFTSecondaryMuscleGroupsFormComponent >> getSelectedMuscleGroups [
14 Removed:
15 Removed: | selectedMuscleGroups |
16 Removed: selectedMuscleGroups := allMuscleGroups select: [ :muscleGroup |
17 Removed: modelObject secondaryMuscleGroupIds
18 Removed: includes: muscleGroup id ].
19 Removed: ^ selectedMuscleGroups
20 Removed: ]
21 Removed:
22 Removed: { #category : 'initialization' }
23 Removed: MFTSecondaryMuscleGroupsFormComponent >> initialize [
24 Removed:
25 Removed: super initialize.
26 Removed: heading := 'Secondary Groups'.
27 Removed: allMuscleGroups := MFTSQLite3Database allMuscleGroups
28 Removed: ]
29 Removed:
30 Removed: { #category : 'rendering' }
31 Removed: MFTSecondaryMuscleGroupsFormComponent >> renderContentOn: html [
32 Removed:
33 Removed: self renderFormComponentOn: html with: [
34 Removed: html multiSelect formControl
35 Removed: list: allMuscleGroups;
36 Removed: selected: self getSelectedMuscleGroups;
37 Removed: labels: [ :muscleGroup | muscleGroup englishName ];
38 Removed: callback: [ :muscleGroups |
39 Removed: modelObject secondaryMuscleGroups: muscleGroups ] ]
40 Removed: ]
src/MyFitnessTracker-Components/MFTSetGroupForm.class.st
index 8359356f..925861c2 100644..100644
@@ -2,6 +2,7 @@
2 2 #name : 'MFTSetGroupForm',
3 3 #superclass : 'MFTForm',
4 4 #instVars : [
5 Added: 'setGroup',
5 6 'exerciseCount',
6 7 'renderRpe',
7 8 'renderRestAfter'
@@ -21,7 +22,7 @@
21 22 exercise: exercise;
22 23 reps: 8 ]).
23 24 ^ self new
24 Removed: modelObject: setGroup;
25 Added: setGroup: setGroup;
25 26 exerciseCount: anMFTExerciseCollection size;
26 27 yourself
27 28 ]
@@ -36,8 +37,8 @@
36 37 MFTSetGroupForm >> initialize [
37 38
38 39 super initialize.
39 Removed: modelObject := MFTSetGroup new addSet: (MFTSet new reps: 8).
40 40 heading := 'Sets'.
41 Added: setGroup := MFTSetGroup new addSet: (MFTSet new reps: 8).
41 42 renderRpe := false.
42 43 renderRestAfter := false
43 44 ]
@@ -54,10 +55,10 @@
54 55 MFTSetGroupForm >> renderSetGroupRowsOn: html [
55 56
56 57 | selectedExercises renderSetGroupExercisesName |
57 Removed: selectedExercises := modelObject sets collect: #exercise.
58 Removed: renderSetGroupExercisesName := modelObject isIrregularSetGroup.
58 Added: selectedExercises := setGroup sets collect: #exercise.
59 Added: renderSetGroupExercisesName := setGroup isIrregularSetGroup.
59 60
60 Removed: modelObject sets do: [ :set |
61 Added: setGroup sets do: [ :set |
61 62 html tableRow: [
62 63 renderSetGroupExercisesName ifTrue: [
63 64 html tableData with: set exercise englishName capitalized ].
@@ -91,7 +92,7 @@
91 92 MFTSetGroupForm >> renderSetGroupTableHeaderOn: html [
92 93
93 94 html tableHead: [
94 Removed: modelObject isIrregularSetGroup ifTrue: [
95 Added: setGroup isIrregularSetGroup ifTrue: [
95 96 html tableHeading with: 'Exercise' ].
96 97 html tableHeading with: 'Reps'.
97 98 html tableHeading with: 'Load'.
@@ -113,13 +114,13 @@
113 114 MFTSetGroupForm >> renderSetsButtonGroupOn: html [
114 115
115 116 html buttonGroup
116 Removed: class: 'my-3';
117 Added: marginTopAndBottom: 3;
117 118 with: [
118 119 html outlineButton
119 120 bePrimary;
120 121 beSmall;
121 Removed: callback: [ modelObject addSets: modelObject sets ];
122 Removed: with: 'Add sets'.
122 Added: callback: [ setGroup addSets: setGroup sets ];
123 Added: with: 'Add set'.
123 124 renderRpe ifFalse: [
124 125 html outlineButton
125 126 beSecondary;
@@ -137,8 +138,20 @@
137 138 beSmall;
138 139 callback: [
139 140 | firstSets |
140 Removed: firstSets := modelObject sets first: exerciseCount.
141 Removed: modelObject := MFTSetGroup new addSets: firstSets.
141 Added: firstSets := setGroup sets first: exerciseCount.
142 Added: setGroup := MFTSetGroup new addSets: firstSets.
142 143 renderRpe := renderRestAfter := false ];
143 144 with: 'Reset' ]
145 Added: ]
146 Added:
147 Added: { #category : 'accessing' }
148 Added: MFTSetGroupForm >> setGroup: anObject [
149 Added:
150 Added: setGroup := anObject
151 Added: ]
152 Added:
153 Added: { #category : 'as yet unclassified' }
154 Added: MFTSetGroupForm >> submitForm [
155 Added:
156 Added: self answer: setGroup
144 157 ]
src/MyFitnessTracker-Components/MFTSetGroupsFormComponent.class.st
index e9b3b197..00000000 100644..000000
@@ -1,62 +0,0 @@
1 Removed: Class {
2 Removed: #name : 'MFTSetGroupsFormComponent',
3 Removed: #superclass : 'MFTFormComponent',
4 Removed: #category : 'MyFitnessTracker-Components-Forms',
5 Removed: #package : 'MyFitnessTracker-Components',
6 Removed: #tag : 'Forms'
7 Removed: }
8 Removed:
9 Removed: { #category : 'adding' }
10 Removed: MFTSetGroupsFormComponent >> addSetGroupsForExerciseCount: anInteger [
11 Removed:
12 Removed: | setGroup |
13 Removed: setGroup := self session pageManager activePage call:
14 Removed: (MFTSetGroupTask forExerciseCount: anInteger).
15 Removed: setGroup ifNotNil: [ modelObject addSetGroup: setGroup ]
16 Removed: ]
17 Removed:
18 Removed: { #category : 'initialization' }
19 Removed: MFTSetGroupsFormComponent >> initialize [
20 Removed:
21 Removed: super initialize.
22 Removed: heading := 'Exercises'
23 Removed: ]
24 Removed:
25 Removed: { #category : 'rendering' }
26 Removed: MFTSetGroupsFormComponent >> renderContentOn: html [
27 Removed:
28 Removed: self renderFormComponentOn: html with: [
29 Removed: modelObject renderSetGroupsTableOn: html.
30 Removed: self renderSetGroupButtonsOn: html ]
31 Removed: ]
32 Removed:
33 Removed: { #category : 'rendering' }
34 Removed: MFTSetGroupsFormComponent >> renderSetGroupButtonsOn: html [
35 Removed:
36 Removed: html buttonGroup: [
37 Removed: html outlineButton
38 Removed: bePrimary;
39 Removed: beSmall;
40 Removed: callback: [ self addSetGroupsForExerciseCount: 1 ];
41 Removed: with: 'Add exercise'.
42 Removed: html outlineButton
43 Removed: beSecondary;
44 Removed: beSmall;
45 Removed: callback: [ self addSetGroupsForExerciseCount: 2 ];
46 Removed: with: 'Add superset'.
47 Removed: html outlineButton
48 Removed: beSecondary;
49 Removed: beSmall;
50 Removed: callback: [ self addSetGroupsForExerciseCount: 3 ];
51 Removed: with: 'Add tri-set'.
52 Removed: html outlineButton
53 Removed: beSecondary;
54 Removed: beSmall;
55 Removed: callback: [ self addSetGroupsForExerciseCount: 4 ];
56 Removed: with: 'Add giant set'.
57 Removed: html outlineButton
58 Removed: beDanger;
59 Removed: beSmall;
60 Removed: callback: [ modelObject setGroups removeAll ];
61 Removed: with: 'Remove all' ]
62 Removed: ]
src/MyFitnessTracker-Components/MFTWeightForm.class.st
index 00000000..33d3f51a 000000..100644
@@ -0,0 +1,61 @@
1 Added: Class {
2 Added: #name : 'MFTWeightForm',
3 Added: #superclass : 'MFTForm',
4 Added: #instVars : [
5 Added: 'weight'
6 Added: ],
7 Added: #category : 'MyFitnessTracker-Components-Forms',
8 Added: #package : 'MyFitnessTracker-Components',
9 Added: #tag : 'Forms'
10 Added: }
11 Added:
12 Added: { #category : 'initialization' }
13 Added: MFTWeightForm >> initialize [
14 Added:
15 Added: super initialize.
16 Added: heading := 'Weight'.
17 Added: weight := MFTWeight new
18 Added: ]
19 Added:
20 Added: { #category : 'rendering' }
21 Added: MFTWeightForm >> renderContentOn: html [
22 Added:
23 Added: self renderFormOn: html with: [
24 Added: html formGroup: [
25 Added: html div
26 Added: class: 'form-floating';
27 Added: marginBottom: 3;
28 Added: with: [
29 Added: html dateInput5 formControl
30 Added: placeholder: 'RequiredEntry-PutItAndDoNotUse';
31 Added: callback: [ :input |
32 Added: input ifEmpty: [ self error: 'Workout date required.' ].
33 Added: weight date: (Date readFrom: input pattern: 'yyyy-mm-dd') ];
34 Added: value: weight date yyyymmdd.
35 Added: html label: 'Date' ] ].
36 Added:
37 Added: html formGroup: [
38 Added: html div
39 Added: class: 'form-floating';
40 Added: marginBottom: 3;
41 Added: with: [
42 Added: html numberInput formControl
43 Added: placeholder: 'RequiredEntry-PutItAndDoNotUse';
44 Added: callback: [ :input |
45 Added: input ifEmpty: [ self error: 'Weight value required.' ].
46 Added: weight value: input ];
47 Added: value: weight value.
48 Added: html label: 'Weight' ] ] ]
49 Added: ]
50 Added:
51 Added: { #category : 'as yet unclassified' }
52 Added: MFTWeightForm >> submitForm [
53 Added:
54 Added: self answer: weight
55 Added: ]
56 Added:
57 Added: { #category : 'accessing' }
58 Added: MFTWeightForm >> weight: anObject [
59 Added:
60 Added: weight := anObject
61 Added: ]
src/MyFitnessTracker-Components/MFTWorkoutForm.class.st
index cfef255a..97824386 100644..100644
@@ -1,45 +1,155 @@
1 1 Class {
2 2 #name : 'MFTWorkoutForm',
3 3 #superclass : 'MFTForm',
4 Added: #instVars : [
5 Added: 'workout'
6 Added: ],
4 7 #category : 'MyFitnessTracker-Components-Forms',
5 8 #package : 'MyFitnessTracker-Components',
6 9 #tag : 'Forms'
7 10 }
8 11
12 Added: { #category : 'adding' }
13 Added: MFTWorkoutForm >> addSetGroupsForExerciseCount: anInteger [
14 Added:
15 Added: | setGroup |
16 Added: setGroup := self session pageManager activePage call:
17 Added: (MFTSetGroupTask forExerciseCount: anInteger).
18 Added: setGroup ifNotNil: [ workout addSetGroup: setGroup ]
19 Added: ]
20 Added:
9 21 { #category : 'as yet unclassified' }
10 Removed: MFTWorkoutForm class >> edit: aMFTWorkout [
22 Added: MFTWorkoutForm >> getSelectedMuscleGroups [
11 23
12 Removed: ^ self new
13 Removed: modelObject: aMFTWorkout;
14 Removed: yourself
24 Added: | selectedMuscleGroups |
25 Added: selectedMuscleGroups := MFTSQLite3Database allMuscleGroups select: [
26 Added: :muscleGroup |
27 Added: workout secondaryMuscleGroups includes:
28 Added: muscleGroup ].
29 Added: ^ selectedMuscleGroups
15 30 ]
16 31
17 32 { #category : 'initialization' }
18 33 MFTWorkoutForm >> initialize [
19 34
20 35 super initialize.
21 Removed: modelObject := MFTWorkout new.
22 Removed: heading := 'Workout'
36 Added: heading := 'Workout'.
37 Added: workout := MFTWorkout new
23 38 ]
24 39
25 40 { #category : 'rendering' }
26 41 MFTWorkoutForm >> renderContentOn: html [
27 42
28 43 self renderFormOn: html with: [
29 Removed: html
30 Removed: render: (MFTFormComponent set: #date);
31 Removed: render: (MFTFormComponent set: #setGroups);
32 Removed: render: (MFTFormComponent set: #primaryMuscleGroup);
33 Removed: render: (MFTFormComponent set: #secondaryMuscleGroups) ]
44 Added: self renderDatePickerOn: html.
45 Added: self renderExercisesPickerOn: html.
46 Added: self renderPrimaryMuscleGroupPickerOn: html.
47 Added: self renderSecondaryMuscleGroupsPickerOn: html ]
34 48 ]
35 49
36 50 { #category : 'as yet unclassified' }
51 Added: MFTWorkoutForm >> renderDatePickerOn: html [
52 Added:
53 Added: html formGroup: [
54 Added: html div
55 Added: class: 'form-floating';
56 Added: marginBottom: 3;
57 Added: with: [
58 Added: html dateInput5 formControl
59 Added: placeholder: 'RequiredEntry-PutItAndDoNotUse';
60 Added: callback: [ :input |
61 Added: input ifEmpty: [ self error: 'Workout date required.' ].
62 Added: workout date: (Date readFrom: input pattern: 'yyyy-mm-dd') ];
63 Added: value: workout date yyyymmdd.
64 Added: html label: 'Date' ] ]
65 Added: ]
66 Added:
67 Added: { #category : 'as yet unclassified' }
68 Added: MFTWorkoutForm >> renderExercisesPickerOn: html [
69 Added:
70 Added: workout renderSetGroupsTableOn: html.
71 Added: html buttonGroup
72 Added: marginBottom: 3;
73 Added: with: [
74 Added: html outlineButton
75 Added: bePrimary;
76 Added: beSmall;
77 Added: callback: [ self addSetGroupsForExerciseCount: 1 ];
78 Added: with: 'Add exercise'.
79 Added: html outlineButton
80 Added: beSecondary;
81 Added: beSmall;
82 Added: callback: [ self addSetGroupsForExerciseCount: 2 ];
83 Added: with: 'Add superset'.
84 Added: html outlineButton
85 Added: beSecondary;
86 Added: beSmall;
87 Added: callback: [ self addSetGroupsForExerciseCount: 3 ];
88 Added: with: 'Add tri-set'.
89 Added: html outlineButton
90 Added: beSecondary;
91 Added: beSmall;
92 Added: callback: [ self addSetGroupsForExerciseCount: 4 ];
93 Added: with: 'Add giant set'.
94 Added: html outlineButton
95 Added: beDanger;
96 Added: beSmall;
97 Added: callback: [ workout setGroups removeAll ];
98 Added: with: 'Remove all' ]
99 Added: ]
100 Added:
101 Added: { #category : 'as yet unclassified' }
102 Added: MFTWorkoutForm >> renderPrimaryMuscleGroupPickerOn: html [
103 Added:
104 Added: | selectedMuscleGroup |
105 Added: selectedMuscleGroup := workout primaryMuscleGroup ifNotNil: [
106 Added: MFTSQLite3Database allMuscleGroups detect: [
107 Added: :muscleGroup |
108 Added: muscleGroup englishName
109 Added: = workout primaryMuscleGroup englishName ] ].
110 Added:
111 Added: html formGroup: [
112 Added: html div
113 Added: class: 'form-floating';
114 Added: marginBottom: 3;
115 Added: with: [
116 Added: html formSelect
117 Added: list: MFTSQLite3Database allMuscleGroups;
118 Added: callback: [ :group | workout primaryMuscleGroup: group ];
119 Added: selected: selectedMuscleGroup;
120 Added: labels: [ :muscleGroup | muscleGroup englishName ].
121 Added: html label: 'Primary Muscle Group' ] ]
122 Added: ]
123 Added:
124 Added: { #category : 'as yet unclassified' }
125 Added: MFTWorkoutForm >> renderSecondaryMuscleGroupsPickerOn: html [
126 Added:
127 Added: html formGroup: [
128 Added: html div
129 Added: class: 'form-floating';
130 Added: marginBottom: 3;
131 Added: with: [
132 Added: html multiSelect formControl class: 'h-25';
133 Added: list: MFTSQLite3Database allMuscleGroups;
134 Added: callback: [ :muscleGroups |
135 Added: workout secondaryMuscleGroups: muscleGroups ];
136 Added: selected: self getSelectedMuscleGroups;
137 Added: labels: [ :muscleGroup | muscleGroup englishName ].
138 Added: html label: 'Secondary Muscle Groups' ] ]
139 Added: ]
140 Added:
141 Added: { #category : 'as yet unclassified' }
37 142 MFTWorkoutForm >> submitForm [
38 143
39 Removed: modelObject setGroups ifEmpty: [
144 Added: workout setGroups ifEmpty: [
40 145 (self call:
41 Removed: (MFTConfirmForm new modelObject: 'No exercises were specified.'))
146 Added: (MFTConfirmForm new message: 'No exercises were specified.'))
42 147 ifFalse: [ self answer: nil ] ].
148 Added: self answer: workout
149 Added: ]
43 150
44 Removed: self answer: modelObject
151 Added: { #category : 'accessing' }
152 Added: MFTWorkoutForm >> workout: anObject [
153 Added:
154 Added: workout := anObject
45 155 ]