11package com.threegap.bitnagil.presentation.login
22
33import androidx.compose.foundation.background
4- import androidx.compose.foundation.layout.Arrangement
5- import androidx.compose.foundation.layout.Column
6- import androidx.compose.foundation.layout.Spacer
4+ import androidx.compose.foundation.layout.Box
75import androidx.compose.foundation.layout.fillMaxSize
8- import androidx.compose.foundation.layout.height
6+ import androidx.compose.foundation.layout.padding
97import androidx.compose.material3.Button
108import androidx.compose.material3.Text
119import androidx.compose.runtime.Composable
1210import androidx.compose.ui.Alignment
1311import androidx.compose.ui.Modifier
1412import androidx.compose.ui.graphics.Color
13+ import androidx.compose.ui.platform.LocalContext
1514import androidx.compose.ui.tooling.preview.Preview
1615import androidx.compose.ui.unit.dp
16+ import androidx.hilt.navigation.compose.hiltViewModel
17+ import com.kakao.sdk.user.UserApiClient
1718import com.threegap.bitnagil.designsystem.BitnagilTheme
19+ import com.threegap.bitnagil.presentation.login.model.LoginIntent
20+ import com.threegap.bitnagil.presentation.login.model.LoginSideEffect
21+ import org.orbitmvi.orbit.compose.collectSideEffect
1822
1923@Composable
20- fun LoginScreen (
21- onLoginClick : () -> Unit ,
24+ fun LoginScreenContainer (viewModel : LoginViewModel = hiltViewModel()) {
25+ val context = LocalContext .current
26+ val client = UserApiClient .instance
27+
28+ viewModel.collectSideEffect { sideEffect ->
29+ when (sideEffect) {
30+ is LoginSideEffect .RequestKakaoTalkLogin -> {
31+ client.loginWithKakaoTalk(context) { token, error ->
32+ viewModel.sendIntent(LoginIntent .OnKakaoLoginResult (token, error))
33+ }
34+ }
35+
36+ is LoginSideEffect .RequestKakaoAccountLogin -> {
37+ client.loginWithKakaoAccount(context) { token, error ->
38+ viewModel.sendIntent(LoginIntent .OnKakaoLoginResult (token, error))
39+ }
40+ }
41+ }
42+ }
43+
44+ LoginScreen (
45+ onKakaoLoginClick = {
46+ viewModel.sendIntent(
47+ LoginIntent .OnKakaoLoginClick (client.isKakaoTalkLoginAvailable(context)),
48+ )
49+ },
50+ )
51+ }
52+
53+ @Composable
54+ private fun LoginScreen (
55+ onKakaoLoginClick : () -> Unit ,
2256 modifier : Modifier = Modifier ,
2357) {
24- Column (
25- verticalArrangement = Arrangement .Center ,
26- horizontalAlignment = Alignment .CenterHorizontally ,
58+ Box (
2759 modifier =
2860 modifier
2961 .fillMaxSize()
3062 .background(Color .White ),
3163 ) {
32- Text (text = " 여긴 로그인 화면" )
33-
34- Spacer (modifier = Modifier .height(10 .dp))
64+ Text (
65+ text = " 빛나길 로고" ,
66+ modifier = Modifier .align(Alignment .Center ),
67+ )
3568
3669 Button (
37- onClick = onLoginClick,
70+ onClick = onKakaoLoginClick,
71+ modifier =
72+ Modifier
73+ .align(Alignment .BottomCenter )
74+ .padding(20 .dp),
3875 ) {
39- Text (" 로그인 버튼 눌러보던가" )
76+ Text (
77+ text = " 카카오 로그인버튼" ,
78+ )
4079 }
4180 }
4281}
@@ -46,7 +85,7 @@ fun LoginScreen(
4685private fun LoginScreenPreview () {
4786 BitnagilTheme {
4887 LoginScreen (
49- onLoginClick = {},
88+ onKakaoLoginClick = {},
5089 )
5190 }
5291}
0 commit comments