Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 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
@@ -1,4 +1,4 @@
package com.konkuk.medicarecall.ui.feature.calendar
package com.konkuk.medicarecall.ui.common.component

import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.ButtonDefaults
Expand Down Expand Up @@ -29,7 +29,7 @@ fun DatePickerModal(
onDismiss: () -> Unit,
) {
val dpColors = DatePickerDefaults.colors(
containerColor = Color.White,
containerColor = Color.Companion.White,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
containerColor = Color.Companion.White,
MediCareCallTheme.colors.white

이런 컬러들 다 MediCareCallTheme.colors.white 로 사용하는 게 좋을 거 같습니다!

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

companion이 자동으로 붙은것같습니다..! 저번에도 안썼는데 붙어있는 경우가 있더라구요
말씀해주신 부분 수정해놓겠습니다!

// 👇 상속받지 말고 명시적으로 지정
titleContentColor = MediCareCallTheme.colors.black,
headlineContentColor = MediCareCallTheme.colors.black,
Expand All @@ -40,7 +40,7 @@ fun DatePickerModal(

// 선택/오늘 강조
selectedDayContainerColor = MediCareCallTheme.colors.main,
selectedDayContentColor = Color.White,
selectedDayContentColor = Color.Companion.White,
todayContentColor = MediCareCallTheme.colors.black,
todayDateBorderColor = MediCareCallTheme.colors.main,
selectedYearContentColor = MediCareCallTheme.colors.white,
Expand Down Expand Up @@ -92,7 +92,7 @@ fun DatePickerModal(
) { Text("취소") }
},
) {
Surface(shape = RoundedCornerShape(16.dp), color = Color.White) {
Surface(shape = RoundedCornerShape(16.dp), color = Color.Companion.White) {
DatePicker(state = datePickerState, colors = dpColors)
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.konkuk.medicarecall.ui.feature.calendar
package com.konkuk.medicarecall.ui.common.component

import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
Expand Down Expand Up @@ -34,21 +34,21 @@ fun DateSelector(
val month = selectedDate.monthValue

Row(
modifier = Modifier
modifier = Modifier.Companion
.fillMaxWidth()
.clickable(
indication = null,
interactionSource = null,
) { showDatePicker = true },

horizontalArrangement = Arrangement.Center,
verticalAlignment = Alignment.CenterVertically,
verticalAlignment = Alignment.Companion.CenterVertically,
) {
Text(
text = "${year}년 ${month}월",
style = MediCareCallTheme.typography.SB_20,
color = MediCareCallTheme.colors.gray9,
modifier = Modifier.padding(end = 4.dp),
modifier = Modifier.Companion.padding(end = 4.dp),
)
Icon(
painter = painterResource(id = R.drawable.ic_arrow_down_small),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.konkuk.medicarecall.ui.feature.calendar
package com.konkuk.medicarecall.ui.common.component

import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
Expand All @@ -20,30 +20,30 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.konkuk.medicarecall.ui.feature.calendar.viewmodel.CalendarUiState
import com.konkuk.medicarecall.ui.theme.MediCareCallTheme
import java.time.LocalDate

@Composable
fun WeeklyCalendar(
calendarUiState: CalendarUiState, // 현재 선택된 연/월/주차 날짜 상태
selectedDate: LocalDate,
weekDates: List<LocalDate>,
onDateSelected: (LocalDate) -> Unit, // 날짜 클릭 시 동작할 콜백
) {
val weekDays = listOf("일", "월", "화", "수", "목", "금", "토") // 요일 표시

Column(modifier = Modifier.fillMaxWidth()) {
Column(modifier = Modifier.Companion.fillMaxWidth()) {
// 요일 (일~토)
Row(
modifier = Modifier.fillMaxWidth(),
modifier = Modifier.Companion.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween,
) {
weekDays.forEach { day ->
Box(
modifier = Modifier,
contentAlignment = Alignment.Center,
modifier = Modifier.Companion,
contentAlignment = Alignment.Companion.Center,
) {
Text(
modifier = Modifier
modifier = Modifier.Companion
.padding(horizontal = 6.5.dp),
text = day,
style = MediCareCallTheme.typography.R_18,
Expand All @@ -52,29 +52,29 @@ fun WeeklyCalendar(
}
}
}
Spacer(modifier = Modifier.height(3.dp))
Spacer(modifier = Modifier.Companion.height(3.dp))
// 해당 주 날짜
Row(
modifier = Modifier.fillMaxWidth(),
modifier = Modifier.Companion.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween,
) {
calendarUiState.weekDates.forEach { date ->
weekDates.forEach { date ->

val isSelected = date == calendarUiState.selectedDate
val isSelected = date == selectedDate

Box(
modifier = Modifier
modifier = Modifier.Companion
.size(29.dp)
.clip(CircleShape)
.background(if (isSelected) MediCareCallTheme.colors.main else Color.Transparent)
.background(if (isSelected) MediCareCallTheme.colors.main else Color.Companion.Transparent)
.clickable { onDateSelected(date) },
contentAlignment = Alignment.Center,
contentAlignment = Alignment.Companion.Center,
) {
Text(
modifier = Modifier,
modifier = Modifier.Companion,
text = "${date.dayOfMonth}",
style = if (isSelected) MediCareCallTheme.typography.SB_18 else MediCareCallTheme.typography.M_17,
color = if (isSelected) Color.White else MediCareCallTheme.colors.gray4,
color = if (isSelected) Color.Companion.White else MediCareCallTheme.colors.gray4,
)
}
}
Expand All @@ -89,12 +89,8 @@ fun PreviewWeeklyCalendar() {
val week = (0..6).map { baseDate.plusDays(it.toLong()) }

WeeklyCalendar(
calendarUiState = CalendarUiState(
currentYear = baseDate.year,
currentMonth = baseDate.monthValue,
weekDates = week,
selectedDate = baseDate.plusDays(2),
),
weekDates = week,
selectedDate = baseDate.plusDays(2),
onDateSelected = {},
)
}

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,9 @@ import androidx.compose.ui.unit.dp
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.compose.LifecycleEventEffect
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.konkuk.medicarecall.ui.common.component.DateSelector
import com.konkuk.medicarecall.ui.common.component.TopAppBar
import com.konkuk.medicarecall.ui.feature.calendar.DateSelector
import com.konkuk.medicarecall.ui.feature.calendar.WeeklyCalendar
import com.konkuk.medicarecall.ui.feature.calendar.viewmodel.CalendarUiState
import com.konkuk.medicarecall.ui.feature.calendar.viewmodel.CalendarViewModel
import com.konkuk.medicarecall.ui.common.component.WeeklyCalendar
import com.konkuk.medicarecall.ui.feature.homedetail.meal.component.MealDetailCard
import com.konkuk.medicarecall.ui.feature.homedetail.meal.viewmodel.MealUiState
import com.konkuk.medicarecall.ui.feature.homedetail.meal.viewmodel.MealViewModel
Expand All @@ -38,15 +36,14 @@ import java.time.LocalDate
fun MealDetailScreen(
elderId: Int,
onBack: () -> Unit,
calendarViewModel: CalendarViewModel = koinViewModel(),
mealViewModel: MealViewModel = koinViewModel(),
) {
// 재진입 시 오늘로 초기화
LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
calendarViewModel.resetToToday()
mealViewModel.resetToToday()
}
// 날짜만 Observe
val selectedDate by calendarViewModel.selectedDate.collectAsStateWithLifecycle()
val selectedDate by mealViewModel.selectedDate.collectAsStateWithLifecycle()
val meals by mealViewModel.meals.collectAsStateWithLifecycle()

// 날짜/어르신 변경 시마다 로드
Expand All @@ -58,8 +55,8 @@ fun MealDetailScreen(
onBack = onBack,
selectedDate = selectedDate,
meals = meals,
weekDates = calendarViewModel.getCurrentWeekDates(),
onDateSelected = calendarViewModel::selectDate,
weekDates = mealViewModel.getCurrentWeekDates(),
onDateSelected = mealViewModel::selectDate,
onMonthClick = { /* 모달 열기 */ },
)
}
Expand Down Expand Up @@ -105,12 +102,8 @@ fun MealDetailScreenLayout(
Spacer(Modifier.height(12.dp))

WeeklyCalendar(
calendarUiState = CalendarUiState(
currentYear = selectedDate.year,
currentMonth = selectedDate.monthValue,
weekDates = weekDates,
selectedDate = selectedDate,
),
onDateSelected = onDateSelected,
)

Expand All @@ -133,6 +126,9 @@ fun MealDetailScreenLayout(
@Preview(name = "식사 - 기록 있음", showBackground = true)
@Composable
fun PreviewMealDetailScreenRecorded() {
val selectedDate = LocalDate.of(2025, 5, 7)
val weekDates = (0..6).map { selectedDate.plusDays(it.toLong()) }

val dummyMeals = listOf(
MealUiState(
mealTime = "아침",
Expand All @@ -153,9 +149,6 @@ fun PreviewMealDetailScreenRecorded() {
isEaten = true,
),
)
val selectedDate = LocalDate.of(2025, 5, 7)
val weekDates =
(0..6).map { selectedDate.plusDays(it.toLong() - selectedDate.dayOfWeek.value % 7) }

MediCareCallTheme {
MealDetailScreenLayout(
Expand All @@ -172,6 +165,10 @@ fun PreviewMealDetailScreenRecorded() {
@Preview(name = "식사 - 미기록 화면", showBackground = true)
@Composable
fun PreviewMealDetailScreenUnrecorded() {
val selectedDate = LocalDate.of(2025, 5, 7)
val weekDates =
(0..6).map { selectedDate.plusDays(it.toLong() - selectedDate.dayOfWeek.value % 7) }

val dummyMeals = listOf(
MealUiState(
mealTime = "아침",
Expand All @@ -192,9 +189,6 @@ fun PreviewMealDetailScreenUnrecorded() {
isEaten = null,
),
)
val selectedDate = LocalDate.of(2025, 5, 7)
val weekDates =
(0..6).map { selectedDate.plusDays(it.toLong() - selectedDate.dayOfWeek.value % 7) }

MediCareCallTheme {
MealDetailScreenLayout(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,35 @@ import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.launch
import org.koin.android.annotation.KoinViewModel
import retrofit2.HttpException
import java.time.DayOfWeek
import java.time.LocalDate
import java.time.format.DateTimeFormatter
import java.time.temporal.TemporalAdjusters

@KoinViewModel
class MealViewModel(
private val mealRepository: MealRepository,
) : ViewModel() {

// 캘린더 상태
private val _selectedDate = MutableStateFlow(LocalDate.now())
val selectedDate: StateFlow<LocalDate> = _selectedDate
fun selectDate(date: LocalDate) {
_selectedDate.value = date
}

fun resetToToday() {
_selectedDate.value = LocalDate.now()
}

fun getCurrentWeekDates(): List<LocalDate> {
val base = _selectedDate.value
val startOfWeek =
base.with(TemporalAdjusters.previousOrSame(DayOfWeek.SUNDAY))
return (0..6).map { startOfWeek.plusDays(it.toLong()) }
}

// 식사 상태
private companion object {
const val TAG = "MEAL_API"
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,9 @@ import androidx.compose.ui.unit.dp
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.compose.LifecycleEventEffect
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.konkuk.medicarecall.ui.common.component.DateSelector
import com.konkuk.medicarecall.ui.common.component.TopAppBar
import com.konkuk.medicarecall.ui.feature.calendar.DateSelector
import com.konkuk.medicarecall.ui.feature.calendar.WeeklyCalendar
import com.konkuk.medicarecall.ui.feature.calendar.viewmodel.CalendarUiState
import com.konkuk.medicarecall.ui.feature.calendar.viewmodel.CalendarViewModel
import com.konkuk.medicarecall.ui.common.component.WeeklyCalendar
import com.konkuk.medicarecall.ui.feature.homedetail.medicine.component.MedicineDetailCard
import com.konkuk.medicarecall.ui.feature.homedetail.medicine.viewmodel.DoseStatus
import com.konkuk.medicarecall.ui.feature.homedetail.medicine.viewmodel.DoseStatusItem
Expand All @@ -41,15 +39,14 @@ import java.time.LocalDate
fun MedicineDetailScreen(
elderId: Int,
onBack: () -> Unit,
calendarViewModel: CalendarViewModel = koinViewModel(),
medicineViewModel: MedicineViewModel = koinViewModel(),
) {
// 재진입 시 오늘로 초기화
LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
calendarViewModel.resetToToday()
medicineViewModel.resetToToday()
}

val selectedDate by calendarViewModel.selectedDate.collectAsStateWithLifecycle()
val selectedDate by medicineViewModel.selectedDate.collectAsStateWithLifecycle()

// 날짜/어르신 변경 시마다 로드
LaunchedEffect(elderId, selectedDate) {
Expand All @@ -64,8 +61,8 @@ fun MedicineDetailScreen(
onBack = onBack,
selectedDate = selectedDate,
medicines = uiState.items,
weekDates = calendarViewModel.getCurrentWeekDates(),
onDateSelected = { calendarViewModel.selectDate(it) },
weekDates = medicineViewModel.getCurrentWeekDates(),
onDateSelected = { medicineViewModel.selectDate(it) },
onMonthClick = { /* 모달 열기 */ },
)
}
Expand Down Expand Up @@ -109,12 +106,8 @@ fun MedicineDetailScreenLayout(
)
Spacer(Modifier.height(12.dp))
WeeklyCalendar(
calendarUiState = CalendarUiState(
currentYear = selectedDate.year,
currentMonth = selectedDate.monthValue,
weekDates = weekDates,
selectedDate = selectedDate,
),
weekDates = weekDates,
selectedDate = selectedDate,
onDateSelected = onDateSelected,
)
Spacer(modifier = Modifier.height(32.dp))
Expand Down
Loading
Loading