Skip to content
Merged
Original file line number Diff line number Diff line change
Expand Up @@ -61,15 +61,18 @@ fun AgencyJoinScreen(
.background(White)
.height(44.dp),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.End
horizontalArrangement = if (state.isBackButton) Arrangement.Start else Arrangement.End
) {
val navigateUpIconId =
if (state.isBackButton) R.drawable.ic_chevron_left else R.drawable.ic_close_default

Icon(
modifier = Modifier
.size(24.dp)
.noRippleClickable {
navigateUp()
},
painter = painterResource(id = R.drawable.ic_close_default),
painter = painterResource(id = navigateUpIconId),
contentDescription = null,
tint = Black
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,6 @@ data class AgencyJoinState(
val inputCode: String = "",
val codeAccess: Boolean = false,
val visiblePopUpError: Boolean = false,
val errorPopUpMessage: String = ""
val errorPopUpMessage: String = "",
val isBackButton: Boolean = false,
) : State
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package com.moneymong.moneymong.feature.agency.join

import androidx.core.text.isDigitsOnly
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.viewModelScope
import com.moneymong.moneymong.android.BaseViewModel
import com.moneymong.moneymong.domain.usecase.agency.AgencyJoinUseCase
import com.moneymong.moneymong.domain.usecase.agency.SaveAgencyIdUseCase
import com.moneymong.moneymong.feature.agency.join.component.CODE_MAX_SIZE
import com.moneymong.moneymong.feature.agency.join.navigation.AgencyJoinArgs
import com.moneymong.moneymong.model.agency.AgencyJoinRequest
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
Expand All @@ -15,9 +17,11 @@ import javax.inject.Inject

@HiltViewModel
class AgencyJoinViewModel @Inject constructor(
savedStateHandle: SavedStateHandle,
private val agencyJoinUseCase: AgencyJoinUseCase,
private val saveAgencyIdUseCase: SaveAgencyIdUseCase
) : BaseViewModel<AgencyJoinState, AgencyJoinSideEffect>(AgencyJoinState()) {
) : BaseViewModel<AgencyJoinState, AgencyJoinSideEffect>(
state = AgencyJoinState(isBackButton = AgencyJoinArgs(savedStateHandle).isBackButton)) {

fun findLedgerByInviteCode() = intent {
viewModelScope.launch {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,25 +1,45 @@
package com.moneymong.moneymong.feature.agency.join.navigation

import androidx.lifecycle.SavedStateHandle
import androidx.navigation.NavController
import androidx.navigation.NavGraphBuilder
import androidx.navigation.NavOptions
import androidx.navigation.NavType
import androidx.navigation.compose.composable
import androidx.navigation.navArgument
import com.moneymong.moneymong.feature.agency.join.AgencyJoinScreen

const val agencyJoinRoute = "agencyJoin_route"
const val IS_BACK_BUTTON = "IsBackButton"
const val agencyJoinRouteWithArgs = "$agencyJoinRoute/{${IS_BACK_BUTTON}}"

fun NavController.navigateAgencyJoin(navOptions: NavOptions? = null) {
navigate(agencyJoinRoute, navOptions)
fun NavController.navigateAgencyJoin(
navOptions: NavOptions? = null,
isBackButton: Boolean = false
) {
navigate("${agencyJoinRoute}/${isBackButton}", navOptions)
}

fun NavGraphBuilder.agencyJoinScreen(
navigateToComplete: () -> Unit,
navigateUp: () -> Unit,
) {
composable(route = agencyJoinRoute) {
composable(
route = agencyJoinRouteWithArgs,
arguments = listOf(navArgument(IS_BACK_BUTTON) {
type = NavType.BoolType
defaultValue = false
})
) {
AgencyJoinScreen(
navigateToComplete = navigateToComplete,
navigateUp = navigateUp,
)
}
}

internal class AgencyJoinArgs(val isBackButton: Boolean) {
constructor(savedStateHandle: SavedStateHandle) : this(
isBackButton = checkNotNull(savedStateHandle[IS_BACK_BUTTON])
)
}
Original file line number Diff line number Diff line change
@@ -1,25 +1,46 @@
package com.moneymong.moneymong.feature.agency.navigation

import androidx.lifecycle.SavedStateHandle
import androidx.navigation.NavController
import androidx.navigation.NavGraphBuilder
import androidx.navigation.NavOptions
import androidx.navigation.NavType
import androidx.navigation.compose.composable
import androidx.navigation.navArgument
import com.moneymong.moneymong.feature.agency.register.AgencyRegisterScreen

const val agencyRegisterRoute = "agencyRegister_route"
const val VISIBLE_INVITE_CODE = "VisibleInviteCode"
const val agencyRegisterRouteWithArgs = "${agencyRegisterRoute}/{${VISIBLE_INVITE_CODE}}"

fun NavController.navigateAgencyRegister(
navOptions: NavOptions? = null
navOptions: NavOptions? = null,
visibleInviteCode: Boolean = false,
) {
navigate(agencyRegisterRoute, navOptions)
navigate("${agencyRegisterRoute}/${visibleInviteCode}", navOptions)
}

fun NavGraphBuilder.agencyRegisterScreen(
navigateToLedger: () -> Unit
navigateToLedger: () -> Unit,
navigateToAgencyJoin: () -> Unit,
) {
composable(
route = agencyRegisterRoute,
route = agencyRegisterRouteWithArgs,
arguments = listOf(navArgument(VISIBLE_INVITE_CODE) {
type = NavType.BoolType
defaultValue = false
})
) {
AgencyRegisterScreen(navigateToLedger = navigateToLedger,)
AgencyRegisterScreen(
navigateToLedger = navigateToLedger,
navigateToAgencyJoin = navigateToAgencyJoin
)
}
}


internal class AgencyRegisterArgs(val visibleInviteCode: Boolean) {
constructor(savedStateHandle: SavedStateHandle) : this(
visibleInviteCode = checkNotNull(savedStateHandle[VISIBLE_INVITE_CODE])
)
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.moneymong.moneymong.feature.agency.register

import androidx.activity.compose.BackHandler
import androidx.compose.foundation.background
import androidx.compose.foundation.gestures.detectTapGestures
import androidx.compose.foundation.layout.Column
Expand Down Expand Up @@ -42,6 +43,7 @@ fun AgencyRegisterScreen(
modifier: Modifier = Modifier,
viewModel: AgencyRegisterViewModel = hiltViewModel(),
navigateToLedger: () -> Unit,
navigateToAgencyJoin: () -> Unit
) {
val state by viewModel.collectAsState()
val focusManager = LocalFocusManager.current
Expand All @@ -53,9 +55,15 @@ fun AgencyRegisterScreen(
focusManager.clearFocus()
navigateToLedger()
}

is AgencyRegisterSideEffect.NavigateToAgencyJoin -> {
navigateToAgencyJoin()
}
}
}

BackHandler(onBack = viewModel::navigateToLedger)

if (state.visibleOutDialog) {
MDSModal(
icon = R.drawable.ic_warning_filled,
Expand Down Expand Up @@ -116,6 +124,8 @@ fun AgencyRegisterScreen(
agencyName = state.agencyName,
onAgencyNameChange = viewModel::changeAgencyName,
changeNameTextFieldIsError = viewModel::changeNameTextFieldIsError,
visibleInviteCode = state.visibleInviteCode,
onClickInviteCode = viewModel::navigateToAgencyJoin
)
}
val canRegister = state.agencyName.text.isNotEmpty() && state.nameTextFieldIsError.not()
Expand All @@ -135,5 +145,6 @@ fun AgencyRegisterScreen(
fun AgencyRegisterScreenPreview() {
AgencyRegisterScreen(
navigateToLedger = {},
navigateToAgencyJoin = {}
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,6 @@ import com.moneymong.moneymong.android.SideEffect

sealed interface AgencyRegisterSideEffect : SideEffect {
data object NavigateToLedger : AgencyRegisterSideEffect

data object NavigateToAgencyJoin : AgencyRegisterSideEffect
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,5 @@ data class AgencyRegisterState(
val nameTextFieldIsError: Boolean = false,
val visibleOutDialog: Boolean = false,
val visibleErrorDialog: Boolean = false,
val visibleInviteCode: Boolean = false
) : State
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package com.moneymong.moneymong.feature.agency.register

import androidx.compose.ui.text.input.TextFieldValue
import androidx.lifecycle.SavedStateHandle
import com.moneymong.moneymong.android.BaseViewModel
import com.moneymong.moneymong.common.error.MoneyMongError
import com.moneymong.moneymong.domain.usecase.agency.RegisterAgencyUseCase
import com.moneymong.moneymong.domain.usecase.agency.SaveAgencyIdUseCase
import com.moneymong.moneymong.feature.agency.navigation.AgencyRegisterArgs
import com.moneymong.moneymong.model.agency.AgencyRegisterRequest
import dagger.hilt.android.lifecycle.HiltViewModel
import org.orbitmvi.orbit.annotation.OrbitExperimental
Expand All @@ -16,11 +18,18 @@ import javax.inject.Inject

@HiltViewModel
class AgencyRegisterViewModel @Inject constructor(
savedStateHandle: SavedStateHandle,
private val registerAgencyUseCase: RegisterAgencyUseCase,
private val saveAgencyIdUseCase: SaveAgencyIdUseCase
) : BaseViewModel<AgencyRegisterState, AgencyRegisterSideEffect>(AgencyRegisterState()) {
) : BaseViewModel<AgencyRegisterState, AgencyRegisterSideEffect>(
state = AgencyRegisterState(visibleInviteCode = AgencyRegisterArgs(savedStateHandle).visibleInviteCode)
) {

fun navigateToLedger() = eventEmit(sideEffect = AgencyRegisterSideEffect.NavigateToLedger)
fun navigateToLedger() =
eventEmit(sideEffect = AgencyRegisterSideEffect.NavigateToLedger)

fun navigateToAgencyJoin() =
eventEmit(sideEffect = AgencyRegisterSideEffect.NavigateToAgencyJoin)

fun registerAgency() = intent {
registerAgencyUseCase(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.moneymong.moneymong.feature.agency.register.view

import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
Expand All @@ -14,15 +16,18 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.onFocusChanged
import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.text.style.TextDecoration
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.moneymong.moneymong.design_system.component.textfield.MDSTextField
import com.moneymong.moneymong.design_system.component.textfield.util.MDSTextFieldIcons
import com.moneymong.moneymong.design_system.component.textfield.util.withRequiredMark
import com.moneymong.moneymong.design_system.theme.Body1
import com.moneymong.moneymong.design_system.theme.Body3
import com.moneymong.moneymong.design_system.theme.Gray05
import com.moneymong.moneymong.design_system.theme.Gray10
Expand All @@ -34,6 +39,8 @@ internal fun AgencyResisterContentView(
agencyName: TextFieldValue,
onAgencyNameChange: (TextFieldValue) -> Unit,
changeNameTextFieldIsError: (Boolean) -> Unit,
visibleInviteCode: Boolean,
onClickInviteCode: () -> Unit
) {
Column(modifier = modifier) {
TitleView()
Expand All @@ -43,6 +50,20 @@ internal fun AgencyResisterContentView(
onAgencyNameChange = onAgencyNameChange,
changeIsError = changeNameTextFieldIsError
)
Spacer(modifier = Modifier.height(7.dp))

if (visibleInviteCode) {
Text(
modifier = Modifier
.align(Alignment.CenterHorizontally)
.clickable(onClick = onClickInviteCode)
.padding(8.dp),
text = "초대코드를 받았어요 >",
style = Body1,
color = Gray05,
textDecoration = TextDecoration.Underline
)
}
}
}

Expand Down Expand Up @@ -119,5 +140,7 @@ private fun AgencyResisterContentViewPreview() {
agencyName = TextFieldValue("동아리"),
onAgencyNameChange = {},
changeNameTextFieldIsError = {},
visibleInviteCode = true,
onClickInviteCode = {}
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package com.moneymong.moneymong.home

import androidx.annotation.DrawableRes
import androidx.annotation.StringRes
import com.moneymong.moneymong.feature.agency.navigation.agencyRoute
import com.moneymong.moneymong.feature.mymong.navigation.mymongRoute
import com.moneymong.moneymong.ledger.navigation.ledgerRouteWithArgs

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,9 @@ fun HomeScreen(
// sign
loginScreen(
navigateToLedger = homeNavController::navigateLedger,
navigateToAgencyRegister = homeNavController::navigateAgencyRegister
navigateToAgencyRegister = {
homeNavController.navigateAgencyRegister(visibleInviteCode = true)
}
)

signUpScreen(
Expand Down Expand Up @@ -171,7 +173,8 @@ fun HomeScreen(
)

agencyRegisterScreen(
navigateToLedger = homeNavController::navigateLedger
navigateToLedger = homeNavController::navigateLedger,
navigateToAgencyJoin = { homeNavController.navigateAgencyJoin(isBackButton = true) }
)

agencyRegisterCompleteScreen(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,6 @@ fun LedgerScreen(
modifier = Modifier.background(White),
header = state.currentAgency?.name ?: "장부",
icon = R.drawable.ic_chevron_bottom,
visibleArrow = state.agencyList.isNotEmpty(),
onClickDownArrow = viewModel::onClickAgencyChange
)
},
Expand Down
Loading