From 5afce01a67b674321d4e0f52c31790512c323155 Mon Sep 17 00:00:00 2001 From: jinukeu Date: Fri, 9 Feb 2024 23:28:45 +0900 Subject: [PATCH 1/3] =?UTF-8?q?fix/#131:=20OpenLecture=20-=20=EA=B0=9C?= =?UTF-8?q?=EC=84=A4=ED=95=99=EA=B3=BC=20=ED=95=84=ED=84=B0=EB=A7=81=20rac?= =?UTF-8?q?e=20condition=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../openlecture/OpenLectureViewModel.kt | 52 ++++++++++--------- 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/feature/timetable/src/main/java/com/suwiki/feature/timetable/openlecture/OpenLectureViewModel.kt b/feature/timetable/src/main/java/com/suwiki/feature/timetable/openlecture/OpenLectureViewModel.kt index 68697d52..2f6ac26a 100644 --- a/feature/timetable/src/main/java/com/suwiki/feature/timetable/openlecture/OpenLectureViewModel.kt +++ b/feature/timetable/src/main/java/com/suwiki/feature/timetable/openlecture/OpenLectureViewModel.kt @@ -18,6 +18,7 @@ import kotlinx.coroutines.sync.withLock import org.orbitmvi.orbit.Container import org.orbitmvi.orbit.ContainerHost import org.orbitmvi.orbit.annotation.OrbitExperimental +import org.orbitmvi.orbit.syntax.simple.SimpleSyntax import org.orbitmvi.orbit.syntax.simple.blockingIntent import org.orbitmvi.orbit.syntax.simple.intent import org.orbitmvi.orbit.syntax.simple.postSideEffect @@ -52,6 +53,7 @@ class OpenLectureViewModel @Inject constructor( OpenLectureSideEffect.NavigateCellEditor(openLecture.toCellEditorArgument()), ) } + fun navigateAddCustomCell() = intent { postSideEffect(OpenLectureSideEffect.NavigateAddCustomTimetableCell) } fun insertTimetable() = intent { @@ -128,24 +130,33 @@ class OpenLectureViewModel @Inject constructor( } fun updateSchoolLevelPosition(schoolLevel: SchoolLevel) = intent { + reduce { + state.copy( + schoolLevel = schoolLevel, + ) + } + getOpenLectureList( - schoolLevel = schoolLevel, needClear = true, ) } fun updateSelectedOpenMajor(openMajor: String) = intent { if (openMajor == state.selectedOpenMajor) return@intent + + reduce { + state.copy( + selectedOpenMajor = openMajor, + ) + } + getOpenLectureList( - majorType = openMajor, needClear = true, ) } fun getOpenLectureList( search: String = searchQuery, - schoolLevel: SchoolLevel = currentState.schoolLevel, - majorType: String = currentState.selectedOpenMajor, needClear: Boolean, ) = intent { mutex.withLock { @@ -165,13 +176,11 @@ class OpenLectureViewModel @Inject constructor( GetOpenLectureListUseCase.Param( cursorId = cursorId, keyword = search, - major = if (majorType == "전체") null else majorType, - grade = schoolLevel.query, + major = if (currentState.selectedOpenMajor == "전체") null else currentState.selectedOpenMajor, + grade = currentState.schoolLevel.query, ), ).onSuccess { newData -> handleGetOpenLectureListSuccess( - schoolLevel = schoolLevel, - majorType = majorType, currentList = currentList, newData = newData, ) @@ -186,26 +195,21 @@ class OpenLectureViewModel @Inject constructor( } } - private fun handleGetOpenLectureListSuccess( - schoolLevel: SchoolLevel, - majorType: String, + private suspend fun SimpleSyntax.handleGetOpenLectureListSuccess( currentList: List, newData: OpenLectureData, - ) = intent { - reduce { - isLast = newData.isLast - cursorId = newData.content.lastOrNull()?.id ?: 0L - state.copy( - schoolLevel = schoolLevel, - selectedOpenMajor = majorType, - openLectureList = currentList - .plus(newData.content) - .distinctBy { it.id } - .toPersistentList(), - ) - } + ) = reduce { + isLast = newData.isLast + cursorId = newData.content.lastOrNull()?.id ?: 0L + state.copy( + openLectureList = currentList + .plus(newData.content) + .distinctBy { it.id } + .toPersistentList(), + ) } + fun showGradeBottomSheet() = intent { reduce { state.copy(showSchoolLevelBottomSheet = true) } } fun hideGradeBottomSheet() = intent { reduce { state.copy(showSchoolLevelBottomSheet = false) } } fun popBackStack() = intent { postSideEffect(OpenLectureSideEffect.PopBackStack) } From e523e7ad123fecfe7472bafdcb77221707acf855 Mon Sep 17 00:00:00 2001 From: jinukeu Date: Fri, 9 Feb 2024 23:35:19 +0900 Subject: [PATCH 2/3] =?UTF-8?q?fix/#131:=20LectureEvaluation=20-=20?= =?UTF-8?q?=EA=B0=9C=EC=84=A4=ED=95=99=EA=B3=BC=20=ED=95=84=ED=84=B0?= =?UTF-8?q?=EB=A7=81=20race=20condition=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LectureEvaluationViewModel.kt | 52 ++++++++++--------- 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/feature/lectureevaluation/viewerreporter/src/main/java/com/suwiki/feature/lectureevaluation/viewerreporter/LectureEvaluationViewModel.kt b/feature/lectureevaluation/viewerreporter/src/main/java/com/suwiki/feature/lectureevaluation/viewerreporter/LectureEvaluationViewModel.kt index a2f74d76..ad6388dc 100644 --- a/feature/lectureevaluation/viewerreporter/src/main/java/com/suwiki/feature/lectureevaluation/viewerreporter/LectureEvaluationViewModel.kt +++ b/feature/lectureevaluation/viewerreporter/src/main/java/com/suwiki/feature/lectureevaluation/viewerreporter/LectureEvaluationViewModel.kt @@ -14,6 +14,7 @@ import kotlinx.coroutines.sync.withLock import org.orbitmvi.orbit.Container import org.orbitmvi.orbit.ContainerHost import org.orbitmvi.orbit.annotation.OrbitExperimental +import org.orbitmvi.orbit.syntax.simple.SimpleSyntax import org.orbitmvi.orbit.syntax.simple.blockingIntent import org.orbitmvi.orbit.syntax.simple.intent import org.orbitmvi.orbit.syntax.simple.postSideEffect @@ -51,15 +52,27 @@ class LectureEvaluationViewModel @Inject constructor( fun updateSelectedOpenMajor(openMajor: String) = intent { if (openMajor == state.selectedOpenMajor) return@intent + + reduce { + state.copy( + selectedOpenMajor = openMajor, + ) + } + getLectureEvaluationList( - majorType = openMajor, needClear = true, ) } - fun updateAlignItem(position: Int) { + fun updateAlignItem(position: Int) = intent { + + reduce { + state.copy( + selectedAlignPosition = position, + ) + } + getLectureEvaluationList( - alignPosition = position, needClear = true, ) } @@ -81,8 +94,6 @@ class LectureEvaluationViewModel @Inject constructor( fun getLectureEvaluationList( search: String = searchQuery, - alignPosition: Int = currentState.selectedAlignPosition, - majorType: String = currentState.selectedOpenMajor, needClear: Boolean, ) = intent { mutex.withLock { @@ -97,14 +108,12 @@ class LectureEvaluationViewModel @Inject constructor( getLectureEvaluationListUseCase( RetrieveLectureEvaluationAverageListUseCase.Param( search = search, - option = LectureAlign.entries[alignPosition].query, + option = LectureAlign.entries[currentState.selectedAlignPosition].query, page = page, - majorType = majorType, + majorType = currentState.selectedOpenMajor, ), ).onSuccess { newList -> handleGetLectureEvaluationListSuccess( - alignPosition = alignPosition, - majorType = majorType, currentList = currentList, newList = newList, ) @@ -119,25 +128,20 @@ class LectureEvaluationViewModel @Inject constructor( } } - private fun handleGetLectureEvaluationListSuccess( - alignPosition: Int, - majorType: String, + private suspend fun SimpleSyntax.handleGetLectureEvaluationListSuccess( currentList: List, newList: List, - ) = intent { - reduce { - page++ - state.copy( - selectedAlignPosition = alignPosition, - selectedOpenMajor = majorType, - lectureEvaluationList = currentList - .plus(newList) - .distinctBy { it?.id } - .toPersistentList(), - ) - } + ) = reduce { + page++ + state.copy( + lectureEvaluationList = currentList + .plus(newList) + .distinctBy { it?.id } + .toPersistentList(), + ) } + private suspend fun checkLoggedIn() { isLoggedIn = getUserInfoUseCase().catch { }.lastOrNull()?.isLoggedIn == true } From 111469ce620244c6e639f7595a250b98ee7392d0 Mon Sep 17 00:00:00 2001 From: jinukeu Date: Fri, 9 Feb 2024 23:36:34 +0900 Subject: [PATCH 3/3] chore/#131: ktlint --- .../viewerreporter/LectureEvaluationViewModel.kt | 2 -- .../feature/timetable/openlecture/OpenLectureViewModel.kt | 1 - 2 files changed, 3 deletions(-) diff --git a/feature/lectureevaluation/viewerreporter/src/main/java/com/suwiki/feature/lectureevaluation/viewerreporter/LectureEvaluationViewModel.kt b/feature/lectureevaluation/viewerreporter/src/main/java/com/suwiki/feature/lectureevaluation/viewerreporter/LectureEvaluationViewModel.kt index ad6388dc..8e2be776 100644 --- a/feature/lectureevaluation/viewerreporter/src/main/java/com/suwiki/feature/lectureevaluation/viewerreporter/LectureEvaluationViewModel.kt +++ b/feature/lectureevaluation/viewerreporter/src/main/java/com/suwiki/feature/lectureevaluation/viewerreporter/LectureEvaluationViewModel.kt @@ -65,7 +65,6 @@ class LectureEvaluationViewModel @Inject constructor( } fun updateAlignItem(position: Int) = intent { - reduce { state.copy( selectedAlignPosition = position, @@ -141,7 +140,6 @@ class LectureEvaluationViewModel @Inject constructor( ) } - private suspend fun checkLoggedIn() { isLoggedIn = getUserInfoUseCase().catch { }.lastOrNull()?.isLoggedIn == true } diff --git a/feature/timetable/src/main/java/com/suwiki/feature/timetable/openlecture/OpenLectureViewModel.kt b/feature/timetable/src/main/java/com/suwiki/feature/timetable/openlecture/OpenLectureViewModel.kt index 2f6ac26a..3a4989c9 100644 --- a/feature/timetable/src/main/java/com/suwiki/feature/timetable/openlecture/OpenLectureViewModel.kt +++ b/feature/timetable/src/main/java/com/suwiki/feature/timetable/openlecture/OpenLectureViewModel.kt @@ -209,7 +209,6 @@ class OpenLectureViewModel @Inject constructor( ) } - fun showGradeBottomSheet() = intent { reduce { state.copy(showSchoolLevelBottomSheet = true) } } fun hideGradeBottomSheet() = intent { reduce { state.copy(showSchoolLevelBottomSheet = false) } } fun popBackStack() = intent { postSideEffect(OpenLectureSideEffect.PopBackStack) }