@@ -2,8 +2,6 @@ package cz.frantisekmasa.wfrp_master.common.characterCreation
22
33import androidx.compose.foundation.layout.Arrangement
44import androidx.compose.foundation.layout.Column
5- import androidx.compose.foundation.layout.Row
6- import androidx.compose.foundation.layout.fillMaxWidth
75import androidx.compose.foundation.layout.padding
86import androidx.compose.runtime.Composable
97import androidx.compose.runtime.MutableState
@@ -19,11 +17,11 @@ import cz.frantisekmasa.wfrp_master.common.core.domain.character.Race
1917import cz.frantisekmasa.wfrp_master.common.core.domain.character.SocialStatus
2018import cz.frantisekmasa.wfrp_master.common.core.domain.localizedName
2119import cz.frantisekmasa.wfrp_master.common.core.ui.forms.CareerSelectBox
22- import cz.frantisekmasa.wfrp_master.common.core.ui.forms.CheckboxWithText
2320import cz.frantisekmasa.wfrp_master.common.core.ui.forms.ChipList
2421import cz.frantisekmasa.wfrp_master.common.core.ui.forms.FormData
2522import cz.frantisekmasa.wfrp_master.common.core.ui.forms.InputValue
2623import cz.frantisekmasa.wfrp_master.common.core.ui.forms.Rules
24+ import cz.frantisekmasa.wfrp_master.common.core.ui.forms.SelectedCareer
2725import cz.frantisekmasa.wfrp_master.common.core.ui.forms.SocialStatusInput
2826import cz.frantisekmasa.wfrp_master.common.core.ui.forms.TextInput
2927import cz.frantisekmasa.wfrp_master.common.core.ui.forms.inputValue
@@ -36,9 +34,7 @@ object CharacterBasicInfoForm {
3634 val name : InputValue ,
3735 val publicName : InputValue ,
3836 val socialClass : InputValue ,
39- val career : InputValue ,
40- val customCareer : MutableState <Boolean >,
41- val compendiumCareer : MutableState <Character .CompendiumCareer ?>,
37+ val career : MutableState <SelectedCareer ?>,
4238 val race : MutableState <Race ?>,
4339 val psychology : InputValue ,
4440 val motivation : InputValue ,
@@ -58,19 +54,28 @@ object CharacterBasicInfoForm {
5854 name = inputValue(character?.name ? : " " , Rules .NotBlank ()),
5955 publicName = inputValue(character?.publicName ? : " " ),
6056 socialClass = inputValue(character?.socialClass ? : " " ),
61- career = inputValue(character?.career ? : " " ),
57+ career = rememberSaveable {
58+ mutableStateOf(
59+ character?.let {
60+ val compendiumCareer = character.compendiumCareer
61+ compendiumCareer?.let {
62+ SelectedCareer .CompendiumCareer (
63+ compendiumCareer,
64+ character.status,
65+ )
66+ } ? : SelectedCareer .NonCompendiumCareer (
67+ character.career,
68+ character.socialClass,
69+ )
70+ }
71+ )
72+ },
6273 race = rememberSaveable {
6374 mutableStateOf(if (character == null ) Race .HUMAN else character.race)
6475 },
6576 psychology = inputValue(character?.psychology ? : " " ),
6677 motivation = inputValue(character?.motivation ? : " " ),
6778 note = inputValue(character?.note ? : " " ),
68- customCareer = rememberSaveable {
69- mutableStateOf(character != null && character.career != " " )
70- },
71- compendiumCareer = rememberSaveable {
72- mutableStateOf(character?.compendiumCareer)
73- },
7479 status = rememberSaveable {
7580 mutableStateOf(
7681 character?.status
@@ -81,8 +86,7 @@ object CharacterBasicInfoForm {
8186 )
8287 }
8388
84- override fun isValid (): Boolean =
85- name.value.isNotBlank() && (customCareer.value || compendiumCareer.value != null )
89+ override fun isValid (): Boolean = name.value.isNotBlank()
8690 }
8791}
8892
@@ -118,43 +122,21 @@ fun CharacterBasicInfoForm(
118122 onValueChange = { data.race.value = it },
119123 )
120124
121- CheckboxWithText (
122- strings.labelCustomCareer,
123- checked = data.customCareer.value,
124- onCheckedChange = { data.customCareer.value = ! data.customCareer.value },
125+ CareerSelectBox (
126+ careers = data.careers,
127+ value = data.career.value,
128+ onValueChange = {
129+ if (it is SelectedCareer .CompendiumCareer && data.career.value != it) {
130+ data.status.value = it.socialStatus
131+ }
132+ data.career.value = it
133+ },
125134 )
126135
127- if (data.customCareer.value) {
128- Row (Modifier .fillMaxWidth(), horizontalArrangement = Arrangement .spacedBy(8 .dp)) {
129- TextInput (
130- modifier = Modifier .weight(1f ),
131- label = strings.labelClass,
132- value = data.socialClass,
133- maxLength = Character .SOCIAL_CLASS_MAX_LENGTH ,
134- validate = validate,
135- )
136-
137- TextInput (
138- modifier = Modifier .weight(1f ),
139- label = strings.labelCareer,
140- value = data.career,
141- maxLength = Character .CAREER_MAX_LENGTH ,
142- validate = validate,
143- )
144- }
145-
146- SocialStatusInput (
147- value = data.status.value,
148- onValueChange = { data.status.value = it },
149- )
150- } else {
151- CareerSelectBox (
152- careers = data.careers,
153- value = data.compendiumCareer.value,
154- onValueChange = { data.compendiumCareer.value = it },
155- validate = validate,
156- )
157- }
136+ SocialStatusInput (
137+ value = data.status.value,
138+ onValueChange = { data.status.value = it },
139+ )
158140
159141 TextInput (
160142 label = strings.labelPsychology,
0 commit comments