Skip to content

Commit

Permalink
💄 :: Write the logic student search
Browse files Browse the repository at this point in the history
  • Loading branch information
diejdkll committed Feb 12, 2024
1 parent a1f0214 commit 7282ab1
Show file tree
Hide file tree
Showing 2 changed files with 108 additions and 20 deletions.
60 changes: 46 additions & 14 deletions feature/main/src/main/java/com/goms/main/StudentManagementScreen.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.goms.main

import android.util.Log
import androidx.compose.foundation.background
import androidx.compose.foundation.gestures.detectTapGestures
import androidx.compose.foundation.layout.Column
Expand Down Expand Up @@ -38,8 +39,10 @@ import com.goms.main.component.StudentManagementList
import com.goms.main.component.StudentManagementText
import com.goms.main.viewmodel.GetStudentListUiState
import com.goms.main.viewmodel.MainViewModelProvider
import com.goms.model.enum.Class
import com.goms.main.viewmodel.StudentSearchUiState
import com.goms.model.enum.Gender
import com.goms.model.enum.Grade
import com.goms.model.enum.Major
import com.goms.model.enum.Status
import com.goms.model.request.council.AuthorityRequest
import java.util.UUID
Expand All @@ -54,11 +57,15 @@ fun StudentManagementRoute(
val status by viewModel.status.collectAsStateWithLifecycle()
val filterStatus by viewModel.filterStatus.collectAsStateWithLifecycle()
val filterGrade by viewModel.filterGrade.collectAsStateWithLifecycle()
val filterClass by viewModel.filterClass.collectAsStateWithLifecycle()
val filterGender by viewModel.filterGender.collectAsStateWithLifecycle()
val filterMajor by viewModel.filterMajor.collectAsStateWithLifecycle()
val getStudentListUiState by viewModel.getStudentListUiState.collectAsStateWithLifecycle()
val changeAuthorityUiState by viewModel.changeAuthorityUiState.collectAsStateWithLifecycle()
val setBlackListUiState by viewModel.setBlackListUiState.collectAsStateWithLifecycle()
val deleteBlackListUiState by viewModel.deleteBlackListUiState.collectAsStateWithLifecycle()
val studentSearchUiState by viewModel.studentSearchUiState.collectAsStateWithLifecycle()

Log.d("testt", studentSearchUiState.toString())

when (changeAuthorityUiState) {
is Result.Success -> {
Expand All @@ -81,16 +88,30 @@ fun StudentManagementRoute(
status = status,
filterStatus = filterStatus,
filterGrade = filterGrade,
filterClass = filterClass,
filterGender = filterGender,
filterMajor = filterMajor,
onStudentSearchChange = viewModel::onStudentSearchChange,
onStatusChange = viewModel::onStatusChange,
onFilterStatusChange = viewModel::onFilterStatusChange,
onFilterGradeChange = viewModel::onFilterGradeChange,
onFilterClassChange = viewModel::onFilterClassChange,
onFilterGenderChange = viewModel::onFilterGenderChange,
onFilterMajorChange = viewModel::onFilterMajorChange,
getStudentListUiState = getStudentListUiState,
studentSearchUiState = studentSearchUiState,
onBackClick = onBackClick,
studentListCallBack = { viewModel.getStudentList() },
studentSearchCallBack = {},
studentSearchCallBack = { name ->
viewModel.studentSearch(
grade = if (filterGrade.isNotBlank()) Grade.values().find { it.value == filterGrade }!!.enum else null,
gender = if (filterGender.isNotBlank()) Gender.values().find { it.value == filterGender }!!.name else null,
major = if (filterMajor.isNotBlank()) Major.values().find { it.value == filterMajor }!!.name else null,
name = name.ifBlank { null },
isBlackList = if (filterStatus.isBlank()) null
else filterStatus == Status.BLACK_LIST.value,
authority = if (filterStatus.isBlank() || filterStatus == Status.BLACK_LIST.value) null
else Status.values().find { it.value == filterStatus }!!.name
)
},
changeAuthorityCallBack = { accountIdx, authority ->
viewModel.changeAuthority(
body = AuthorityRequest(
Expand All @@ -113,13 +134,16 @@ fun StudentManagementScreen(
status: String,
filterStatus: String,
filterGrade: String,
filterClass: String,
filterGender: String,
filterMajor: String,
onStudentSearchChange: (String) -> Unit,
onStatusChange: (String) -> Unit,
onFilterStatusChange: (String) -> Unit,
onFilterGradeChange: (String) -> Unit,
onFilterClassChange: (String) -> Unit,
onFilterGenderChange: (String) -> Unit,
onFilterMajorChange: (String) -> Unit,
getStudentListUiState: GetStudentListUiState,
studentSearchUiState: StudentSearchUiState,
onBackClick: () -> Unit,
studentListCallBack: () -> Unit,
studentSearchCallBack: (String) -> Unit,
Expand Down Expand Up @@ -179,6 +203,7 @@ fun StudentManagementScreen(
Spacer(modifier = Modifier.height(8.dp))
StudentManagementList(
getStudentListUiState = getStudentListUiState,
studentSearchUiState = studentSearchUiState,
onBottomSheetOpenClick = { onFilterBottomSheetOpenClick = true },
onClick = { accountIdx, authority ->
onStatusBottomSheetOpenClick = true
Expand Down Expand Up @@ -230,17 +255,24 @@ fun StudentManagementScreen(
),
selected2 = filterGrade,
itemChange2 = onFilterGradeChange,
subTitle3 = "",
subTitle3 = "성별",
list3 = listOf(
Class.FIRST.value,
Class.SECOND.value,
Class.THIRD.value,
Class.FOURTH.value
Gender.MAN.value,
Gender.WOMAN.value
),
selected3 = filterGender,
itemChange3 = onFilterGenderChange,
subTitle4 = "학과",
list4 = listOf(
Major.SW_DEVELOP.value,
Major.SMART_IOT.value,
Major.AI.value
),
selected3 = filterClass,
itemChange3 = onFilterClassChange,
selected4 = filterMajor,
itemChange4 = onFilterMajorChange,
closeSheet = {
onFilterBottomSheetOpenClick = false
studentSearchCallBack(studentSearch)
}
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,25 +28,81 @@ import com.goms.design_system.R
import com.goms.design_system.icon.WriteIcon
import com.goms.design_system.theme.GomsTheme
import com.goms.main.viewmodel.GetStudentListUiState
import com.goms.main.viewmodel.StudentSearchUiState
import com.goms.model.enum.Authority
import com.goms.model.enum.Status
import com.goms.model.response.council.StudentResponse
import com.goms.model.response.outing.OutingResponse
import com.goms.ui.toText
import java.util.UUID

@Composable
fun StudentManagementList(
modifier: Modifier = Modifier,
getStudentListUiState: GetStudentListUiState,
studentSearchUiState: StudentSearchUiState,
onBottomSheetOpenClick: () -> Unit,
onClick: (UUID, String) -> Unit
) {
when (getStudentListUiState) {
GetStudentListUiState.Loading -> Unit
is GetStudentListUiState.Error -> Unit
is GetStudentListUiState.Success -> {
val list = getStudentListUiState.getStudentResponse
when (studentSearchUiState) {
StudentSearchUiState.Loading -> Unit
is StudentSearchUiState.Error -> Unit
StudentSearchUiState.QueryEmpty -> {
when (getStudentListUiState) {
GetStudentListUiState.Loading -> Unit
is GetStudentListUiState.Error -> Unit
is GetStudentListUiState.Success -> {
val list = getStudentListUiState.getStudentResponse

GomsTheme { colors, typography ->
Column(modifier = modifier.fillMaxWidth()) {
Row(
modifier = modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically
) {
SearchResultText(modifier = Modifier)
FilterText(onFilterTextClick = onBottomSheetOpenClick)
}
LazyColumn(
modifier = Modifier
.fillMaxWidth()
.heightIn(max = 10000.dp)
) {
items(list.size) {
StudentManagementListItem(
modifier = Modifier.fillMaxWidth(),
list = list[it],
onClick = onClick
)
Divider(
modifier = Modifier.fillMaxWidth(),
color = colors.WHITE.copy(0.15f)
)
}
}
}
}
}
}
}
StudentSearchUiState.Empty -> {
Column(
modifier = Modifier.fillMaxWidth(),
verticalArrangement = Arrangement.spacedBy(60.dp)
) {
Row(
modifier = modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically
) {
SearchResultText(modifier = Modifier)
FilterText(onFilterTextClick = onBottomSheetOpenClick)
}
SearchEmptyText()
}
}
is StudentSearchUiState.Success -> {
val list = studentSearchUiState.studentSearchResponse

GomsTheme { colors, typography ->
Column(modifier = modifier.fillMaxWidth()) {
Expand Down

0 comments on commit 7282ab1

Please sign in to comment.