Skip to content

Commit

Permalink
[feat] #4 review
Browse files Browse the repository at this point in the history
  • Loading branch information
Sangwook123 committed May 1, 2024
1 parent af20a1e commit cbab27e
Show file tree
Hide file tree
Showing 18 changed files with 91 additions and 53 deletions.
2 changes: 1 addition & 1 deletion core/model/src/main/java/org/sopt/model/Friend.kt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package org.sopt.model

data class Friend(
val id: Int?,
val id: Int? = null,
val name: String,
val hobby: String,
)
12 changes: 5 additions & 7 deletions feature/home/src/main/java/org/sopt/home/AddFriendBottomSheet.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.sopt.home

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
Expand All @@ -24,15 +25,14 @@ import org.sopt.designsystem.ui.theme.NOWSOPTAndroidTheme
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun AddFriendBottomSheet(
modifier: Modifier = Modifier,
sheetState: SheetState,
onDismissRequest: () -> Unit = {},
onClickSave: () -> Unit,
onNameValueChange: (String) -> Unit,
onHobbyValueChange: (String) -> Unit,
state: HomeState,
modifier: Modifier = Modifier,
onDismissRequest: () -> Unit = {},
) {
ModalBottomSheet(sheetState = sheetState, onDismissRequest = onDismissRequest) {
ModalBottomSheet(onDismissRequest = onDismissRequest) {
AddFriendContent(
onClickSave = onClickSave,
onNameValueChange = onNameValueChange,
Expand All @@ -55,26 +55,24 @@ fun AddFriendContent(
.background(color = Color.White)
.padding(horizontal = 20.dp),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(40.dp)
) {
Spacer(modifier = Modifier.height(20.dp))
Text(
text = "친구 추가",
fontSize = 20.sp,
)
Spacer(modifier = Modifier.height(40.dp))
RegularTextField(
value = state.savingName,
placeholder = "이름을 입력하세요",
onValueChange = onNameValueChange

)
Spacer(modifier = Modifier.height(40.dp))
RegularTextField(
value = state.savingHobby,
placeholder = "취미를 입력하세요",
onValueChange = onHobbyValueChange
)
Spacer(modifier = Modifier.height(40.dp))
RegularButton(
modifier = Modifier.padding(horizontal = 40.dp),
text = "저장",
Expand Down
4 changes: 3 additions & 1 deletion feature/home/src/main/java/org/sopt/home/HomeContract.kt
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package org.sopt.home

import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf
import org.sopt.model.Friend

data class HomeState(
val friendList: List<Friend> = emptyList(),
val friendList: ImmutableList<Friend> = persistentListOf(),
val query: String = "",
val registeredHobby: String = "",
val registeredName: String = "",
Expand Down
10 changes: 6 additions & 4 deletions feature/home/src/main/java/org/sopt/home/HomeFriendContainer.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.sopt.home

import androidx.annotation.DrawableRes
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
Expand Down Expand Up @@ -27,15 +28,16 @@ import org.sopt.designsystem.ui.theme.NOWSOPTAndroidTheme
@OptIn(ExperimentalFoundationApi::class)
@Composable
fun HomeFriendContainer(
id: Int? = 0,
modifier: Modifier = Modifier,
painter: Painter = painterResource(R.drawable.ic_launcher_background),
title: String,
subTitle: String = "",
containerHeight: Dp,
modifier: Modifier = Modifier,
id: Int? = 0,
@DrawableRes imageId: Int = R.drawable.ic_launcher_background,
subTitle: String = "",
onClick: () -> Unit = {},
onLongClick: () -> Unit = {},
) {
val painter = painterResource(id = imageId)
Row(
modifier = modifier
.fillMaxWidth()
Expand Down
36 changes: 14 additions & 22 deletions feature/home/src/main/java/org/sopt/home/HomeScreen.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,43 +11,40 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Add
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.FloatingActionButton
import androidx.compose.material3.Icon
import androidx.compose.material3.SheetState
import androidx.compose.material3.rememberModalBottomSheetState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color.Companion.White
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import kotlinx.collections.immutable.persistentListOf
import org.orbitmvi.orbit.compose.collectAsState
import org.sopt.designsystem.component.dialog.SoptAlertDialog
import org.sopt.designsystem.component.textfield.RegularTextField
import org.sopt.designsystem.ui.theme.NOWSOPTAndroidTheme
import org.sopt.model.Friend

@OptIn(ExperimentalMaterial3Api::class)

@Composable
fun HomeRoute(
modifier: Modifier = Modifier,
viewModel: HomeViewModel = hiltViewModel(),
label: String,
) {
val state = viewModel.collectAsState().value
val listState = rememberLazyListState()
val sheetState = rememberModalBottomSheetState()
val state by viewModel.collectAsState()

HomeScreen(
modifier = modifier,
state = state,
listState = listState,
sheetState = sheetState,
onQueryValueChange = viewModel::updateQuery,
onLongClickItem = viewModel::showDeleteDialog,
onClickFloatingButton = viewModel::showAddFriendBottomSheet,
Expand All @@ -60,12 +57,11 @@ fun HomeRoute(
)
}

@OptIn(ExperimentalMaterial3Api::class, ExperimentalFoundationApi::class)
@OptIn(ExperimentalFoundationApi::class)
@Composable
fun HomeScreen(
modifier: Modifier = Modifier,
state: HomeState = HomeState(),
listState: LazyListState = rememberLazyListState(),
sheetState: SheetState = rememberModalBottomSheetState(),
onQueryValueChange: (String) -> Unit = {},
onLongClickItem: (Int) -> Unit = {},
onClickFloatingButton: () -> Unit = {},
Expand All @@ -76,7 +72,10 @@ fun HomeScreen(
onClickDialogPositiveButton: (Int) -> Unit = {},
onClickDialogNegativeButton: () -> Unit = {},
) {
Box {
val listState = rememberLazyListState()
Box (
modifier = modifier
) {
if (state.showDeleteDialog.first) {
SoptAlertDialog(
title = "삭제?",
Expand Down Expand Up @@ -105,13 +104,7 @@ fun HomeScreen(
state = listState
) {
items(
items = listOf(
Friend(
id = 0,
name = state.registeredName,
hobby = state.registeredHobby
)
) + state.friendList,
items = state.friendList,
key = { it.id!! }
) { friend ->
HomeFriendContainer(
Expand Down Expand Up @@ -142,7 +135,6 @@ fun HomeScreen(
}
if (state.showBottomSheet) {
AddFriendBottomSheet(
sheetState = sheetState,
onClickSave = onClickSave,
onDismissRequest = onDismissRequest,
onNameValueChange = onBottomSheetNameChange,
Expand All @@ -161,7 +153,7 @@ fun preview() {
NOWSOPTAndroidTheme {
HomeScreen(
state = HomeState(
friendList = listOf(
friendList = persistentListOf(
Friend(1, "asd", "asd"),
Friend(2, "asd", "asd"),
Friend(3, "asd", "asd"),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.sopt.home.navigation

import androidx.compose.ui.Modifier
import androidx.navigation.NavController
import androidx.navigation.NavGraphBuilder
import androidx.navigation.NavOptions
Expand All @@ -13,9 +14,12 @@ fun NavController.navigateHome(navOptions: NavOptions? = null) {
navigate(HomeRoute.route, navOptions)
}

fun NavGraphBuilder.homeNavGraph() {
fun NavGraphBuilder.homeNavGraph(
modifier: Modifier = Modifier,
) {
composable(route = HomeRoute.route) {
HomeRoute(
modifier = modifier,
label = ""
)
}
Expand Down
8 changes: 6 additions & 2 deletions feature/main/src/main/java/org/sopt/main/login/LoginScreen.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import androidx.compose.material3.SnackbarHost
import androidx.compose.material3.SnackbarHostState
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment
Expand All @@ -31,11 +32,12 @@ import org.sopt.designsystem.ui.theme.NOWSOPTAndroidTheme

@Composable
fun LoginRoute(
modifier: Modifier = Modifier,
viewModel: LoginViewModel = hiltViewModel(),
navigateHome: () -> Unit,
navigateSignup: () -> Unit,
) {
val state = viewModel.collectAsState().value
val state by viewModel.collectAsState()
val snackBarHostState = remember { SnackbarHostState() }
val scope = rememberCoroutineScope()

Expand Down Expand Up @@ -67,6 +69,7 @@ fun LoginRoute(

LoginScreen(
snackBarHostState = snackBarHostState,
modifier = modifier,
state = state,
onClickLoginBtn = viewModel::login,
onClickSignupBtn = viewModel::signup,
Expand All @@ -79,6 +82,7 @@ fun LoginRoute(
@Composable
fun LoginScreen(
snackBarHostState: SnackbarHostState,
modifier: Modifier = Modifier,
state: LoginState = LoginState(),
onClickLoginBtn: () -> Unit = {},
onClickSignupBtn: () -> Unit = {},
Expand All @@ -89,7 +93,7 @@ fun LoginScreen(
snackbarHost = { SnackbarHost(hostState = snackBarHostState) }
) {
Box(
modifier = Modifier
modifier = modifier
.fillMaxSize()
.padding(
top = 50.dp,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,9 @@ class LoginViewModel @Inject constructor(
fun login() = intent {
with(state) {
when {
checkRegister() -> postSideEffect(LoginSideEffect.showSnackbar("회원가입 먼저하셈"))
checkRegister() -> {
postSideEffect(LoginSideEffect.showSnackbar("회원가입 먼저하셈"))
}
matchesUserInfo(state.id, state.password) -> {
userDataRepository.setAutoLogin(true)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.sopt.main.login.navigation

import androidx.compose.ui.Modifier
import androidx.navigation.NavController
import androidx.navigation.NavGraphBuilder
import androidx.navigation.compose.composable
Expand All @@ -15,6 +16,7 @@ fun NavController.navigateLogin() {
}

fun NavGraphBuilder.loginNavGraph(
modifier: Modifier = Modifier,
navigateSignup: () -> Unit = {},
navigateHome: () -> Unit = {},
) {
Expand Down
5 changes: 1 addition & 4 deletions feature/main/src/main/java/org/sopt/main/model/UserModel.kt
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
package org.sopt.main.model

import android.os.Parcelable
import kotlinx.parcelize.Parcelize
import org.sopt.model.User

@Parcelize
data class UserModel(
val id: String = "",
val pw: String = "",
val name: String = "",
val hobby: String = "",
) : Parcelable
)

fun UserModel.toUser() = User(
id = id,
Expand Down
16 changes: 12 additions & 4 deletions feature/main/src/main/java/org/sopt/main/navigator/MainScreen.kt
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material3.Icon
import androidx.compose.material3.Scaffold
Expand All @@ -25,7 +26,7 @@ import androidx.compose.ui.graphics.Color.Companion.White
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp
import androidx.navigation.compose.NavHost
import okhttp3.internal.toImmutableList
import kotlinx.collections.immutable.toImmutableList
import org.sopt.home.navigation.homeNavGraph
import org.sopt.main.login.navigation.loginNavGraph
import org.sopt.main.signup.navigation.signupNavGraph
Expand All @@ -40,27 +41,34 @@ fun MainScreen(
) {
Scaffold(
modifier = modifier,
content = {
content = { innerPadding ->
NavHost(
navController = navigator.navController,
startDestination = navigator.startDestination,
) {
loginNavGraph(
modifier = modifier.padding(innerPadding),
navigateSignup = navigator::navigateSignup,
navigateHome = navigator::navigateHome,
)

signupNavGraph(
modifier = modifier.padding(innerPadding),
navigateLogin = navigator::navigateLogin
)

MypageNavGraph(
modifier = modifier.padding(innerPadding),
navigateToLoginScreen = navigator::navigateLogin
)

homeNavGraph()
homeNavGraph(
modifier = modifier.padding(innerPadding),
)

searchNavGraph()
searchNavGraph(
modifier = modifier.padding(innerPadding),
)
}
},
bottomBar = {
Expand Down
Loading

0 comments on commit cbab27e

Please sign in to comment.