-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weβll occasionally send you account related emails.
Already on GitHub? Sign in to your account
π :: (#218) - λμμΈ λ³λμ¬νμ λ°λ¦ λλ€. #219
Changes from all commits
1d0819e
c6d32b8
c70d607
16cf4a2
4599385
99b5b08
e41e713
92d97be
d45d348
e8b4693
bcff202
45ba47f
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
package com.school_of_company.expo.enum | ||
|
||
enum class TrainingCategory { | ||
ESSENTIAL, | ||
CHOICE | ||
} |
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -47,6 +47,7 @@ import androidx.compose.ui.platform.LocalFocusManager | |||||||||||||||||||||||||||||||||||||||||||||||||||||
import androidx.compose.ui.res.stringResource | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
import androidx.compose.ui.tooling.preview.Preview | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
import androidx.compose.ui.unit.dp | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
import androidx.compose.ui.window.Dialog | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
import androidx.hilt.navigation.compose.hiltViewModel | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
import coil.compose.rememberAsyncImagePainter | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -55,13 +56,14 @@ import com.school_of_company.design_system.component.button.ExpoStateButton | |||||||||||||||||||||||||||||||||||||||||||||||||||||
import com.school_of_company.design_system.component.button.state.ButtonState | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
import com.school_of_company.design_system.component.modifier.clickable.expoClickable | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
import com.school_of_company.design_system.component.modifier.padding.paddingHorizontal | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
import com.school_of_company.design_system.component.textfield.ExpoAddTextField | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
import com.school_of_company.design_system.component.textfield.ExpoLocationIconTextField | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
import com.school_of_company.design_system.component.textfield.LimitedLengthTextField | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
import com.school_of_company.design_system.component.textfield.NoneLimitedLengthTextField | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
import com.school_of_company.design_system.icon.ImageIcon | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
import com.school_of_company.design_system.icon.WarnIcon | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
import com.school_of_company.design_system.theme.ExpoAndroidTheme | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
import com.school_of_company.expo.view.component.ExpoAddTextField | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
import com.school_of_company.expo.view.component.ExpoTrainingSettingBottomSheet | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
import com.school_of_company.expo.viewmodel.ExpoViewModel | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
import com.school_of_company.expo.viewmodel.uistate.ImageUpLoadUiState | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
import com.school_of_company.expo.viewmodel.uistate.RegisterExpoInformationUiState | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -83,6 +85,8 @@ internal fun ExpoCreateRoute( | |||||||||||||||||||||||||||||||||||||||||||||||||||||
val addressState by viewModel.address.collectAsStateWithLifecycle() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
val locationState by viewModel.location.collectAsStateWithLifecycle() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
val coverImageState by viewModel.cover_image.collectAsStateWithLifecycle() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
val trainingProgramTextState by viewModel.trainingProgramTextState.collectAsStateWithLifecycle() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
val standardProgramTextState by viewModel.standardProgramTextState.collectAsStateWithLifecycle() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
var selectedImageUri by remember { mutableStateOf<Uri?>(null) } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -168,6 +172,14 @@ internal fun ExpoCreateRoute( | |||||||||||||||||||||||||||||||||||||||||||||||||||||
onErrorToast(null, R.string.expo_image_fail) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
trainingProgramTextState = trainingProgramTextState, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onTrainingProgramChange = viewModel::updateTrainingProgramText, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onAddTrainingProgram = viewModel::addTrainingProgramText, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onRemoveTrainingProgram = viewModel::removeTrainingProgramText, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
standardProgramTextState = standardProgramTextState, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onStandardProgramChange = viewModel::updateStandardProgramText, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onAddStandardProgram = viewModel::addStandardProgramText, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onRemoveStandardProgram = viewModel::removeStandardProgramText | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -191,8 +203,16 @@ internal fun ExpoCreateScreen( | |||||||||||||||||||||||||||||||||||||||||||||||||||||
onAddressChange: (String) -> Unit, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onLocationChange: (String) -> Unit, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onExpoCreateCallBack: () -> Unit, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
trainingProgramTextState: List<String>, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onTrainingProgramChange: (Int, String) -> Unit, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onAddTrainingProgram: () -> Unit, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onRemoveTrainingProgram: (Int) -> Unit, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
standardProgramTextState: List<String>, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onStandardProgramChange: (Int, String) -> Unit, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onAddStandardProgram: () -> Unit, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onRemoveStandardProgram: (Int) -> Unit | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
var trainingTextState by rememberSaveable { mutableStateOf(listOf("")) } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
val (openTrainingSettingBottomSheet, isOpenTrainingSettingBottomSheet) = rememberSaveable { mutableStateOf(false) } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
ExpoAndroidTheme { colors, typography -> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
Column( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -375,27 +395,45 @@ internal fun ExpoCreateScreen( | |||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
Column(verticalArrangement = Arrangement.spacedBy(8.dp, Alignment.Top)) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
Text( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
text = "μ°μ μ’ λ₯", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
text = "μ°Έκ°μ μ°μ μ’ λ₯", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
style = typography.bodyBold2, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
color = colors.black, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
ExpoAddTextField( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
trainingTextFieldList = trainingTextState, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
trainingTextFieldList = standardProgramTextState, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onValueChange = { index, newState -> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
trainingTextState = trainingTextState.toMutableList().apply { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
set(index, newState) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onStandardProgramChange(index, newState) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onAddTextField = { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
trainingTextState = trainingTextState.toMutableList().apply { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
add("") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onAddTextField = { onAddStandardProgram() }, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onRemoveTextField = { index -> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onRemoveStandardProgram(index) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onRemoveTextField = { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
trainingTextState = trainingTextState.toMutableList().apply { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
removeAt(it) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onTrainingSetting = { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
isOpenTrainingSettingBottomSheet(true) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
placeHolder = "μ°μ μ’ λ₯λ₯Ό μ λ ₯ν΄μ£ΌμΈμ." | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+398
to
+416
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. π οΈ Refactor suggestion UI μ»΄ν¬λνΈ μ¬μ¬μ©μ± κ°μ νμ
data class ExpoAddTextFieldProps(
val title: String,
val textFieldList: List<String>,
val onValueChange: (Int, String) -> Unit,
val onAddTextField: () -> Unit,
val onRemoveTextField: (Int) -> Unit,
val onTrainingSetting: () -> Unit,
val placeHolder: String
) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
Spacer(modifier = Modifier.padding(top = 28.dp)) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
Text( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
text = "μ°μμ μ°μ μ’ λ₯", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
style = typography.bodyBold2, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
color = colors.black, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
ExpoAddTextField( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
trainingTextFieldList = trainingProgramTextState, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onValueChange = { index, newState -> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onTrainingProgramChange(index, newState) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onAddTextField = { onAddTrainingProgram() }, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onRemoveTextField = { index -> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onRemoveTrainingProgram(index) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onTrainingSetting = { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
isOpenTrainingSettingBottomSheet(true) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
placeHolder = "μ°μ μ’ λ₯λ₯Ό μ λ ₯ν΄μ£ΌμΈμ." | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -432,7 +470,8 @@ internal fun ExpoCreateScreen( | |||||||||||||||||||||||||||||||||||||||||||||||||||||
introduceTitleState.isNotEmpty() && | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
addressState.isNotEmpty() && | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
locationState.isNotEmpty() && | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
trainingTextState.isNotEmpty() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
trainingProgramTextState.isNotEmpty() && | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
standardProgramTextState.isNotEmpty() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
ButtonState.Enable | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
} else { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -448,6 +487,20 @@ internal fun ExpoCreateScreen( | |||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (openTrainingSettingBottomSheet) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
Dialog(onDismissRequest = { isOpenTrainingSettingBottomSheet(false) }) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
ExpoTrainingSettingBottomSheet( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onCancelClick = { isOpenTrainingSettingBottomSheet(false) }, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
startedTextState = "", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
endedTextState = "", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onStartedTextChange = {}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onEndedTextChange = {}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onCategoryChange = {}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onButtonClick = { /*TODO*/ } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+491
to
+503
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Dialog μν κ΄λ¦¬ λ° κΈ°λ₯ ꡬν λ―Έμλ£
- Dialog(onDismissRequest = { isOpenTrainingSettingBottomSheet(false) }) {
+ Dialog(onDismissRequest = { openTrainingSettingBottomSheet = false }) { 미ꡬνλ κΈ°λ₯μ λν ꡬνμ λμλ릴κΉμ? GitHub μ΄μλ₯Ό μμ±νμ¬ μΆμ ν μ μμ΅λλ€. π Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
@Preview | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -469,5 +522,13 @@ private fun ExpoCreateScreenPreview() { | |||||||||||||||||||||||||||||||||||||||||||||||||||||
onEndedDateChange = {}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onIntroduceTitleChange = {}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onExpoCreateCallBack = {}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
trainingProgramTextState = emptyList(), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onTrainingProgramChange = { _, _ -> }, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onAddTrainingProgram = {}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onRemoveTrainingProgram = {}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
standardProgramTextState = emptyList(), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onStandardProgramChange = { _, _ -> }, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onAddStandardProgram = {}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
onRemoveStandardProgram = {} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
mutableStateOf μ¬μ©λ² μμ νμ
νμ¬ μ½λμμ
mutableStateOf
λ₯Ό μ¬μ©νμ¬openTrainingSettingBottomSheet
μisOpenTrainingSettingBottomSheet
λ₯Ό λΆν΄νκ³ μμ΅λλ€. κ·Έλ¬λmutableStateOf
λ λ¨μΌMutableState
κ°μ²΄λ₯Ό λ°ννλ―λ‘ λΆν΄ν μ μμ΅λλ€. λμby
ν€μλλ₯Ό μ¬μ©νμ¬ μν λ³μλ₯Ό μ μΈνκ³ μ§μ κ°μ λ³κ²½νλ κ²μ΄ μ’μ΅λλ€.μμ λ μ½λλ λ€μκ³Ό κ°μ΅λλ€:
κ·Έλ¦¬κ³ μν λ³κ²½ λΆλΆμ λ€μκ³Ό κ°μ΄ μμ νμΈμ:
Also applies to: 421-421, 444-444, 500-500