From f6b1793d68317438df5a467986c397e30ab9f148 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9E=84=EA=B0=80=EB=9E=8C?= <84944117+ImGaram@users.noreply.github.com> Date: Tue, 19 Sep 2023 10:17:47 +0900 Subject: [PATCH 1/2] :sparkles: :: self study screen logic --- .../view/self_study/SelfStudyScreen.kt | 56 ++++++++++++++----- 1 file changed, 43 insertions(+), 13 deletions(-) diff --git a/presentation/src/main/java/com/msg/presentation/view/self_study/SelfStudyScreen.kt b/presentation/src/main/java/com/msg/presentation/view/self_study/SelfStudyScreen.kt index c5e81209..cca798e0 100644 --- a/presentation/src/main/java/com/msg/presentation/view/self_study/SelfStudyScreen.kt +++ b/presentation/src/main/java/com/msg/presentation/view/self_study/SelfStudyScreen.kt @@ -5,11 +5,12 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.material.Divider import androidx.compose.material.ExperimentalMaterialApi import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -18,27 +19,45 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import androidx.hilt.navigation.compose.hiltViewModel import com.dotori.dotori_components.components.bottomsheet.DotoriBottomSheetDialog import com.dotori.dotori_components.components.card.DotoriStudentCard import com.dotori.dotori_components.components.utils.Types import com.dotori.dotori_components.theme.DotoriTheme +import com.msg.domain.model.self_study.SelfStudyListResponseModel import com.msg.presentation.view.component.DotoriTopBar import com.msg.presentation.view.self_study.component.BottomSheetContent import com.msg.presentation.view.self_study.component.EmptySelfStudyScreen import com.msg.presentation.view.self_study.component.SelfStudyTopBar import com.msg.presentation.view.util.updateDotoriTheme +import com.msg.presentation.viewmodel.SelfStudyViewModel import kotlinx.coroutines.launch @Composable @OptIn(ExperimentalMaterialApi::class) -fun SelfStudyScreen() { - val list = listOf(1,2,3,4,5) +fun SelfStudyScreen( + selfStudyViewModel: SelfStudyViewModel = hiltViewModel() +) { + val selfStudyList by selfStudyViewModel.selfStudyListState.collectAsState() + + val role = "member" + LaunchedEffect(Unit) { + selfStudyViewModel.getSelfStudyList(role) + } + val scope = rememberCoroutineScope() var sheetCloseState by remember { mutableStateOf(false) } DotoriBottomSheetDialog( sheetContent = { BottomSheetContent { searchText, grade, `class`, gender -> + selfStudyViewModel.searchSelfStudyStudent( + role = role, + name = searchText, + gender = gender, + classNum = `class`, + grade = grade.toInt() + ) sheetCloseState = true } } @@ -48,15 +67,22 @@ fun SelfStudyScreen() { sheetCloseState = false } - if (list.isEmpty()) { + if (selfStudyList.data.isNullOrEmpty()) { SelfStudyIsEmptyContent { scope.launch { state.show() } } } else { SelfStudyStudentListContent( - list = list, + list = selfStudyList.data!!, onFilterIconClick = { scope.launch { state.show() } + }, + checkSelfStudyLogic = { position, checkBoxState -> + selfStudyViewModel.checkSelfStudy( + role = role, + memberId = selfStudyList.data!![position].id.toLong(), + selfStudyCheck = checkBoxState + ) } ) } @@ -83,8 +109,9 @@ fun SelfStudyIsEmptyContent(onFilterIconClick: () -> Unit, ) { @Composable @OptIn(ExperimentalFoundationApi::class) fun SelfStudyStudentListContent( - list: List, - onFilterIconClick: () -> Unit + list: List, + onFilterIconClick: () -> Unit, + checkSelfStudyLogic: (Int, Boolean) -> Unit ) { var checkBoxState by remember { mutableStateOf(false) } @@ -103,16 +130,19 @@ fun SelfStudyStudentListContent( stickyHeader { SelfStudyTopBar { onFilterIconClick() } } - items(list) { position -> + itemsIndexed(list) { position, item -> DotoriStudentCard( - name = "임가람", - gender = "MAN", - role = "ROLE_MEMBER", - studentNumber = "3412", + name = item.memberName, + gender = item.gender, + role = "ROLE_MEMBER", // 임시 권한 + studentNumber = item.stuNum, position = position, mode = Types.CardType.SELF_STUDY, isLast = list.lastIndex + 1 == position, - onCheckBoxChange = { checkBoxState = it } + onCheckBoxChange = { + checkBoxState = it + checkSelfStudyLogic(position, checkBoxState) + } ) } } From 39f8e8155ab05527acd028e13fc1bb9fda60068a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9E=84=EA=B0=80=EB=9E=8C?= <84944117+ImGaram@users.noreply.github.com> Date: Tue, 19 Sep 2023 10:57:04 +0900 Subject: [PATCH 2/2] =?UTF-8?q?:recycle:=20::=20selfStudyListResponseModel?= =?UTF-8?q?=EB=A1=9C=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EB=84=98=EA=B2=A8?= =?UTF-8?q?=EC=A3=BC=EA=B2=8C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/view/self_study/SelfStudyScreen.kt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/presentation/src/main/java/com/msg/presentation/view/self_study/SelfStudyScreen.kt b/presentation/src/main/java/com/msg/presentation/view/self_study/SelfStudyScreen.kt index cca798e0..46bdf7b9 100644 --- a/presentation/src/main/java/com/msg/presentation/view/self_study/SelfStudyScreen.kt +++ b/presentation/src/main/java/com/msg/presentation/view/self_study/SelfStudyScreen.kt @@ -39,8 +39,8 @@ fun SelfStudyScreen( selfStudyViewModel: SelfStudyViewModel = hiltViewModel() ) { val selfStudyList by selfStudyViewModel.selfStudyListState.collectAsState() - val role = "member" + LaunchedEffect(Unit) { selfStudyViewModel.getSelfStudyList(role) } @@ -77,10 +77,10 @@ fun SelfStudyScreen( onFilterIconClick = { scope.launch { state.show() } }, - checkSelfStudyLogic = { position, checkBoxState -> + checkSelfStudyLogic = { item, checkBoxState -> selfStudyViewModel.checkSelfStudy( role = role, - memberId = selfStudyList.data!![position].id.toLong(), + memberId = item.id.toLong(), selfStudyCheck = checkBoxState ) } @@ -111,7 +111,7 @@ fun SelfStudyIsEmptyContent(onFilterIconClick: () -> Unit, ) { fun SelfStudyStudentListContent( list: List, onFilterIconClick: () -> Unit, - checkSelfStudyLogic: (Int, Boolean) -> Unit + checkSelfStudyLogic: (SelfStudyListResponseModel, Boolean) -> Unit ) { var checkBoxState by remember { mutableStateOf(false) } @@ -141,7 +141,7 @@ fun SelfStudyStudentListContent( isLast = list.lastIndex + 1 == position, onCheckBoxChange = { checkBoxState = it - checkSelfStudyLogic(position, checkBoxState) + checkSelfStudyLogic(item, checkBoxState) } ) }