Skip to content
Merged
Show file tree
Hide file tree
Changes from 11 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 @@ -41,7 +41,6 @@ fun DateSettingSection(
today: LocalDate,
selectedTime: LocalTime?,
isActiveDial: Boolean,
interactionSource: MutableInteractionSource,
onToggleCalendar: () -> Unit,
onToggleDial: () -> Unit,
onPrevMonth: () -> Unit,
Expand All @@ -63,7 +62,6 @@ fun DateSettingSection(
DateSectionHeader(
selectedDate = selectedDate,
isActiveCalendar = isActiveCalendar,
interactionSource = interactionSource,
isRepeat = isRepeat,
activeWeekDays = activeWeekDays,
onToggleCalendar = onToggleCalendar,
Expand Down Expand Up @@ -97,7 +95,6 @@ fun DateSettingSection(
TimeSectionHeader(
selectedTime = selectedTime,
isActiveDial = isActiveDial,
interactionSource = interactionSource,
onToggleDial = onToggleDial,
)

Expand All @@ -120,9 +117,10 @@ fun DateSettingSection(
fun TimeSectionHeader(
selectedTime: LocalTime?,
isActiveDial: Boolean,
interactionSource: MutableInteractionSource,
onToggleDial: () -> Unit,
) {
val interactionSource = MutableInteractionSource()
Comment thread
dogmania marked this conversation as resolved.
Outdated

Row(
modifier =
Modifier
Expand Down Expand Up @@ -154,11 +152,12 @@ fun TimeSectionHeader(
fun DateSectionHeader(
selectedDate: LocalDate?,
isActiveCalendar: Boolean,
interactionSource: MutableInteractionSource,
isRepeat: Boolean,
activeWeekDays: Set<Int>,
onToggleCalendar: () -> Unit,
) {
val interactionSource = MutableInteractionSource()

Row(
modifier =
Modifier
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,10 @@ private fun String.toScreenViewEventName(): String =
NavRoutes.PlacePicker.route -> "screen_view_place_picker"
NavRoutes.RouteLoading.route -> "screen_view_route_loading"
NavRoutes.CheckSchedule.route -> "screen_view_check_schedule"
NavRoutes.ScheduleRepeatSettingMvi.route -> "screen_view_schedule_repeat_setting"
NavRoutes.PlacePickerMvi.route -> "screen_view_place_picker"
NavRoutes.RouteLoadingMvi.route -> "screen_view_route_loading"
NavRoutes.CheckScheduleMvi.route -> "screen_view_check_schedule"

NavRoutes.DeleteAccount.route -> "screen_view_delete_account"
NavRoutes.HomeAddressSetting.route -> "screen_view_home_address_setting"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,17 @@ sealed class NavRoutes(

data object CheckSchedule : NavRoutes("checkSchedule")

// General Mvi
data object GeneralScheduleMviGraph : NavRoutes("generalScheduleMviGraph")

data object ScheduleRepeatSettingMvi : NavRoutes("scheduleRepeatSettingMvi")

data object PlacePickerMvi : NavRoutes("placePickerMvi")

data object RouteLoadingMvi : NavRoutes("routeLoadingMvi")

data object CheckScheduleMvi : NavRoutes("checkScheduleMvi")

// EditSchedule
@Serializable
data object EditScheduleGraph : NavRoutes("editScheduleGraph")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.ondot.data.repository

import com.ondot.data.mapper.AddressListResponseMapper
import com.ondot.data.mapper.PlaceHistoryResponseMapper
import com.ondot.data.model.response.member.AddressResponse
import com.ondot.data.model.response.member.PlaceHistoryResponse
import com.ondot.data.model.response.member.mapper.toDomain
import com.ondot.domain.model.member.AddressInfo
Expand Down Expand Up @@ -47,6 +48,16 @@ class PlaceRepositoryImpl(
emit(fetch(HttpMethod.DELETE, "/places/history", body = request))
}

override suspend fun searchPlaceAppResult(query: String): AppResult<List<AddressInfo>> =
safeApiCall {
networkClient
.requestOrThrow<List<AddressResponse>>(
method = HttpMethod.GET,
path = "/places/search",
queryParams = mapOf("query" to query),
).let(AddressListResponseMapper::responseToModel)
}

override suspend fun deleteHistory(searchedAt: String): AppResult<Unit> =
safeApiCall {
networkClient.requestOrThrow(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import com.ondot.data.mapper.SchedulePreparationResponseMapper
import com.ondot.data.model.request.everytime.EverytimeValidateRequest
import com.ondot.data.model.request.everytime.mapper.toRequest
import com.ondot.data.model.response.schedule.EverytimeValidateResponse
import com.ondot.data.model.response.schedule.ScheduleAlarmResponse
import com.ondot.data.model.response.schedule.mapper.toDomain
import com.ondot.domain.datasource.ScheduleLocalDataSource
import com.ondot.domain.model.command.CreateEverytimeScheduleCommand
Expand Down Expand Up @@ -107,6 +108,25 @@ class ScheduleRepositoryImpl(
)
}

override suspend fun fetchScheduleAlarms(request: ScheduleAlarmRequest): AppResult<ScheduleAlarm> =
safeApiCall {
networkClient
.requestOrThrow<ScheduleAlarmResponse>(
method = HttpMethod.POST,
path = "/alarms/setting",
body = request,
).let(ScheduleAlarmResponseMapper::responseToModel)
}

override suspend fun createScheduleAppResult(request: CreateScheduleRequest): AppResult<Unit> =
safeApiCall {
networkClient.requestOrThrow<Unit>(
method = HttpMethod.POST,
path = "/schedules",
body = request,
)
}

override suspend fun toggleAlarm(
scheduleId: Long,
isEnabled: Boolean,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ interface PlaceRepository {
suspend fun deletePlaceHistory(request: DeletePlaceHistoryRequest): Flow<Result<Unit>>

// -----------MVI
suspend fun searchPlaceAppResult(query: String): AppResult<List<AddressInfo>>

suspend fun deleteHistory(searchedAt: String): AppResult<Unit>

suspend fun fetchHistory(): AppResult<List<PlaceHistory>>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,10 @@ interface ScheduleRepository {

suspend fun createEverytimeSchedule(command: CreateEverytimeScheduleCommand): AppResult<Unit>

suspend fun fetchScheduleAlarms(request: ScheduleAlarmRequest): AppResult<ScheduleAlarm>

suspend fun createScheduleAppResult(request: CreateScheduleRequest): AppResult<Unit>

suspend fun toggleAlarm(
scheduleId: Long,
isEnabled: Boolean,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,29 @@ class FakeScheduleRepository : ScheduleRepository {
TODO("Not yet implemented")
}

override suspend fun fetchScheduleAlarms(request: ScheduleAlarmRequest): AppResult<ScheduleAlarm> =
AppResult.Success(ScheduleAlarm(preparationAlarm = Alarm(alarmId = 1), departureAlarm = Alarm(alarmId = 2)))

override suspend fun createScheduleAppResult(request: CreateScheduleRequest): AppResult<Unit> {
val newId = (scheduleMap.keys.maxOrNull() ?: 0L) + 1L

val schedule =
Schedule(
scheduleId = newId,
scheduleTitle = request.title,
appointmentAt = request.appointmentAt,
repeatDays = request.repeatDays,
preparationNote = request.preparationNote,
hasActiveAlarm = false,
departureAlarm = request.departureAlarm,
preparationAlarm = request.preparationAlarm,
)

scheduleMap[newId] = schedule

return AppResult.Success(Unit)
}

override suspend fun toggleAlarm(
scheduleId: Long,
isEnabled: Boolean,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.ondot.edit.bottomSheet

import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
Expand All @@ -10,7 +9,6 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
Expand All @@ -35,7 +33,6 @@ fun EditDateBottomSheet(
) {
val viewModel: EditBottomSheetViewModel = viewModel { EditBottomSheetViewModel() }
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
val interactionSource = remember { MutableInteractionSource() }

LaunchedEffect(Unit) {
viewModel.initDate(isRepeat, repeatDays, currentDate)
Expand Down Expand Up @@ -71,7 +68,6 @@ fun EditDateBottomSheet(

DateSectionHeader(
selectedDate = uiState.currentDate,
interactionSource = interactionSource,
isActiveCalendar = true,
isRepeat = uiState.isRepeat,
activeWeekDays = uiState.repeatDays,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.ondot.edit.bottomSheet

import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
Expand All @@ -12,7 +11,6 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
Expand Down Expand Up @@ -46,7 +44,6 @@ fun EditTimeBottomSheet(
) {
val viewModel: EditBottomSheetViewModel = viewModel { EditBottomSheetViewModel() }
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
val interactionSource = remember { MutableInteractionSource() }

val periodState = rememberLazyListState(initialFirstVisibleItemIndex = 0)
val hourState = rememberLazyListState(initialFirstVisibleItemIndex = currentTime.hour.coerceIn(0, 23))
Expand Down Expand Up @@ -78,7 +75,6 @@ fun EditTimeBottomSheet(
isActiveCalendar = uiState.isActiveCalendar,
isRepeat = false,
activeWeekDays = emptySet(),
interactionSource = interactionSource,
onToggleCalendar = viewModel::onToggleCalendar,
)

Expand Down Expand Up @@ -110,7 +106,6 @@ fun EditTimeBottomSheet(
TimeSectionHeader(
selectedTime = uiState.currentTime,
isActiveDial = true,
interactionSource = interactionSource,
onToggleDial = {},
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,8 +91,6 @@ fun CheckScheduleScreen(

CheckScheduleContent(
uiState = uiState,
departurePlaceInput = uiState.placePickerState.departurePlaceInput,
arrivalPlaceInput = uiState.placePickerState.arrivalPlaceInput,
focusRequester = focusRequest,
onClickBack = popScreen,
onCreateSchedule = viewModel::createSchedule,
Expand All @@ -106,8 +104,6 @@ fun CheckScheduleScreen(
@Composable
fun CheckScheduleContent(
uiState: GeneralScheduleUiState,
departurePlaceInput: String,
arrivalPlaceInput: String,
focusRequester: FocusRequester,
onClickBack: () -> Unit,
onCreateSchedule: (Boolean, String) -> Unit,
Expand Down Expand Up @@ -150,8 +146,8 @@ fun CheckScheduleContent(
Spacer(modifier = Modifier.height(16.dp))

RouteInputSection(
departurePlaceInput = departurePlaceInput,
arrivalPlaceInput = arrivalPlaceInput,
departurePlaceInput = uiState.placePickerState.departurePlaceInput,
arrivalPlaceInput = uiState.placePickerState.arrivalPlaceInput,
readOnly = true,
)

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
package com.ondot.general.contract

import com.ondot.domain.model.enums.RouterType
import com.ondot.domain.model.member.AddressInfo
import com.ondot.domain.model.member.PlaceHistory
import com.ondot.ui.base.mvi.Intent
import kotlinx.datetime.LocalDate
import kotlinx.datetime.LocalTime

sealed interface GeneralScheduleIntent : Intent {
data object InitStep : GeneralScheduleIntent

data class ToggleRepeat(
val isRepeat: Boolean,
) : GeneralScheduleIntent

data class SelectRepeatPreset(
val index: Int,
) : GeneralScheduleIntent

data class ToggleWeekDay(
val index: Int,
) : GeneralScheduleIntent

data object ToggleCalendar : GeneralScheduleIntent

data object MoveToPreviousMonth : GeneralScheduleIntent

data object MoveToNextMonth : GeneralScheduleIntent

data class SelectDate(
val date: LocalDate,
) : GeneralScheduleIntent

data object ToggleTimeDial : GeneralScheduleIntent

data class SelectTime(
val time: LocalTime,
) : GeneralScheduleIntent

data object InitHomeAddress : GeneralScheduleIntent

data object InitPlaceHistory : GeneralScheduleIntent

data class SetFocusedRouterType(
val type: RouterType,
) : GeneralScheduleIntent

data class UpdateRouteInput(
val input: String,
) : GeneralScheduleIntent

data class SelectPlace(
val place: AddressInfo,
) : GeneralScheduleIntent

data class SelectHistory(
val history: PlaceHistory,
) : GeneralScheduleIntent

data class DeleteHistory(
val history: PlaceHistory,
) : GeneralScheduleIntent

data object ToggleHomeDeparture : GeneralScheduleIntent

data class SetInitialPlacePicker(
val isInitial: Boolean,
) : GeneralScheduleIntent

data object ClickNext : GeneralScheduleIntent

data object ClickBack : GeneralScheduleIntent

data class UpdateScheduleTitle(
val title: String,
) : GeneralScheduleIntent

data object TogglePreparationAlarm : GeneralScheduleIntent

data class SetBottomSheetVisible(
val visible: Boolean,
) : GeneralScheduleIntent

data class CreateSchedule(
val isMedicationRequired: Boolean,
val preparationNote: String,
) : GeneralScheduleIntent
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.ondot.general.contract

import com.ondot.domain.model.enums.ToastType
import com.ondot.ui.base.mvi.SideEffect

sealed interface GeneralScheduleSideEffect : SideEffect {
data class ShowToast(
val message: String,
val type: ToastType,
) : GeneralScheduleSideEffect

data object NavigateToPlacePicker : GeneralScheduleSideEffect

data object NavigateToRouteLoading : GeneralScheduleSideEffect

data object NavigateToMain : GeneralScheduleSideEffect

data object RequestArrivalFocus : GeneralScheduleSideEffect
}
Loading
Loading