From 425b2227bc14f09cceaa3aa8540403931592da2d Mon Sep 17 00:00:00 2001 From: boiledegg Date: Wed, 4 Sep 2024 22:41:27 +0900 Subject: [PATCH 01/15] =?UTF-8?q?[MOVE/#214]=20=EC=BA=98=EB=A6=B0=EB=8D=94?= =?UTF-8?q?=20=EC=97=94=ED=8B=B0=ED=8B=B0=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/terning/data/datasource/ScrapDataSource.kt | 2 +- .../com/terning/data/datasourceimpl/ScrapDataSourceImpl.kt | 2 +- .../terning/data/dto/response/CalendarDayListResponseDto.kt | 1 - .../terning/data/dto/response/CalendarMonthListResponseDto.kt | 1 - .../com/terning/data/dto/response/CalendarMonthResponseDto.kt | 1 - .../com/terning/data/mapper/CalendarScrapDetailListMapper.kt | 2 +- .../java/com/terning/data/mapper/CalendarScrapDetailMapper.kt | 2 +- .../main/java/com/terning/data/mapper/CalendarScrapMapper.kt | 2 +- .../com/terning/data/repositoryimpl/CalendarRepositoryImpl.kt | 4 ++-- .../com/terning/data/repositoryimpl/ScrapRepositoryImpl.kt | 2 +- .../com/terning/domain/entity/{ => calendar}/CalendarScrap.kt | 2 +- .../domain/entity/{ => calendar}/CalendarScrapDetail.kt | 2 +- .../domain/entity/{ => calendar}/CalendarScrapRequest.kt | 2 +- .../java/com/terning/domain/repository/CalendarRepository.kt | 4 ++-- .../java/com/terning/domain/repository/ScrapRepository.kt | 2 +- .../calendar/calendar/component/CalendarDetailDialog.kt | 2 +- .../com/terning/feature/calendar/list/CalendarListScreen.kt | 2 +- .../terning/feature/calendar/list/CalendarListViewModel.kt | 4 ++-- .../terning/feature/calendar/list/component/CalendarScrap.kt | 2 +- .../feature/calendar/list/component/CalendarScrapList.kt | 2 +- .../feature/calendar/list/model/CalendarListUiState.kt | 2 +- .../com/terning/feature/calendar/month/CalendarMonthScreen.kt | 2 +- .../terning/feature/calendar/month/component/CalendarMonth.kt | 2 +- .../feature/calendar/month/component/CalendarMonthScrap.kt | 2 +- .../feature/calendar/month/model/CalendarMonthUiState.kt | 2 +- .../com/terning/feature/calendar/week/CalendarWeekScreen.kt | 2 +- .../terning/feature/calendar/week/CalendarWeekViewModel.kt | 4 ++-- .../feature/calendar/week/model/CalendarWeekUiState.kt | 2 +- .../main/java/com/terning/feature/home/home/HomeViewModel.kt | 2 +- .../main/java/com/terning/feature/intern/InternViewModel.kt | 2 +- .../feature/search/searchprocess/SearchProcessViewModel.kt | 2 +- 31 files changed, 32 insertions(+), 35 deletions(-) rename domain/src/main/java/com/terning/domain/entity/{ => calendar}/CalendarScrap.kt (77%) rename domain/src/main/java/com/terning/domain/entity/{ => calendar}/CalendarScrapDetail.kt (88%) rename domain/src/main/java/com/terning/domain/entity/{ => calendar}/CalendarScrapRequest.kt (64%) diff --git a/data/src/main/java/com/terning/data/datasource/ScrapDataSource.kt b/data/src/main/java/com/terning/data/datasource/ScrapDataSource.kt index c8ee6ff14..ecab3bd13 100644 --- a/data/src/main/java/com/terning/data/datasource/ScrapDataSource.kt +++ b/data/src/main/java/com/terning/data/datasource/ScrapDataSource.kt @@ -1,7 +1,7 @@ package com.terning.data.datasource import com.terning.data.dto.NonDataBaseResponse -import com.terning.domain.entity.CalendarScrapRequest +import com.terning.domain.entity.calendar.CalendarScrapRequest interface ScrapDataSource { suspend fun postScrap( diff --git a/data/src/main/java/com/terning/data/datasourceimpl/ScrapDataSourceImpl.kt b/data/src/main/java/com/terning/data/datasourceimpl/ScrapDataSourceImpl.kt index 46eb24351..fee3ddcc4 100644 --- a/data/src/main/java/com/terning/data/datasourceimpl/ScrapDataSourceImpl.kt +++ b/data/src/main/java/com/terning/data/datasourceimpl/ScrapDataSourceImpl.kt @@ -4,7 +4,7 @@ import com.terning.data.datasource.ScrapDataSource import com.terning.data.dto.NonDataBaseResponse import com.terning.data.dto.request.ScrapColorRequestDto import com.terning.data.service.ScrapService -import com.terning.domain.entity.CalendarScrapRequest +import com.terning.domain.entity.calendar.CalendarScrapRequest import javax.inject.Inject class ScrapDataSourceImpl @Inject constructor( diff --git a/data/src/main/java/com/terning/data/dto/response/CalendarDayListResponseDto.kt b/data/src/main/java/com/terning/data/dto/response/CalendarDayListResponseDto.kt index 3382b4863..60dcd795b 100644 --- a/data/src/main/java/com/terning/data/dto/response/CalendarDayListResponseDto.kt +++ b/data/src/main/java/com/terning/data/dto/response/CalendarDayListResponseDto.kt @@ -1,6 +1,5 @@ package com.terning.data.dto.response -import com.terning.domain.entity.CalendarScrapDetail import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable diff --git a/data/src/main/java/com/terning/data/dto/response/CalendarMonthListResponseDto.kt b/data/src/main/java/com/terning/data/dto/response/CalendarMonthListResponseDto.kt index 227887e51..53c8836d1 100644 --- a/data/src/main/java/com/terning/data/dto/response/CalendarMonthListResponseDto.kt +++ b/data/src/main/java/com/terning/data/dto/response/CalendarMonthListResponseDto.kt @@ -1,6 +1,5 @@ package com.terning.data.dto.response -import com.terning.domain.entity.CalendarScrapDetail import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable diff --git a/data/src/main/java/com/terning/data/dto/response/CalendarMonthResponseDto.kt b/data/src/main/java/com/terning/data/dto/response/CalendarMonthResponseDto.kt index 35df9d9eb..fcf9b9e95 100644 --- a/data/src/main/java/com/terning/data/dto/response/CalendarMonthResponseDto.kt +++ b/data/src/main/java/com/terning/data/dto/response/CalendarMonthResponseDto.kt @@ -1,6 +1,5 @@ package com.terning.data.dto.response -import com.terning.domain.entity.CalendarScrap import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable diff --git a/data/src/main/java/com/terning/data/mapper/CalendarScrapDetailListMapper.kt b/data/src/main/java/com/terning/data/mapper/CalendarScrapDetailListMapper.kt index 377d0e08d..12ae07bfe 100644 --- a/data/src/main/java/com/terning/data/mapper/CalendarScrapDetailListMapper.kt +++ b/data/src/main/java/com/terning/data/mapper/CalendarScrapDetailListMapper.kt @@ -1,7 +1,7 @@ package com.terning.data.mapper import com.terning.data.dto.response.CalendarMonthListResponseDto -import com.terning.domain.entity.CalendarScrapDetail +import com.terning.domain.entity.calendar.CalendarScrapDetail fun CalendarMonthListResponseDto.toCalendarScrapDetailList(): List = scraps.map { scrap -> CalendarScrapDetail( diff --git a/data/src/main/java/com/terning/data/mapper/CalendarScrapDetailMapper.kt b/data/src/main/java/com/terning/data/mapper/CalendarScrapDetailMapper.kt index ee71280b0..0ed618f6f 100644 --- a/data/src/main/java/com/terning/data/mapper/CalendarScrapDetailMapper.kt +++ b/data/src/main/java/com/terning/data/mapper/CalendarScrapDetailMapper.kt @@ -1,7 +1,7 @@ package com.terning.data.mapper import com.terning.data.dto.response.CalendarDayListResponseDto -import com.terning.domain.entity.CalendarScrapDetail +import com.terning.domain.entity.calendar.CalendarScrapDetail fun CalendarDayListResponseDto.toCalendarScrapDetail() = CalendarScrapDetail( diff --git a/data/src/main/java/com/terning/data/mapper/CalendarScrapMapper.kt b/data/src/main/java/com/terning/data/mapper/CalendarScrapMapper.kt index a70241fc3..9d92714e7 100644 --- a/data/src/main/java/com/terning/data/mapper/CalendarScrapMapper.kt +++ b/data/src/main/java/com/terning/data/mapper/CalendarScrapMapper.kt @@ -1,7 +1,7 @@ package com.terning.data.mapper import com.terning.data.dto.response.CalendarMonthResponseDto -import com.terning.domain.entity.CalendarScrap +import com.terning.domain.entity.calendar.CalendarScrap fun CalendarMonthResponseDto.toCalendarScrapList(): List = scraps.map { scrap -> CalendarScrap( diff --git a/data/src/main/java/com/terning/data/repositoryimpl/CalendarRepositoryImpl.kt b/data/src/main/java/com/terning/data/repositoryimpl/CalendarRepositoryImpl.kt index e3da56ef1..c94364171 100644 --- a/data/src/main/java/com/terning/data/repositoryimpl/CalendarRepositoryImpl.kt +++ b/data/src/main/java/com/terning/data/repositoryimpl/CalendarRepositoryImpl.kt @@ -7,8 +7,8 @@ import com.terning.data.dto.request.CalendarMonthRequestDto import com.terning.data.mapper.toCalendarScrapDetail import com.terning.data.mapper.toCalendarScrapDetailList import com.terning.data.mapper.toCalendarScrapList -import com.terning.domain.entity.CalendarScrapDetail -import com.terning.domain.entity.CalendarScrap +import com.terning.domain.entity.calendar.CalendarScrapDetail +import com.terning.domain.entity.calendar.CalendarScrap import com.terning.domain.repository.CalendarRepository import java.time.LocalDate import java.time.format.DateTimeFormatter diff --git a/data/src/main/java/com/terning/data/repositoryimpl/ScrapRepositoryImpl.kt b/data/src/main/java/com/terning/data/repositoryimpl/ScrapRepositoryImpl.kt index 90976c267..ba532fe90 100644 --- a/data/src/main/java/com/terning/data/repositoryimpl/ScrapRepositoryImpl.kt +++ b/data/src/main/java/com/terning/data/repositoryimpl/ScrapRepositoryImpl.kt @@ -1,7 +1,7 @@ package com.terning.data.repositoryimpl import com.terning.data.datasource.ScrapDataSource -import com.terning.domain.entity.CalendarScrapRequest +import com.terning.domain.entity.calendar.CalendarScrapRequest import com.terning.domain.repository.ScrapRepository import javax.inject.Inject diff --git a/domain/src/main/java/com/terning/domain/entity/CalendarScrap.kt b/domain/src/main/java/com/terning/domain/entity/calendar/CalendarScrap.kt similarity index 77% rename from domain/src/main/java/com/terning/domain/entity/CalendarScrap.kt rename to domain/src/main/java/com/terning/domain/entity/calendar/CalendarScrap.kt index 524c21e2f..da23207aa 100644 --- a/domain/src/main/java/com/terning/domain/entity/CalendarScrap.kt +++ b/domain/src/main/java/com/terning/domain/entity/calendar/CalendarScrap.kt @@ -1,4 +1,4 @@ -package com.terning.domain.entity +package com.terning.domain.entity.calendar data class CalendarScrap( val scrapId: Long, diff --git a/domain/src/main/java/com/terning/domain/entity/CalendarScrapDetail.kt b/domain/src/main/java/com/terning/domain/entity/calendar/CalendarScrapDetail.kt similarity index 88% rename from domain/src/main/java/com/terning/domain/entity/CalendarScrapDetail.kt rename to domain/src/main/java/com/terning/domain/entity/calendar/CalendarScrapDetail.kt index 5148a4e49..1dd7729f3 100644 --- a/domain/src/main/java/com/terning/domain/entity/CalendarScrapDetail.kt +++ b/domain/src/main/java/com/terning/domain/entity/calendar/CalendarScrapDetail.kt @@ -1,4 +1,4 @@ -package com.terning.domain.entity +package com.terning.domain.entity.calendar data class CalendarScrapDetail( val scrapId: Long, diff --git a/domain/src/main/java/com/terning/domain/entity/CalendarScrapRequest.kt b/domain/src/main/java/com/terning/domain/entity/calendar/CalendarScrapRequest.kt similarity index 64% rename from domain/src/main/java/com/terning/domain/entity/CalendarScrapRequest.kt rename to domain/src/main/java/com/terning/domain/entity/calendar/CalendarScrapRequest.kt index f87ad429f..8b4d047d2 100644 --- a/domain/src/main/java/com/terning/domain/entity/CalendarScrapRequest.kt +++ b/domain/src/main/java/com/terning/domain/entity/calendar/CalendarScrapRequest.kt @@ -1,4 +1,4 @@ -package com.terning.domain.entity +package com.terning.domain.entity.calendar data class CalendarScrapRequest( val id: Long, diff --git a/domain/src/main/java/com/terning/domain/repository/CalendarRepository.kt b/domain/src/main/java/com/terning/domain/repository/CalendarRepository.kt index 148f062ad..f9b57a318 100644 --- a/domain/src/main/java/com/terning/domain/repository/CalendarRepository.kt +++ b/domain/src/main/java/com/terning/domain/repository/CalendarRepository.kt @@ -1,7 +1,7 @@ package com.terning.domain.repository -import com.terning.domain.entity.CalendarScrapDetail -import com.terning.domain.entity.CalendarScrap +import com.terning.domain.entity.calendar.CalendarScrapDetail +import com.terning.domain.entity.calendar.CalendarScrap import java.time.LocalDate interface CalendarRepository{ diff --git a/domain/src/main/java/com/terning/domain/repository/ScrapRepository.kt b/domain/src/main/java/com/terning/domain/repository/ScrapRepository.kt index 5cf835208..99631d73a 100644 --- a/domain/src/main/java/com/terning/domain/repository/ScrapRepository.kt +++ b/domain/src/main/java/com/terning/domain/repository/ScrapRepository.kt @@ -1,6 +1,6 @@ package com.terning.domain.repository -import com.terning.domain.entity.CalendarScrapRequest +import com.terning.domain.entity.calendar.CalendarScrapRequest interface ScrapRepository { suspend fun postScrap(calendarScrapRequest: CalendarScrapRequest): Result diff --git a/feature/src/main/java/com/terning/feature/calendar/calendar/component/CalendarDetailDialog.kt b/feature/src/main/java/com/terning/feature/calendar/calendar/component/CalendarDetailDialog.kt index caadbfd19..c8fc0668c 100644 --- a/feature/src/main/java/com/terning/feature/calendar/calendar/component/CalendarDetailDialog.kt +++ b/feature/src/main/java/com/terning/feature/calendar/calendar/component/CalendarDetailDialog.kt @@ -45,7 +45,7 @@ import com.terning.core.designsystem.theme.TerningMain import com.terning.core.designsystem.theme.TerningTheme import com.terning.core.designsystem.theme.White import com.terning.core.extension.noRippleClickable -import com.terning.domain.entity.CalendarScrapDetail +import com.terning.domain.entity.calendar.CalendarScrapDetail import com.terning.feature.intern.component.InternInfoRow import java.time.LocalDate diff --git a/feature/src/main/java/com/terning/feature/calendar/list/CalendarListScreen.kt b/feature/src/main/java/com/terning/feature/calendar/list/CalendarListScreen.kt index d5563b7ff..fc6722ee6 100644 --- a/feature/src/main/java/com/terning/feature/calendar/list/CalendarListScreen.kt +++ b/feature/src/main/java/com/terning/feature/calendar/list/CalendarListScreen.kt @@ -37,7 +37,7 @@ import com.terning.core.extension.getFullDateStringInKorean import com.terning.core.extension.isListNotEmpty import com.terning.core.extension.toast import com.terning.core.state.UiState -import com.terning.domain.entity.CalendarScrapDetail +import com.terning.domain.entity.calendar.CalendarScrapDetail import com.terning.feature.R import com.terning.feature.calendar.calendar.component.CalendarCancelDialog import com.terning.feature.calendar.calendar.component.CalendarDetailDialog diff --git a/feature/src/main/java/com/terning/feature/calendar/list/CalendarListViewModel.kt b/feature/src/main/java/com/terning/feature/calendar/list/CalendarListViewModel.kt index a178a7f4d..53cf281b5 100644 --- a/feature/src/main/java/com/terning/feature/calendar/list/CalendarListViewModel.kt +++ b/feature/src/main/java/com/terning/feature/calendar/list/CalendarListViewModel.kt @@ -14,8 +14,8 @@ 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.CalendarScrapDetail -import com.terning.domain.entity.CalendarScrapRequest +import com.terning.domain.entity.calendar.CalendarScrapDetail +import com.terning.domain.entity.calendar.CalendarScrapRequest import com.terning.domain.repository.CalendarRepository import com.terning.domain.repository.ScrapRepository import com.terning.feature.R diff --git a/feature/src/main/java/com/terning/feature/calendar/list/component/CalendarScrap.kt b/feature/src/main/java/com/terning/feature/calendar/list/component/CalendarScrap.kt index aa38a573a..4d5b733db 100644 --- a/feature/src/main/java/com/terning/feature/calendar/list/component/CalendarScrap.kt +++ b/feature/src/main/java/com/terning/feature/calendar/list/component/CalendarScrap.kt @@ -7,7 +7,7 @@ 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.core.extension.noRippleClickable -import com.terning.domain.entity.CalendarScrapDetail +import com.terning.domain.entity.calendar.CalendarScrapDetail @Composable fun CalendarScrap( diff --git a/feature/src/main/java/com/terning/feature/calendar/list/component/CalendarScrapList.kt b/feature/src/main/java/com/terning/feature/calendar/list/component/CalendarScrapList.kt index d8e48179b..3ad9cdb7c 100644 --- a/feature/src/main/java/com/terning/feature/calendar/list/component/CalendarScrapList.kt +++ b/feature/src/main/java/com/terning/feature/calendar/list/component/CalendarScrapList.kt @@ -15,7 +15,7 @@ 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.CalendarScrapDetail +import com.terning.domain.entity.calendar.CalendarScrapDetail import java.time.LocalDate @Composable diff --git a/feature/src/main/java/com/terning/feature/calendar/list/model/CalendarListUiState.kt b/feature/src/main/java/com/terning/feature/calendar/list/model/CalendarListUiState.kt index 6377463d7..80c7ff05d 100644 --- a/feature/src/main/java/com/terning/feature/calendar/list/model/CalendarListUiState.kt +++ b/feature/src/main/java/com/terning/feature/calendar/list/model/CalendarListUiState.kt @@ -1,7 +1,7 @@ package com.terning.feature.calendar.list.model import com.terning.core.state.UiState -import com.terning.domain.entity.CalendarScrapDetail +import com.terning.domain.entity.calendar.CalendarScrapDetail import java.time.LocalDate data class CalendarListUiState( 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 609769fff..5ebbabdd4 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 @@ -14,7 +14,7 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.flowWithLifecycle import com.terning.core.extension.toast import com.terning.core.state.UiState -import com.terning.domain.entity.CalendarScrap +import com.terning.domain.entity.calendar.CalendarScrap import com.terning.feature.calendar.calendar.model.CalendarDefaults.flingBehavior import com.terning.feature.calendar.calendar.model.CalendarModel.Companion.getLocalDateByPage import com.terning.feature.calendar.month.model.MonthModel diff --git a/feature/src/main/java/com/terning/feature/calendar/month/component/CalendarMonth.kt b/feature/src/main/java/com/terning/feature/calendar/month/component/CalendarMonth.kt index 2abffd608..72dd512d3 100644 --- a/feature/src/main/java/com/terning/feature/calendar/month/component/CalendarMonth.kt +++ b/feature/src/main/java/com/terning/feature/calendar/month/component/CalendarMonth.kt @@ -16,7 +16,7 @@ import com.terning.core.designsystem.theme.TerningPointTheme import com.terning.core.extension.getDateAsMapString import com.terning.core.extension.isToday import com.terning.core.extension.noRippleClickable -import com.terning.domain.entity.CalendarScrap +import com.terning.domain.entity.calendar.CalendarScrap import com.terning.feature.calendar.calendar.component.CalendarDay import com.terning.feature.calendar.month.model.MonthModel import java.time.LocalDate diff --git a/feature/src/main/java/com/terning/feature/calendar/month/component/CalendarMonthScrap.kt b/feature/src/main/java/com/terning/feature/calendar/month/component/CalendarMonthScrap.kt index ba27ba799..a5cb9e66d 100644 --- a/feature/src/main/java/com/terning/feature/calendar/month/component/CalendarMonthScrap.kt +++ b/feature/src/main/java/com/terning/feature/calendar/month/component/CalendarMonthScrap.kt @@ -16,7 +16,7 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import com.terning.core.designsystem.theme.TerningTheme import com.terning.core.designsystem.theme.White -import com.terning.domain.entity.CalendarScrap +import com.terning.domain.entity.calendar.CalendarScrap import com.terning.feature.R private const val MAX_SCRAP_COUNT = 3 diff --git a/feature/src/main/java/com/terning/feature/calendar/month/model/CalendarMonthUiState.kt b/feature/src/main/java/com/terning/feature/calendar/month/model/CalendarMonthUiState.kt index 9734222ee..89e0f0f45 100644 --- a/feature/src/main/java/com/terning/feature/calendar/month/model/CalendarMonthUiState.kt +++ b/feature/src/main/java/com/terning/feature/calendar/month/model/CalendarMonthUiState.kt @@ -1,7 +1,7 @@ package com.terning.feature.calendar.month.model import com.terning.core.state.UiState -import com.terning.domain.entity.CalendarScrap +import com.terning.domain.entity.calendar.CalendarScrap data class CalendarMonthUiState( val loadState: UiState>> = UiState.Loading 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 44ee9d65c..242fcc7d2 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 @@ -31,7 +31,7 @@ import com.terning.core.designsystem.theme.White import com.terning.core.extension.getFullDateStringInKorean import com.terning.core.extension.toast import com.terning.core.state.UiState -import com.terning.domain.entity.CalendarScrapDetail +import com.terning.domain.entity.calendar.CalendarScrapDetail import com.terning.feature.R import com.terning.feature.calendar.calendar.component.CalendarCancelDialog import com.terning.feature.calendar.calendar.component.CalendarDetailDialog diff --git a/feature/src/main/java/com/terning/feature/calendar/week/CalendarWeekViewModel.kt b/feature/src/main/java/com/terning/feature/calendar/week/CalendarWeekViewModel.kt index 07337f7db..d581c6b81 100644 --- a/feature/src/main/java/com/terning/feature/calendar/week/CalendarWeekViewModel.kt +++ b/feature/src/main/java/com/terning/feature/calendar/week/CalendarWeekViewModel.kt @@ -14,8 +14,8 @@ 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.CalendarScrapDetail -import com.terning.domain.entity.CalendarScrapRequest +import com.terning.domain.entity.calendar.CalendarScrapDetail +import com.terning.domain.entity.calendar.CalendarScrapRequest import com.terning.domain.repository.CalendarRepository import com.terning.domain.repository.ScrapRepository import com.terning.feature.R diff --git a/feature/src/main/java/com/terning/feature/calendar/week/model/CalendarWeekUiState.kt b/feature/src/main/java/com/terning/feature/calendar/week/model/CalendarWeekUiState.kt index b878bbb2f..5589093f1 100644 --- a/feature/src/main/java/com/terning/feature/calendar/week/model/CalendarWeekUiState.kt +++ b/feature/src/main/java/com/terning/feature/calendar/week/model/CalendarWeekUiState.kt @@ -1,7 +1,7 @@ package com.terning.feature.calendar.week.model import com.terning.core.state.UiState -import com.terning.domain.entity.CalendarScrapDetail +import com.terning.domain.entity.calendar.CalendarScrapDetail import java.time.LocalDate data class CalendarWeekUiState( diff --git a/feature/src/main/java/com/terning/feature/home/home/HomeViewModel.kt b/feature/src/main/java/com/terning/feature/home/home/HomeViewModel.kt index 96c958fe1..3269ce21f 100644 --- a/feature/src/main/java/com/terning/feature/home/home/HomeViewModel.kt +++ b/feature/src/main/java/com/terning/feature/home/home/HomeViewModel.kt @@ -5,7 +5,7 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.terning.core.designsystem.theme.CalRed import com.terning.core.state.UiState -import com.terning.domain.entity.CalendarScrapRequest +import com.terning.domain.entity.calendar.CalendarScrapRequest import com.terning.domain.entity.request.ChangeFilteringRequestModel import com.terning.domain.repository.HomeRepository import com.terning.domain.repository.MyPageRepository diff --git a/feature/src/main/java/com/terning/feature/intern/InternViewModel.kt b/feature/src/main/java/com/terning/feature/intern/InternViewModel.kt index 13e71a697..ff95fcc8e 100644 --- a/feature/src/main/java/com/terning/feature/intern/InternViewModel.kt +++ b/feature/src/main/java/com/terning/feature/intern/InternViewModel.kt @@ -4,7 +4,7 @@ import androidx.compose.ui.graphics.Color import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.terning.core.state.UiState -import com.terning.domain.entity.CalendarScrapRequest +import com.terning.domain.entity.calendar.CalendarScrapRequest import com.terning.domain.repository.InternRepository import com.terning.domain.repository.ScrapRepository import com.terning.feature.R diff --git a/feature/src/main/java/com/terning/feature/search/searchprocess/SearchProcessViewModel.kt b/feature/src/main/java/com/terning/feature/search/searchprocess/SearchProcessViewModel.kt index a36b01dcd..8f8028280 100644 --- a/feature/src/main/java/com/terning/feature/search/searchprocess/SearchProcessViewModel.kt +++ b/feature/src/main/java/com/terning/feature/search/searchprocess/SearchProcessViewModel.kt @@ -3,7 +3,7 @@ package com.terning.feature.search.searchprocess import androidx.compose.ui.graphics.Color import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.terning.domain.entity.CalendarScrapRequest +import com.terning.domain.entity.calendar.CalendarScrapRequest import com.terning.domain.entity.search.SearchResult import com.terning.domain.repository.ScrapRepository import com.terning.domain.repository.SearchRepository From 9ccac2e034b3576f06673cb06482131f89a86aea Mon Sep 17 00:00:00 2001 From: boiledegg Date: Wed, 4 Sep 2024 22:47:02 +0900 Subject: [PATCH 02/15] =?UTF-8?q?[UI/#214]=20=ED=83=91=EB=B0=94=20?= =?UTF-8?q?=EB=A7=88=EC=A7=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designsystem/component/topappbar/CalendarTopAppBar.kt | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/com/terning/core/designsystem/component/topappbar/CalendarTopAppBar.kt b/core/src/main/java/com/terning/core/designsystem/component/topappbar/CalendarTopAppBar.kt index dc0089100..70fdab3eb 100644 --- a/core/src/main/java/com/terning/core/designsystem/component/topappbar/CalendarTopAppBar.kt +++ b/core/src/main/java/com/terning/core/designsystem/component/topappbar/CalendarTopAppBar.kt @@ -40,10 +40,8 @@ fun CalendarTopAppBar( .fillMaxWidth() .background(color = Color.White) .padding( - top = 23.dp, - bottom = 22.dp, - start = 22.dp, - end = 22.dp + vertical = 20.dp, + horizontal = 21.dp ) ) { Row( From 78548f53bc54b3924e1dda9686c855adad8e4161 Mon Sep 17 00:00:00 2001 From: boiledegg Date: Wed, 4 Sep 2024 23:46:14 +0900 Subject: [PATCH 03/15] =?UTF-8?q?[UI/#214]=20=EC=8A=A4=ED=81=AC=EB=9E=A9?= =?UTF-8?q?=20=ED=91=9C=EC=8B=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calendar/month/component/CalendarMonth.kt | 1 + .../calendar/month/component/CalendarMonthScrap.kt | 14 +++++++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/feature/src/main/java/com/terning/feature/calendar/month/component/CalendarMonth.kt b/feature/src/main/java/com/terning/feature/calendar/month/component/CalendarMonth.kt index 72dd512d3..7a6ee8ef6 100644 --- a/feature/src/main/java/com/terning/feature/calendar/month/component/CalendarMonth.kt +++ b/feature/src/main/java/com/terning/feature/calendar/month/component/CalendarMonth.kt @@ -63,6 +63,7 @@ internal fun CalendarMonth( if (!day.isOutDate) { val index = day.date.getDateAsMapString() CalendarMonthScrap( + weekCount = month.size, scrapLists = scrapMap[index].orEmpty(), modifier = Modifier.fillMaxWidth() ) diff --git a/feature/src/main/java/com/terning/feature/calendar/month/component/CalendarMonthScrap.kt b/feature/src/main/java/com/terning/feature/calendar/month/component/CalendarMonthScrap.kt index a5cb9e66d..f20ca1b91 100644 --- a/feature/src/main/java/com/terning/feature/calendar/month/component/CalendarMonthScrap.kt +++ b/feature/src/main/java/com/terning/feature/calendar/month/component/CalendarMonthScrap.kt @@ -19,17 +19,21 @@ import com.terning.core.designsystem.theme.White import com.terning.domain.entity.calendar.CalendarScrap import com.terning.feature.R -private const val MAX_SCRAP_COUNT = 3 +private const val SCRAP_COUNT_WEEK_SIX = 3 +private const val SCRAP_COUNT_WEEK_FIVE = 4 @Composable internal fun CalendarMonthScrap( + weekCount: Int, modifier: Modifier = Modifier, scrapLists: List ) { + val scrapCount = if(weekCount == 5) SCRAP_COUNT_WEEK_FIVE else SCRAP_COUNT_WEEK_SIX + LazyColumn( modifier = modifier ) { - items(scrapLists.subList(0, MAX_SCRAP_COUNT.coerceAtMost(scrapLists.size))) { scrap -> + items(scrapLists.subList(0, scrapCount.coerceAtMost(scrapLists.size))) { scrap -> Text( text = scrap.title, style = TerningTheme.typography.button5, @@ -49,11 +53,11 @@ internal fun CalendarMonthScrap( } item { - if (scrapLists.size > MAX_SCRAP_COUNT) { + if (scrapLists.size > scrapCount) { Text( - text = stringResource(id = R.string.calendar_scrap_overflow, (scrapLists.size - MAX_SCRAP_COUNT)), + text = stringResource(id = R.string.calendar_scrap_overflow, (scrapLists.size - scrapCount)), style = TerningTheme.typography.detail4, - textAlign = TextAlign.Center, + textAlign = TextAlign.End, modifier = Modifier.fillMaxWidth() ) } From d35d75cce2117f610719df2d80beb66c6d16dc39 Mon Sep 17 00:00:00 2001 From: boiledegg Date: Thu, 5 Sep 2024 00:18:21 +0900 Subject: [PATCH 04/15] =?UTF-8?q?[UI/#214]=20=EC=A3=BC=EA=B0=84->=EC=9B=94?= =?UTF-8?q?=EA=B0=84=20=EB=AA=A8=EC=85=98=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/terning/core/extension/Modifier.kt | 32 +++++++++++++++++++ .../calendar/week/CalendarWeekScreen.kt | 16 +++++++++- 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/com/terning/core/extension/Modifier.kt b/core/src/main/java/com/terning/core/extension/Modifier.kt index 789d198b5..86f9aa963 100644 --- a/core/src/main/java/com/terning/core/extension/Modifier.kt +++ b/core/src/main/java/com/terning/core/extension/Modifier.kt @@ -6,11 +6,15 @@ import androidx.compose.foundation.clickable import androidx.compose.foundation.gestures.detectTapGestures import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.composed import androidx.compose.ui.draw.drawBehind import androidx.compose.ui.focus.FocusManager +import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Paint import androidx.compose.ui.graphics.drawscope.drawIntoCanvas @@ -88,3 +92,31 @@ fun Modifier.customShadow( } } } + +@SuppressLint("ModifierFactoryUnreferencedReceiver", "ReturnFromAwaitPointerEventScope") +fun Modifier.swipableVertically( + setHideComponent: () -> Unit +) = composed { + var initialTouchPosition by remember { mutableStateOf(null) } + pointerInput(Unit) { + awaitPointerEventScope { + while (true) { + val event = awaitPointerEvent() + val position = event.changes.first().position + + if (event.changes.first().pressed) { + if (initialTouchPosition == null) { + initialTouchPosition = position + } else { + val deltaY = initialTouchPosition?.let { position.y - it.y } + if (deltaY != null && deltaY > 300f) { + setHideComponent() + } + } + } else { + initialTouchPosition = null + } + } + } + } +} 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 242fcc7d2..b67f7f725 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 @@ -12,10 +12,15 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.shadow +import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.Color +import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign @@ -29,6 +34,7 @@ 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.getFullDateStringInKorean +import com.terning.core.extension.swipableVertically import com.terning.core.extension.toast import com.terning.core.state.UiState import com.terning.domain.entity.calendar.CalendarScrapDetail @@ -110,12 +116,20 @@ private fun CalendarWeekScreen( navigateToAnnouncement: (Long) -> Unit, modifier: Modifier = Modifier ) { + var swiped by remember { mutableStateOf(false) } + + LaunchedEffect(swiped) { + if(swiped) { + updateSelectedDate(selectedDate) + } + } + Column( modifier = modifier .background(Back) ) { Card( - modifier = Modifier + modifier = Modifier.swipableVertically { swiped = true } .shadow( shape = RoundedCornerShape(bottomStart = 20.dp, bottomEnd = 20.dp), elevation = 1.dp From dcd877209a66939856188ccc5c1e86a6d597aa2b Mon Sep 17 00:00:00 2001 From: boiledegg Date: Thu, 5 Sep 2024 02:13:09 +0900 Subject: [PATCH 05/15] =?UTF-8?q?[FEAT/#214]=20DTO=20=EB=B0=8F=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../response/CalendarDayListResponseDto.kt | 12 +++---- .../response/CalendarMonthListResponseDto.kt | 26 ++++++++-------- .../mapper/CalendarScrapDetailListMapper.kt | 21 ++++++------- .../data/mapper/CalendarScrapDetailMapper.kt | 7 ++--- .../repositoryimpl/CalendarRepositoryImpl.kt | 2 +- .../entity/calendar/CalendarScrapDetail.kt | 8 ++--- .../component/CalendarDetailDialog.kt | 3 +- .../calendar/list/CalendarListScreen.kt | 31 ++++++++++++++----- .../calendar/list/CalendarListViewModel.kt | 16 +++++----- .../calendar/list/component/CalendarScrap.kt | 4 +-- .../list/model/CalendarListUiState.kt | 2 +- .../calendar/week/CalendarWeekScreen.kt | 4 +-- .../calendar/week/CalendarWeekViewModel.kt | 4 +-- .../week/model/CalendarWeekUiState.kt | 2 +- 14 files changed, 77 insertions(+), 65 deletions(-) diff --git a/data/src/main/java/com/terning/data/dto/response/CalendarDayListResponseDto.kt b/data/src/main/java/com/terning/data/dto/response/CalendarDayListResponseDto.kt index 60dcd795b..d2e897972 100644 --- a/data/src/main/java/com/terning/data/dto/response/CalendarDayListResponseDto.kt +++ b/data/src/main/java/com/terning/data/dto/response/CalendarDayListResponseDto.kt @@ -5,22 +5,22 @@ import kotlinx.serialization.Serializable @Serializable data class CalendarDayListResponseDto( - @SerialName("scrapId") - val scrapId: Long, @SerialName("internshipAnnouncementId") val internshipAnnouncementId: Long, @SerialName("title") val title: String, @SerialName("dDay") val dDay: String, + @SerialName("deadline") + val deadline: String, @SerialName("workingPeriod") val workingPeriod: String, @SerialName("color") val color: String, @SerialName("companyImage") val companyImage: String, - @SerialName("startYear") - val startYear: Int, - @SerialName("startMonth") - val startMonth: Int + @SerialName("startYearMonth") + val startYearMonth: String, + @SerialName("isScrapped") + val isScrapped: Boolean ) \ No newline at end of file diff --git a/data/src/main/java/com/terning/data/dto/response/CalendarMonthListResponseDto.kt b/data/src/main/java/com/terning/data/dto/response/CalendarMonthListResponseDto.kt index 53c8836d1..35c2e45aa 100644 --- a/data/src/main/java/com/terning/data/dto/response/CalendarMonthListResponseDto.kt +++ b/data/src/main/java/com/terning/data/dto/response/CalendarMonthListResponseDto.kt @@ -7,28 +7,28 @@ import kotlinx.serialization.Serializable data class CalendarMonthListResponseDto( @SerialName("deadline") val deadline: String, - @SerialName("scraps") - val scraps: List + @SerialName("announcements") + val announcements: List ) { @Serializable - data class Scrap( - @SerialName("scrapId") - val scrapId: Long, + data class Announcement( @SerialName("internshipAnnouncementId") val internshipAnnouncementId: Long, - @SerialName("title") - val title: String, + @SerialName("companyImage") + val companyImage: String, @SerialName("dDay") val dDay: String, + @SerialName("title") + val title: String, @SerialName("workingPeriod") val workingPeriod: String, + @SerialName("isScrapped") + val isScrapped: Boolean, @SerialName("color") val color: String, - @SerialName("companyImage") - val companyImage: String, - @SerialName("startYear") - val startYear: Int, - @SerialName("startMonth") - val startMonth: Int + @SerialName("deadline") + val deadline: String, + @SerialName("startYearMonth") + val startYearMonth: String, ) } \ No newline at end of file diff --git a/data/src/main/java/com/terning/data/mapper/CalendarScrapDetailListMapper.kt b/data/src/main/java/com/terning/data/mapper/CalendarScrapDetailListMapper.kt index 12ae07bfe..a6701e8bb 100644 --- a/data/src/main/java/com/terning/data/mapper/CalendarScrapDetailListMapper.kt +++ b/data/src/main/java/com/terning/data/mapper/CalendarScrapDetailListMapper.kt @@ -3,17 +3,16 @@ package com.terning.data.mapper import com.terning.data.dto.response.CalendarMonthListResponseDto import com.terning.domain.entity.calendar.CalendarScrapDetail -fun CalendarMonthListResponseDto.toCalendarScrapDetailList(): List = scraps.map { scrap -> +fun CalendarMonthListResponseDto.toCalendarScrapDetailList(): List = announcements.map { announcement -> CalendarScrapDetail( - scrapId = scrap.scrapId, - internshipAnnouncementId = scrap.internshipAnnouncementId, - title = scrap.title, - dDay = scrap.dDay, - workingPeriod = scrap.workingPeriod, - color = scrap.color, - companyImage = scrap.companyImage, - startYear = scrap.startYear, - startMonth = scrap.startMonth, - deadLine = deadline + internshipAnnouncementId = announcement.internshipAnnouncementId, + title = announcement.title, + dDay = announcement.dDay, + workingPeriod = announcement.workingPeriod, + color = announcement.color, + companyImage = announcement.companyImage, + startYearMonth = announcement.startYearMonth, + deadline = announcement.deadline, + isScrapped = announcement.isScrapped ) } \ No newline at end of file diff --git a/data/src/main/java/com/terning/data/mapper/CalendarScrapDetailMapper.kt b/data/src/main/java/com/terning/data/mapper/CalendarScrapDetailMapper.kt index 0ed618f6f..e2280c2ce 100644 --- a/data/src/main/java/com/terning/data/mapper/CalendarScrapDetailMapper.kt +++ b/data/src/main/java/com/terning/data/mapper/CalendarScrapDetailMapper.kt @@ -5,14 +5,13 @@ import com.terning.domain.entity.calendar.CalendarScrapDetail fun CalendarDayListResponseDto.toCalendarScrapDetail() = CalendarScrapDetail( - scrapId = scrapId, internshipAnnouncementId = internshipAnnouncementId, title = title, dDay = dDay, workingPeriod = workingPeriod, color = color, companyImage = companyImage, - startYear = startYear, - startMonth = startMonth, - deadLine = "" + startYearMonth = startYearMonth, + deadline = deadline, + isScrapped = isScrapped ) diff --git a/data/src/main/java/com/terning/data/repositoryimpl/CalendarRepositoryImpl.kt b/data/src/main/java/com/terning/data/repositoryimpl/CalendarRepositoryImpl.kt index c94364171..ad1c64648 100644 --- a/data/src/main/java/com/terning/data/repositoryimpl/CalendarRepositoryImpl.kt +++ b/data/src/main/java/com/terning/data/repositoryimpl/CalendarRepositoryImpl.kt @@ -50,7 +50,7 @@ class CalendarRepositoryImpl @Inject constructor( val scrapModelMapByDeadLine = result.flatMap { dto -> dto.toCalendarScrapDetailList() - }.groupBy { it.deadLine } + }.groupBy { it.deadline } scrapModelMapByDeadLine } diff --git a/domain/src/main/java/com/terning/domain/entity/calendar/CalendarScrapDetail.kt b/domain/src/main/java/com/terning/domain/entity/calendar/CalendarScrapDetail.kt index 1dd7729f3..a4729ffc6 100644 --- a/domain/src/main/java/com/terning/domain/entity/calendar/CalendarScrapDetail.kt +++ b/domain/src/main/java/com/terning/domain/entity/calendar/CalendarScrapDetail.kt @@ -1,15 +1,13 @@ package com.terning.domain.entity.calendar data class CalendarScrapDetail( - val scrapId: Long, val internshipAnnouncementId: Long, val title: String, val dDay: String, val workingPeriod: String, + val deadline: String, val color: String, val companyImage: String, - val startYear: Int, - val startMonth: Int, - val deadLine: String, - val isScrapped: Boolean = true + val startYearMonth: String, + val isScrapped: Boolean ) diff --git a/feature/src/main/java/com/terning/feature/calendar/calendar/component/CalendarDetailDialog.kt b/feature/src/main/java/com/terning/feature/calendar/calendar/component/CalendarDetailDialog.kt index c8fc0668c..af90f4079 100644 --- a/feature/src/main/java/com/terning/feature/calendar/calendar/component/CalendarDetailDialog.kt +++ b/feature/src/main/java/com/terning/feature/calendar/calendar/component/CalendarDetailDialog.kt @@ -222,8 +222,7 @@ private fun InternDialogContent( ) InternInfoRow( title = stringResource(id = com.terning.feature.R.string.intern_info_start_date), - value = "${scrapDetailModel?.startYear ?: LocalDate.now().year}년 " + - "${scrapDetailModel?.startMonth ?: LocalDate.now().monthValue}월" + value = scrapDetailModel?.startYearMonth.orEmpty() ) } } diff --git a/feature/src/main/java/com/terning/feature/calendar/list/CalendarListScreen.kt b/feature/src/main/java/com/terning/feature/calendar/list/CalendarListScreen.kt index fc6722ee6..b5fb5d7a8 100644 --- a/feature/src/main/java/com/terning/feature/calendar/list/CalendarListScreen.kt +++ b/feature/src/main/java/com/terning/feature/calendar/list/CalendarListScreen.kt @@ -46,6 +46,7 @@ import com.terning.feature.calendar.calendar.model.CalendarModel.Companion.getLo import com.terning.feature.calendar.list.component.CalendarScrapList import com.terning.feature.calendar.list.model.CalendarListUiState import kotlinx.coroutines.flow.distinctUntilChanged +import timber.log.Timber import java.time.LocalDate @Composable @@ -89,9 +90,9 @@ fun CalendarListRoute( onDismissCancelDialog = { viewModel.updateScrapCancelDialogVisibility(false) }, onDismissInternDialog = { viewModel.updateInternDialogVisibility(false) }, onClickChangeColor = { newColor -> viewModel.patchScrap(newColor) }, - onClickScrapCancel = { uiState.scrapId?.let { viewModel.deleteScrap(it) } }, + onClickScrapCancel = { uiState.internshipAnnouncementId?.let { viewModel.deleteScrap(it) } }, onClickScrapButton = { scrapId -> - viewModel.updateScrapId(scrapId) + viewModel.updateAnnouncementId(scrapId) viewModel.updateScrapCancelDialogVisibility(true) }, onClickInternship = { calendarScrapDetail -> @@ -135,7 +136,24 @@ private fun CalendarListScreen( .background(Back) ) { when (uiState.loadState) { - UiState.Loading -> {} + UiState.Loading -> { + item { + Box( + modifier = Modifier.fillMaxSize(), + contentAlignment = Alignment.Center + ) { + Text( + modifier = Modifier + .padding(top = 42.dp) + .fillMaxWidth(), + text = stringResource(id = R.string.calendar_text_friday), + textAlign = TextAlign.Center, + style = TerningTheme.typography.body5, + color = Grey400 + ) + } + } + } UiState.Empty -> { item { Box( @@ -157,11 +175,10 @@ private fun CalendarListScreen( is UiState.Failure -> {} is UiState.Success -> { + val scrapMap = uiState.loadState.data items(getDate.lengthOfMonth()) { day -> - val scrapMap = uiState.loadState.data - val currentDate = - LocalDate.of(getDate.year, getDate.monthValue, day + 1) - val dateIndex = currentDate.getDateAsMapString() + val currentDate = LocalDate.of(getDate.year, getDate.monthValue, day + 1) + val dateIndex = currentDate.getFullDateStringInKorean() if (scrapMap[dateIndex].isListNotEmpty()) { CalendarScrapList( diff --git a/feature/src/main/java/com/terning/feature/calendar/list/CalendarListViewModel.kt b/feature/src/main/java/com/terning/feature/calendar/list/CalendarListViewModel.kt index 53cf281b5..6c522ac79 100644 --- a/feature/src/main/java/com/terning/feature/calendar/list/CalendarListViewModel.kt +++ b/feature/src/main/java/com/terning/feature/calendar/list/CalendarListViewModel.kt @@ -29,6 +29,7 @@ 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 @@ -59,10 +60,10 @@ class CalendarListViewModel @Inject constructor( } } - fun updateScrapId(scrapId: Long? = null) { + fun updateAnnouncementId(announcementId: Long? = null) { _uiState.update { currentState -> currentState.copy( - scrapId = scrapId + internshipAnnouncementId = announcementId ) } } @@ -104,19 +105,20 @@ class CalendarListViewModel @Inject constructor( currentState.copy( loadState = UiState.Failure(it.message.toString()) ) - } + Timber.tag("calendarviewmodel").d("getMonthListFailed") + _sideEffect.emit(CalendarListSideEffect.ShowToast(R.string.server_failure)) } ) } fun deleteScrap( - scrapId: Long + internshipAnnouncementId: Long ) = viewModelScope.launch { _uiState.value.loadState .takeIf { it is UiState.Success } - ?.let { CalendarScrapRequest(scrapId, null) }?.let { scrapRequestModel -> + ?.let { CalendarScrapRequest(internshipAnnouncementId, null) }?.let { scrapRequestModel -> scrapRepository.deleteScrap( scrapRequestModel ).onSuccess { @@ -134,10 +136,10 @@ class CalendarListViewModel @Inject constructor( fun patchScrap( color: Color ) = viewModelScope.launch { - val scrapId = _uiState.value.internshipModel?.scrapId ?: 0 + val announcementId = _uiState.value.internshipModel?.internshipAnnouncementId ?: 0 val colorIndex = getColorIndex(color) - scrapRepository.patchScrap(CalendarScrapRequest(scrapId, colorIndex)) + scrapRepository.patchScrap(CalendarScrapRequest(announcementId, colorIndex)) .onSuccess { runCatching { getScrapMonthList(_uiState.value.currentDate) diff --git a/feature/src/main/java/com/terning/feature/calendar/list/component/CalendarScrap.kt b/feature/src/main/java/com/terning/feature/calendar/list/component/CalendarScrap.kt index 4d5b733db..8349ac8fb 100644 --- a/feature/src/main/java/com/terning/feature/calendar/list/component/CalendarScrap.kt +++ b/feature/src/main/java/com/terning/feature/calendar/list/component/CalendarScrap.kt @@ -25,8 +25,8 @@ fun CalendarScrap( elevation = 1.dp, ) { InternItem( - scrapId = scrap.scrapId, - imageUrl = scrap.companyImage.orEmpty(), + scrapId = scrap.internshipAnnouncementId, + imageUrl = scrap.companyImage, title = scrap.title, dateDeadline = scrap.dDay, workingPeriod = scrap.workingPeriod, diff --git a/feature/src/main/java/com/terning/feature/calendar/list/model/CalendarListUiState.kt b/feature/src/main/java/com/terning/feature/calendar/list/model/CalendarListUiState.kt index 80c7ff05d..1e7fb236f 100644 --- a/feature/src/main/java/com/terning/feature/calendar/list/model/CalendarListUiState.kt +++ b/feature/src/main/java/com/terning/feature/calendar/list/model/CalendarListUiState.kt @@ -9,6 +9,6 @@ data class CalendarListUiState( val currentDate: LocalDate = LocalDate.now(), val scrapDialogVisibility: Boolean = false, val internDialogVisibility: Boolean = false, - val scrapId: Long? = null, + val internshipAnnouncementId: Long? = null, val internshipModel: CalendarScrapDetail? = null ) \ 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 b67f7f725..391618022 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 @@ -18,9 +18,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.shadow -import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.Color -import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign @@ -86,7 +84,7 @@ fun CalendarWeekRoute( onDismissCancelDialog = { viewModel.updateScrapCancelDialogVisibility(false) }, onDismissInternDialog = { viewModel.updateInternDialogVisibility(false) }, onClickChangeColor = { viewModel.patchScrap(it) }, - onClickScrapCancel = { uiState.scrapId?.let { viewModel.deleteScrap(it) } }, + onClickScrapCancel = { uiState.internshipAnnouncementId?.let { viewModel.deleteScrap(it) } }, onClickScrapButton = {scrapId -> with(viewModel) { updateScrapId(scrapId) diff --git a/feature/src/main/java/com/terning/feature/calendar/week/CalendarWeekViewModel.kt b/feature/src/main/java/com/terning/feature/calendar/week/CalendarWeekViewModel.kt index d581c6b81..402382729 100644 --- a/feature/src/main/java/com/terning/feature/calendar/week/CalendarWeekViewModel.kt +++ b/feature/src/main/java/com/terning/feature/calendar/week/CalendarWeekViewModel.kt @@ -62,7 +62,7 @@ class CalendarWeekViewModel @Inject constructor( fun updateScrapId(scrapId: Long? = null) { _uiState.update { currentState -> currentState.copy( - scrapId = scrapId + internshipAnnouncementId = scrapId ) } } @@ -127,7 +127,7 @@ class CalendarWeekViewModel @Inject constructor( } fun patchScrap(color: Color) = viewModelScope.launch { - val scrapId = _uiState.value.internshipModel?.scrapId ?: 0 + val scrapId = _uiState.value.internshipModel?.internshipAnnouncementId ?: 0 val colorIndex = getColorIndex(color) scrapRepository.patchScrap(CalendarScrapRequest(scrapId, colorIndex)) diff --git a/feature/src/main/java/com/terning/feature/calendar/week/model/CalendarWeekUiState.kt b/feature/src/main/java/com/terning/feature/calendar/week/model/CalendarWeekUiState.kt index 5589093f1..08932e1e7 100644 --- a/feature/src/main/java/com/terning/feature/calendar/week/model/CalendarWeekUiState.kt +++ b/feature/src/main/java/com/terning/feature/calendar/week/model/CalendarWeekUiState.kt @@ -9,6 +9,6 @@ data class CalendarWeekUiState( val selectedDate: LocalDate = LocalDate.now(), val scrapDialogVisibility: Boolean = false, val internDialogVisibility: Boolean = false, - val scrapId: Long? = null, + val internshipAnnouncementId: Long? = null, val internshipModel: CalendarScrapDetail? = null ) \ No newline at end of file From b4fecf8a813be6b4bf2e7203c00d79154905355a Mon Sep 17 00:00:00 2001 From: boiledegg Date: Thu, 5 Sep 2024 02:16:23 +0900 Subject: [PATCH 06/15] =?UTF-8?q?[FIX/#214]=20=EC=8A=A4=ED=81=AC=EB=9E=A9?= =?UTF-8?q?=20=EB=AA=A9=EB=A1=9D=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calendar/list/CalendarListScreen.kt | 24 ++++++++++--------- .../calendar/list/CalendarListViewModel.kt | 1 - .../list/component/CalendarScrapList.kt | 10 -------- .../calendar/week/CalendarWeekScreen.kt | 10 ++++++++ 4 files changed, 23 insertions(+), 22 deletions(-) diff --git a/feature/src/main/java/com/terning/feature/calendar/list/CalendarListScreen.kt b/feature/src/main/java/com/terning/feature/calendar/list/CalendarListScreen.kt index b5fb5d7a8..081d7f503 100644 --- a/feature/src/main/java/com/terning/feature/calendar/list/CalendarListScreen.kt +++ b/feature/src/main/java/com/terning/feature/calendar/list/CalendarListScreen.kt @@ -28,11 +28,13 @@ import androidx.lifecycle.compose.LocalLifecycleOwner import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.flowWithLifecycle import com.terning.core.designsystem.theme.Back +import com.terning.core.designsystem.theme.Black import com.terning.core.designsystem.theme.Grey200 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.getFullDateStringInKorean import com.terning.core.extension.isListNotEmpty import com.terning.core.extension.toast @@ -178,24 +180,24 @@ private fun CalendarListScreen( val scrapMap = uiState.loadState.data items(getDate.lengthOfMonth()) { day -> val currentDate = LocalDate.of(getDate.year, getDate.monthValue, day + 1) - val dateIndex = currentDate.getFullDateStringInKorean() + val dateInKorean = currentDate.getFullDateStringInKorean() + + if (scrapMap[dateInKorean].isListNotEmpty()) { + Text( + text = dateInKorean, + style = TerningTheme.typography.title5, + color = Black, + modifier = Modifier + .padding(start = 24.dp, top = 16.dp, bottom = 15.dp) + ) - if (scrapMap[dateIndex].isListNotEmpty()) { CalendarScrapList( selectedDate = currentDate, - scrapList = scrapMap[dateIndex].orEmpty(), + scrapList = scrapMap[dateInKorean].orEmpty(), onScrapButtonClicked = onClickScrapButton, onInternshipClicked = onClickInternship, isFromList = true ) - - Spacer( - modifier = Modifier - .padding(top = 4.dp) - .fillMaxWidth() - .height(4.dp) - .background(Grey200) - ) } } } diff --git a/feature/src/main/java/com/terning/feature/calendar/list/CalendarListViewModel.kt b/feature/src/main/java/com/terning/feature/calendar/list/CalendarListViewModel.kt index 6c522ac79..af156b08b 100644 --- a/feature/src/main/java/com/terning/feature/calendar/list/CalendarListViewModel.kt +++ b/feature/src/main/java/com/terning/feature/calendar/list/CalendarListViewModel.kt @@ -106,7 +106,6 @@ class CalendarListViewModel @Inject constructor( loadState = UiState.Failure(it.message.toString()) ) } - Timber.tag("calendarviewmodel").d("getMonthListFailed") _sideEffect.emit(CalendarListSideEffect.ShowToast(R.string.server_failure)) } diff --git a/feature/src/main/java/com/terning/feature/calendar/list/component/CalendarScrapList.kt b/feature/src/main/java/com/terning/feature/calendar/list/component/CalendarScrapList.kt index 3ad9cdb7c..7d6197db4 100644 --- a/feature/src/main/java/com/terning/feature/calendar/list/component/CalendarScrapList.kt +++ b/feature/src/main/java/com/terning/feature/calendar/list/component/CalendarScrapList.kt @@ -39,16 +39,6 @@ internal fun CalendarScrapList( .padding(horizontal = 24.dp) } - 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) - ) - } - Column( modifier = topModifier ) { 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 391618022..7b4d09900 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 @@ -28,9 +28,11 @@ import androidx.lifecycle.compose.LocalLifecycleOwner import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.flowWithLifecycle 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.getDateStringInKorean import com.terning.core.extension.getFullDateStringInKorean import com.terning.core.extension.swipableVertically import com.terning.core.extension.toast @@ -212,6 +214,14 @@ private fun CalendarWeekSuccess( onInternshipClicked: (CalendarScrapDetail) -> Unit, selectedDate: LocalDate ) { + Text( + text = selectedDate.getDateStringInKorean(), + style = TerningTheme.typography.title5, + color = Black, + modifier = Modifier + .padding(start = 24.dp, top = 16.dp, bottom = 15.dp) + ) + CalendarScrapList( selectedDate = selectedDate, scrapList = scrapList, From 78039a87c4c2673e4efd975f0df1cbfb7ac50b6d Mon Sep 17 00:00:00 2001 From: boiledegg Date: Thu, 5 Sep 2024 02:24:43 +0900 Subject: [PATCH 07/15] =?UTF-8?q?[UI/#214]=20=EB=A6=AC=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=20=ED=99=94=EB=A9=B4=20UI=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calendar/list/CalendarListScreen.kt | 5 ++++- .../list/component/CalendarScrapList.kt | 19 ++++++++----------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/feature/src/main/java/com/terning/feature/calendar/list/CalendarListScreen.kt b/feature/src/main/java/com/terning/feature/calendar/list/CalendarListScreen.kt index 081d7f503..7c02056fe 100644 --- a/feature/src/main/java/com/terning/feature/calendar/list/CalendarListScreen.kt +++ b/feature/src/main/java/com/terning/feature/calendar/list/CalendarListScreen.kt @@ -196,7 +196,10 @@ private fun CalendarListScreen( scrapList = scrapMap[dateInKorean].orEmpty(), onScrapButtonClicked = onClickScrapButton, onInternshipClicked = onClickInternship, - isFromList = true + isFromList = true, + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 24.dp) ) } } diff --git a/feature/src/main/java/com/terning/feature/calendar/list/component/CalendarScrapList.kt b/feature/src/main/java/com/terning/feature/calendar/list/component/CalendarScrapList.kt index 7d6197db4..a2ff8bb49 100644 --- a/feature/src/main/java/com/terning/feature/calendar/list/component/CalendarScrapList.kt +++ b/feature/src/main/java/com/terning/feature/calendar/list/component/CalendarScrapList.kt @@ -28,16 +28,13 @@ internal fun CalendarScrapList( isFromList: Boolean = false ) { val scrollState = rememberScrollState() - val topModifier = if (!isFromList) { - Modifier - .fillMaxWidth() - .padding(horizontal = 24.dp) - .verticalScroll(scrollState) - } else { - Modifier - .fillMaxWidth() - .padding(horizontal = 24.dp) - } + val topModifier = modifier.then( + if (!isFromList) { + Modifier.verticalScroll(scrollState) + } else { + Modifier + } + ) Column( modifier = topModifier @@ -49,7 +46,7 @@ internal fun CalendarScrapList( onInternshipClicked = onInternshipClicked ) Spacer( - modifier = Modifier.height(12.dp) + modifier = Modifier.height(if(scrap == scrapList.last()) 16.dp else 12.dp) ) } } From 0f53ff85bbb4e5c235e7eba6947a7704f150f4b5 Mon Sep 17 00:00:00 2001 From: boiledegg Date: Thu, 5 Sep 2024 02:31:30 +0900 Subject: [PATCH 08/15] =?UTF-8?q?[UI/#214]=20=EC=A3=BC=EA=B0=84=20?= =?UTF-8?q?=ED=99=94=EB=A9=B4=20UI=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calendar/week/CalendarWeekScreen.kt | 57 +++++++++---------- 1 file changed, 27 insertions(+), 30 deletions(-) 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 7b4d09900..ed858e03e 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 @@ -1,9 +1,7 @@ package com.terning.feature.calendar.week import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.shape.RoundedCornerShape @@ -15,7 +13,6 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.shadow import androidx.compose.ui.graphics.Color @@ -87,7 +84,7 @@ fun CalendarWeekRoute( onDismissInternDialog = { viewModel.updateInternDialogVisibility(false) }, onClickChangeColor = { viewModel.patchScrap(it) }, onClickScrapCancel = { uiState.internshipAnnouncementId?.let { viewModel.deleteScrap(it) } }, - onClickScrapButton = {scrapId -> + onClickScrapButton = { scrapId -> with(viewModel) { updateScrapId(scrapId) updateScrapCancelDialogVisibility(true) @@ -119,7 +116,7 @@ private fun CalendarWeekScreen( var swiped by remember { mutableStateOf(false) } LaunchedEffect(swiped) { - if(swiped) { + if (swiped) { updateSelectedDate(selectedDate) } } @@ -129,7 +126,8 @@ private fun CalendarWeekScreen( .background(Back) ) { Card( - modifier = Modifier.swipableVertically { swiped = true } + modifier = Modifier + .swipableVertically { swiped = true } .shadow( shape = RoundedCornerShape(bottomStart = 20.dp, bottomEnd = 20.dp), elevation = 1.dp @@ -146,12 +144,22 @@ private fun CalendarWeekScreen( ) } + Text( + text = selectedDate.getDateStringInKorean(), + style = TerningTheme.typography.title5, + color = Black, + modifier = Modifier + .padding(start = 24.dp, top = 16.dp, bottom = 15.dp) + ) + when (uiState.loadState) { is UiState.Loading -> {} is UiState.Empty -> { CalendarWeekEmpty() } - is UiState.Failure -> {} + is UiState.Failure -> { + CalendarWeekEmpty() + } is UiState.Success -> { CalendarWeekSuccess( scrapList = uiState.loadState.data.toImmutableList(), @@ -191,20 +199,15 @@ private fun CalendarWeekScreen( private fun CalendarWeekEmpty( modifier: Modifier = Modifier ) { - 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 - ) - } + Text( + modifier = modifier + .padding(top = 38.dp) + .fillMaxWidth(), + text = stringResource(id = R.string.calendar_empty_scrap), + textAlign = TextAlign.Center, + style = TerningTheme.typography.body5, + color = Grey400 + ) } @Composable @@ -214,19 +217,13 @@ private fun CalendarWeekSuccess( onInternshipClicked: (CalendarScrapDetail) -> Unit, selectedDate: LocalDate ) { - Text( - text = selectedDate.getDateStringInKorean(), - style = TerningTheme.typography.title5, - color = Black, - modifier = Modifier - .padding(start = 24.dp, top = 16.dp, bottom = 15.dp) - ) - CalendarScrapList( selectedDate = selectedDate, scrapList = scrapList, onScrapButtonClicked = onScrapButtonClicked, - onInternshipClicked = onInternshipClicked + onInternshipClicked = onInternshipClicked, + modifier = Modifier + .padding(horizontal = 24.dp) ) } From 95e7af31d390d59e00585ef93df1f87c8c249e74 Mon Sep 17 00:00:00 2001 From: boiledegg Date: Thu, 5 Sep 2024 14:33:00 +0900 Subject: [PATCH 09/15] =?UTF-8?q?[FEAT/#212]=20=EC=84=9C=EB=B2=84=20?= =?UTF-8?q?=ED=86=B5=EC=8B=A0=20Dispatchers=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calendar/list/CalendarListViewModel.kt | 50 +++++++++---------- .../calendar/month/CalendarMonthViewModel.kt | 28 +++++------ .../calendar/week/CalendarWeekViewModel.kt | 40 +++++++-------- 3 files changed, 56 insertions(+), 62 deletions(-) diff --git a/feature/src/main/java/com/terning/feature/calendar/list/CalendarListViewModel.kt b/feature/src/main/java/com/terning/feature/calendar/list/CalendarListViewModel.kt index af156b08b..060819227 100644 --- a/feature/src/main/java/com/terning/feature/calendar/list/CalendarListViewModel.kt +++ b/feature/src/main/java/com/terning/feature/calendar/list/CalendarListViewModel.kt @@ -28,8 +28,6 @@ import kotlinx.coroutines.flow.asSharedFlow 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 @@ -86,30 +84,29 @@ class CalendarListViewModel @Inject constructor( fun getScrapMonthList( date: LocalDate - ) = viewModelScope.launch { - withContext(Dispatchers.IO) { - calendarRepository.getScrapMonthList( - year = _uiState.value.currentDate.year, - month = _uiState.value.currentDate.monthValue - ) - }.fold( - onSuccess = { - _uiState.update { currentState -> - currentState.copy( - loadState = if (it.isNotEmpty()) UiState.Success(it) else UiState.Empty - ) - } - }, - onFailure = { - _uiState.update { currentState -> - currentState.copy( - loadState = UiState.Failure(it.message.toString()) - ) - } - - _sideEffect.emit(CalendarListSideEffect.ShowToast(R.string.server_failure)) - } + ) = viewModelScope.launch(Dispatchers.IO) { + calendarRepository.getScrapMonthList( + year = _uiState.value.currentDate.year, + month = _uiState.value.currentDate.monthValue ) + .fold( + onSuccess = { + _uiState.update { currentState -> + currentState.copy( + loadState = if (it.isNotEmpty()) UiState.Success(it) else UiState.Empty + ) + } + }, + onFailure = { + _uiState.update { currentState -> + currentState.copy( + loadState = UiState.Failure(it.message.toString()) + ) + } + + _sideEffect.emit(CalendarListSideEffect.ShowToast(R.string.server_failure)) + } + ) } fun deleteScrap( @@ -117,7 +114,8 @@ class CalendarListViewModel @Inject constructor( ) = viewModelScope.launch { _uiState.value.loadState .takeIf { it is UiState.Success } - ?.let { CalendarScrapRequest(internshipAnnouncementId, null) }?.let { scrapRequestModel -> + ?.let { CalendarScrapRequest(internshipAnnouncementId, null) } + ?.let { scrapRequestModel -> scrapRepository.deleteScrap( scrapRequestModel ).onSuccess { diff --git a/feature/src/main/java/com/terning/feature/calendar/month/CalendarMonthViewModel.kt b/feature/src/main/java/com/terning/feature/calendar/month/CalendarMonthViewModel.kt index 0f17cecd7..fbcd6dcb1 100644 --- a/feature/src/main/java/com/terning/feature/calendar/month/CalendarMonthViewModel.kt +++ b/feature/src/main/java/com/terning/feature/calendar/month/CalendarMonthViewModel.kt @@ -14,7 +14,6 @@ import kotlinx.coroutines.flow.asSharedFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext import javax.inject.Inject @HiltViewModel @@ -29,20 +28,19 @@ class CalendarMonthViewModel @Inject constructor( fun getScrapMonth( year: Int, month: Int - ) = viewModelScope.launch { - withContext(Dispatchers.IO) { - calendarRepository.getScrapMonth(year, month) - }.fold( - onSuccess = { - _uiState.update { currentState -> - currentState.copy( - loadState = UiState.Success(it) - ) + ) = viewModelScope.launch(Dispatchers.IO) { + calendarRepository.getScrapMonth(year, month) + .fold( + onSuccess = { + _uiState.update { currentState -> + currentState.copy( + loadState = UiState.Success(it) + ) + } + }, + onFailure = { + _sideEffect.emit(CalendarMonthSideEffect.ShowToast(R.string.server_failure)) } - }, - onFailure = { - _sideEffect.emit(CalendarMonthSideEffect.ShowToast(R.string.server_failure)) - } - ) + ) } } \ No newline at end of file diff --git a/feature/src/main/java/com/terning/feature/calendar/week/CalendarWeekViewModel.kt b/feature/src/main/java/com/terning/feature/calendar/week/CalendarWeekViewModel.kt index 402382729..0028e7056 100644 --- a/feature/src/main/java/com/terning/feature/calendar/week/CalendarWeekViewModel.kt +++ b/feature/src/main/java/com/terning/feature/calendar/week/CalendarWeekViewModel.kt @@ -28,7 +28,6 @@ import kotlinx.coroutines.flow.asSharedFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext import java.time.LocalDate import javax.inject.Inject @@ -83,27 +82,26 @@ class CalendarWeekViewModel @Inject constructor( } } - fun getScrapWeekList(selectedDate: LocalDate) = viewModelScope.launch { - withContext(Dispatchers.IO) { - calendarRepository.getScrapDayList(selectedDate) - }.fold( - onSuccess = { - _uiState.update { currentState -> - currentState.copy( - loadState = if (it.isNotEmpty()) UiState.Success(it) else UiState.Empty - ) - } - }, - onFailure = { - _uiState.update { currentState -> - currentState.copy( - loadState = UiState.Failure(it.message.toString()) - ) + fun getScrapWeekList(selectedDate: LocalDate) = viewModelScope.launch(Dispatchers.IO) { + calendarRepository.getScrapDayList(selectedDate) + .fold( + onSuccess = { + _uiState.update { currentState -> + currentState.copy( + loadState = if (it.isNotEmpty()) UiState.Success(it) else UiState.Empty + ) + } + }, + onFailure = { + _uiState.update { currentState -> + currentState.copy( + loadState = UiState.Failure(it.message.toString()) + ) + } + _sideEffect.emit(CalendarWeekSideEffect.ShowToast(R.string.server_failure)) } - _sideEffect.emit(CalendarWeekSideEffect.ShowToast(R.string.server_failure)) - } - ) + ) } fun deleteScrap(scrapId: Long) = viewModelScope.launch { @@ -114,7 +112,7 @@ class CalendarWeekViewModel @Inject constructor( scrapRequestModel ).onSuccess { runCatching { - getScrapWeekList(selectedDate = _uiState.value.selectedDate) + getScrapWeekList(selectedDate = _uiState.value.selectedDate) }.onSuccess { updateScrapCancelDialogVisibility(false) } From c79ae409758fc8b078b692b79ceb73c39b00c4e4 Mon Sep 17 00:00:00 2001 From: boiledegg Date: Fri, 6 Sep 2024 21:02:33 +0900 Subject: [PATCH 10/15] =?UTF-8?q?[FIX/#214]=20develop=20=EC=B6=A9=EB=8F=8C?= =?UTF-8?q?=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calendar/list/CalendarListScreen.kt | 15 ++----- .../calendar/list/CalendarListViewModel.kt | 40 +++++++++---------- .../calendar/week/CalendarWeekScreen.kt | 14 ++----- .../calendar/week/CalendarWeekViewModel.kt | 5 +-- .../dialog/cancel/ScrapCancelDialog.kt | 4 +- .../dialog/cancel/ScrapCancelViewModel.kt | 2 +- .../feature/dialog/detail/ScrapDialog.kt | 17 +++----- .../dialog/detail/ScrapDialogViewModel.kt | 2 +- 8 files changed, 40 insertions(+), 59 deletions(-) diff --git a/feature/src/main/java/com/terning/feature/calendar/list/CalendarListScreen.kt b/feature/src/main/java/com/terning/feature/calendar/list/CalendarListScreen.kt index 639e418be..dcb069337 100644 --- a/feature/src/main/java/com/terning/feature/calendar/list/CalendarListScreen.kt +++ b/feature/src/main/java/com/terning/feature/calendar/list/CalendarListScreen.kt @@ -2,11 +2,9 @@ package com.terning.feature.calendar.list import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box -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 @@ -29,12 +27,9 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.flowWithLifecycle import com.terning.core.designsystem.theme.Back import com.terning.core.designsystem.theme.Black -import com.terning.core.designsystem.theme.Grey200 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.getFullDateStringInKorean import com.terning.core.extension.isListNotEmpty import com.terning.core.extension.toast @@ -101,7 +96,7 @@ fun CalendarListRoute( }, onClickScrapButton = { scrapId -> with(viewModel){ - updateScrapId(scrapId) + updateAnnouncementId(scrapId) updateScrapCancelDialogVisibility(true) } }, @@ -220,9 +215,9 @@ private fun CalendarListScreen( } if (uiState.scrapDialogVisibility) { - uiState.scrapId?.run { + uiState.internshipAnnouncementId?.run { ScrapCancelDialog( - scrapId = this, + internshipAnnouncementId = this, onDismissRequest = onDismissCancelDialog ) } @@ -239,10 +234,8 @@ private fun CalendarListScreen( title = uiState.internshipModel.title, scrapColor = scrapColor, deadline = uiState.currentDate.getFullDateStringInKorean(), - startYear = uiState.internshipModel.startYear, - startMonth = uiState.internshipModel.startMonth, + startYearMonth = uiState.internshipModel.startYearMonth, workingPeriod = uiState.internshipModel.workingPeriod, - scrapId = uiState.internshipModel.scrapId, internshipAnnouncementId = uiState.internshipModel.internshipAnnouncementId, companyImage = uiState.internshipModel.companyImage, isScrapped = true, diff --git a/feature/src/main/java/com/terning/feature/calendar/list/CalendarListViewModel.kt b/feature/src/main/java/com/terning/feature/calendar/list/CalendarListViewModel.kt index bce6a7276..1e4e6dee2 100644 --- a/feature/src/main/java/com/terning/feature/calendar/list/CalendarListViewModel.kt +++ b/feature/src/main/java/com/terning/feature/calendar/list/CalendarListViewModel.kt @@ -72,27 +72,27 @@ class CalendarListViewModel @Inject constructor( fun getScrapMonthList( date: LocalDate ) = viewModelScope.launch(Dispatchers.IO) { - calendarRepository.getScrapMonthList( - year = _uiState.value.currentDate.year, - month = _uiState.value.currentDate.monthValue - ) - .fold( - onSuccess = { - _uiState.update { currentState -> - currentState.copy( - loadState = if (it.isNotEmpty()) UiState.Success(it) else UiState.Empty - ) - } - }, - onFailure = { - _uiState.update { currentState -> - currentState.copy( - loadState = UiState.Failure(it.message.toString()) - ) + calendarRepository.getScrapMonthList( + year = _uiState.value.currentDate.year, + month = _uiState.value.currentDate.monthValue + ) + .fold( + onSuccess = { + _uiState.update { currentState -> + currentState.copy( + loadState = if (it.isNotEmpty()) UiState.Success(it) else UiState.Empty + ) + } + }, + onFailure = { + _uiState.update { currentState -> + currentState.copy( + loadState = UiState.Failure(it.message.toString()) + ) + } + _sideEffect.emit(CalendarListSideEffect.ShowToast(R.string.server_failure)) } - _sideEffect.emit(CalendarListSideEffect.ShowToast(R.string.server_failure)) - } - ) + ) } } 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 4f2ef0dcf..25d345e06 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 @@ -15,9 +15,7 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.draw.shadow -import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.Color -import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign @@ -38,8 +36,6 @@ import com.terning.core.extension.toast import com.terning.core.state.UiState import com.terning.domain.entity.calendar.CalendarScrapDetail import com.terning.feature.R -import com.terning.feature.calendar.calendar.component.CalendarCancelDialog -import com.terning.feature.calendar.calendar.component.CalendarDetailDialog import com.terning.feature.calendar.calendar.model.CalendarUiState import com.terning.feature.calendar.list.component.CalendarScrapList import com.terning.feature.calendar.week.component.HorizontalCalendarWeek @@ -97,7 +93,7 @@ fun CalendarWeekRoute( onClickChangeColor = { viewModel.getScrapWeekList(uiState.selectedDate) }, onClickScrapButton = { scrapId -> with(viewModel) { - updateScrapId(scrapId) + updateInternshipAnnouncementId(scrapId) updateScrapCancelDialogVisibility(true) } }, @@ -182,9 +178,9 @@ private fun CalendarWeekScreen( } if (uiState.scrapDialogVisibility) { - uiState.scrapId?.run { + uiState.internshipAnnouncementId?.run { ScrapCancelDialog( - scrapId = this, + internshipAnnouncementId = this, onDismissRequest = onDismissCancelDialog ) } @@ -201,10 +197,8 @@ private fun CalendarWeekScreen( title = uiState.internshipModel.title, scrapColor = scrapColor, deadline = uiState.selectedDate.getFullDateStringInKorean(), - startYear = uiState.internshipModel.startYear, - startMonth = uiState.internshipModel.startMonth, + startYearMonth = uiState.internshipModel.startYearMonth, workingPeriod = uiState.internshipModel.workingPeriod, - scrapId = uiState.internshipModel.scrapId, internshipAnnouncementId = uiState.internshipModel.internshipAnnouncementId, companyImage = uiState.internshipModel.companyImage, isScrapped = true, diff --git a/feature/src/main/java/com/terning/feature/calendar/week/CalendarWeekViewModel.kt b/feature/src/main/java/com/terning/feature/calendar/week/CalendarWeekViewModel.kt index 5c2808072..0ebe403c3 100644 --- a/feature/src/main/java/com/terning/feature/calendar/week/CalendarWeekViewModel.kt +++ b/feature/src/main/java/com/terning/feature/calendar/week/CalendarWeekViewModel.kt @@ -4,7 +4,6 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.terning.core.state.UiState import com.terning.domain.entity.calendar.CalendarScrapDetail -import com.terning.domain.entity.calendar.CalendarScrapRequest import com.terning.domain.repository.CalendarRepository import com.terning.feature.R import com.terning.feature.calendar.week.model.CalendarWeekUiState @@ -45,10 +44,10 @@ class CalendarWeekViewModel @Inject constructor( } } - fun updateScrapId(scrapId: Long? = null) { + fun updateInternshipAnnouncementId(internshipAnnouncementId: Long? = null) { _uiState.update { currentState -> currentState.copy( - internshipAnnouncementId = scrapId + internshipAnnouncementId = internshipAnnouncementId ) } } diff --git a/feature/src/main/java/com/terning/feature/dialog/cancel/ScrapCancelDialog.kt b/feature/src/main/java/com/terning/feature/dialog/cancel/ScrapCancelDialog.kt index 3e3c8fd77..9700fa9e4 100644 --- a/feature/src/main/java/com/terning/feature/dialog/cancel/ScrapCancelDialog.kt +++ b/feature/src/main/java/com/terning/feature/dialog/cancel/ScrapCancelDialog.kt @@ -31,7 +31,7 @@ import com.terning.feature.R @Composable fun ScrapCancelDialog( - scrapId: Long, + internshipAnnouncementId: Long, onDismissRequest: (Boolean) -> Unit, viewModel: ScrapCancelViewModel = hiltViewModel() ) { @@ -53,7 +53,7 @@ fun ScrapCancelDialog( ScrapCancelScreen( onDismissRequest = { onDismissRequest(false) }, - onClickScrapCancel = { viewModel.deleteScrap(scrapId) } + onClickScrapCancel = { viewModel.deleteScrap(internshipAnnouncementId) } ) } diff --git a/feature/src/main/java/com/terning/feature/dialog/cancel/ScrapCancelViewModel.kt b/feature/src/main/java/com/terning/feature/dialog/cancel/ScrapCancelViewModel.kt index 0cf47d3a2..2353d2077 100644 --- a/feature/src/main/java/com/terning/feature/dialog/cancel/ScrapCancelViewModel.kt +++ b/feature/src/main/java/com/terning/feature/dialog/cancel/ScrapCancelViewModel.kt @@ -2,7 +2,7 @@ package com.terning.feature.dialog.cancel import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.terning.domain.entity.CalendarScrapRequest +import com.terning.domain.entity.calendar.CalendarScrapRequest import com.terning.domain.repository.ScrapRepository import com.terning.feature.R import dagger.hilt.android.lifecycle.HiltViewModel diff --git a/feature/src/main/java/com/terning/feature/dialog/detail/ScrapDialog.kt b/feature/src/main/java/com/terning/feature/dialog/detail/ScrapDialog.kt index e160aea7a..57ab067dc 100644 --- a/feature/src/main/java/com/terning/feature/dialog/detail/ScrapDialog.kt +++ b/feature/src/main/java/com/terning/feature/dialog/detail/ScrapDialog.kt @@ -59,10 +59,8 @@ fun ScrapDialog( title: String, scrapColor: Color, deadline: String, - startYear: Int, - startMonth: Int, + startYearMonth: String, workingPeriod: String, - scrapId: Long, internshipAnnouncementId: Long, companyImage: String, isScrapped: Boolean, @@ -108,8 +106,7 @@ fun ScrapDialog( ScrapDialogScreen( title = title, deadline = deadline, - startYear = startYear, - startMonth = startMonth, + startYearMonth = startYearMonth, workingPeriod = workingPeriod, isScrapped = isScrapped, companyImage = companyImage, @@ -119,7 +116,7 @@ fun ScrapDialog( onClickColorButton = viewModel::changeSelectedColor, onClickColorChangeButton = { if(uiState.isColorChanged) - viewModel.patchScrap(scrapId = scrapId, color = uiState.selectedColorType) + viewModel.patchScrap(scrapId = internshipAnnouncementId, color = uiState.selectedColorType) }, onClickNavigateButton = viewModel::navigateToDetail, onClickScrapButton = { @@ -134,8 +131,7 @@ fun ScrapDialog( private fun ScrapDialogScreen( title: String, deadline: String, - startYear: Int, - startMonth: Int, + startYearMonth: String, workingPeriod: String, isScrapped: Boolean, companyImage: String, @@ -252,7 +248,7 @@ private fun ScrapDialogScreen( ) InternInfoRow( title = stringResource(id = R.string.intern_info_start_date), - value = "${startYear}년 ${startMonth}월" + value = startYearMonth ) } } @@ -327,8 +323,7 @@ private fun ScrapDialogPreview() { ScrapDialogScreen( title = "터닝 하반기 채용터닝 하반기 채용터닝 하반기 채용터닝터닝 하반기 채용터닝터닝 하반기 채용터닝터닝 하반기 채용터닝터닝 하반기 채용터닝터닝 하반기 채용터닝 하반기 채용터닝 하반기 채용터닝 하반기 채용터닝 하반기 채용터닝 하반기 채용터닝 하반기 채용", deadline = "2024/09/07", - startYear = 2024, - startMonth = 11, + startYearMonth = "2024년 11월", workingPeriod = "2개월", companyImage = "", isScrapped = false, diff --git a/feature/src/main/java/com/terning/feature/dialog/detail/ScrapDialogViewModel.kt b/feature/src/main/java/com/terning/feature/dialog/detail/ScrapDialogViewModel.kt index 3f08e2e4b..b74b3e27c 100644 --- a/feature/src/main/java/com/terning/feature/dialog/detail/ScrapDialogViewModel.kt +++ b/feature/src/main/java/com/terning/feature/dialog/detail/ScrapDialogViewModel.kt @@ -14,7 +14,7 @@ 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.type.ColorType -import com.terning.domain.entity.CalendarScrapRequest +import com.terning.domain.entity.calendar.CalendarScrapRequest import com.terning.domain.repository.ScrapRepository import com.terning.feature.R import com.terning.feature.dialog.detail.state.ScrapDialogUiState From 438fac75a6bc7c6c77ac2524dfe9367dcd3a94f0 Mon Sep 17 00:00:00 2001 From: boiledegg Date: Fri, 6 Sep 2024 21:14:37 +0900 Subject: [PATCH 11/15] =?UTF-8?q?[UI/#214]=20=ED=8C=A8=EB=94=A9=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/terning/feature/calendar/calendar/CalendarRoute.kt | 2 ++ .../calendar/calendar/navigation/CalendarNavigation.kt | 7 ++++++- .../terning/feature/calendar/list/CalendarListViewModel.kt | 5 ++--- .../src/main/java/com/terning/feature/main/MainScreen.kt | 4 +++- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/feature/src/main/java/com/terning/feature/calendar/calendar/CalendarRoute.kt b/feature/src/main/java/com/terning/feature/calendar/calendar/CalendarRoute.kt index 37b56da48..d48dcf8ba 100644 --- a/feature/src/main/java/com/terning/feature/calendar/calendar/CalendarRoute.kt +++ b/feature/src/main/java/com/terning/feature/calendar/calendar/CalendarRoute.kt @@ -41,6 +41,7 @@ import java.time.LocalDate fun CalendarRoute( navigateUp: () -> Unit, navigateToAnnouncement: (Long) -> Unit, + modifier: Modifier = Modifier, viewModel: CalendarViewModel = hiltViewModel() ) { val lifecycleOwner = LocalLifecycleOwner.current @@ -57,6 +58,7 @@ fun CalendarRoute( } CalendarScreen( + modifier = modifier, uiState = uiState, navigateToAnnouncement = navigateToAnnouncement, updateSelectedDate = viewModel::updateSelectedDate, diff --git a/feature/src/main/java/com/terning/feature/calendar/calendar/navigation/CalendarNavigation.kt b/feature/src/main/java/com/terning/feature/calendar/calendar/navigation/CalendarNavigation.kt index 7f06fac41..eddb62fd6 100644 --- a/feature/src/main/java/com/terning/feature/calendar/calendar/navigation/CalendarNavigation.kt +++ b/feature/src/main/java/com/terning/feature/calendar/calendar/navigation/CalendarNavigation.kt @@ -2,6 +2,9 @@ package com.terning.feature.calendar.calendar.navigation import androidx.compose.animation.EnterTransition import androidx.compose.animation.ExitTransition +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.padding +import androidx.compose.ui.Modifier import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder import androidx.navigation.NavOptions @@ -20,7 +23,8 @@ fun NavController.navigateCalendar(navOptions: NavOptions? = null) { } fun NavGraphBuilder.calendarNavGraph( - navHostController: NavController + navHostController: NavController, + paddingValues: PaddingValues ) { composable( exitTransition = { @@ -37,6 +41,7 @@ fun NavGraphBuilder.calendarNavGraph( } ) { CalendarRoute( + modifier = Modifier.padding(paddingValues), navigateUp = navHostController::navigateUp, navigateToAnnouncement = navHostController::navigateIntern ) diff --git a/feature/src/main/java/com/terning/feature/calendar/list/CalendarListViewModel.kt b/feature/src/main/java/com/terning/feature/calendar/list/CalendarListViewModel.kt index 1e4e6dee2..6491ae47a 100644 --- a/feature/src/main/java/com/terning/feature/calendar/list/CalendarListViewModel.kt +++ b/feature/src/main/java/com/terning/feature/calendar/list/CalendarListViewModel.kt @@ -4,7 +4,6 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.terning.core.state.UiState import com.terning.domain.entity.calendar.CalendarScrapDetail -import com.terning.domain.entity.calendar.CalendarScrapRequest import com.terning.domain.repository.CalendarRepository import com.terning.feature.R import com.terning.feature.calendar.list.model.CalendarListUiState @@ -73,8 +72,8 @@ class CalendarListViewModel @Inject constructor( date: LocalDate ) = viewModelScope.launch(Dispatchers.IO) { calendarRepository.getScrapMonthList( - year = _uiState.value.currentDate.year, - month = _uiState.value.currentDate.monthValue + year = date.year, + month = date.monthValue ) .fold( onSuccess = { diff --git a/feature/src/main/java/com/terning/feature/main/MainScreen.kt b/feature/src/main/java/com/terning/feature/main/MainScreen.kt index d78934eba..8942a98db 100644 --- a/feature/src/main/java/com/terning/feature/main/MainScreen.kt +++ b/feature/src/main/java/com/terning/feature/main/MainScreen.kt @@ -83,7 +83,9 @@ fun MainScreen( paddingValues = paddingValues, navHostController = navigator.navController ) - calendarNavGraph(navHostController = navigator.navController) + calendarNavGraph( + paddingValues = paddingValues, + navHostController = navigator.navController) searchNavGraph(navHostController = navigator.navController) signInNavGraph( paddingValues = paddingValues, From bc3512817310ca8be1214335d8becdc73aafa8df Mon Sep 17 00:00:00 2001 From: boiledegg Date: Fri, 6 Sep 2024 22:42:01 +0900 Subject: [PATCH 12/15] =?UTF-8?q?[FIX/#214]=20=EB=B0=B1=ED=95=B8=EB=93=A4?= =?UTF-8?q?=EB=9F=AC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calendar/calendar/CalendarRoute.kt | 21 ++++++++----------- .../calendar/list/CalendarListScreen.kt | 6 ++++++ .../calendar/week/CalendarWeekScreen.kt | 6 ++++++ 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/feature/src/main/java/com/terning/feature/calendar/calendar/CalendarRoute.kt b/feature/src/main/java/com/terning/feature/calendar/calendar/CalendarRoute.kt index d48dcf8ba..8620717e2 100644 --- a/feature/src/main/java/com/terning/feature/calendar/calendar/CalendarRoute.kt +++ b/feature/src/main/java/com/terning/feature/calendar/calendar/CalendarRoute.kt @@ -1,6 +1,5 @@ package com.terning.feature.calendar.calendar -import androidx.activity.compose.BackHandler import androidx.compose.animation.slideInHorizontally import androidx.compose.animation.slideInVertically import androidx.compose.animation.slideOutHorizontally @@ -47,25 +46,19 @@ fun CalendarRoute( val lifecycleOwner = LocalLifecycleOwner.current val uiState by viewModel.uiState.collectAsStateWithLifecycle(lifecycleOwner = lifecycleOwner) - BackHandler { - if (uiState.isWeekEnabled) { - viewModel.updateSelectedDate(uiState.selectedDate) - } else if (uiState.isListEnabled) { - viewModel.updateListVisibility(false) - } else { - navigateUp() - } - } - CalendarScreen( modifier = modifier, uiState = uiState, navigateToAnnouncement = navigateToAnnouncement, updateSelectedDate = viewModel::updateSelectedDate, updatePage = viewModel::updatePage, + disableListVisibility = { viewModel.updateListVisibility(false) }, + disableWeekVisibility = { viewModel.updateSelectedDate(uiState.selectedDate) }, onClickListButton = { viewModel.updateListVisibility(!uiState.isListEnabled) - if (uiState.isWeekEnabled) { viewModel.updateWeekVisibility(false) } + if (uiState.isWeekEnabled) { + viewModel.updateWeekVisibility(false) + } } ) } @@ -75,6 +68,8 @@ private fun CalendarScreen( uiState: CalendarUiState, navigateToAnnouncement: (Long) -> Unit, updateSelectedDate: (LocalDate) -> Unit, + disableListVisibility: () -> Unit, + disableWeekVisibility: () -> Unit, updatePage: (Int) -> Unit, onClickListButton: () -> Unit, modifier: Modifier = Modifier, @@ -152,6 +147,7 @@ private fun CalendarScreen( calendarUiState = uiState, modifier = Modifier .fillMaxSize(), + navigateUp = disableWeekVisibility, navigateToAnnouncement = navigateToAnnouncement, updateSelectedDate = updateSelectedDate ) @@ -164,6 +160,7 @@ private fun CalendarScreen( listState = listState, pages = uiState.calendarModel.pageCount, navigateToAnnouncement = navigateToAnnouncement, + navigateUp = disableListVisibility, modifier = Modifier .fillMaxSize() .padding(top = paddingValues.calculateTopPadding()) diff --git a/feature/src/main/java/com/terning/feature/calendar/list/CalendarListScreen.kt b/feature/src/main/java/com/terning/feature/calendar/list/CalendarListScreen.kt index dcb069337..592b6a31d 100644 --- a/feature/src/main/java/com/terning/feature/calendar/list/CalendarListScreen.kt +++ b/feature/src/main/java/com/terning/feature/calendar/list/CalendarListScreen.kt @@ -1,5 +1,6 @@ package com.terning.feature.calendar.list +import androidx.activity.compose.BackHandler import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxHeight @@ -50,6 +51,7 @@ fun CalendarListRoute( pages: Int, listState: LazyListState, modifier: Modifier = Modifier, + navigateUp: () -> Unit, navigateToAnnouncement: (Long) -> Unit, viewModel: CalendarListViewModel = hiltViewModel() ) { @@ -77,6 +79,10 @@ fun CalendarListRoute( } } + BackHandler { + navigateUp() + } + CalendarListScreen( pages = pages, listState = listState, 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 25d345e06..c20016b56 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 @@ -1,5 +1,6 @@ package com.terning.feature.calendar.week +import androidx.activity.compose.BackHandler import androidx.compose.foundation.background import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth @@ -50,6 +51,7 @@ fun CalendarWeekRoute( calendarUiState: CalendarUiState, navigateToAnnouncement: (Long) -> Unit, updateSelectedDate: (LocalDate) -> Unit, + navigateUp: () -> Unit, modifier: Modifier = Modifier, viewModel: CalendarWeekViewModel = hiltViewModel() ) { @@ -74,6 +76,10 @@ fun CalendarWeekRoute( viewModel.getScrapWeekList(selectedDate = uiState.selectedDate) } + BackHandler { + navigateUp() + } + CalendarWeekScreen( modifier = modifier, uiState = uiState, From 77383538a52b7d1a6eb3f96b583b3aba200eff3e Mon Sep 17 00:00:00 2001 From: boiledegg Date: Sat, 7 Sep 2024 14:31:57 +0900 Subject: [PATCH 13/15] =?UTF-8?q?[DEL/#214]=20=EB=92=A4=EB=A1=9C=EA=B0=80?= =?UTF-8?q?=EA=B8=B0=20=EB=A1=9C=EC=A7=81=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/terning/feature/calendar/calendar/CalendarRoute.kt | 1 - .../feature/calendar/calendar/navigation/CalendarNavigation.kt | 1 - 2 files changed, 2 deletions(-) diff --git a/feature/src/main/java/com/terning/feature/calendar/calendar/CalendarRoute.kt b/feature/src/main/java/com/terning/feature/calendar/calendar/CalendarRoute.kt index 8620717e2..a9731af12 100644 --- a/feature/src/main/java/com/terning/feature/calendar/calendar/CalendarRoute.kt +++ b/feature/src/main/java/com/terning/feature/calendar/calendar/CalendarRoute.kt @@ -38,7 +38,6 @@ import java.time.LocalDate @Composable fun CalendarRoute( - navigateUp: () -> Unit, navigateToAnnouncement: (Long) -> Unit, modifier: Modifier = Modifier, viewModel: CalendarViewModel = hiltViewModel() diff --git a/feature/src/main/java/com/terning/feature/calendar/calendar/navigation/CalendarNavigation.kt b/feature/src/main/java/com/terning/feature/calendar/calendar/navigation/CalendarNavigation.kt index eddb62fd6..7aa5db891 100644 --- a/feature/src/main/java/com/terning/feature/calendar/calendar/navigation/CalendarNavigation.kt +++ b/feature/src/main/java/com/terning/feature/calendar/calendar/navigation/CalendarNavigation.kt @@ -42,7 +42,6 @@ fun NavGraphBuilder.calendarNavGraph( ) { CalendarRoute( modifier = Modifier.padding(paddingValues), - navigateUp = navHostController::navigateUp, navigateToAnnouncement = navHostController::navigateIntern ) } From a45130440c4628cc2e8287ac6ceadb7f755eb1f9 Mon Sep 17 00:00:00 2001 From: boiledegg Date: Sat, 7 Sep 2024 15:26:11 +0900 Subject: [PATCH 14/15] =?UTF-8?q?[UI/#214]=20=EB=B9=88=ED=99=94=EB=A9=B4?= =?UTF-8?q?=20=EA=B7=B8=EB=9E=98=ED=94=BD=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calendar/list/CalendarListScreen.kt | 39 ++++-- .../calendar/week/CalendarWeekScreen.kt | 18 ++- .../drawable/ic_terning_calendar_empty.xml | 126 ++++++++++++++++++ 3 files changed, 170 insertions(+), 13 deletions(-) create mode 100644 feature/src/main/res/drawable/ic_terning_calendar_empty.xml diff --git a/feature/src/main/java/com/terning/feature/calendar/list/CalendarListScreen.kt b/feature/src/main/java/com/terning/feature/calendar/list/CalendarListScreen.kt index 592b6a31d..6e145abbc 100644 --- a/feature/src/main/java/com/terning/feature/calendar/list/CalendarListScreen.kt +++ b/feature/src/main/java/com/terning/feature/calendar/list/CalendarListScreen.kt @@ -1,8 +1,10 @@ package com.terning.feature.calendar.list import androidx.activity.compose.BackHandler +import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth @@ -19,6 +21,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp @@ -168,19 +171,11 @@ private fun CalendarListScreen( } UiState.Empty -> { item { - Box( + Column( modifier = Modifier.fillMaxSize(), - contentAlignment = Alignment.Center + horizontalAlignment = Alignment.CenterHorizontally ) { - 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 - ) + CalendarListEmpty() } } } @@ -253,4 +248,26 @@ private fun CalendarListScreen( } } +@Composable +private fun CalendarListEmpty( + modifier: Modifier = Modifier +) { + Image( + painter = painterResource( + id = R.drawable.ic_terning_calendar_empty + ), + contentDescription = "", + modifier = modifier.padding(top = 20.dp, bottom = 4.dp) + ) + + Text( + modifier = modifier + .fillMaxWidth(), + text = stringResource(id = R.string.calendar_empty_scrap), + textAlign = TextAlign.Center, + style = TerningTheme.typography.body5, + color = Grey400 + ) +} + 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 c20016b56..ca882549f 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 @@ -1,6 +1,7 @@ package com.terning.feature.calendar.week import androidx.activity.compose.BackHandler +import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth @@ -14,10 +15,12 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.shadow import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp @@ -135,7 +138,8 @@ private fun CalendarWeekScreen( Column( modifier = modifier - .background(Back) + .background(Back), + horizontalAlignment = Alignment.CenterHorizontally ) { Card( modifier = Modifier @@ -161,6 +165,7 @@ private fun CalendarWeekScreen( style = TerningTheme.typography.title5, color = Black, modifier = Modifier + .fillMaxWidth() .padding(start = 24.dp, top = 16.dp, bottom = 15.dp) ) @@ -169,9 +174,11 @@ private fun CalendarWeekScreen( is UiState.Empty -> { CalendarWeekEmpty() } + is UiState.Failure -> { CalendarWeekEmpty() } + is UiState.Success -> { CalendarWeekSuccess( scrapList = uiState.loadState.data.toImmutableList(), @@ -220,9 +227,16 @@ private fun CalendarWeekScreen( private fun CalendarWeekEmpty( modifier: Modifier = Modifier ) { + Image( + painter = painterResource( + id = R.drawable.ic_terning_calendar_empty + ), + contentDescription = "", + modifier = modifier.padding(top = 20.dp, bottom = 4.dp) + ) + Text( modifier = modifier - .padding(top = 38.dp) .fillMaxWidth(), text = stringResource(id = R.string.calendar_empty_scrap), textAlign = TextAlign.Center, diff --git a/feature/src/main/res/drawable/ic_terning_calendar_empty.xml b/feature/src/main/res/drawable/ic_terning_calendar_empty.xml new file mode 100644 index 000000000..9f1e706fa --- /dev/null +++ b/feature/src/main/res/drawable/ic_terning_calendar_empty.xml @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From cdacbbda6029a9ae94e159cc68f35a3ebbb23f15 Mon Sep 17 00:00:00 2001 From: boiledegg Date: Sat, 7 Sep 2024 16:31:05 +0900 Subject: [PATCH 15/15] =?UTF-8?q?[MOD/#214]=20Scaffold=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calendar/calendar/CalendarRoute.kt | 32 ++++++++----------- 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/feature/src/main/java/com/terning/feature/calendar/calendar/CalendarRoute.kt b/feature/src/main/java/com/terning/feature/calendar/calendar/CalendarRoute.kt index a9731af12..d173cbd4b 100644 --- a/feature/src/main/java/com/terning/feature/calendar/calendar/CalendarRoute.kt +++ b/feature/src/main/java/com/terning/feature/calendar/calendar/CalendarRoute.kt @@ -87,24 +87,22 @@ private fun CalendarScreen( } } - Scaffold( + Column( modifier = modifier, - topBar = { - CalendarTopAppBar( - date = getYearMonthByPage(uiState.currentPage), - isListExpanded = uiState.isListEnabled, - isWeekExpanded = uiState.isWeekEnabled, - onListButtonClicked = onClickListButton, - onMonthNavigationButtonClicked = { direction -> - coroutineScope.launch { - listState.animateScrollToItem( - index = listState.firstVisibleItemIndex + direction, - ) - } + ){ + CalendarTopAppBar( + date = getYearMonthByPage(uiState.currentPage), + isListExpanded = uiState.isListEnabled, + isWeekExpanded = uiState.isWeekEnabled, + onListButtonClicked = onClickListButton, + onMonthNavigationButtonClicked = { direction -> + coroutineScope.launch { + listState.animateScrollToItem( + index = listState.firstVisibleItemIndex + direction, + ) } - ) - } - ) { paddingValues -> + } + ) ScreenTransition( targetState = !uiState.isListEnabled, transitionOne = slideInHorizontally { fullWidth -> -fullWidth } togetherWith @@ -115,7 +113,6 @@ private fun CalendarScreen( Column( modifier = Modifier .fillMaxSize() - .padding(top = paddingValues.calculateTopPadding()) ) { WeekDaysHeader() @@ -162,7 +159,6 @@ private fun CalendarScreen( navigateUp = disableListVisibility, modifier = Modifier .fillMaxSize() - .padding(top = paddingValues.calculateTopPadding()) ) }, )