From 76093d181c5511f540224ac966a9119924948484 Mon Sep 17 00:00:00 2001 From: boiledegg Date: Wed, 17 Jul 2024 14:21:01 +0900 Subject: [PATCH] =?UTF-8?q?[REFACTOR/#91]=20=EC=9E=84=ED=8F=AC=ED=8A=B8=20?= =?UTF-8?q?=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calendar/calendar/CalendarViewModel.kt | 14 +--- .../calendar/month/CalendarMonthScreen.kt | 4 +- .../calendar/scrap/CalendarListScreen.kt | 78 ++++--------------- .../calendar/scrap/component/CalendarScrap.kt | 23 ------ .../scrap/component/CalendarScrapList.kt | 65 ++++++++++++++++ .../calendar/week/CalendarWeekScreen.kt | 61 +++++++++------ ...endarWeek.kt => HorizontalCalendarWeek.kt} | 2 +- 7 files changed, 122 insertions(+), 125 deletions(-) create mode 100644 feature/src/main/java/com/terning/feature/calendar/scrap/component/CalendarScrapList.kt rename feature/src/main/java/com/terning/feature/calendar/week/{CalendarWeek.kt => HorizontalCalendarWeek.kt} (98%) diff --git a/feature/src/main/java/com/terning/feature/calendar/calendar/CalendarViewModel.kt b/feature/src/main/java/com/terning/feature/calendar/calendar/CalendarViewModel.kt index acda2aa4c..0c11f4792 100644 --- a/feature/src/main/java/com/terning/feature/calendar/calendar/CalendarViewModel.kt +++ b/feature/src/main/java/com/terning/feature/calendar/calendar/CalendarViewModel.kt @@ -2,20 +2,11 @@ package com.terning.feature.calendar.calendar import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.terning.core.designsystem.theme.CalBlue1 -import com.terning.core.designsystem.theme.CalGreen1 -import com.terning.core.designsystem.theme.CalGreen2 -import com.terning.core.designsystem.theme.CalPink -import com.terning.core.designsystem.theme.CalPurple -import com.terning.core.designsystem.theme.CalRed -import com.terning.core.designsystem.theme.CalYellow import com.terning.core.state.UiState -import com.terning.domain.entity.response.CalendarScrapDetailModel import com.terning.domain.repository.CalendarRepository import com.terning.feature.R import com.terning.feature.calendar.month.CalendarMonthState import com.terning.feature.calendar.scrap.CalendarListState -import com.terning.feature.calendar.scrap.model.Scrap import com.terning.feature.calendar.week.CalendarWeekState import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.Dispatchers @@ -26,7 +17,6 @@ import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import kotlinx.coroutines.withContext -import timber.log.Timber import java.time.LocalDate import javax.inject.Inject @@ -142,8 +132,8 @@ class CalendarViewModel @Inject constructor( onSuccess = { _calendarWeekState.update { currentState -> currentState.copy( - /*loadState = if (it.isNotEmpty()) UiState.Success(it) else UiState.Empty*/ - loadState = UiState.Success(it) + loadState = if (it.isNotEmpty()) UiState.Success(it) else UiState.Empty + //loadState = UiState.Success(it) ) } _calendarSideEffect.emit(CalendarSideEffect.ShowToast(R.string.server_success)) diff --git a/feature/src/main/java/com/terning/feature/calendar/month/CalendarMonthScreen.kt b/feature/src/main/java/com/terning/feature/calendar/month/CalendarMonthScreen.kt index c1b62c67d..06fb41092 100644 --- a/feature/src/main/java/com/terning/feature/calendar/month/CalendarMonthScreen.kt +++ b/feature/src/main/java/com/terning/feature/calendar/month/CalendarMonthScreen.kt @@ -13,11 +13,11 @@ import androidx.hilt.navigation.compose.hiltViewModel import com.terning.core.designsystem.theme.White import com.terning.core.state.UiState import com.terning.domain.entity.response.CalendarScrapModel +import com.terning.feature.calendar.calendar.CalendarUiState +import com.terning.feature.calendar.calendar.CalendarViewModel import com.terning.feature.calendar.calendar.model.CalendarDefaults.flingBehavior import com.terning.feature.calendar.calendar.model.CalendarState.Companion.getDateByPage -import com.terning.feature.calendar.calendar.CalendarViewModel import com.terning.feature.calendar.month.model.MonthData -import com.terning.feature.calendar.calendar.CalendarUiState import kotlinx.coroutines.flow.distinctUntilChanged import java.time.LocalDate import java.time.YearMonth diff --git a/feature/src/main/java/com/terning/feature/calendar/scrap/CalendarListScreen.kt b/feature/src/main/java/com/terning/feature/calendar/scrap/CalendarListScreen.kt index 49d99e93b..04bdf8532 100644 --- a/feature/src/main/java/com/terning/feature/calendar/scrap/CalendarListScreen.kt +++ b/feature/src/main/java/com/terning/feature/calendar/scrap/CalendarListScreen.kt @@ -2,23 +2,19 @@ package com.terning.feature.calendar.scrap import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.LazyRow -import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.verticalScroll import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.snapshotFlow +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign @@ -27,20 +23,17 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.LocalLifecycleOwner import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.terning.core.designsystem.theme.Back -import com.terning.core.designsystem.theme.Black import com.terning.core.designsystem.theme.Grey400 import com.terning.core.designsystem.theme.TerningTheme import com.terning.core.designsystem.theme.White import com.terning.core.extension.getDateAsMapString -import com.terning.core.extension.getDateStringInKorean import com.terning.core.extension.isListNotEmpty import com.terning.core.state.UiState -import com.terning.domain.entity.response.CalendarScrapDetailModel import com.terning.feature.R import com.terning.feature.calendar.calendar.CalendarViewModel import com.terning.feature.calendar.calendar.model.CalendarDefaults.flingBehavior import com.terning.feature.calendar.calendar.model.CalendarState.Companion.getDateByPage -import com.terning.feature.calendar.scrap.component.CalendarScrap +import com.terning.feature.calendar.scrap.component.CalendarScrapList import kotlinx.coroutines.flow.distinctUntilChanged import java.time.LocalDate @@ -87,15 +80,20 @@ fun CalendarListScreen( UiState.Loading -> {} UiState.Empty -> { item { - Text( - modifier = Modifier - .padding(top = 42.dp) - .fillMaxWidth(), - text = stringResource(id = R.string.calendar_empty_scrap), - textAlign = TextAlign.Center, - style = TerningTheme.typography.body5, - color = Grey400 - ) + Box( + modifier = Modifier.fillMaxSize(), + contentAlignment = Alignment.Center + ) { + Text( + modifier = Modifier + .padding(top = 42.dp) + .fillMaxWidth(), + text = stringResource(id = R.string.calendar_empty_scrap), + textAlign = TextAlign.Center, + style = TerningTheme.typography.body5, + color = Grey400 + ) + } } } @@ -123,48 +121,4 @@ fun CalendarListScreen( } } -@Composable -fun CalendarScrapList( - selectedDate: LocalDate, - scrapList: List, - isFromList: Boolean = false, - noScrapScreen: @Composable () -> Unit -) { - val scrollState = rememberScrollState() - if (scrapList.isListNotEmpty()) { - Text( - text = selectedDate.getDateStringInKorean(), - style = TerningTheme.typography.title5, - color = Black, - modifier = Modifier.padding(start = 24.dp, top = 16.dp, bottom = 15.dp) - ) - } - val topModifier = if (!isFromList) { - Modifier - .fillMaxWidth() - .padding(horizontal = 24.dp) - .verticalScroll(scrollState) - } else { - Modifier - .fillMaxWidth() - .padding(horizontal = 24.dp) - } - - if (!scrapList.isListNotEmpty()) { - noScrapScreen() - } else { - Column( - modifier = topModifier - ) { - for (scrap in scrapList) { - CalendarScrap( - scrap = scrap - ) - Spacer( - modifier = Modifier.height(12.dp) - ) - } - } - } -} diff --git a/feature/src/main/java/com/terning/feature/calendar/scrap/component/CalendarScrap.kt b/feature/src/main/java/com/terning/feature/calendar/scrap/component/CalendarScrap.kt index 538c2737f..239618a87 100644 --- a/feature/src/main/java/com/terning/feature/calendar/scrap/component/CalendarScrap.kt +++ b/feature/src/main/java/com/terning/feature/calendar/scrap/component/CalendarScrap.kt @@ -3,33 +3,10 @@ package com.terning.feature.calendar.scrap.component import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.colorResource import androidx.compose.ui.unit.dp import com.terning.core.designsystem.component.item.InternItem import com.terning.core.designsystem.component.item.ScrapBox import com.terning.domain.entity.response.CalendarScrapDetailModel -import com.terning.feature.calendar.scrap.model.Scrap - -@Composable -fun CalendarScrap( - scrap: Scrap, - modifier: Modifier = Modifier, -) { - ScrapBox( - modifier = modifier, - cornerRadius = 10.dp, - scrapColor = scrap.backgroundColor, - elevation = 1.dp, - ) { - InternItem( - imageUrl = scrap.image.orEmpty(), - title = scrap.text, - dateDeadline = scrap.dDay, - workingPeriod = scrap.period, - isScraped = scrap.isScraped - ) - } -} @Composable fun CalendarScrap( diff --git a/feature/src/main/java/com/terning/feature/calendar/scrap/component/CalendarScrapList.kt b/feature/src/main/java/com/terning/feature/calendar/scrap/component/CalendarScrapList.kt new file mode 100644 index 000000000..844e4e523 --- /dev/null +++ b/feature/src/main/java/com/terning/feature/calendar/scrap/component/CalendarScrapList.kt @@ -0,0 +1,65 @@ +package com.terning.feature.calendar.scrap.component + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.terning.core.designsystem.theme.Black +import com.terning.core.designsystem.theme.TerningTheme +import com.terning.core.extension.getDateStringInKorean +import com.terning.core.extension.isListNotEmpty +import com.terning.domain.entity.response.CalendarScrapDetailModel +import java.time.LocalDate + +@Composable +fun CalendarScrapList( + selectedDate: LocalDate, + scrapList: List, + isFromList: Boolean = false, + noScrapScreen: @Composable () -> Unit +) { + val scrollState = rememberScrollState() + + if (scrapList.isListNotEmpty()) { + Text( + text = selectedDate.getDateStringInKorean(), + style = TerningTheme.typography.title5, + color = Black, + modifier = Modifier.padding(start = 24.dp, top = 16.dp, bottom = 15.dp) + ) + } + val topModifier = if (!isFromList) { + Modifier + .fillMaxWidth() + .padding(horizontal = 24.dp) + .verticalScroll(scrollState) + } else { + Modifier + .fillMaxWidth() + .padding(horizontal = 24.dp) + } + + if (!scrapList.isListNotEmpty()) { + noScrapScreen() + } else { + Column( + modifier = topModifier + ) { + for (scrap in scrapList) { + CalendarScrap( + scrap = scrap + ) + Spacer( + modifier = Modifier.height(12.dp) + ) + } + } + } +} \ No newline at end of file diff --git a/feature/src/main/java/com/terning/feature/calendar/week/CalendarWeekScreen.kt b/feature/src/main/java/com/terning/feature/calendar/week/CalendarWeekScreen.kt index 56b882ff9..b22a15f9a 100644 --- a/feature/src/main/java/com/terning/feature/calendar/week/CalendarWeekScreen.kt +++ b/feature/src/main/java/com/terning/feature/calendar/week/CalendarWeekScreen.kt @@ -2,6 +2,7 @@ package com.terning.feature.calendar.week import androidx.compose.foundation.background import androidx.compose.foundation.border +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding @@ -11,6 +12,7 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.shadow import androidx.compose.ui.res.stringResource @@ -27,9 +29,8 @@ import com.terning.core.designsystem.theme.White import com.terning.core.state.UiState import com.terning.domain.entity.response.CalendarScrapDetailModel import com.terning.feature.R -import com.terning.feature.calendar.calendar.CalendarUiState import com.terning.feature.calendar.calendar.CalendarViewModel -import com.terning.feature.calendar.scrap.CalendarScrapList +import com.terning.feature.calendar.scrap.component.CalendarScrapList import java.time.LocalDate @Composable @@ -63,7 +64,7 @@ fun CalendarWeekScreen( shape = RoundedCornerShape(bottomStart = 20.dp, bottomEnd = 20.dp), ) { - CalendarWeek( + HorizontalCalendarWeek( modifier = Modifier .fillMaxWidth() .background(White), @@ -77,37 +78,47 @@ fun CalendarWeekScreen( when (calendarWeekState.loadState) { is UiState.Loading -> {} is UiState.Empty -> { - Text( - modifier = Modifier - .padding(top = 42.dp) - .fillMaxWidth(), - text = stringResource(id = R.string.calendar_empty_scrap), - textAlign = TextAlign.Center, - style = TerningTheme.typography.body5, - color = Grey400 - ) + CalendarWeekEmpty() } - is UiState.Failure -> {} is UiState.Success -> { val scrapList = (calendarWeekState.loadState as UiState.Success).data - - CalendarScrapList(selectedDate = uiState.selectedDate, scrapList = scrapList) { - Text( - modifier = Modifier - .padding(top = 42.dp) - .fillMaxWidth(), - text = stringResource(id = R.string.calendar_empty_scrap), - textAlign = TextAlign.Center, - style = TerningTheme.typography.body5, - color = Grey400 - ) - } + CalendarWeekSuccess(scrapList = scrapList, selectedDate = uiState.selectedDate) } } } } +@Composable +fun CalendarWeekEmpty( + modifier: Modifier = Modifier +) { + Box( + contentAlignment = Alignment.Center + ) { + + + Text( + modifier = Modifier + .padding(top = 42.dp) + .fillMaxWidth(), + text = stringResource(id = R.string.calendar_empty_scrap), + textAlign = TextAlign.Center, + style = TerningTheme.typography.body5, + color = Grey400 + ) + } +} + +@Composable +fun CalendarWeekSuccess( + scrapList: List, + selectedDate: LocalDate, +) { + + CalendarScrapList(selectedDate = selectedDate, scrapList = scrapList) {} +} + diff --git a/feature/src/main/java/com/terning/feature/calendar/week/CalendarWeek.kt b/feature/src/main/java/com/terning/feature/calendar/week/HorizontalCalendarWeek.kt similarity index 98% rename from feature/src/main/java/com/terning/feature/calendar/week/CalendarWeek.kt rename to feature/src/main/java/com/terning/feature/calendar/week/HorizontalCalendarWeek.kt index 7ed5bf177..4bfe69ba4 100644 --- a/feature/src/main/java/com/terning/feature/calendar/week/CalendarWeek.kt +++ b/feature/src/main/java/com/terning/feature/calendar/week/HorizontalCalendarWeek.kt @@ -19,7 +19,7 @@ import java.time.LocalDate import java.time.YearMonth @Composable -fun CalendarWeek( +fun HorizontalCalendarWeek( selectedDate: CalendarUiState, modifier: Modifier = Modifier, onDateSelected: (LocalDate) -> Unit = {}