Skip to content

Commit

Permalink
Merge pull request #277 from School-of-Company/refactor/276-refactor-…
Browse files Browse the repository at this point in the history
…student-activity-module

🔀 :: (#276) - refactor student activity module
  • Loading branch information
audgns10 authored Aug 20, 2024
2 parents 1a586a1 + b407142 commit 378ef50
Show file tree
Hide file tree
Showing 5 changed files with 147 additions and 142 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.msg.student_activity

import androidx.compose.foundation.ScrollState
import com.msg.model.enumdata.Authority
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
Expand All @@ -17,7 +18,7 @@ import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.font.Font
Expand All @@ -43,28 +44,28 @@ import java.util.UUID

@Composable
fun ActivityDetailRoute(
viewModel: StudentActivityViewModel = hiltViewModel(),
onActionEnd: () -> Unit,
onEditClicked: () -> Unit,
onBackClicked: () -> Unit,
viewModel: StudentActivityViewModel = hiltViewModel()
) {
val role = viewModel.role
val id = viewModel.selectedActivityId.value

viewModel.getDetailStudentActivity(id = id)
LaunchedEffect(true) {
getActivityData(
viewModel = viewModel,
onSuccess = {
viewModel.studentDetailActivityData.value = it
}
onSuccess = { viewModel.studentDetailActivityData.value = it }
)
}
ActivityDetailScreen(
data = viewModel.studentDetailActivityData.value,
role = role,
onDeleteClicked = { viewModel.deleteActivityInfo(it) },
onRejectClicked = { viewModel.rejectActivityInfo(it) },
onApproveClicked = { viewModel.approveActivityInfo(it) },
onWhichNegativeChange = viewModel::onWhichNegativeChange,
onDeleteClicked = viewModel::deleteActivityInfo,
onRejectClicked = viewModel::rejectActivityInfo,
onApproveClicked = viewModel::approveActivityInfo,
onActionEnd = onActionEnd,
onEditClicked = onEditClicked,
onBackClicked = onBackClicked
Expand All @@ -88,43 +89,43 @@ suspend fun getActivityData(

@Composable
fun ActivityDetailScreen(
modifier: Modifier = Modifier,
data: GetDetailStudentActivityInfoEntity,
role: String = Authority.ROLE_USER.toString(),
scrollState: ScrollState = rememberScrollState(),
onWhichNegativeChange: (String) -> Unit,
onDeleteClicked: (UUID) -> Unit,
onRejectClicked: (UUID) -> Unit,
onApproveClicked: (UUID) -> Unit,
onActionEnd: () -> Unit,
onEditClicked: () -> Unit,
onBackClicked: () -> Unit
) {
val scrollState = rememberScrollState()

val isNegativeDialogShow = remember { mutableStateOf(false) }
val isPositiveDialogShow = remember { mutableStateOf(false) }
val whichNegative = remember { mutableStateOf("") }
val (isNegativeDialogShow, isSetNegativeDialogShow) = rememberSaveable { mutableStateOf(false) }
val (isPositiveDialogShow, isSetPositionDialogShow) = rememberSaveable { mutableStateOf(false) }

BitgoeulAndroidTheme { colors, typography ->
Box {
Column(
modifier = Modifier
modifier = modifier
.fillMaxSize()
.background(color = colors.WHITE)
.verticalScroll(scrollState)
) {
Spacer(modifier = Modifier.height(20.dp))
Spacer(modifier = modifier.height(20.dp))
GoBackTopBar(
icon = { GoBackIcon() },
text = "돌아가기"
) {
onBackClicked()
}
Column(
modifier = Modifier
modifier = modifier
.padding(horizontal = 28.dp)
) {
Spacer(modifier = Modifier.height(24.dp))
Spacer(modifier = modifier.height(24.dp))
Row(
modifier = Modifier.fillMaxWidth(),
modifier = modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically
) {
Expand All @@ -147,15 +148,15 @@ fun ActivityDetailScreen(
color = colors.G1
)
}
Spacer(modifier = Modifier.height(4.dp))
Spacer(modifier = modifier.height(4.dp))
Text(
text = data.title,
style = typography.bodyLarge,
color = colors.BLACK
)
Spacer(modifier = Modifier.height(4.dp))
Spacer(modifier = modifier.height(4.dp))
Row(
modifier = Modifier.fillMaxWidth(),
modifier = modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically
) {
Expand All @@ -170,7 +171,7 @@ fun ActivityDetailScreen(
color = colors.G2
)
}
Spacer(modifier = Modifier.height(24.dp))
Spacer(modifier = modifier.height(24.dp))
Text(
text = data.content,
fontSize = 16.sp,
Expand All @@ -179,58 +180,56 @@ fun ActivityDetailScreen(
fontFamily = FontFamily(Font(com.msg.design_system.R.font.pretendard_regular)),
color = colors.BLACK
)
Spacer(modifier = Modifier.height(68.dp))
Spacer(modifier = modifier.height(68.dp))
}
}
Row(
modifier = Modifier
modifier = modifier
.fillMaxWidth()
.align(Alignment.BottomCenter)
.padding(horizontal = 28.dp, vertical = 16.dp),
horizontalArrangement = Arrangement.spacedBy(8.dp)
) {
if (role == Authority.ROLE_TEACHER.toString()) {
Row(
modifier = Modifier.weight(0.45f)
modifier = modifier.weight(0.45f)
) {
NegativeBitgoeulButton(
modifier = Modifier.fillMaxWidth(),
modifier = modifier.fillMaxWidth(),
text = "활동 거부"
) {
whichNegative.value = "reject"
isNegativeDialogShow.value = true
onWhichNegativeChange("reject")
isSetNegativeDialogShow(true)
}
}
Row(
modifier = Modifier.weight(0.45f)
modifier = modifier.weight(0.45f)
) {
BitgoeulButton(
modifier = Modifier.fillMaxWidth(),
modifier = modifier.fillMaxWidth(),
text = "활동 승인"
) {
isPositiveDialogShow.value = true
isSetPositionDialogShow(true)
}
}
} else if (role == Authority.ROLE_STUDENT.toString()) {
Row(
modifier = Modifier.weight(0.45f)
modifier = modifier.weight(0.45f)
) {
BitgoeulButton(
modifier = Modifier.fillMaxWidth(),
modifier = modifier.fillMaxWidth(),
text = "활동 수정"
) {
onEditClicked()
}
}
Row(
modifier = Modifier.weight(0.45f)
) {
Row(modifier = modifier.weight(0.45f)) {
NegativeBitgoeulButton(
modifier = Modifier.fillMaxWidth(),
text = "활동 삭제"
) {
isNegativeDialogShow.value = true
whichNegative.value = "delete"
isSetNegativeDialogShow(true)
onWhichNegativeChange("delete")
}
}
}
Expand All @@ -240,8 +239,8 @@ fun ActivityDetailScreen(
title = if (role == Authority.ROLE_STUDENT.toString()) "활동 삭제하시겠습니까?" else "활동 거부하시겠습니까?",
negativeAction = if (role == Authority.ROLE_STUDENT.toString()) "삭제" else "거부",
content = data.title,
isVisible = isNegativeDialogShow.value,
onQuit = { isNegativeDialogShow.value = false },
isVisible = isNegativeDialogShow,
onQuit = { isSetNegativeDialogShow(false) },
onActionClicked = {
if (role == Authority.ROLE_STUDENT.toString()) onDeleteClicked(data.id) else onRejectClicked(data.id)
onActionEnd()
Expand All @@ -252,8 +251,8 @@ fun ActivityDetailScreen(
title = "활동 승인하시겠습니까?",
positiveAction = "승인",
content = data.title,
isVisible = isPositiveDialogShow.value,
onQuit = { isPositiveDialogShow.value = false },
isVisible = isPositiveDialogShow,
onQuit = { isSetPositionDialogShow(false) },
onActionClicked = {
onApproveClicked(data.id)
onActionEnd()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,10 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.material3.IconButton
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
Expand All @@ -30,10 +31,12 @@ import java.time.LocalDate

@Composable
fun ActivityDetailSettingRoute(
viewModel: StudentActivityViewModel = hiltViewModel(),
onCloseClicked: () -> Unit,
onApplyClicked: () -> Unit,
viewModel: StudentActivityViewModel = hiltViewModel()
onApplyClicked: () -> Unit
) {
val creditList by rememberSaveable { mutableStateOf(listOf("1점", "2점")) }

ActivityDetailSettingScreen(
onCloseClicked = onCloseClicked,
onApplyClicked = { activityDate, credit ->
Expand All @@ -42,34 +45,35 @@ fun ActivityDetailSettingRoute(
onApplyClicked()
},
savedCreditPoint = viewModel.credit.intValue,
savedActivityDate = viewModel.activityDate.value
savedActivityDate = viewModel.activityDate.value,
creditList = creditList
)
}

@Composable
fun ActivityDetailSettingScreen(
modifier: Modifier = Modifier,
onCloseClicked: () -> Unit,
onApplyClicked: (LocalDate, Int) -> Unit,
savedCreditPoint: Int,
savedActivityDate: LocalDate?
savedActivityDate: LocalDate?,
creditList: List<String>
) {
val creditList = listOf("1점", "2점")

val creditPointForShow = remember { mutableStateOf("${savedCreditPoint}") }
val creditPoint = remember { mutableIntStateOf(if (creditPointForShow.value == "1점") 1 else if (creditPointForShow.value == "2점") 2 else 0) }
val activityDateForShow = remember { mutableStateOf(savedActivityDate?.toKoreanFormat() ?: "") }
val activityDate = remember { mutableStateOf(savedActivityDate) }
val (isCreditPointForShow, isSetCreditPointForShow) = rememberSaveable { mutableStateOf("${savedCreditPoint}") }
val creditPoint by rememberSaveable { mutableIntStateOf(if (isCreditPointForShow == "1점") 1 else if (isCreditPointForShow == "2점") 2 else 0) }
val (isActivityDateForShow, isSetActivityDateForShow) = rememberSaveable { mutableStateOf(savedActivityDate?.toKoreanFormat() ?: "") }
val (isActivityDate, isSetActivityDate) = rememberSaveable { mutableStateOf(savedActivityDate) }

BitgoeulAndroidTheme { colors, typography ->
Column(
modifier = Modifier
modifier = modifier
.fillMaxSize()
.background(colors.WHITE)
.padding(horizontal = 28.dp)
) {
Spacer(modifier = Modifier.height(24.dp))
Spacer(modifier = modifier.height(24.dp))
Row(
modifier = Modifier.fillMaxWidth(),
modifier = modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically
) {
Expand All @@ -83,53 +87,50 @@ fun ActivityDetailSettingScreen(
content = { CloseIcon() }
)
}
Spacer(modifier = Modifier.height(28.dp))
Spacer(modifier = modifier.height(28.dp))
Text(
text = "활동 날짜",
style = typography.bodyLarge,
color = colors.BLACK
)
Spacer(modifier = Modifier.height(8.dp))
Spacer(modifier = modifier.height(8.dp))
PickerTextField(
modifier = Modifier.fillMaxWidth(),
text = activityDateForShow.value.ifEmpty { "활동 날짜 선택" },
modifier = modifier.fillMaxWidth(),
text = isActivityDateForShow.ifEmpty { "활동 날짜 선택" },
list = listOf(),
selectedItem = activityDateForShow.value,
onItemChange = {
if (activityDateForShow.value != it) activityDateForShow.value = it else activityDateForShow.value = ""
},
selectedItem = isActivityDateForShow,
onItemChange = { if (isActivityDateForShow != it) isSetActivityDateForShow(it) else isSetActivityDateForShow("") },
isDatePicker = true,
onDatePickerQuit = {
if (it != null) {
activityDateForShow.value = it.toKoreanFormat()
activityDate.value = it
isSetActivityDateForShow(it.toKoreanFormat())
isSetActivityDate(it)
}
}
)
Spacer(modifier = Modifier.height(28.dp))
Spacer(modifier = modifier.height(28.dp))
Text(
text = "수여 학점",
style = typography.bodyLarge,
color = colors.BLACK
)
Spacer(modifier = Modifier.height(8.dp))
Spacer(modifier = modifier.height(8.dp))
PickerTextField(
modifier = Modifier.fillMaxWidth(),
text = creditPointForShow.value.ifEmpty { "수여 학점 선택" },
modifier = modifier.fillMaxWidth(),
text = isCreditPointForShow.ifEmpty { "수여 학점 선택" },
list = creditList,
selectedItem = creditPointForShow.value,
onItemChange = {
if (creditPointForShow.value != it) creditPointForShow.value = it else creditPointForShow.value = ""
}
selectedItem = isCreditPointForShow,
onItemChange = { if (isCreditPointForShow != it) isSetCreditPointForShow(it) else isSetCreditPointForShow("") }
)
Spacer(modifier = Modifier.weight(1f))
Spacer(modifier = modifier.weight(1f))
BitgoeulButton(
modifier = Modifier.fillMaxWidth(),
modifier = modifier
.fillMaxWidth()
.padding(bottom = 14.dp),
text = "적용하기"
) {
activityDate.value?.let { onApplyClicked(it, creditPoint.value) }
isActivityDate?.let { onApplyClicked(it, creditPoint) }
}
Spacer(modifier = Modifier.height(14.dp))
}
}
}
Expand All @@ -141,6 +142,7 @@ fun ActivityDetailSettingScreenPre() {
onCloseClicked = {},
onApplyClicked = {_, _ ->},
savedActivityDate = LocalDate.now(),
savedCreditPoint = 0
savedCreditPoint = 0,
creditList = listOf()
)
}
Loading

0 comments on commit 378ef50

Please sign in to comment.