Skip to content

Commit

Permalink
Merge pull request #352 from 6QuizOnTheBlock/and/feat#351-teacher_homโ€ฆ
Browse files Browse the repository at this point in the history
โ€ฆe_tab

feat #351: ์„ ์ƒ๋‹˜ ํ™ˆ ํƒญ ํ™”๋ฉด ์ •๋ณด ํ˜ธ์ถœ ๊ตฌํ˜„
  • Loading branch information
SteelZoo authored May 18, 2024
2 parents 4c9e51d + a11abac commit 2516248
Show file tree
Hide file tree
Showing 10 changed files with 132 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ fun ContentCard(
Text(
text = contentName,
modifier = Modifier
.padding(20.dp)
.padding(end = 20.dp)
.wrapContentHeight(),
textAlign = TextAlign.Start,
fontSize = 34.sp,
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,8 @@ fun MainScreen(
padding = innerPadding,
navigateToRank = navigator::navigateRank,
navigateToChallenge = navigator::navigateChallengeHistory,
navigateToRelay = navigator::navigateTeacherRelayHistory
navigateToRelay = navigator::navigateTeacherRelayHistory,
navigateToQuiz = { } ,
)

boardNavGraph(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@ import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.layout.wrapContentHeight
import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults
Expand All @@ -20,6 +22,7 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import coil.compose.AsyncImage
import com.sixkids.designsystem.R

//preview
Expand All @@ -34,7 +37,8 @@ fun TeacherInfoCardPreview() {
@Composable
fun TeacherInfo(
modifier: Modifier = Modifier,
teacherName: String
teacherName: String,
teacherImageUrl: String = "",
) {
val height = 120.dp

Expand All @@ -47,12 +51,16 @@ fun TeacherInfo(
)
) {
Row {
Image(
painter = painterResource(id = R.drawable.teacher_woman),
contentDescription = null,
modifier = Modifier.size(height),
contentScale = ContentScale.FillBounds
)
Card {
AsyncImage(
model = teacherImageUrl,
contentDescription = null,
error = painterResource(id = R.drawable.teacher_woman),
modifier = Modifier.size(height),
contentScale = ContentScale.FillBounds
)
}
Spacer(modifier = Modifier.width(16.dp))
Column(
modifier = Modifier.height(height),
verticalArrangement = Arrangement.Center
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,16 @@ package com.sixkids.teacher.home.main

import com.sixkids.designsystem.theme.component.card.RunningRelayState
import com.sixkids.designsystem.theme.component.card.RunningTogetherState
import com.sixkids.ui.base.SideEffect
import com.sixkids.ui.base.UiState

sealed interface HomeMainEffect{
sealed interface HomeMainEffect: SideEffect{
data object NavigateToRanking : HomeMainEffect
}

data class HomeMainState(
val isLoading: Boolean = false,
val classString: String = "",
val teacherName: String = "",
val runningTogetherState: RunningTogetherState? = null,
val runningRelayState: RunningRelayState? = null,
)
val teacherImageUrl: String = "",
): UiState
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.sixkids.teacher.home.main

import androidx.compose.foundation.ScrollState
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
Expand All @@ -10,34 +11,61 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.sixkids.designsystem.R
import com.sixkids.designsystem.theme.Cream
import com.sixkids.designsystem.theme.Purple
import com.sixkids.designsystem.theme.Red
import com.sixkids.designsystem.theme.UlbanTheme
import com.sixkids.designsystem.theme.UlbanTypography
import com.sixkids.designsystem.theme.Yellow
import com.sixkids.designsystem.theme.component.card.ContentAligment
import com.sixkids.designsystem.theme.component.card.ContentCard
import com.sixkids.designsystem.theme.component.card.ContentVerticalCard
import com.sixkids.teacher.home.component.TeacherInfo
import com.sixkids.ui.extension.collectWithLifecycle

@Composable
fun HomeMainRoute(
viewModel: HomeMainViewModel = hiltViewModel(),
padding: PaddingValues,
navigateToRank: () -> Unit,
navigateToChallenge: () -> Unit,
navigateToRelay: () -> Unit
navigateToRelay: () -> Unit,
navigateToQuiz: () -> Unit
) {

val uiState by viewModel.uiState.collectAsStateWithLifecycle()

viewModel.sideEffect.collectWithLifecycle {
when (it) {
is HomeMainEffect.NavigateToRanking -> navigateToRank()
}
}


LaunchedEffect(Unit) {
viewModel.loadUserInfo()
viewModel.loadSelectedOrganizationName()
}

Box(
modifier = Modifier
.padding(padding)
.fillMaxSize()
) {
HomeMainScreen(
homeMainState = uiState,
navigateToRank = navigateToRank,
navigateToChallenge = navigateToChallenge,
navigateToRelay = navigateToRelay
Expand All @@ -56,17 +84,27 @@ fun HomeMainScreen(
Column(
modifier = modifier
.fillMaxSize()
.padding(start = 20.dp, end = 20.dp, top = 20.dp),
.padding(start = 20.dp, end = 20.dp, top = 20.dp)
.verticalScroll(ScrollState(0)),
) {
TeacherInfo(teacherName = "ํ™์œ ์ค€")
Text(
modifier = Modifier.fillMaxWidth(),
text = homeMainState.classString,
style = UlbanTypography.titleMedium,
textAlign = TextAlign.Center
)
Spacer(modifier = Modifier.height(10.dp))
TeacherInfo(
teacherName = homeMainState.teacherName,
teacherImageUrl = homeMainState.teacherImageUrl
)
Spacer(modifier = Modifier.height(20.dp))
ContentCard(
modifier = Modifier.fillMaxWidth(),
contentAligment = ContentAligment.ImageEnd_TextStart,
cardColor = Cream,
contentName = "์ด์–ด ๋‹ฌ๋ฆฌ๊ธฐ",
contentImageId = R.drawable.relay,
runningState = homeMainState.runningRelayState,
onclick = navigateToRelay
)
Spacer(modifier = Modifier.height(20.dp))
Expand All @@ -76,7 +114,6 @@ fun HomeMainScreen(
cardColor = Red,
contentName = "ํ•จ๊ป˜ ๋‹ฌ๋ฆฌ๊ธฐ",
contentImageId = R.drawable.hifive,
runningState = homeMainState.runningTogetherState,
onclick = navigateToChallenge
)
Row {
Expand All @@ -96,7 +133,7 @@ fun HomeMainScreen(
.weight(1f)
.aspectRatio(1f),
cardColor = Purple,
imageDrawable = R.drawable.rank,
imageDrawable = R.drawable.quiz,
text = "ํ€ด์ฆˆ",
onClick = { }
)
Expand All @@ -109,6 +146,11 @@ fun HomeMainScreen(
@Preview(showBackground = true)
fun HomeMainScreenPreview() {
UlbanTheme {
HomeMainScreen()
HomeMainScreen(
homeMainState = HomeMainState(
classString = "๊ตฌ๋ฏธ ์ดˆ๋“ฑํ•™๊ต 1ํ•™๋…„ 1๋ฐ˜",
teacherName = "ํ™์œ ์ค€"
)
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package com.sixkids.teacher.home.main

import androidx.lifecycle.viewModelScope
import com.sixkids.domain.usecase.organization.LoadSelectedOrganizationNameUseCase
import com.sixkids.domain.usecase.user.LoadUserInfoUseCase
import com.sixkids.ui.base.BaseViewModel
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
import javax.inject.Inject

@HiltViewModel
class HomeMainViewModel @Inject constructor(
private val loadUserInfoUseCase: LoadUserInfoUseCase,
private val loadSelectedOrganizationNameUseCase: LoadSelectedOrganizationNameUseCase
): BaseViewModel<HomeMainState, HomeMainEffect>(HomeMainState()){
fun loadUserInfo(){
viewModelScope.launch {
loadUserInfoUseCase().onSuccess {
intent {
copy(
teacherName = it.name,
teacherImageUrl = it.photo
)
}
}
}
}

fun loadSelectedOrganizationName(){
viewModelScope.launch {
loadSelectedOrganizationNameUseCase().onSuccess {
intent {
copy(
classString = it.replace("\n"," ")
)
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,16 @@ fun NavGraphBuilder.homeNavGraph(
padding: PaddingValues,
navigateToRank: () -> Unit,
navigateToChallenge: () -> Unit,
navigateToRelay: () -> Unit
navigateToRelay: () -> Unit,
navigateToQuiz: () -> Unit
) {
composable(route = HomeRoute.defaultRoute) {
HomeMainRoute(
padding,
navigateToRank,
navigateToChallenge,
navigateToRelay
padding = padding,
navigateToRank = navigateToRank,
navigateToChallenge = navigateToChallenge,
navigateToRelay = navigateToRelay,
navigateToQuiz = navigateToQuiz
)
}
composable(route = HomeRoute.rankRoute) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import android.util.Log
import androidx.lifecycle.viewModelScope
import com.sixkids.domain.usecase.organization.GetOrganizationListUseCase
import com.sixkids.domain.usecase.organization.SaveSelectedOrganizationIdUseCase
import com.sixkids.domain.usecase.organization.SaveSelectedOrganizationNameUseCase
import com.sixkids.domain.usecase.user.GetUserInfoUseCase
import com.sixkids.domain.usecase.user.UpdateFCMTokenUseCase
import com.sixkids.ui.SnackbarToken
Expand All @@ -19,6 +20,7 @@ class OrganizationViewModel @Inject constructor(
private val getUserInfoUseCase: GetUserInfoUseCase,
private val getOrganizationListUseCase: GetOrganizationListUseCase,
private val saveSelectedOrganizationIdUseCase: SaveSelectedOrganizationIdUseCase,
private val saveSelectedOrganizationNameUseCase: SaveSelectedOrganizationNameUseCase,
private val updateFCMTokenUseCase: UpdateFCMTokenUseCase
) : BaseViewModel<OrganizationListState, OrganizationListEffect>(OrganizationListState()) {

Expand Down Expand Up @@ -57,6 +59,9 @@ class OrganizationViewModel @Inject constructor(
fun organizationClick(id: Int){
viewModelScope.launch {
saveSelectedOrganizationIdUseCase(id)
currentState.organizationList.find { it.id == id }?.let {
saveSelectedOrganizationNameUseCase(it.name)
}
postSideEffect(OrganizationListEffect.NavigateToHome)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,12 @@ class ClassSettingViewModel @Inject constructor(
loadSelectedOrganizationNameUseCase()
.onSuccess {
intent { copy(classString = it.replace("\n"," ")) }
separateClassString(it)
if (it.isNotBlank()){
separateClassString(it)
} else {
postSideEffect(ClassSettingEffect.onShowSnackBar("ํ•™๊ธ‰ ์ •๋ณด๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š”๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. ;("))
postSideEffect(ClassSettingEffect.navigateBack)
}
}
.onFailure {
postSideEffect(ClassSettingEffect.onShowSnackBar("ํ•™๊ธ‰ ์ •๋ณด๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š”๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. ;("))
Expand Down Expand Up @@ -79,6 +84,7 @@ class ClassSettingViewModel @Inject constructor(
}

private fun separateClassString(classString: String){
Log.d(TAG, "separateClassString: $classString")
var school_name = ""
var grade = 0
var classNumber = 0
Expand Down

0 comments on commit 2516248

Please sign in to comment.