From 64b61d272301f160e4a6b006f9364187883ec0aa Mon Sep 17 00:00:00 2001 From: Yuyu1115 <105599462+Yuyu-1115@users.noreply.github.com> Date: Thu, 27 Aug 2026 23:11:53 +0800 Subject: [PATCH 1/2] refactor: align course planning terminology --- ...SearchScreen.kt => CourseCatalogScreen.kt} | 8 +++---- .../mpc/presentation/CourseDetailsScreen.kt | 4 ++-- .../mpc/presentation/CoursePlanningScreen.kt | 16 +++++++------- iosApp/iosApp/ContentView.swift | 4 ++-- ...archView.swift => CourseCatalogView.swift} | 4 ++-- ...wift => CoursePlanningTimetableView.swift} | 4 ++-- ...ionView.swift => CoursePlanningView.swift} | 22 +++++++++---------- ...w.swift => CourseCatalogComposeView.swift} | 4 ++-- ... CoursePlanningTimetableComposeView.swift} | 4 ++-- ...ionViewModel.kt => CoursePlanViewModel.kt} | 2 +- .../CoursePlanningTimetableFailureView.kt} | 4 ++-- .../CoursePlanningTimetableLoadingView.kt} | 4 ++-- .../CoursePlanningTimetableSuccessView.kt} | 8 +++---- .../CoursePlanningTimetableView.kt} | 10 ++++----- .../CourseSearchResultFailureView.kt | 2 +- .../CourseSearchResultLoadingView.kt | 2 +- .../CourseSearchResultSuccessView.kt | 4 ++-- .../CourseSearchResultView.kt | 2 +- .../components/CourseCard.kt | 2 +- .../CourseDraftModelTest.kt | 2 +- .../iosMain/kotlin/org/mpc/IosSharedHost.kt | 12 +++++----- ...Binding.kt => CourseCatalogViewBinding.kt} | 8 +++---- ... => CoursePlanningTimetableViewBinding.kt} | 10 ++++----- 23 files changed, 71 insertions(+), 71 deletions(-) rename androidApp/src/main/kotlin/org/mpc/presentation/{CourseSelectionSearchScreen.kt => CourseCatalogScreen.kt} (93%) rename iosApp/iosApp/presentation/{CourseSelectionSearchView.swift => CourseCatalogView.swift} (90%) rename iosApp/iosApp/presentation/{CourseSelectionTimetableView.swift => CoursePlanningTimetableView.swift} (70%) rename iosApp/iosApp/presentation/{CourseSelectionView.swift => CoursePlanningView.swift} (66%) rename iosApp/iosApp/presentation/composeView/{CourseSelectionSearchComposeView.swift => CourseCatalogComposeView.swift} (76%) rename iosApp/iosApp/presentation/composeView/{CourseSelectionTimetableComposeView.swift => CoursePlanningTimetableComposeView.swift} (70%) rename shared/src/commonMain/kotlin/org/mpc/presentation/viewModel/{CourseSelectionViewModel.kt => CoursePlanViewModel.kt} (98%) rename shared/src/commonMain/kotlin/org/mpc/presentation/views/{courseSelection/CourseSelectionTimetableFailureView.kt => coursePlanning/CoursePlanningTimetableFailureView.kt} (82%) rename shared/src/commonMain/kotlin/org/mpc/presentation/views/{courseSelection/CourseSelectionTimetableLoadingView.kt => coursePlanning/CoursePlanningTimetableLoadingView.kt} (75%) rename shared/src/commonMain/kotlin/org/mpc/presentation/views/{courseSelection/CourseSelectionTimetableSuccessView.kt => coursePlanning/CoursePlanningTimetableSuccessView.kt} (98%) rename shared/src/commonMain/kotlin/org/mpc/presentation/views/{courseSelection/CourseSelectionTimeTableView.kt => coursePlanning/CoursePlanningTimetableView.kt} (64%) rename shared/src/commonMain/kotlin/org/mpc/presentation/views/{courseSelection => coursePlanning}/CourseSearchResultFailureView.kt (90%) rename shared/src/commonMain/kotlin/org/mpc/presentation/views/{courseSelection => coursePlanning}/CourseSearchResultLoadingView.kt (88%) rename shared/src/commonMain/kotlin/org/mpc/presentation/views/{courseSelection => coursePlanning}/CourseSearchResultSuccessView.kt (91%) rename shared/src/commonMain/kotlin/org/mpc/presentation/views/{courseSelection => coursePlanning}/CourseSearchResultView.kt (95%) rename shared/src/commonMain/kotlin/org/mpc/presentation/views/{courseSelection => coursePlanning}/components/CourseCard.kt (99%) rename shared/src/commonTest/kotlin/org/mpc/presentation/model/{courseSelection => coursePlanning}/CourseDraftModelTest.kt (98%) rename shared/src/iosMain/kotlin/org/mpc/presentation/{CourseSearchResultViewBinding.kt => CourseCatalogViewBinding.kt} (87%) rename shared/src/iosMain/kotlin/org/mpc/presentation/{CourseSelectionTimetableViewBinding.kt => CoursePlanningTimetableViewBinding.kt} (69%) diff --git a/androidApp/src/main/kotlin/org/mpc/presentation/CourseSelectionSearchScreen.kt b/androidApp/src/main/kotlin/org/mpc/presentation/CourseCatalogScreen.kt similarity index 93% rename from androidApp/src/main/kotlin/org/mpc/presentation/CourseSelectionSearchScreen.kt rename to androidApp/src/main/kotlin/org/mpc/presentation/CourseCatalogScreen.kt index bfaaf99..9b49d8a 100644 --- a/androidApp/src/main/kotlin/org/mpc/presentation/CourseSelectionSearchScreen.kt +++ b/androidApp/src/main/kotlin/org/mpc/presentation/CourseCatalogScreen.kt @@ -19,17 +19,17 @@ import dev.zacsweers.metrox.viewmodel.metroViewModel import org.mpc.domain.model.CourseSummary import org.mpc.presentation.state.CoursePlanUiState import org.mpc.presentation.viewModel.CourseSearchViewModel -import org.mpc.presentation.viewModel.CourseSelectionViewModel -import org.mpc.presentation.views.courseSelection.CourseSearchResultView +import org.mpc.presentation.viewModel.CoursePlanViewModel +import org.mpc.presentation.views.coursePlanning.CourseSearchResultView import kotlin.collections.emptySet @OptIn(ExperimentalMaterial3Api::class) @Composable -fun CourseSelectionSearchScreen( +fun CourseCatalogScreen( modifier: Modifier, onCourseClick: (semester: String, course: CourseSummary) -> Unit = { _, _ -> }, searchViewModel: CourseSearchViewModel = metroViewModel(), - planViewModel: CourseSelectionViewModel = metroViewModel(), + planViewModel: CoursePlanViewModel = metroViewModel(), ) { val searchUiState by searchViewModel.uiState.collectAsStateWithLifecycle() val planUiState by planViewModel.uiState.collectAsStateWithLifecycle() diff --git a/androidApp/src/main/kotlin/org/mpc/presentation/CourseDetailsScreen.kt b/androidApp/src/main/kotlin/org/mpc/presentation/CourseDetailsScreen.kt index 109139b..9b59d91 100644 --- a/androidApp/src/main/kotlin/org/mpc/presentation/CourseDetailsScreen.kt +++ b/androidApp/src/main/kotlin/org/mpc/presentation/CourseDetailsScreen.kt @@ -21,7 +21,7 @@ import org.mpc.domain.model.CourseSummary import org.mpc.domain.repository.CourseRepository import org.mpc.navigation.CourseDetailsRoute import org.mpc.presentation.state.CoursePlanUiState -import org.mpc.presentation.viewModel.CourseSelectionViewModel +import org.mpc.presentation.viewModel.CoursePlanViewModel import org.mpc.presentation.views.courseDetails.CourseDetailsActions import org.mpc.presentation.views.courseDetails.CourseDetailsUiState import org.mpc.presentation.views.courseDetails.CourseDetailsView @@ -32,7 +32,7 @@ fun CourseDetailsScreen( courseRepository: CourseRepository, onClose: () -> Unit, modifier: Modifier = Modifier, - planViewModel: CourseSelectionViewModel = metroViewModel(), + planViewModel: CoursePlanViewModel = metroViewModel(), ) { var loadState by remember(route) { mutableStateOf(CourseDetailsLoadState.Loading) } var retryRequest by remember(route) { mutableIntStateOf(0) } diff --git a/androidApp/src/main/kotlin/org/mpc/presentation/CoursePlanningScreen.kt b/androidApp/src/main/kotlin/org/mpc/presentation/CoursePlanningScreen.kt index 104f3cd..acccb5a 100644 --- a/androidApp/src/main/kotlin/org/mpc/presentation/CoursePlanningScreen.kt +++ b/androidApp/src/main/kotlin/org/mpc/presentation/CoursePlanningScreen.kt @@ -26,14 +26,14 @@ import androidx.window.core.layout.WindowSizeClass.Companion.WIDTH_DP_MEDIUM_LOW import dev.zacsweers.metrox.viewmodel.metroViewModel import org.mpc.domain.model.CourseSummary import org.mpc.presentation.state.CoursePlanUiState -import org.mpc.presentation.viewModel.CourseSelectionViewModel -import org.mpc.presentation.views.courseSelection.CourseSelectionTimetableView +import org.mpc.presentation.viewModel.CoursePlanViewModel +import org.mpc.presentation.views.coursePlanning.CoursePlanningTimetableView @Composable fun CoursePlanningScreen( modifier: Modifier = Modifier, onCourseClick: (semester: String, course: CourseSummary) -> Unit = { _, _ -> }, - planViewModel: CourseSelectionViewModel = metroViewModel(), + planViewModel: CoursePlanViewModel = metroViewModel(), ) { val planUiState by planViewModel.uiState.collectAsStateWithLifecycle() val stateHolder = rememberSaveableStateHolder() @@ -45,7 +45,7 @@ fun CoursePlanningScreen( if (isExpanded) { Row(modifier = modifier) { stateHolder.SaveableStateProvider(CoursePlanningView.CATALOG) { - CourseSelectionSearchScreen( + CourseCatalogScreen( modifier = Modifier .weight(CATALOG_WEIGHT) @@ -56,7 +56,7 @@ fun CoursePlanningScreen( } VerticalDivider() stateHolder.SaveableStateProvider(CoursePlanningView.TIMETABLE) { - CourseSelectionTimetableView( + CoursePlanningTimetableView( uiState = planUiState, modifier = Modifier @@ -80,7 +80,7 @@ fun CoursePlanningScreen( private fun CompactCoursePlanningScreen( modifier: Modifier, stateHolder: SaveableStateHolder, - planViewModel: CourseSelectionViewModel, + planViewModel: CoursePlanViewModel, planUiState: CoursePlanUiState, onCourseClick: (semester: String, course: CourseSummary) -> Unit, ) { @@ -111,7 +111,7 @@ private fun CompactCoursePlanningScreen( stateHolder.SaveableStateProvider(selectedView) { when (selectedView) { CoursePlanningView.CATALOG -> { - CourseSelectionSearchScreen( + CourseCatalogScreen( modifier = Modifier.fillMaxSize(), onCourseClick = onCourseClick, planViewModel = planViewModel, @@ -119,7 +119,7 @@ private fun CompactCoursePlanningScreen( } CoursePlanningView.TIMETABLE -> { - CourseSelectionTimetableView( + CoursePlanningTimetableView( uiState = planUiState, modifier = Modifier.fillMaxSize(), ) diff --git a/iosApp/iosApp/ContentView.swift b/iosApp/iosApp/ContentView.swift index b3288b3..bac479a 100644 --- a/iosApp/iosApp/ContentView.swift +++ b/iosApp/iosApp/ContentView.swift @@ -8,12 +8,12 @@ struct ContentView: View { TabView { Tab("選課", systemImage: "calendar") { NavigationStack { - CourseSelectionView(sharedHost: sharedHost) + CoursePlanningView(sharedHost: sharedHost) } } Tab("設定", systemImage: "gear") { NavigationStack { - CourseSelectionView(sharedHost: sharedHost) + CoursePlanningView(sharedHost: sharedHost) } } } diff --git a/iosApp/iosApp/presentation/CourseSelectionSearchView.swift b/iosApp/iosApp/presentation/CourseCatalogView.swift similarity index 90% rename from iosApp/iosApp/presentation/CourseSelectionSearchView.swift rename to iosApp/iosApp/presentation/CourseCatalogView.swift index a19ccbb..50c770e 100644 --- a/iosApp/iosApp/presentation/CourseSelectionSearchView.swift +++ b/iosApp/iosApp/presentation/CourseCatalogView.swift @@ -1,7 +1,7 @@ import SwiftUI import Shared -struct CourseSelectionSearchView: View { +struct CourseCatalogView: View { let sharedHost: IosSharedHost let planBridge: CoursePlanBridge @@ -11,7 +11,7 @@ struct CourseSelectionSearchView: View { @State private var bridge = CourseSearchBridge() var body: some View { - CourseSelectionSearchComposeView( + CourseCatalogComposeView( sharedHost: sharedHost, bridge: bridge, planBridge: planBridge diff --git a/iosApp/iosApp/presentation/CourseSelectionTimetableView.swift b/iosApp/iosApp/presentation/CoursePlanningTimetableView.swift similarity index 70% rename from iosApp/iosApp/presentation/CourseSelectionTimetableView.swift rename to iosApp/iosApp/presentation/CoursePlanningTimetableView.swift index 0c17b9b..47fb59a 100644 --- a/iosApp/iosApp/presentation/CourseSelectionTimetableView.swift +++ b/iosApp/iosApp/presentation/CoursePlanningTimetableView.swift @@ -1,12 +1,12 @@ import Shared import SwiftUI -struct CourseSelectionTimetableView: View { +struct CoursePlanningTimetableView: View { let sharedHost: IosSharedHost let planBridge: CoursePlanBridge var body: some View { - CourseSelectionTimetableComposeView( + CoursePlanningTimetableComposeView( sharedHost: sharedHost, planBridge: planBridge ) diff --git a/iosApp/iosApp/presentation/CourseSelectionView.swift b/iosApp/iosApp/presentation/CoursePlanningView.swift similarity index 66% rename from iosApp/iosApp/presentation/CourseSelectionView.swift rename to iosApp/iosApp/presentation/CoursePlanningView.swift index 4589e33..2fac08d 100644 --- a/iosApp/iosApp/presentation/CourseSelectionView.swift +++ b/iosApp/iosApp/presentation/CoursePlanningView.swift @@ -1,33 +1,33 @@ import Shared import SwiftUI -struct CourseSelectionView: View { +struct CoursePlanningView: View { let sharedHost: IosSharedHost enum Section { - case search + case catalog case timetable } - @State var selection: Section = .search + @State private var activeSection: Section = .catalog @State private var planBridge = CoursePlanBridge() var body: some View { Group { - switch selection { - case .search: - CourseSelectionSearchView( + switch activeSection { + case .catalog: + CourseCatalogView( sharedHost: sharedHost, planBridge: planBridge ) case .timetable: - CourseSelectionTimetableView( + CoursePlanningTimetableView( sharedHost: sharedHost, planBridge: planBridge ) } } - .navigationTitle(selection == .search ? "課程搜尋": "我的課表") + .navigationTitle(activeSection == .catalog ? "課程搜尋": "我的課表") .toolbar { ToolbarItem(placement: .topBarLeading) { Button("儲存") { @@ -37,12 +37,12 @@ struct CourseSelectionView: View { ToolbarItem(placement: .topBarTrailing) { Button { - selection = selection == .search + activeSection = activeSection == .catalog ? .timetable - : .search + : .catalog } label: { Image( - systemName: selection == .search + systemName: activeSection == .catalog ? "calendar" : "magnifyingglass" ) diff --git a/iosApp/iosApp/presentation/composeView/CourseSelectionSearchComposeView.swift b/iosApp/iosApp/presentation/composeView/CourseCatalogComposeView.swift similarity index 76% rename from iosApp/iosApp/presentation/composeView/CourseSelectionSearchComposeView.swift rename to iosApp/iosApp/presentation/composeView/CourseCatalogComposeView.swift index f876569..2ecf97f 100644 --- a/iosApp/iosApp/presentation/composeView/CourseSelectionSearchComposeView.swift +++ b/iosApp/iosApp/presentation/composeView/CourseCatalogComposeView.swift @@ -1,13 +1,13 @@ import SwiftUI import Shared -struct CourseSelectionSearchComposeView: UIViewControllerRepresentable { +struct CourseCatalogComposeView: UIViewControllerRepresentable { let sharedHost: IosSharedHost let bridge: CourseSearchBridge let planBridge: CoursePlanBridge func makeUIViewController(context: Context) -> some UIViewController { - sharedHost.courseSearchScreenController( + sharedHost.courseCatalogScreenController( bridge: bridge, planBridge: planBridge ) diff --git a/iosApp/iosApp/presentation/composeView/CourseSelectionTimetableComposeView.swift b/iosApp/iosApp/presentation/composeView/CoursePlanningTimetableComposeView.swift similarity index 70% rename from iosApp/iosApp/presentation/composeView/CourseSelectionTimetableComposeView.swift rename to iosApp/iosApp/presentation/composeView/CoursePlanningTimetableComposeView.swift index d850f03..8d3e576 100644 --- a/iosApp/iosApp/presentation/composeView/CourseSelectionTimetableComposeView.swift +++ b/iosApp/iosApp/presentation/composeView/CoursePlanningTimetableComposeView.swift @@ -1,12 +1,12 @@ import Shared import SwiftUI -struct CourseSelectionTimetableComposeView: UIViewControllerRepresentable { +struct CoursePlanningTimetableComposeView: UIViewControllerRepresentable { let sharedHost: IosSharedHost let planBridge: CoursePlanBridge func makeUIViewController(context: Context) -> some UIViewController { - sharedHost.courseSelectionTimetableScreenController( + sharedHost.coursePlanningTimetableScreenController( planBridge: planBridge ) } diff --git a/shared/src/commonMain/kotlin/org/mpc/presentation/viewModel/CourseSelectionViewModel.kt b/shared/src/commonMain/kotlin/org/mpc/presentation/viewModel/CoursePlanViewModel.kt similarity index 98% rename from shared/src/commonMain/kotlin/org/mpc/presentation/viewModel/CourseSelectionViewModel.kt rename to shared/src/commonMain/kotlin/org/mpc/presentation/viewModel/CoursePlanViewModel.kt index 14f8b54..0e0d67a 100644 --- a/shared/src/commonMain/kotlin/org/mpc/presentation/viewModel/CourseSelectionViewModel.kt +++ b/shared/src/commonMain/kotlin/org/mpc/presentation/viewModel/CoursePlanViewModel.kt @@ -24,7 +24,7 @@ import org.mpc.presentation.state.CoursePlanUiState scope = AppScope::class, binding = binding(), ) -class CourseSelectionViewModel( +class CoursePlanViewModel( private val coursePlanRepository: CoursePlanRepository, private val draftStore: CoursePlanDraftStore, ) : ViewModel() { diff --git a/shared/src/commonMain/kotlin/org/mpc/presentation/views/courseSelection/CourseSelectionTimetableFailureView.kt b/shared/src/commonMain/kotlin/org/mpc/presentation/views/coursePlanning/CoursePlanningTimetableFailureView.kt similarity index 82% rename from shared/src/commonMain/kotlin/org/mpc/presentation/views/courseSelection/CourseSelectionTimetableFailureView.kt rename to shared/src/commonMain/kotlin/org/mpc/presentation/views/coursePlanning/CoursePlanningTimetableFailureView.kt index 6ff9938..452a453 100644 --- a/shared/src/commonMain/kotlin/org/mpc/presentation/views/courseSelection/CourseSelectionTimetableFailureView.kt +++ b/shared/src/commonMain/kotlin/org/mpc/presentation/views/coursePlanning/CoursePlanningTimetableFailureView.kt @@ -1,4 +1,4 @@ -package org.mpc.presentation.views.courseSelection +package org.mpc.presentation.views.coursePlanning import androidx.compose.foundation.layout.Box import androidx.compose.material3.Text @@ -7,7 +7,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @Composable -fun CourseSelectionTimetableFailureView( +fun CoursePlanningTimetableFailureView( modifier: Modifier, cause: Throwable, ) { diff --git a/shared/src/commonMain/kotlin/org/mpc/presentation/views/courseSelection/CourseSelectionTimetableLoadingView.kt b/shared/src/commonMain/kotlin/org/mpc/presentation/views/coursePlanning/CoursePlanningTimetableLoadingView.kt similarity index 75% rename from shared/src/commonMain/kotlin/org/mpc/presentation/views/courseSelection/CourseSelectionTimetableLoadingView.kt rename to shared/src/commonMain/kotlin/org/mpc/presentation/views/coursePlanning/CoursePlanningTimetableLoadingView.kt index 01ebeac..38b09cf 100644 --- a/shared/src/commonMain/kotlin/org/mpc/presentation/views/courseSelection/CourseSelectionTimetableLoadingView.kt +++ b/shared/src/commonMain/kotlin/org/mpc/presentation/views/coursePlanning/CoursePlanningTimetableLoadingView.kt @@ -1,4 +1,4 @@ -package org.mpc.presentation.views.courseSelection +package org.mpc.presentation.views.coursePlanning import androidx.compose.foundation.layout.Box import androidx.compose.material3.Text @@ -7,7 +7,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @Composable -fun CourseSelectionTimetableLoadingView(modifier: Modifier) { +fun CoursePlanningTimetableLoadingView(modifier: Modifier) { Box( modifier = modifier, contentAlignment = Alignment.Center, diff --git a/shared/src/commonMain/kotlin/org/mpc/presentation/views/courseSelection/CourseSelectionTimetableSuccessView.kt b/shared/src/commonMain/kotlin/org/mpc/presentation/views/coursePlanning/CoursePlanningTimetableSuccessView.kt similarity index 98% rename from shared/src/commonMain/kotlin/org/mpc/presentation/views/courseSelection/CourseSelectionTimetableSuccessView.kt rename to shared/src/commonMain/kotlin/org/mpc/presentation/views/coursePlanning/CoursePlanningTimetableSuccessView.kt index b47d4b9..c7c5226 100644 --- a/shared/src/commonMain/kotlin/org/mpc/presentation/views/courseSelection/CourseSelectionTimetableSuccessView.kt +++ b/shared/src/commonMain/kotlin/org/mpc/presentation/views/coursePlanning/CoursePlanningTimetableSuccessView.kt @@ -1,4 +1,4 @@ -package org.mpc.presentation.views.courseSelection +package org.mpc.presentation.views.coursePlanning import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -41,7 +41,7 @@ import org.mpc.presentation.model.CourseTimetableBlock import org.mpc.presentation.model.toTimetableBlocks @Composable -fun CourseSelectionTimetableSuccessView( +fun CoursePlanningTimetableSuccessView( plan: CoursePlan, modifier: Modifier, ) { @@ -260,7 +260,7 @@ fun TimetableForegroundCell( @Preview @Composable -internal fun PreviewCourseSelectionTimetableSuccessView( +internal fun PreviewCoursePlanningTimetableSuccessView( plan: CoursePlan = CoursePlan( semester = "115-1", @@ -303,7 +303,7 @@ internal fun PreviewCourseSelectionTimetableSuccessView( }, modifier = Modifier.fillMaxSize(), ) { innerPadding -> - CourseSelectionTimetableSuccessView( + CoursePlanningTimetableSuccessView( plan = plan, modifier = Modifier diff --git a/shared/src/commonMain/kotlin/org/mpc/presentation/views/courseSelection/CourseSelectionTimeTableView.kt b/shared/src/commonMain/kotlin/org/mpc/presentation/views/coursePlanning/CoursePlanningTimetableView.kt similarity index 64% rename from shared/src/commonMain/kotlin/org/mpc/presentation/views/courseSelection/CourseSelectionTimeTableView.kt rename to shared/src/commonMain/kotlin/org/mpc/presentation/views/coursePlanning/CoursePlanningTimetableView.kt index 4c58453..a02d3ad 100644 --- a/shared/src/commonMain/kotlin/org/mpc/presentation/views/courseSelection/CourseSelectionTimeTableView.kt +++ b/shared/src/commonMain/kotlin/org/mpc/presentation/views/coursePlanning/CoursePlanningTimetableView.kt @@ -1,25 +1,25 @@ -package org.mpc.presentation.views.courseSelection +package org.mpc.presentation.views.coursePlanning import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import org.mpc.presentation.state.CoursePlanUiState @Composable -fun CourseSelectionTimetableView( +fun CoursePlanningTimetableView( uiState: CoursePlanUiState, modifier: Modifier, ) { when (uiState) { is CoursePlanUiState.Failure -> { - CourseSelectionTimetableFailureView(modifier, uiState.cause) + CoursePlanningTimetableFailureView(modifier, uiState.cause) } CoursePlanUiState.Loading -> { - CourseSelectionTimetableLoadingView(modifier) + CoursePlanningTimetableLoadingView(modifier) } is CoursePlanUiState.Success -> { - CourseSelectionTimetableSuccessView( + CoursePlanningTimetableSuccessView( plan = uiState.plan, modifier = modifier, ) diff --git a/shared/src/commonMain/kotlin/org/mpc/presentation/views/courseSelection/CourseSearchResultFailureView.kt b/shared/src/commonMain/kotlin/org/mpc/presentation/views/coursePlanning/CourseSearchResultFailureView.kt similarity index 90% rename from shared/src/commonMain/kotlin/org/mpc/presentation/views/courseSelection/CourseSearchResultFailureView.kt rename to shared/src/commonMain/kotlin/org/mpc/presentation/views/coursePlanning/CourseSearchResultFailureView.kt index 54975e1..d40dc0a 100644 --- a/shared/src/commonMain/kotlin/org/mpc/presentation/views/courseSelection/CourseSearchResultFailureView.kt +++ b/shared/src/commonMain/kotlin/org/mpc/presentation/views/coursePlanning/CourseSearchResultFailureView.kt @@ -1,4 +1,4 @@ -package org.mpc.presentation.views.courseSelection +package org.mpc.presentation.views.coursePlanning import androidx.compose.foundation.layout.Box import androidx.compose.material3.Text diff --git a/shared/src/commonMain/kotlin/org/mpc/presentation/views/courseSelection/CourseSearchResultLoadingView.kt b/shared/src/commonMain/kotlin/org/mpc/presentation/views/coursePlanning/CourseSearchResultLoadingView.kt similarity index 88% rename from shared/src/commonMain/kotlin/org/mpc/presentation/views/courseSelection/CourseSearchResultLoadingView.kt rename to shared/src/commonMain/kotlin/org/mpc/presentation/views/coursePlanning/CourseSearchResultLoadingView.kt index 72b7ae6..295d57f 100644 --- a/shared/src/commonMain/kotlin/org/mpc/presentation/views/courseSelection/CourseSearchResultLoadingView.kt +++ b/shared/src/commonMain/kotlin/org/mpc/presentation/views/coursePlanning/CourseSearchResultLoadingView.kt @@ -1,4 +1,4 @@ -package org.mpc.presentation.views.courseSelection +package org.mpc.presentation.views.coursePlanning import androidx.compose.foundation.layout.Box import androidx.compose.material3.Text diff --git a/shared/src/commonMain/kotlin/org/mpc/presentation/views/courseSelection/CourseSearchResultSuccessView.kt b/shared/src/commonMain/kotlin/org/mpc/presentation/views/coursePlanning/CourseSearchResultSuccessView.kt similarity index 91% rename from shared/src/commonMain/kotlin/org/mpc/presentation/views/courseSelection/CourseSearchResultSuccessView.kt rename to shared/src/commonMain/kotlin/org/mpc/presentation/views/coursePlanning/CourseSearchResultSuccessView.kt index 0ab4ef1..7277bef 100644 --- a/shared/src/commonMain/kotlin/org/mpc/presentation/views/courseSelection/CourseSearchResultSuccessView.kt +++ b/shared/src/commonMain/kotlin/org/mpc/presentation/views/coursePlanning/CourseSearchResultSuccessView.kt @@ -1,4 +1,4 @@ -package org.mpc.presentation.views.courseSelection +package org.mpc.presentation.views.coursePlanning import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.PaddingValues @@ -11,7 +11,7 @@ import androidx.compose.ui.unit.dp import org.mpc.domain.model.CourseResult import org.mpc.domain.model.CourseSerialNo import org.mpc.domain.model.CourseSummary -import org.mpc.presentation.views.courseSelection.components.CourseCard +import org.mpc.presentation.views.coursePlanning.components.CourseCard @Composable fun CourseSearchResultSuccessView( diff --git a/shared/src/commonMain/kotlin/org/mpc/presentation/views/courseSelection/CourseSearchResultView.kt b/shared/src/commonMain/kotlin/org/mpc/presentation/views/coursePlanning/CourseSearchResultView.kt similarity index 95% rename from shared/src/commonMain/kotlin/org/mpc/presentation/views/courseSelection/CourseSearchResultView.kt rename to shared/src/commonMain/kotlin/org/mpc/presentation/views/coursePlanning/CourseSearchResultView.kt index 8292908..49eed23 100644 --- a/shared/src/commonMain/kotlin/org/mpc/presentation/views/courseSelection/CourseSearchResultView.kt +++ b/shared/src/commonMain/kotlin/org/mpc/presentation/views/coursePlanning/CourseSearchResultView.kt @@ -1,4 +1,4 @@ -package org.mpc.presentation.views.courseSelection +package org.mpc.presentation.views.coursePlanning import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier diff --git a/shared/src/commonMain/kotlin/org/mpc/presentation/views/courseSelection/components/CourseCard.kt b/shared/src/commonMain/kotlin/org/mpc/presentation/views/coursePlanning/components/CourseCard.kt similarity index 99% rename from shared/src/commonMain/kotlin/org/mpc/presentation/views/courseSelection/components/CourseCard.kt rename to shared/src/commonMain/kotlin/org/mpc/presentation/views/coursePlanning/components/CourseCard.kt index 9e1af74..6445414 100644 --- a/shared/src/commonMain/kotlin/org/mpc/presentation/views/courseSelection/components/CourseCard.kt +++ b/shared/src/commonMain/kotlin/org/mpc/presentation/views/coursePlanning/components/CourseCard.kt @@ -1,4 +1,4 @@ -package org.mpc.presentation.views.courseSelection.components +package org.mpc.presentation.views.coursePlanning.components import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.background diff --git a/shared/src/commonTest/kotlin/org/mpc/presentation/model/courseSelection/CourseDraftModelTest.kt b/shared/src/commonTest/kotlin/org/mpc/presentation/model/coursePlanning/CourseDraftModelTest.kt similarity index 98% rename from shared/src/commonTest/kotlin/org/mpc/presentation/model/courseSelection/CourseDraftModelTest.kt rename to shared/src/commonTest/kotlin/org/mpc/presentation/model/coursePlanning/CourseDraftModelTest.kt index a13ce26..45f8cea 100644 --- a/shared/src/commonTest/kotlin/org/mpc/presentation/model/courseSelection/CourseDraftModelTest.kt +++ b/shared/src/commonTest/kotlin/org/mpc/presentation/model/coursePlanning/CourseDraftModelTest.kt @@ -1,4 +1,4 @@ -package org.mpc.presentation.model.courseSelection +package org.mpc.presentation.model.coursePlanning import de.infix.testBalloon.framework.core.testSuite import org.mpc.domain.model.CourseDay diff --git a/shared/src/iosMain/kotlin/org/mpc/IosSharedHost.kt b/shared/src/iosMain/kotlin/org/mpc/IosSharedHost.kt index d88f965..12aea56 100644 --- a/shared/src/iosMain/kotlin/org/mpc/IosSharedHost.kt +++ b/shared/src/iosMain/kotlin/org/mpc/IosSharedHost.kt @@ -8,25 +8,25 @@ import org.mpc.core.createDatabase import org.mpc.core.createDatabaseBuilder import org.mpc.di.AppGraph import org.mpc.di.createAppGraph -import org.mpc.presentation.CourseSearchResultViewBinding -import org.mpc.presentation.CourseSelectionTimetableViewBinding +import org.mpc.presentation.CourseCatalogViewBinding +import org.mpc.presentation.CoursePlanningTimetableViewBinding import platform.UIKit.UIViewController class IosSharedHost internal constructor( private val appGraph: AppGraph, ) { - fun courseSearchScreenController( + fun courseCatalogScreenController( bridge: CourseSearchBridge, planBridge: CoursePlanBridge, ): UIViewController = ComposeUIViewController { ProvideAppDependencies(appGraph) { - CourseSearchResultViewBinding(bridge, planBridge) + CourseCatalogViewBinding(bridge, planBridge) } } - fun courseSelectionTimetableScreenController(planBridge: CoursePlanBridge): UIViewController = ComposeUIViewController { + fun coursePlanningTimetableScreenController(planBridge: CoursePlanBridge): UIViewController = ComposeUIViewController { ProvideAppDependencies(appGraph) { - CourseSelectionTimetableViewBinding(planBridge) + CoursePlanningTimetableViewBinding(planBridge) } } } diff --git a/shared/src/iosMain/kotlin/org/mpc/presentation/CourseSearchResultViewBinding.kt b/shared/src/iosMain/kotlin/org/mpc/presentation/CourseCatalogViewBinding.kt similarity index 87% rename from shared/src/iosMain/kotlin/org/mpc/presentation/CourseSearchResultViewBinding.kt rename to shared/src/iosMain/kotlin/org/mpc/presentation/CourseCatalogViewBinding.kt index 68aae0e..da298b3 100644 --- a/shared/src/iosMain/kotlin/org/mpc/presentation/CourseSearchResultViewBinding.kt +++ b/shared/src/iosMain/kotlin/org/mpc/presentation/CourseCatalogViewBinding.kt @@ -11,16 +11,16 @@ import org.mpc.bridge.CoursePlanBridge import org.mpc.bridge.CourseSearchBridge import org.mpc.presentation.state.CoursePlanUiState import org.mpc.presentation.viewModel.CourseSearchViewModel -import org.mpc.presentation.viewModel.CourseSelectionViewModel -import org.mpc.presentation.views.courseSelection.CourseSearchResultView +import org.mpc.presentation.viewModel.CoursePlanViewModel +import org.mpc.presentation.views.coursePlanning.CourseSearchResultView @Composable -fun CourseSearchResultViewBinding( +fun CourseCatalogViewBinding( bridge: CourseSearchBridge, planBridge: CoursePlanBridge, ) { val searchViewModel: CourseSearchViewModel = metroViewModel() - val planViewModel: CourseSelectionViewModel = metroViewModel() + val planViewModel: CoursePlanViewModel = metroViewModel() val searchUiState by searchViewModel.uiState.collectAsStateWithLifecycle() val planUiState by planViewModel.uiState.collectAsStateWithLifecycle() diff --git a/shared/src/iosMain/kotlin/org/mpc/presentation/CourseSelectionTimetableViewBinding.kt b/shared/src/iosMain/kotlin/org/mpc/presentation/CoursePlanningTimetableViewBinding.kt similarity index 69% rename from shared/src/iosMain/kotlin/org/mpc/presentation/CourseSelectionTimetableViewBinding.kt rename to shared/src/iosMain/kotlin/org/mpc/presentation/CoursePlanningTimetableViewBinding.kt index f81d96a..ccfc488 100644 --- a/shared/src/iosMain/kotlin/org/mpc/presentation/CourseSelectionTimetableViewBinding.kt +++ b/shared/src/iosMain/kotlin/org/mpc/presentation/CoursePlanningTimetableViewBinding.kt @@ -8,12 +8,12 @@ import androidx.compose.ui.Modifier import androidx.lifecycle.compose.collectAsStateWithLifecycle import dev.zacsweers.metrox.viewmodel.metroViewModel import org.mpc.bridge.CoursePlanBridge -import org.mpc.presentation.viewModel.CourseSelectionViewModel -import org.mpc.presentation.views.courseSelection.CourseSelectionTimetableView +import org.mpc.presentation.viewModel.CoursePlanViewModel +import org.mpc.presentation.views.coursePlanning.CoursePlanningTimetableView @Composable -fun CourseSelectionTimetableViewBinding(planBridge: CoursePlanBridge) { - val planViewModel: CourseSelectionViewModel = metroViewModel() +fun CoursePlanningTimetableViewBinding(planBridge: CoursePlanBridge) { + val planViewModel: CoursePlanViewModel = metroViewModel() val planUiState by planViewModel.uiState.collectAsStateWithLifecycle() @@ -23,7 +23,7 @@ fun CourseSelectionTimetableViewBinding(planBridge: CoursePlanBridge) { } } - CourseSelectionTimetableView( + CoursePlanningTimetableView( uiState = planUiState, modifier = Modifier.fillMaxSize(), ) From 62b011a3f95b76762457d76fa1f69f60d4846f21 Mon Sep 17 00:00:00 2001 From: Yuyu1115 <105599462+Yuyu-1115@users.noreply.github.com> Date: Thu, 27 Aug 2026 23:21:30 +0800 Subject: [PATCH 2/2] fix(style): fix import ordering --- .../src/main/kotlin/org/mpc/presentation/CourseCatalogScreen.kt | 2 +- .../kotlin/org/mpc/presentation/CourseCatalogViewBinding.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/androidApp/src/main/kotlin/org/mpc/presentation/CourseCatalogScreen.kt b/androidApp/src/main/kotlin/org/mpc/presentation/CourseCatalogScreen.kt index 9b49d8a..724c85e 100644 --- a/androidApp/src/main/kotlin/org/mpc/presentation/CourseCatalogScreen.kt +++ b/androidApp/src/main/kotlin/org/mpc/presentation/CourseCatalogScreen.kt @@ -18,8 +18,8 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import dev.zacsweers.metrox.viewmodel.metroViewModel import org.mpc.domain.model.CourseSummary import org.mpc.presentation.state.CoursePlanUiState -import org.mpc.presentation.viewModel.CourseSearchViewModel import org.mpc.presentation.viewModel.CoursePlanViewModel +import org.mpc.presentation.viewModel.CourseSearchViewModel import org.mpc.presentation.views.coursePlanning.CourseSearchResultView import kotlin.collections.emptySet diff --git a/shared/src/iosMain/kotlin/org/mpc/presentation/CourseCatalogViewBinding.kt b/shared/src/iosMain/kotlin/org/mpc/presentation/CourseCatalogViewBinding.kt index da298b3..d72003f 100644 --- a/shared/src/iosMain/kotlin/org/mpc/presentation/CourseCatalogViewBinding.kt +++ b/shared/src/iosMain/kotlin/org/mpc/presentation/CourseCatalogViewBinding.kt @@ -10,8 +10,8 @@ import dev.zacsweers.metrox.viewmodel.metroViewModel import org.mpc.bridge.CoursePlanBridge import org.mpc.bridge.CourseSearchBridge import org.mpc.presentation.state.CoursePlanUiState -import org.mpc.presentation.viewModel.CourseSearchViewModel import org.mpc.presentation.viewModel.CoursePlanViewModel +import org.mpc.presentation.viewModel.CourseSearchViewModel import org.mpc.presentation.views.coursePlanning.CourseSearchResultView @Composable