-
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
๐ :: (#202) - ๋ฐ๋ํ ์์ฑ ํ๋ฉด๋ฅผ ํผ๋ธ๋ฆฌ์ฑ ํ์ต๋๋ค. #203
Conversation
Walkthrough์ด ๋ณ๊ฒฝ ์ฌํญ์ Changes
Possibly related PRs
Suggested labels
Suggested reviewers
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? ๐ชง TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
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.
Actionable comments posted: 5
๐งน Outside diff range and nitpick comments (13)
feature/home/src/main/java/com/school_of_company/home/navigation/HomeNavigation.kt (1)
143-150
: ํจ์ ๋ฌธ์ํ ์ถ๊ฐ๋ฅผ ์ ์๋๋ฆฝ๋๋ค.ํจ์ ๊ตฌํ์ ์ ์ ํ๋, ๋ค์ ์ฌํญ๋ค์ ์ถ๊ฐ๋ฅผ ๊ณ ๋ คํด์ฃผ์ธ์:
- ํจ์์ ๋ชฉ์ ๊ณผ ์ญํ ์ ๋ํ KDoc ๋ฌธ์ํ
onExpoCreateClick
ํ๋ผ๋ฏธํฐ์ ์ฉ๋ ์ค๋ช๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ํ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ์ ์๋๋ฆฝ๋๋ค:
+/** + * Expo ์์ฑ ํ๋ฉด์ ๋ค๋น๊ฒ์ด์ ๊ทธ๋ํ์ ์ถ๊ฐํฉ๋๋ค. + * + * @param onExpoCreateClick Expo ์์ฑ ๋ฒํผ ํด๋ฆญ ์ ์คํ๋ ์ฝ๋ฐฑ + */ fun NavGraphBuilder.expoCreateScreen( onExpoCreateClick: () -> Unit ) {core/design-system/src/main/java/com/school_of_company/design_system/component/textfield/ExpoAddTextField.kt (2)
29-36
: KDoc ๋ฌธ์ํ ์ถ๊ฐ ํ์์ปดํฌ๋ํธ์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๊ธฐ ์ํด ๊ฐ ๋งค๊ฐ๋ณ์์ ์ฉ๋์ ์์๋๋ ๋์์ ์ค๋ช ํ๋ KDoc ๋ฌธ์๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ํ๋ฅผ ์ ์ํฉ๋๋ค:
+/** + * ํ ์คํธ ํ๋๋ฅผ ๋์ ์ผ๋ก ์ถ๊ฐ/์ ๊ฑฐํ ์ ์๋ ์ ๋ ฅ ์ปดํฌ๋ํธ + * + * @param modifier ์ปดํฌ๋ํธ์ ์์ ์ + * @param placeHolder ๋น ํ ์คํธ ํ๋์ ํ์๋ ์๋ด ํ ์คํธ + * @param trainingTextFieldList ํ์ฌ ํ์๋ ํ ์คํธ ํ๋๋ค์ ๊ฐ ๋ชฉ๋ก + * @param onValueChange ํ ์คํธ ํ๋ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋ ํธ์ถ๋๋ ์ฝ๋ฐฑ (์ธ๋ฑ์ค, ์๋ก์ด ๊ฐ) + * @param onAddTextField ์๋ก์ด ํ ์คํธ ํ๋ ์ถ๊ฐ ๋ฒํผ ํด๋ฆญ์ ํธ์ถ๋๋ ์ฝ๋ฐฑ + * @param onRemoveTextField ํ ์คํธ ํ๋ ์ ๊ฑฐ ๋ฒํผ ํด๋ฆญ์ ํธ์ถ๋๋ ์ฝ๋ฐฑ (์ ๊ฑฐํ ์ธ๋ฑ์ค) + */
Line range hint
37-119
: ์ ๊ทผ์ฑ ๋ฐ ์ ๋ ฅ ์ ํจ์ฑ ๊ฒ์ฌ ๊ฐ์ ํ์ํ์ฌ ๊ตฌํ์ ๋ค์ ์ฌํญ๋ค์ ์ถ๊ฐํ๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค:
- ํ ์คํธ ์ ๋ ฅ ์ ํ (์ต๋ ๊ธธ์ด)
- ์ค๋ฅ ์ํ ํ์
- ์ ๊ทผ์ฑ ๋ ์ด๋ธ
๋ค์๊ณผ ๊ฐ์ ๊ฐ์ ์ฌํญ์ ์ ์ํฉ๋๋ค:
BasicTextField( value = text, onValueChange = { newState -> - onValueChange(index, newState) + if (newState.length <= MAX_LENGTH) { + onValueChange(index, newState) + } }, textStyle = typography.bodyRegular2, cursorBrush = SolidColor(colors.main), + modifier = Modifier + .weight(1f) + .padding(end = 8.dp) + .semantics { + contentDescription = "$placeHolder ${index + 1}๋ฒ์งธ ์ ๋ ฅ์ฐฝ" + }, - modifier = Modifier - .weight(1f) - .padding(end = 8.dp) )์์ ์ถ๊ฐ:
private const val MAX_LENGTH = 100 // ์ ์ ํ ์ต๋ ๊ธธ์ด๋ก ์กฐ์ app/src/main/java/com/school_of_company/expo_android/ui/ExpoApp.kt (1)
70-75
: Scaffold์ padding ์ฒ๋ฆฌ๊ฐ ๊ฐ์ ๋์์ต๋๋ค.Box์ padding์ ์ถ๊ฐํ์ฌ ๋ค๋น๊ฒ์ด์ ๋ฐ์ ์ฝํ ์ธ ๊ฐ์ ๊ฒน์นจ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊ฒ์ด ์ข์ต๋๋ค. ๋ค๋ง, ๊ฐ๋ ์ฑ์ ์ํด ๋ค์๊ณผ ๊ฐ์ด ๊ฐ์ ํ๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค:
- Box(modifier = Modifier.padding(paddingValues = - paddingValues)) { + Box( + modifier = Modifier.padding(paddingValues = paddingValues) + ) { ExpoNavHost(appState = appState) }app/src/main/java/com/school_of_company/expo_android/navigation/ExpoNavHost.kt (1)
Line range hint
68-80
: ์ ๋๋ฉ์ด์ ๋ก์ง ๊ฐ์ ์ด ํ์ํฉ๋๋ค.๋ค์๊ณผ ๊ฐ์ ๊ฐ์ ์ฌํญ์ ์ ์๋๋ฆฝ๋๋ค:
- ์ ๋๋ฉ์ด์ ์ง์ ์๊ฐ์ ์์๋ก ๋ถ๋ฆฌํ์ฌ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์ด๋ ๊ฒ์ด ์ข์ต๋๋ค.
- homeRoute ์ฒดํฌ ๋ก์ง์ ๋ ๋ช ํํ๊ฒ ํํํ ์ ์์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ์์ ํ๋ ๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค:
+ private const val FORWARD_ANIMATION_DURATION = 500 + private const val BACK_ANIMATION_DURATION = 350 enterTransition = { - if (targetState.destination.route != homeRoute) { + val isHomeRoute = targetState.destination.route == homeRoute + if (!isHomeRoute) { slideIntoContainer( AnimatedContentTransitionScope.SlideDirection.Left, - animationSpec = tween(durationMillis = 500) + animationSpec = tween(durationMillis = FORWARD_ANIMATION_DURATION) ) } else { EnterTransition.None } }feature/home/src/main/java/com/school_of_company/home/view/HomeDetailModifyScreen.kt (4)
Line range hint
342-359
: ์ฐ์ ์ข ๋ฅ ์ ๋ ฅ ํ๋์ ์ํ ๊ด๋ฆฌ ๊ฐ์ ์ด ํ์ํฉ๋๋ค.
trainingTextState
๊ฐ Screen ๋ ๋ฒจ์์ ๊ด๋ฆฌ๋๊ณ ์์ต๋๋ค. ViewModel๋ก ์ํ ๊ด๋ฆฌ๋ฅผ ์ด๋ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.๋ค์๊ณผ ๊ฐ์ด ์์ ํ๋ ๊ฒ์ ์ ์๋๋ฆฝ๋๋ค:
- var trainingTextState by rememberSaveable { mutableStateOf(listOf("")) } + val trainingTextState by viewModel.training_types.collectAsStateWithLifecycle()ViewModel์ ๋ค์ ์ฝ๋๋ฅผ ์ถ๊ฐํด์ฃผ์ธ์:
private val _training_types = MutableStateFlow(listOf("")) val training_types = _training_types.asStateFlow() fun updateTrainingType(index: Int, value: String) { _training_types.update { current -> current.toMutableList().apply { set(index, value) } } } fun addTrainingType() { _training_types.update { it + "" } } fun removeTrainingType(index: Int) { _training_types.update { current -> current.toMutableList().apply { removeAt(index) } } }
Line range hint
366-372
: ์์น ์นํ ๊ตฌํ์ด ํ์ํฉ๋๋ค.Location Web Hook์ด TODO ์ฃผ์์ผ๋ก ๋จ์์์ต๋๋ค.
์์น ๊ฒ์ ๊ธฐ๋ฅ ๊ตฌํ์ ๋์์ด ํ์ํ์๋ค๋ฉด ๋ง์ํด ์ฃผ์ธ์. GitHub ์ด์๋ฅผ ์์ฑํ์ฌ ๊ตฌํ์ ๋์๋๋ฆฌ๊ฒ ์ต๋๋ค.
Line range hint
385-394
: ๋ฒํผ ํ์ฑํ ์กฐ๊ฑด ๋ก์ง ๊ฐ์ ์ด ํ์ํฉ๋๋ค.ํ์ฌ ๋ฒํผ ์ํ ๋ก์ง์ด ๋๋ฌด ๋ณต์กํ๊ณ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ๊ฐ์ ํ๋ ๊ฒ์ ์ ์๋๋ฆฝ๋๋ค:
- state = if (imageUri.isNullOrEmpty() && modifyTitleState.isEmpty() && startedDateState.isEmpty() && endedDateState.isEmpty() && introduceTitleState.isEmpty() && addressState.isEmpty() && locationState.isEmpty() && trainingTextState.isEmpty()) ButtonState.Enable else ButtonState.Disable, + state = determineButtonState( + imageUri = imageUri, + modifyTitleState = modifyTitleState, + startedDateState = startedDateState, + endedDateState = endedDateState, + introduceTitleState = introduceTitleState, + addressState = addressState, + locationState = locationState, + trainingTextState = trainingTextState + ), private fun determineButtonState( imageUri: String?, modifyTitleState: String, startedDateState: String, endedDateState: String, introduceTitleState: String, addressState: String, locationState: String, trainingTextState: List<String> ): ButtonState { val isAnyFieldEmpty = listOf( imageUri.isNullOrEmpty(), modifyTitleState.isEmpty(), startedDateState.isEmpty(), endedDateState.isEmpty(), introduceTitleState.isEmpty(), addressState.isEmpty(), locationState.isEmpty(), trainingTextState.isEmpty() ).any { it } return if (isAnyFieldEmpty) ButtonState.Disable else ButtonState.Enable }
Line range hint
390-392
: Expo ์์ ์ฝ๋ฐฑ ๊ตฌํ์ด ํ์ํฉ๋๋ค.Expo Modify Callback์ด TODO ์ฃผ์์ผ๋ก ๋จ์์์ต๋๋ค.
์์ ๊ธฐ๋ฅ ๊ตฌํ์ ๋์์ด ํ์ํ์๋ค๋ฉด ๋ง์ํด ์ฃผ์ธ์. GitHub ์ด์๋ฅผ ์์ฑํ์ฌ ๊ตฌํ์ ๋์๋๋ฆฌ๊ฒ ์ต๋๋ค.
core/design-system/src/main/java/com/school_of_company/design_system/component/textfield/ExpoTextField.kt (1)
382-436
: Preview ํจ์ ์ถ๊ฐ๋ฅผ ์ ์๋๋ฆฝ๋๋ค.์๋ก ์ถ๊ฐ๋
ExpoLocationIconTextField
์ปดํฌ๋ํธ์ Preview ํจ์๊ฐ ๋๋ฝ๋์์ต๋๋ค. ๋์์ธ ์์คํ ์ปดํฌ๋ํธ์ ์ผ๊ด์ฑ์ ์ํด Preview ํจ์ ์ถ๊ฐ๋ฅผ ๊ถ์ฅ๋๋ฆฝ๋๋ค.@Preview @Composable fun ExpoLocationIconTextFieldPreview() { Box( modifier = Modifier .fillMaxSize() .background(Color.White) .padding(16.dp) ) { ExpoLocationIconTextField( placeholder = "์์น๋ฅผ ์ ๋ ฅํ์ธ์", isDisabled = false, onValueChange = {}, onButtonClicked = {}, value = "" ) } }feature/home/src/main/java/com/school_of_company/home/view/ExpoCreateScreen.kt (3)
255-263
: ๋ณ์ ์ด๋ฆ์ ์ผ๊ด์ฑ ์ ์ง ํ์
modifyTitleState
์ ๊ฐ์ ๋ณ์๋ช ์ ์์ ํ๋ฉด์ ์ ํฉํ๋ฉฐ, ์์ฑ ํ๋ฉด์์๋titleState
๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ๋ณด๋ค ๋ช ํํฉ๋๋ค. ์ด๋ ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋์ด๊ณ ์ ์ง ๋ณด์๋ฅผ ์ฉ์ดํ๊ฒ ํฉ๋๋ค.๊ด๋ จ ๋ณ์์ ํจ์๋ช ์ ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝํ๋ ๊ฒ์ ์ ์ํฉ๋๋ค:
- val modifyTitleState by viewModel.modify_title.collectAsStateWithLifecycle() + val titleState by viewModel.title.collectAsStateWithLifecycle()- onModifyTitleChange: (String) -> Unit, + onTitleChange: (String) -> Unit,์ฝ๋ ์ ๋ฐ์ ๊ฑธ์ณ ํด๋น ๋ณ์๋ช ๊ณผ ํจ์๋ช ์ ์ผ๊ด๋๊ฒ ๋ณ๊ฒฝํด์ฃผ์ธ์.
367-367
: ๋ฒํผ ํ ์คํธ ์์ ํ์ํ์ฌ ๋ฒํผ์ ํ ์คํธ๊ฐ "์์ ์๋ฃ"๋ก ์ค์ ๋์ด ์์ต๋๋ค. ์์ฑ ํ๋ฉด์์๋ "๋ฑ๋กํ๊ธฐ"์ ๊ฐ์ ํ ์คํธ๊ฐ ๋ ์ ์ ํฉ๋๋ค. ์ฌ์ฉ์์๊ฒ ์ ํํ ์ก์ ์ ์ ๋ฌํ๊ธฐ ์ํด ํ ์คํธ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ์์ ํ๋ ๊ฒ์ ์ ์ํฉ๋๋ค:
- text = "์์ ์๋ฃ", + text = "๋ฑ๋กํ๊ธฐ",
371-371
: TODO ์ฃผ์ ๋ด์ฉ ์์ ํ์์ฃผ์์ "Expo Modify CallBack"์ด๋ผ๊ณ ๋์ด ์๋๋ฐ, ์์ฑ ํ๋ฉด์ด๋ฏ๋ก "Expo Create CallBack"์ผ๋ก ์์ ํ๋ ๊ฒ์ด ๋ง์ต๋๋ค. ์ด๋ ์ฝ๋์ ๋ช ํ์ฑ์ ๋์ ๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ์์ ํ๋ ๊ฒ์ ์ ์ํฉ๋๋ค:
- /* todo : Expo Modify CallBack */ + /* todo : Expo Create CallBack */
๐ Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
๐ Files selected for processing (10)
app/src/main/java/com/school_of_company/expo_android/navigation/ExpoNavHost.kt
(4 hunks)app/src/main/java/com/school_of_company/expo_android/ui/ExpoApp.kt
(5 hunks)app/src/main/java/com/school_of_company/expo_android/ui/ExpoAppState.kt
(2 hunks)core/design-system/src/main/java/com/school_of_company/design_system/component/textfield/ExpoAddTextField.kt
(2 hunks)core/design-system/src/main/java/com/school_of_company/design_system/component/textfield/ExpoTextField.kt
(3 hunks)feature/home/src/main/java/com/school_of_company/home/navigation/HomeNavigation.kt
(4 hunks)feature/home/src/main/java/com/school_of_company/home/view/ExpoCreateScreen.kt
(1 hunks)feature/home/src/main/java/com/school_of_company/home/view/HomeDetailModifyScreen.kt
(3 hunks)feature/home/src/main/java/com/school_of_company/home/view/component/HomeDetailModifyIconTextField.kt
(0 hunks)settings.gradle.kts
(1 hunks)
๐ค Files with no reviewable changes (1)
- feature/home/src/main/java/com/school_of_company/home/view/component/HomeDetailModifyIconTextField.kt
โ Files skipped from review due to trivial changes (1)
- settings.gradle.kts
๐ Additional comments (10)
app/src/main/java/com/school_of_company/expo_android/ui/ExpoAppState.kt (1)
18-18
: LGTM! ์๋ก์ด ๋ค๋น๊ฒ์ด์
๊ธฐ๋ฅ์ด ์ ์ ํ ์ถ๊ฐ๋์์ต๋๋ค.
๋ค๋น๊ฒ์ด์ ๊ด๋ จ import๊ฐ ๊ธฐ์กด ํจํด๊ณผ ์ผ๊ด์ฑ ์๊ฒ ์ถ๊ฐ๋์์ต๋๋ค.
feature/home/src/main/java/com/school_of_company/home/navigation/HomeNavigation.kt (3)
7-7
: ์๋ก์ด ExpoCreateRoute ์ํฌํธ๊ฐ ์ ์ ํ ์ถ๊ฐ๋์์ต๋๋ค.
๊ธฐ์กด ์ํฌํธ ํจํด์ ๋ฐ๋ฅด๊ณ ์์ผ๋ฉฐ, ์๋ก์ด ํ๋ฉด ๊ตฌํ์ ํ์ํ ์ปดํฌ๋ํธ์ ๋๋ค.
23-23
: ๋ผ์ฐํธ ์์๊ฐ ์ผ๊ด๋ ํจํด์ผ๋ก ์ ์๋์์ต๋๋ค.
๊ธฐ์กด ๋ผ์ฐํธ ์์๋ค๊ณผ ๋์ผํ ๋ค์ด๋ฐ ์ปจ๋ฒค์ ์ ๋ฐ๋ฅด๊ณ ์์ต๋๋ค.
53-55
: ๋ค๋น๊ฒ์ด์
ํ์ฅ ํจ์๊ฐ ์ ์ ํ ๊ตฌํ๋์์ต๋๋ค.
๊ธฐ์กด ๋ค๋น๊ฒ์ด์ ํจ์๋ค๊ณผ ๋์ผํ ํจํด์ผ๋ก ๊ตฌํ๋์ด ์์ผ๋ฉฐ, ์ต์ ๋ ๋ค๋น๊ฒ์ด์ ์ต์ ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํ๊ณ ์์ต๋๋ค.
core/design-system/src/main/java/com/school_of_company/design_system/component/textfield/ExpoAddTextField.kt (1)
1-1
: ์ปดํฌ๋ํธ ์ฌ์ฉ์ฒ ํ์ธ ํ์
feature ๋ชจ๋์์ design-system ๋ชจ๋๋ก ์ด๋๋ ์ปดํฌ๋ํธ์ด๋ฏ๋ก, ๋ชจ๋ ์ฌ์ฉ์ฒ์์ ์ฌ๋ฐ๋ฅด๊ฒ ์ํฌํธ๋๊ณ ์๋์ง ํ์ธ์ด ํ์ํฉ๋๋ค.
โ Verification successful
Let me verify the actual usage of this component in the files where it's imported.
์ปดํฌ๋ํธ ์ด๋์ด ์ ์์ ์ผ๋ก ์๋ฃ๋์์ต๋๋ค
๋ชจ๋ ์ฌ์ฉ์ฒ์์ ์๋ก์ด ํจํค์ง ๊ฒฝ๋ก(com.school_of_company.design_system.component.textfield.ExpoAddTextField
)๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฐธ์กฐํ๊ณ ์์ผ๋ฉฐ, ์ปดํฌ๋ํธ๊ฐ ์ ์์ ์ผ๋ก ์ฌ์ฉ๋๊ณ ์์ต๋๋ค.
HomeDetailModifyScreen.kt
์ExpoCreateScreen.kt
๋ ํ์ผ ๋ชจ๋ design-system ๋ชจ๋์ ์๋ก์ด ๊ฒฝ๋ก์์ ์ปดํฌ๋ํธ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ํฌํธํ๊ณ ์์ต๋๋ค.- ๊ฐ ํ์ผ์์
ExpoAddTextField
์ปดํฌ๋ํธ๊ฐ ๋์ผํ ๋ฐฉ์์ผ๋ก ์ฌ์ฉ๋๊ณ ์์ต๋๋ค.
๐ Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Verify the component usage across the codebase
# Check old import usage
rg "import.*HomeDetailModifyAddTextField"
# Check new import usage
rg "import.*ExpoAddTextField"
Length of output: 399
Script:
#!/bin/bash
# Check actual usage of ExpoAddTextField in the files
rg "ExpoAddTextField" feature/home/src/main/java/com/school_of_company/home/view/HomeDetailModifyScreen.kt -A 2
rg "ExpoAddTextField" feature/home/src/main/java/com/school_of_company/home/view/ExpoCreateScreen.kt -A 2
Length of output: 1065
app/src/main/java/com/school_of_company/expo_android/ui/ExpoApp.kt (1)
4-4
: ์๋ก์ด import ๊ตฌ๋ฌธ์ด ์ ์ ํ ์ถ๊ฐ๋์์ต๋๋ค.
Box์ padding ๊ด๋ จ import๊ฐ UI ๊ตฌ์กฐ ๋ณ๊ฒฝ์ ๋ง๊ฒ ์ ์ถ๊ฐ๋์์ผ๋ฉฐ, expoCreateRoute์ ์ถ๊ฐ๋ ์ ์ ํฉ๋๋ค.
Also applies to: 6-6, 15-15, 26-26
app/src/main/java/com/school_of_company/expo_android/navigation/ExpoNavHost.kt (2)
14-20
: LGTM! ์๋ก์ด ํ๋ฉด์ ํ์ํ import๋ฌธ์ด ์ ์ถ๊ฐ๋์์ต๋๋ค.
์๋ก์ด Expo ์์ฑ ํ๋ฉด๊ณผ ํ ๋ผ์ฐํธ์ ํ์ํ import๋ฌธ์ด ์ ์ ํ๊ฒ ์ถ๊ฐ๋์์ต๋๋ค.
153-156
: Expo ์์ฑ ํ ๋ค๋น๊ฒ์ด์
ํ๋ฆ์ ๊ฒ์ฆํด์ฃผ์ธ์.
Expo ์์ฑ ํ๋ฉด์์ ํ์ผ๋ก ๋์๊ฐ๋ ๋ค๋น๊ฒ์ด์ ํ๋ฆ์ด ์ ์ ํ์ง ํ์ธ์ด ํ์ํฉ๋๋ค. ์์ฑ ์๋ฃ/์ทจ์ ์๋๋ฆฌ์ค์ ๋ฐ๋ผ ๋ค๋ฅธ ๋ค๋น๊ฒ์ด์ ์ด ํ์ํ ์ ์์ต๋๋ค.
โ Verification successful
Expo ์์ฑ ํ๋ฉด์ ๋ค๋น๊ฒ์ด์ ํ๋ฆ์ด ์ ์ ํ๊ฒ ๊ตฌํ๋์ด ์์ต๋๋ค.
Expo ์์ฑ ํ๋ฉด์ ๋ค๋น๊ฒ์ด์ ๊ตฌํ์ ๊ฒํ ํ ๊ฒฐ๊ณผ:
ExpoCreateRoute
์ปดํฌ๋ํธ๋ ์์ฑ ์๋ฃ ์onExpoCreateClick
์ฝ๋ฐฑ์ ํตํด ํ ํ๋ฉด์ผ๋ก ์ด๋ExpoNavHost
์์navigateToHome
์ ํตํด ํ ํ๋ฉด์ผ๋ก์ ๋ค๋น๊ฒ์ด์ ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ฐ๊ฒฐ- ์ทจ์ ์๋๋ฆฌ์ค๋ Android์ ๊ธฐ๋ณธ ๋ค๋ก๊ฐ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ฒ๋ฆฌ
๐ Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Verify navigation flow implementation in ExpoCreateScreen
# Check ExpoCreateScreen implementation for navigation handling
ast-grep --pattern 'fun ExpoCreateScreen($_, onExpoCreateClick: () -> Unit) {
$$$
}'
# Check if there are any other navigation-related functions for ExpoCreateScreen
rg -A 5 "ExpoCreateScreen.*navigation"
Length of output: 129
Script:
#!/bin/bash
# Search for ExpoCreateScreen composable function
ast-grep --pattern 'composable fun ExpoCreateScreen($$$)'
# Find ExpoCreateScreen usage and navigation patterns
rg "ExpoCreateScreen" -A 5
# Look for navigation related to expo creation
rg "navigateToHome|ExpoCreate" -A 5
Length of output: 23660
feature/home/src/main/java/com/school_of_company/home/view/HomeDetailModifyScreen.kt (1)
56-57
: Design System ์ปดํฌ๋ํธ๋ก์ ๋ง์ด๊ทธ๋ ์ด์
์ด ์ ์ ํ ์ด๋ฃจ์ด์ก์ต๋๋ค.
Feature ๋ชจ๋์ ์ปดํฌ๋ํธ๋ค์ด Design System์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๋ก ์ ์ด๋๋์์ต๋๋ค.
core/design-system/src/main/java/com/school_of_company/design_system/component/textfield/ExpoTextField.kt (1)
14-14
: ์๋ก์ด import ๊ตฌ๋ฌธ์ด ์ ์ ํ๊ฒ ์ถ๊ฐ๋์์ต๋๋ค.
ํ์ํ ์ปดํฌ๋ํธ๋ค์ด ์ฌ๋ฐ๋ฅด๊ฒ import ๋์์ต๋๋ค.
Also applies to: 19-19, 42-42
...ystem/src/main/java/com/school_of_company/design_system/component/textfield/ExpoTextField.kt
Show resolved
Hide resolved
feature/home/src/main/java/com/school_of_company/home/view/ExpoCreateScreen.kt
Show resolved
Hide resolved
feature/home/src/main/java/com/school_of_company/home/view/ExpoCreateScreen.kt
Outdated
Show resolved
Hide resolved
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.
Actionable comments posted: 2
๐งน Outside diff range and nitpick comments (2)
feature/home/src/main/java/com/school_of_company/home/view/ExpoCreateScreen.kt (2)
351-351
: TODO ํญ๋ชฉ ๊ตฌํ ์ง์๋ค์ TODO ํญ๋ชฉ๋ค์ ๊ตฌํ์ด ํ์ํฉ๋๋ค:
- Location Web Hook
- Expo Modify CallBack
์ด๋ฌํ ๊ธฐ๋ฅ์ ๊ตฌํ์ ๋์๋๋ฆด๊น์? GitHub ์ด์๋ฅผ ์์ฑํ์ฌ ์ถ์ ํ ์ ์์ต๋๋ค.
Also applies to: 371-371
347-353
: ์์น ๊ฒ์ ๊ธฐ๋ฅ ๊ฐ์ ํ์ํ์ฌ ์์น ์ ๋ ฅ ํ๋๋ ์๋ ์ ๋ ฅ๋ง ๊ฐ๋ฅํฉ๋๋ค. ์ฌ์ฉ์ ๊ฒฝํ ํฅ์์ ์ํด ์์น ๊ฒ์ API ์ฐ๋์ด ํ์ํฉ๋๋ค.
- Kakao ๋ก์ปฌ API๋ Naver Maps API๋ฅผ ํ์ฉํ์ฌ ์ฃผ์ ๊ฒ์ ๊ธฐ๋ฅ ์ถ๊ฐ
- ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ๋๋กญ๋ค์ด ๋ชฉ๋ก์ผ๋ก ํ์
- ์ ํ๋ ์ฃผ์์ ์๋/๊ฒฝ๋ ์ ๋ณด๋ ํจ๊ป ์ ์ฅ
๐ Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
๐ Files selected for processing (1)
feature/home/src/main/java/com/school_of_company/home/view/ExpoCreateScreen.kt
(1 hunks)
๐ Additional comments (1)
feature/home/src/main/java/com/school_of_company/home/view/ExpoCreateScreen.kt (1)
135-135
: ์ด์ ๋ฆฌ๋ทฐ ์ฝ๋ฉํธ๊ฐ ์ฌ์ ํ ์ ํจํฉ๋๋ค
๋น ๋ฆฌ์คํธ๋ก ์ด๊ธฐํํ๋ ๊ฒ์ด ๋ ์ ์ ํฉ๋๋ค.
Text( | ||
text = "์์์ผ๊ณผ ๋ง๊ฐ์ผ ์ ๋ ฅ์ โ yyyy.mm.dd โ ํ์์ผ๋ก ์ ๋ ฅํด์ฃผ์ธ์.", | ||
style = typography.captionRegular2, | ||
color = colors.gray300 | ||
) |
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.
๋ ์ง ํ์ ๊ฒ์ฆ ๋ก์ง ์ถ๊ฐ ํ์
ํ์ฌ ๋ ์ง ํ์์ ๋ํ ์๋ด๋ง ์๊ณ ์ค์ ๊ฒ์ฆ์ด ์์ต๋๋ค. ์๋ชป๋ ํ์ ์ ๋ ฅ ์ ์ฌ์ฉ์๊ฐ ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ์ ๋ฐ์ ์ ์์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ ๋ ์ง ๊ฒ์ฆ ํจ์ ์ถ๊ฐ๋ฅผ ์ ์ํฉ๋๋ค:
private fun isValidDateFormat(date: String): Boolean {
return try {
val formatter = SimpleDateFormat("yyyy.MM.dd", Locale.getDefault())
formatter.isLenient = false
formatter.parse(date)
true
} catch (e: ParseException) {
false
}
}
๊ทธ๋ฆฌ๊ณ TextField์์ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉ:
LimitedLengthTextField(
label = "๋ชจ์ง๊ธฐ๊ฐ",
textState = startedDateState,
placeholder = "์์์ผ",
- isError = false,
+ isError = startedDateState.isNotEmpty() && !isValidDateFormat(startedDateState),
updateTextValue = onStartedDateChange,
modifier = Modifier.weight(1f)
)
๐ก ๊ฐ์
๐ ์์ ๋ด์ฉ
์ฌ๋ฌ๋ฒ ์ฌ์ฉ๋๋ ์ปดํฌ๋ํธ๊ฐ ์กด์ฌํ์ฌ Feature ๋ชจ๋ ์์ ์ปดํฌ๋ํธ ํํค์ง๊ฐ ์๋ Design-System์ TextField ์ปดํฌ๋ํธ๋ก ์ฎ๊ฒผ์ต๋๋ค.
๋ค๋น๊ฒ์ด์ ๋ฐ๊ฐ ์์ดํ ๊ณผ ๊ณ์น๋ ๋ฌธ์ ๊ฐ ์กด์ฌํ์ฌ paddingValues๋ฅผ ์ ์ฉํ์ฌ ํด๊ฒฐํ์์ต๋๋ค.
ํด๋น ํ๋ฉด์ ๋ค๋น๊ฒ์ด์ ์ธํ ์ ํ์์ต๋๋ค.
2024-11-14.11.10.56.mov
๐ ๋ณ๊ฒฝ์ฌํญ
๐โโ๏ธ ์ง๋ฌธ์ฌํญ
๐ด ์ฌ์ฉ๋ฐฉ๋ฒ
๐ธ ๊ธฐํ
-x
Summary by CodeRabbit