Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions domain/src/main/java/co/kr/tnt/domain/utils/AppUrls.kt
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package co.kr.tnt.domain.utils

object AppUrls {
// TODO
const val PRIVACY_POLICY_URL = "https://fluffy-router-d0b.notion.site/775bc037dd1b4e8ba56679e51a7321e5"
const val TERMS_OF_SERVICE_URL = "https://fluffy-router-d0b.notion.site/f1ee7a43b6d941068723163fda127699"
const val PRIVACY_POLICY_URL = "https://ymkim97.notion.site/1bcd727836a3813e9f5dd60ed9620612"
const val TERMS_OF_SERVICE_URL = "https://ymkim97.notion.site/1bcd727836a381c08c7bdf4d70c3639b"
Comment on lines +4 to +5
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오 꼼꼼하게 체크해주셨군요 ㅎㅎ 👍

}
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package co.kr.tnt.trainee.mealrecord

import android.content.Context
import android.net.Uri
import co.kr.tnt.ui.base.UiEvent
import co.kr.tnt.ui.base.UiSideEffect
import co.kr.tnt.ui.base.UiState
import java.io.File
import java.time.LocalDate
import java.time.LocalDateTime
import java.time.LocalTime
Expand Down Expand Up @@ -52,7 +52,7 @@ internal class TraineeMealRecordContract {
data object OnClickCloseBottomSheet : TraineeMealRecordUiEvent
data class OnSelectMealType(val mealType: String) : TraineeMealRecordUiEvent
data class OnChangeMemo(val memo: String) : TraineeMealRecordUiEvent
data class OnClickSave(val context: Context) : TraineeMealRecordUiEvent
data class OnClickSave(val imageFile: File?) : TraineeMealRecordUiEvent
data object OnClickBack : TraineeMealRecordUiEvent
data object OnClickDialogConfirm : TraineeMealRecordUiEvent
data object OnDismissDialog : TraineeMealRecordUiEvent
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,11 +77,14 @@ import co.kr.tnt.ui.coil.ResizeTransformation
import co.kr.tnt.ui.component.TnTLoadingScreen
import co.kr.tnt.ui.extensions.clearFocusOnTap
import co.kr.tnt.ui.model.RecordChip
import co.kr.tnt.ui.utils.convertToAllowedImageFormat
import co.kr.tnt.ui.utils.throttled
import coil.compose.rememberAsyncImagePainter
import coil.request.ImageRequest
import com.kizitonwose.calendar.compose.rememberCalendarState
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import java.time.DayOfWeek
import java.time.LocalDate
import java.time.LocalTime
Expand All @@ -98,6 +101,7 @@ internal fun TraineeMealRecordRoute(

val context = LocalContext.current
val snackbar = LocalSnackbar.current
val coroutineScope = rememberCoroutineScope()
val state by viewModel.uiState.collectAsStateWithLifecycle()
val dateFormatter = remember { DateFormatter() }

Expand All @@ -106,17 +110,15 @@ internal fun TraineeMealRecordRoute(
LaunchedEffect(selectedDate) {
viewModel.setEvent(
TraineeMealRecordUiEvent.OnSelectMealDate(
dateFormatter.parse(
selectedDate,
),
dateFormatter.parse(selectedDate),
),
)
}

TraineeMealRecordScreen(
state = state,
context = context,
onImageSelect = { uri ->
onSelectImage = { uri ->
viewModel.setEvent(TraineeMealRecordUiEvent.OnSelectImage(imageUri = uri))
},
onClickDeleteImage = { viewModel.setEvent(TraineeMealRecordUiEvent.OnClickDeleteImage) },
Expand All @@ -137,7 +139,14 @@ internal fun TraineeMealRecordRoute(
onClickBack = {
viewModel.setEvent(TraineeMealRecordUiEvent.OnClickBack)
},
onClickSaveButton = { viewModel.setEvent(TraineeMealRecordUiEvent.OnClickSave(context)) },
onClickSaveButton = {
coroutineScope.launch {
val imageFile = withContext(Dispatchers.IO) {
state.image?.convertToAllowedImageFormat(context)
}
viewModel.setEvent(TraineeMealRecordUiEvent.OnClickSave(imageFile))
}
},
)

if (showBottomSheet) {
Expand Down Expand Up @@ -201,7 +210,7 @@ internal fun TraineeMealRecordRoute(
private fun TraineeMealRecordScreen(
state: TraineeMealRecordUiState,
context: Context,
onImageSelect: (url: Uri) -> Unit,
onSelectImage: (url: Uri) -> Unit,
onClickDeleteImage: () -> Unit,
onClickDateSection: () -> Unit,
onClickTimeSection: () -> Unit,
Expand All @@ -214,7 +223,7 @@ private fun TraineeMealRecordScreen(

val pickMediaLauncher = rememberLauncherForActivityResult(PickVisualMedia()) { uri ->
if (uri != null) {
onImageSelect(uri)
onSelectImage(uri)
}
}

Expand Down Expand Up @@ -327,8 +336,8 @@ private fun Dialog(
content = "기록이 저장되지 않아요!",
leftButtonText = "취소",
rightButtonText = "확인",
onLeftButtonClick = onClickExit,
onRightButtonClick = onDismissDialog,
onLeftButtonClick = onDismissDialog,
onRightButtonClick = onClickExit,
onDismiss = onDismissDialog,
)
}
Expand Down Expand Up @@ -672,7 +681,7 @@ private fun TraineeMealRecordScreenPreview() {
memo = "",
),
context = LocalContext.current,
onImageSelect = { },
onSelectImage = { },
onClickDeleteImage = { },
onClickDateSection = { },
onClickTimeSection = { },
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package co.kr.tnt.trainee.mealrecord

import android.content.Context
import androidx.lifecycle.viewModelScope
import co.kr.tnt.domain.repository.TraineeRepository
import co.kr.tnt.domain.utils.DateFormatter
Expand All @@ -9,7 +8,6 @@ import co.kr.tnt.trainee.mealrecord.TraineeMealRecordContract.TraineeMealRecordU
import co.kr.tnt.trainee.mealrecord.TraineeMealRecordContract.TraineeMealRecordUiState
import co.kr.tnt.trainee.mealrecord.TraineeMealRecordContract.TraineeMealRecordUiState.DialogState
import co.kr.tnt.ui.base.BaseViewModel
import co.kr.tnt.ui.utils.convertToAllowedImageFormat
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
import java.io.File
Expand Down Expand Up @@ -45,14 +43,13 @@ internal class TraineeMealRecordViewModel @Inject constructor(
}

TraineeMealRecordUiEvent.OnClickCloseBottomSheet -> clearFocusState()

is TraineeMealRecordUiEvent.OnSelectMealType -> updateState {
copy(mealType = event.mealType).validateMealRecord()
}

is TraineeMealRecordUiEvent.OnChangeMemo -> updateMemo(event.memo)
TraineeMealRecordUiEvent.OnClickBack -> handleBackClick()
is TraineeMealRecordUiEvent.OnClickSave -> postMealRecord(event.context)
is TraineeMealRecordUiEvent.OnClickSave -> postMealRecord(event.imageFile)
TraineeMealRecordUiEvent.OnClickDialogConfirm -> {
updateState { copy(dialogState = DialogState.NONE) }
sendEffect(TraineeMealRecordSideEffect.NavigateToHome)
Expand Down Expand Up @@ -90,18 +87,15 @@ internal class TraineeMealRecordViewModel @Inject constructor(
}
}

// TODO Context 제거
private fun postMealRecord(context: Context) {
private fun postMealRecord(imageFile: File?) {
updateState { copy(isLoading = true) }

val mealDateTime = dateFormatter.format(
LocalDateTime.of(currentState.date, currentState.time),
"yyyy-MM-dd'T'HH:mm:ss",
)

viewModelScope.launch {
val state = currentState
val imageFile: File? = state.image?.convertToAllowedImageFormat(context)
runCatching {
traineeRepository.postMealRecord(
mealImage = imageFile,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package co.kr.tnt.trainee.signup

import android.net.Uri
import androidx.activity.compose.BackHandler
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
Expand All @@ -12,8 +11,12 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign.Companion.Center
Expand All @@ -26,18 +29,35 @@ import co.kr.tnt.feature.trainee.signup.R
import co.kr.tnt.trainee.signup.TraineeSignUpContract.TraineeSignUpUiState
import co.kr.tnt.ui.component.TnTLoadingScreen
import co.kr.tnt.ui.model.DefaultUserProfile
import co.kr.tnt.ui.utils.convertToAllowedImageFormat
import co.kr.tnt.ui.utils.throttled
import coil.compose.rememberAsyncImagePainter
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import java.io.File
import co.kr.tnt.core.ui.R as uiResource

@Composable
internal fun TraineeSignUpCompletePage(
state: TraineeSignUpUiState,
onBackClick: () -> Unit,
onNextClick: (Uri?) -> Unit,
onNextClick: (image: File?) -> Unit,
) {
BackHandler { onBackClick() }

val context = LocalContext.current
val completeState = remember { mutableStateOf(false) }

LaunchedEffect(completeState.value) {
if (completeState.value) {
val imageFile = withContext(Dispatchers.IO) {
state.image?.convertToAllowedImageFormat(context)
}
onNextClick(imageFile)
completeState.value = false
}
}

Scaffold(
containerColor = TnTTheme.colors.commonColors.Common0,
) { innerPadding ->
Expand Down Expand Up @@ -79,7 +99,7 @@ internal fun TraineeSignUpCompletePage(
}
TnTBottomButton(
text = stringResource(uiResource.string.start),
onClick = throttled { onNextClick(state.image) },
onClick = throttled { completeState.value = true },
modifier = Modifier.align(Alignment.BottomCenter),
)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package co.kr.tnt.trainee.signup

import android.content.Context
import android.net.Uri
import co.kr.tnt.ui.base.UiEvent
import co.kr.tnt.ui.base.UiSideEffect
import co.kr.tnt.ui.base.UiState
import java.io.File
import java.time.LocalDate

private const val MAX_NAME_LENGTH = 15
Expand Down Expand Up @@ -67,8 +67,7 @@ internal class TraineeSignUpContract {
data object OnNextClick : TraineeSignUpUiEvent
data object OnBackClick : TraineeSignUpUiEvent
data class RequestSignUp(
val context: Context,
val imageUri: Uri?,
val imageFile: File?,
val id: String,
val email: String,
val authType: String,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ import android.net.Uri
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.ui.platform.LocalContext
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import co.kr.tnt.designsystem.snackbar.LocalSnackbar
import co.kr.tnt.trainee.signup.TraineeSignUpContract.TraineeSignUpEffect
import co.kr.tnt.trainee.signup.TraineeSignUpContract.TraineeSignUpPage
import co.kr.tnt.trainee.signup.TraineeSignUpContract.TraineeSignUpUiEvent
import co.kr.tnt.trainee.signup.TraineeSignUpContract.TraineeSignUpUiState
import java.io.File
import java.time.LocalDate

@Composable
Expand All @@ -24,7 +24,6 @@ internal fun TraineeSignUpRoute(
navigateToConnect: () -> Unit,
viewModel: TraineeSignUpViewModel = hiltViewModel(),
) {
val context = LocalContext.current
val snackbar = LocalSnackbar.current
val uiState by viewModel.uiState.collectAsStateWithLifecycle()

Expand All @@ -39,11 +38,10 @@ internal fun TraineeSignUpRoute(
onCautionChange = { viewModel.setEvent(TraineeSignUpUiEvent.OnCautionChange(it)) },
onBackClick = { viewModel.setEvent(TraineeSignUpUiEvent.OnBackClick) },
onNextClick = { viewModel.setEvent(TraineeSignUpUiEvent.OnNextClick) },
onSubmitSignUp = { uri ->
onSubmitSignUp = { file ->
viewModel.setEvent(
TraineeSignUpUiEvent.RequestSignUp(
context = context,
imageUri = uri,
imageFile = file,
id = authId,
email = email,
authType = authType,
Expand All @@ -67,14 +65,14 @@ internal fun TraineeSignUpRoute(
@Composable
private fun TraineeSignUpScreen(
state: TraineeSignUpUiState,
onProfileImageSelect: (Uri) -> Unit,
onNameChange: (String) -> Unit,
onHeightChange: (String) -> Unit,
onWeightChange: (String) -> Unit,
onCautionChange: (String) -> Unit,
onBirthdayChange: (LocalDate) -> Unit,
onPurposeSelected: (String) -> Unit,
onSubmitSignUp: (Uri?) -> Unit,
onProfileImageSelect: (imageUri: Uri) -> Unit,
onNameChange: (name: String) -> Unit,
onHeightChange: (height: String) -> Unit,
onWeightChange: (weight: String) -> Unit,
onCautionChange: (caution: String) -> Unit,
onBirthdayChange: (birthday: LocalDate) -> Unit,
onPurposeSelected: (purpose: String) -> Unit,
onSubmitSignUp: (imageFile: File?) -> Unit,
onNextClick: () -> Unit,
onBackClick: () -> Unit,
) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package co.kr.tnt.trainee.signup

import android.content.Context
import android.net.Uri
import androidx.lifecycle.viewModelScope
import co.kr.tnt.domain.model.User
Expand All @@ -10,7 +9,6 @@ import co.kr.tnt.trainee.signup.TraineeSignUpContract.TraineeSignUpPage
import co.kr.tnt.trainee.signup.TraineeSignUpContract.TraineeSignUpUiEvent
import co.kr.tnt.trainee.signup.TraineeSignUpContract.TraineeSignUpUiState
import co.kr.tnt.ui.base.BaseViewModel
import co.kr.tnt.ui.utils.convertToAllowedImageFormat
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
import java.io.File
Expand All @@ -35,8 +33,7 @@ internal class TraineeSignUpViewModel @Inject constructor(
TraineeSignUpUiEvent.OnBackClick -> navigateToBack()
TraineeSignUpUiEvent.OnNextClick -> navigateToNext()
is TraineeSignUpUiEvent.RequestSignUp -> signUp(
context = event.context,
imageUri = event.imageUri,
imageFile = event.imageFile,
id = event.id,
email = event.email,
authType = event.authType,
Expand All @@ -46,8 +43,7 @@ internal class TraineeSignUpViewModel @Inject constructor(
}

private fun signUp(
context: Context,
imageUri: Uri?,
imageFile: File?,
id: String,
email: String,
authType: String,
Expand All @@ -57,11 +53,9 @@ internal class TraineeSignUpViewModel @Inject constructor(
updateState { copy(isLoading = true) }

val state = currentState
val profileImageFile: File? = imageUri?.convertToAllowedImageFormat(context)

runCatching {
signUpRepository.signUp(
profileImage = profileImageFile,
profileImage = imageFile,
user = User.Trainee(
id = id,
name = state.name,
Expand Down
Loading