Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -18,18 +18,18 @@ 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.CoursePlanViewModel
import org.mpc.presentation.viewModel.CourseSearchViewModel
import org.mpc.presentation.viewModel.CourseSelectionViewModel
import org.mpc.presentation.views.courseSelection.CourseSearchResultView
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()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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>(CourseDetailsLoadState.Loading) }
var retryRequest by remember(route) { mutableIntStateOf(0) }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand All @@ -45,7 +45,7 @@ fun CoursePlanningScreen(
if (isExpanded) {
Row(modifier = modifier) {
stateHolder.SaveableStateProvider(CoursePlanningView.CATALOG) {
CourseSelectionSearchScreen(
CourseCatalogScreen(
modifier =
Modifier
.weight(CATALOG_WEIGHT)
Expand All @@ -56,7 +56,7 @@ fun CoursePlanningScreen(
}
VerticalDivider()
stateHolder.SaveableStateProvider(CoursePlanningView.TIMETABLE) {
CourseSelectionTimetableView(
CoursePlanningTimetableView(
uiState = planUiState,
modifier =
Modifier
Expand All @@ -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,
) {
Expand Down Expand Up @@ -111,15 +111,15 @@ private fun CompactCoursePlanningScreen(
stateHolder.SaveableStateProvider(selectedView) {
when (selectedView) {
CoursePlanningView.CATALOG -> {
CourseSelectionSearchScreen(
CourseCatalogScreen(
modifier = Modifier.fillMaxSize(),
onCourseClick = onCourseClick,
planViewModel = planViewModel,
)
}

CoursePlanningView.TIMETABLE -> {
CourseSelectionTimetableView(
CoursePlanningTimetableView(
uiState = planUiState,
modifier = Modifier.fillMaxSize(),
)
Expand Down
4 changes: 2 additions & 2 deletions iosApp/iosApp/ContentView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import SwiftUI
import Shared

struct CourseSelectionSearchView: View {
struct CourseCatalogView: View {
let sharedHost: IosSharedHost
let planBridge: CoursePlanBridge

Expand All @@ -11,7 +11,7 @@ struct CourseSelectionSearchView: View {
@State private var bridge = CourseSearchBridge()

var body: some View {
CourseSelectionSearchComposeView(
CourseCatalogComposeView(
sharedHost: sharedHost,
bridge: bridge,
planBridge: planBridge
Expand Down
Original file line number Diff line number Diff line change
@@ -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
)
Expand Down
Original file line number Diff line number Diff line change
@@ -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("儲存") {
Expand All @@ -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"
)
Expand Down
Original file line number Diff line number Diff line change
@@ -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
)
Expand Down
Original file line number Diff line number Diff line change
@@ -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
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import org.mpc.presentation.state.CoursePlanUiState
scope = AppScope::class,
binding = binding<ViewModel>(),
)
class CourseSelectionViewModel(
class CoursePlanViewModel(
private val coursePlanRepository: CoursePlanRepository,
private val draftStore: CoursePlanDraftStore,
) : ViewModel() {
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -7,7 +7,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier

@Composable
fun CourseSelectionTimetableFailureView(
fun CoursePlanningTimetableFailureView(
modifier: Modifier,
cause: Throwable,
) {
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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,
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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,
) {
Expand Down Expand Up @@ -260,7 +260,7 @@ fun TimetableForegroundCell(

@Preview
@Composable
internal fun PreviewCourseSelectionTimetableSuccessView(
internal fun PreviewCoursePlanningTimetableSuccessView(
plan: CoursePlan =
CoursePlan(
semester = "115-1",
Expand Down Expand Up @@ -303,7 +303,7 @@ internal fun PreviewCourseSelectionTimetableSuccessView(
},
modifier = Modifier.fillMaxSize(),
) { innerPadding ->
CourseSelectionTimetableSuccessView(
CoursePlanningTimetableSuccessView(
plan = plan,
modifier =
Modifier
Expand Down
Original file line number Diff line number Diff line change
@@ -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,
)
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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(
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Loading
Loading