From 8dd453cc84ecf533a6b0fdcf9fe14c153fc03093 Mon Sep 17 00:00:00 2001 From: arinming Date: Sun, 7 Jul 2024 03:19:37 +0900 Subject: [PATCH 01/43] =?UTF-8?q?[ADD/#11]=20TerningTextField=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/component/TerningTextField.kt | 27 +++++++++++++++++ .../com/terning/feature/search/SearchRoute.kt | 30 +++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 core/src/main/java/com/terning/core/component/TerningTextField.kt create mode 100644 feature/src/main/java/com/terning/feature/search/SearchRoute.kt diff --git a/core/src/main/java/com/terning/core/component/TerningTextField.kt b/core/src/main/java/com/terning/core/component/TerningTextField.kt new file mode 100644 index 000000000..c80cd304a --- /dev/null +++ b/core/src/main/java/com/terning/core/component/TerningTextField.kt @@ -0,0 +1,27 @@ +package com.terning.core.component + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.text.BasicTextField +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import com.terning.core.designsystem.theme.TerningMain + +@Composable +fun TerningTextField( + value: String, + onValueChange: (String) -> Unit, + modifier: Modifier = Modifier, +) { + BasicTextField( + value = value, + onValueChange = onValueChange, + modifier = Modifier + .fillMaxWidth() + .background(TerningMain) + ) { + Column { + } + } +} \ No newline at end of file diff --git a/feature/src/main/java/com/terning/feature/search/SearchRoute.kt b/feature/src/main/java/com/terning/feature/search/SearchRoute.kt new file mode 100644 index 000000000..fc8da5ff2 --- /dev/null +++ b/feature/src/main/java/com/terning/feature/search/SearchRoute.kt @@ -0,0 +1,30 @@ +package com.terning.feature.search + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview +import com.terning.core.component.TerningTextField + +@Composable +fun SearchRoute() { + SearchScreen() +} + +@Composable +fun SearchScreen() { + Column(modifier = Modifier.fillMaxSize()) { + Text(text = "탐색 스크린") + TerningTextField(value = "") { + + } + } +} + +@Preview +@Composable +fun SearchScreenPreview() { + SearchScreen() +} \ No newline at end of file From 9819c4e9119d7ee07fbd0316693ca644d79eb788 Mon Sep 17 00:00:00 2001 From: arinming Date: Sun, 7 Jul 2024 03:19:37 +0900 Subject: [PATCH 02/43] =?UTF-8?q?[ADD/#11]=20TerningTextField=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/component/TerningTextField.kt | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 core/src/main/java/com/terning/core/component/TerningTextField.kt diff --git a/core/src/main/java/com/terning/core/component/TerningTextField.kt b/core/src/main/java/com/terning/core/component/TerningTextField.kt new file mode 100644 index 000000000..c80cd304a --- /dev/null +++ b/core/src/main/java/com/terning/core/component/TerningTextField.kt @@ -0,0 +1,27 @@ +package com.terning.core.component + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.text.BasicTextField +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import com.terning.core.designsystem.theme.TerningMain + +@Composable +fun TerningTextField( + value: String, + onValueChange: (String) -> Unit, + modifier: Modifier = Modifier, +) { + BasicTextField( + value = value, + onValueChange = onValueChange, + modifier = Modifier + .fillMaxWidth() + .background(TerningMain) + ) { + Column { + } + } +} \ No newline at end of file From e7cf63f9aa28e827947336cf99d71c8414d465d4 Mon Sep 17 00:00:00 2001 From: arinming Date: Tue, 9 Jul 2024 23:30:30 +0900 Subject: [PATCH 03/43] =?UTF-8?q?[FIX/#23]=20=EA=B2=BD=EB=A1=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/terning/feature/main/MainNavigator.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/feature/src/main/java/com/terning/feature/main/MainNavigator.kt b/feature/src/main/java/com/terning/feature/main/MainNavigator.kt index e67b04927..68d33fb38 100644 --- a/feature/src/main/java/com/terning/feature/main/MainNavigator.kt +++ b/feature/src/main/java/com/terning/feature/main/MainNavigator.kt @@ -12,6 +12,7 @@ import androidx.navigation.navOptions import com.terning.feature.calendar.navigation.navigateCalendar import com.terning.feature.home.navigation.navigateHome import com.terning.feature.mypage.navigation.navigateMyPage +import com.terning.feature.onboarding.signin.navigation.SignIn import com.terning.feature.search.navigation.Search import com.terning.feature.search.navigation.navigateSearch @@ -22,7 +23,7 @@ class MainNavigator( @Composable get() = navController .currentBackStackEntryAsState().value?.destination - val startDestination = Search + val startDestination = SignIn val currentTab: MainTab? @Composable get() = MainTab.find { tab -> From 42819eceb27074aaf82a43661c8c0a50daf9fbdd Mon Sep 17 00:00:00 2001 From: arinming Date: Sun, 7 Jul 2024 03:19:37 +0900 Subject: [PATCH 04/43] =?UTF-8?q?[ADD/#11]=20TerningTextField=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/component/TerningTextField.kt | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 core/src/main/java/com/terning/core/component/TerningTextField.kt diff --git a/core/src/main/java/com/terning/core/component/TerningTextField.kt b/core/src/main/java/com/terning/core/component/TerningTextField.kt new file mode 100644 index 000000000..c80cd304a --- /dev/null +++ b/core/src/main/java/com/terning/core/component/TerningTextField.kt @@ -0,0 +1,27 @@ +package com.terning.core.component + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.text.BasicTextField +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import com.terning.core.designsystem.theme.TerningMain + +@Composable +fun TerningTextField( + value: String, + onValueChange: (String) -> Unit, + modifier: Modifier = Modifier, +) { + BasicTextField( + value = value, + onValueChange = onValueChange, + modifier = Modifier + .fillMaxWidth() + .background(TerningMain) + ) { + Column { + } + } +} \ No newline at end of file From f99661ab7d1ba51d2e028e0c5f15a8de8f91e5d7 Mon Sep 17 00:00:00 2001 From: LEE YOU BIN Date: Wed, 10 Jul 2024 00:15:25 +0900 Subject: [PATCH 05/43] =?UTF-8?q?[ADD/#27]=20TerningBasicBottomSheet=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/bottomsheet/TerningBasicBottomSheet.kt | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 core/src/main/java/com/terning/core/designsystem/component/bottomsheet/TerningBasicBottomSheet.kt diff --git a/core/src/main/java/com/terning/core/designsystem/component/bottomsheet/TerningBasicBottomSheet.kt b/core/src/main/java/com/terning/core/designsystem/component/bottomsheet/TerningBasicBottomSheet.kt new file mode 100644 index 000000000..7e2dcba5e --- /dev/null +++ b/core/src/main/java/com/terning/core/designsystem/component/bottomsheet/TerningBasicBottomSheet.kt @@ -0,0 +1,10 @@ +package com.terning.core.designsystem.component.bottomsheet + +import androidx.compose.runtime.Composable + +@Composable +fun TerningBasicBottomSheet( + content: @Composable () -> Unit +){ + +} \ No newline at end of file From 9d393a43173e33b6547b31b490fad0a0a67c2e1f Mon Sep 17 00:00:00 2001 From: arinming Date: Sun, 7 Jul 2024 03:19:37 +0900 Subject: [PATCH 06/43] =?UTF-8?q?[ADD/#11]=20TerningTextField=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/component/TerningTextField.kt | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 core/src/main/java/com/terning/core/component/TerningTextField.kt diff --git a/core/src/main/java/com/terning/core/component/TerningTextField.kt b/core/src/main/java/com/terning/core/component/TerningTextField.kt new file mode 100644 index 000000000..c80cd304a --- /dev/null +++ b/core/src/main/java/com/terning/core/component/TerningTextField.kt @@ -0,0 +1,27 @@ +package com.terning.core.component + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.text.BasicTextField +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import com.terning.core.designsystem.theme.TerningMain + +@Composable +fun TerningTextField( + value: String, + onValueChange: (String) -> Unit, + modifier: Modifier = Modifier, +) { + BasicTextField( + value = value, + onValueChange = onValueChange, + modifier = Modifier + .fillMaxWidth() + .background(TerningMain) + ) { + Column { + } + } +} \ No newline at end of file From 1a4d9b2e28929d50c312be3af42a161c606a12c5 Mon Sep 17 00:00:00 2001 From: LEE YOU BIN Date: Wed, 10 Jul 2024 01:10:10 +0900 Subject: [PATCH 07/43] =?UTF-8?q?[FEAT/#27]=20bottom=20sheet=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bottomsheet/SignUpBottomSheet.kt | 32 +++++++++++++++++++ .../bottomsheet/TerningBasicBottomSheet.kt | 18 +++++++++-- core/src/main/res/values/strings.xml | 3 ++ .../feature/onboarding/signin/SignInRoute.kt | 20 +++++++++++- 4 files changed, 70 insertions(+), 3 deletions(-) create mode 100644 core/src/main/java/com/terning/core/designsystem/component/bottomsheet/SignUpBottomSheet.kt diff --git a/core/src/main/java/com/terning/core/designsystem/component/bottomsheet/SignUpBottomSheet.kt b/core/src/main/java/com/terning/core/designsystem/component/bottomsheet/SignUpBottomSheet.kt new file mode 100644 index 000000000..0bfc49b4f --- /dev/null +++ b/core/src/main/java/com/terning/core/designsystem/component/bottomsheet/SignUpBottomSheet.kt @@ -0,0 +1,32 @@ +package com.terning.core.designsystem.component.bottomsheet + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import com.terning.core.R +import com.terning.core.designsystem.theme.TerningTheme + +@Composable +fun SignUpBottomSheet( + modifier: Modifier = Modifier, + onDismiss: () -> Unit +) { + TerningBasicBottomSheet( + content = { + Column { + Text( + text = stringResource(id = R.string.bottom_sheet_title), + style = TerningTheme.typography.title2, + modifier = modifier.padding(start = 28.dp) + ) + + } + }, + onDismissRequest = { onDismiss() } + ) + +} \ No newline at end of file diff --git a/core/src/main/java/com/terning/core/designsystem/component/bottomsheet/TerningBasicBottomSheet.kt b/core/src/main/java/com/terning/core/designsystem/component/bottomsheet/TerningBasicBottomSheet.kt index 7e2dcba5e..d13bda70d 100644 --- a/core/src/main/java/com/terning/core/designsystem/component/bottomsheet/TerningBasicBottomSheet.kt +++ b/core/src/main/java/com/terning/core/designsystem/component/bottomsheet/TerningBasicBottomSheet.kt @@ -1,10 +1,24 @@ package com.terning.core.designsystem.component.bottomsheet +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.ModalBottomSheet +import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.runtime.Composable +@OptIn(ExperimentalMaterial3Api::class) @Composable fun TerningBasicBottomSheet( - content: @Composable () -> Unit -){ + content: @Composable () -> Unit, + onDismissRequest: () -> Unit +) { + val sheetState = rememberModalBottomSheetState() + ModalBottomSheet( + onDismissRequest = { + onDismissRequest() + }, + sheetState = sheetState + ) { + content() + } } \ No newline at end of file diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index a60fd53c1..fc0204cbd 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -11,4 +11,7 @@ button + + 프로필 이미지 선택 + \ No newline at end of file diff --git a/feature/src/main/java/com/terning/feature/onboarding/signin/SignInRoute.kt b/feature/src/main/java/com/terning/feature/onboarding/signin/SignInRoute.kt index 24be49cee..259368a41 100644 --- a/feature/src/main/java/com/terning/feature/onboarding/signin/SignInRoute.kt +++ b/feature/src/main/java/com/terning/feature/onboarding/signin/SignInRoute.kt @@ -9,6 +9,9 @@ import androidx.compose.foundation.layout.wrapContentHeight 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.platform.LocalContext @@ -21,6 +24,7 @@ import androidx.lifecycle.compose.LocalLifecycleOwner import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.flowWithLifecycle import androidx.navigation.NavHostController +import com.terning.core.designsystem.component.bottomsheet.SignUpBottomSheet import com.terning.core.designsystem.theme.TerningPointTheme import com.terning.core.extension.toast import com.terning.feature.R @@ -56,6 +60,8 @@ fun SignInScreen( modifier: Modifier = Modifier, onSignInClick: () -> Unit = {}, ) { + var showBottomSheet by remember { mutableStateOf(false) } + Column( modifier = modifier .wrapContentHeight() @@ -70,9 +76,21 @@ fun SignInScreen( ) KakaoButton( title = stringResource(id = R.string.sign_in_kakao_button), - onSignInClick = { onSignInClick() }, + onSignInClick = { + //onSignInClick() + showBottomSheet = true + }, modifier = modifier.padding(horizontal = 20.dp) ) + + if (showBottomSheet) { + SignUpBottomSheet( + + onDismiss = { showBottomSheet = false } + ) + + } + } } From 24bc3e226639fe27f8b434f18fa2e80cc7573c69 Mon Sep 17 00:00:00 2001 From: boiledegg Date: Wed, 10 Jul 2024 02:28:15 +0900 Subject: [PATCH 08/43] =?UTF-8?q?[MOD/#20]=20selectedDate=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../terning/feature/calendar/CalendarMonth.kt | 2 +- .../feature/calendar/CalendarMonths.kt | 7 ++-- .../terning/feature/calendar/CalendarRoute.kt | 33 +++++++++++-------- .../feature/calendar/CalendarViewModel.kt | 3 +- 4 files changed, 24 insertions(+), 21 deletions(-) diff --git a/feature/src/main/java/com/terning/feature/calendar/CalendarMonth.kt b/feature/src/main/java/com/terning/feature/calendar/CalendarMonth.kt index e9d41dcf0..733f4a36e 100644 --- a/feature/src/main/java/com/terning/feature/calendar/CalendarMonth.kt +++ b/feature/src/main/java/com/terning/feature/calendar/CalendarMonth.kt @@ -25,7 +25,7 @@ fun CalendarMonth( modifier: Modifier = Modifier, monthData: MonthData, onDateSelected: (LocalDate) -> Unit, - selectedDate: LocalDate, + selectedDate: LocalDate?, scrapLists: List> = listOf() ) { Column( diff --git a/feature/src/main/java/com/terning/feature/calendar/CalendarMonths.kt b/feature/src/main/java/com/terning/feature/calendar/CalendarMonths.kt index 4f179af8d..25eb94ca0 100644 --- a/feature/src/main/java/com/terning/feature/calendar/CalendarMonths.kt +++ b/feature/src/main/java/com/terning/feature/calendar/CalendarMonths.kt @@ -1,7 +1,6 @@ package com.terning.feature.calendar import androidx.compose.foundation.background -import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.LazyRow import androidx.compose.runtime.Composable @@ -16,12 +15,12 @@ import java.time.YearMonth @Composable fun CalendarMonths( - modifier: Modifier = Modifier, listState: LazyListState, onDateSelected: (LocalDate) -> Unit, pages: Int, - selectedDate: LocalDate, - scrapLists: List> + selectedDate: LocalDate?, + scrapLists: List>, + modifier: Modifier = Modifier, ) { LazyRow( modifier = modifier diff --git a/feature/src/main/java/com/terning/feature/calendar/CalendarRoute.kt b/feature/src/main/java/com/terning/feature/calendar/CalendarRoute.kt index c706c5715..68f5e852c 100644 --- a/feature/src/main/java/com/terning/feature/calendar/CalendarRoute.kt +++ b/feature/src/main/java/com/terning/feature/calendar/CalendarRoute.kt @@ -29,6 +29,7 @@ import com.terning.feature.calendar.component.WeekDaysHeader import com.terning.feature.calendar.models.CalendarState import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.launch +import java.time.LocalDate @Composable fun CalendarRoute() { @@ -41,14 +42,14 @@ fun CalendarScreen( viewModel: CalendarViewModel = hiltViewModel() ) { val selectedDate by viewModel.selectedDate.collectAsState() - val state by remember{ mutableStateOf(CalendarState()) } + val state by remember { mutableStateOf(CalendarState()) } val listState = rememberLazyListState( initialFirstVisibleItemIndex = state.getInitialPage() ) - var currentDate by remember { mutableStateOf(selectedDate) } - var currentPage by remember { mutableIntStateOf(listState.firstVisibleItemIndex)} + var currentDate by remember { mutableStateOf(LocalDate.now()) } + var currentPage by remember { mutableIntStateOf(listState.firstVisibleItemIndex) } var isListExpanded by remember { mutableStateOf(false) } var isWeekEnabled by remember { mutableStateOf(false) } @@ -56,19 +57,22 @@ fun CalendarScreen( LaunchedEffect(key1 = listState) { snapshotFlow { listState.firstVisibleItemIndex } .distinctUntilChanged() - .collect{ - val swipeDirection = (listState.firstVisibleItemIndex - currentPage).coerceIn(-1, 1).toLong() + .collect { + val swipeDirection = + (listState.firstVisibleItemIndex - currentPage).coerceIn(-1, 1).toLong() currentDate = currentDate.plusMonths(swipeDirection) currentPage = listState.firstVisibleItemIndex } } LaunchedEffect(key1 = selectedDate) { - isWeekEnabled = true + if (selectedDate != null) + isWeekEnabled = true } BackHandler { - isWeekEnabled = false + if (isWeekEnabled) + isWeekEnabled = false } Scaffold( @@ -91,15 +95,17 @@ fun CalendarScreen( ) { paddingValues -> Column( modifier = Modifier - .fillMaxWidth() + .fillMaxSize() .padding(top = paddingValues.calculateTopPadding()) ) { WeekDaysHeader() - Spacer(modifier = Modifier - .fillMaxWidth() - .height(1.dp) - .background(color = Grey200) + Spacer( + modifier = Modifier + .fillMaxWidth() + .height(1.dp) + .background(color = Grey200) ) + CalendarMonths( modifier = Modifier.fillMaxSize(), selectedDate = selectedDate, @@ -108,9 +114,8 @@ fun CalendarScreen( }, listState = listState, pages = state.getPageCount(), - scrapLists = viewModel.mockScrapList + scrapLists = viewModel.mockScrapList, ) } - } } diff --git a/feature/src/main/java/com/terning/feature/calendar/CalendarViewModel.kt b/feature/src/main/java/com/terning/feature/calendar/CalendarViewModel.kt index d57863782..9c7568706 100644 --- a/feature/src/main/java/com/terning/feature/calendar/CalendarViewModel.kt +++ b/feature/src/main/java/com/terning/feature/calendar/CalendarViewModel.kt @@ -13,7 +13,6 @@ import com.terning.feature.calendar.models.Scrap import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import java.time.LocalDate import javax.inject.Inject @@ -21,7 +20,7 @@ import javax.inject.Inject @HiltViewModel class CalendarViewModel @Inject constructor( ) : ViewModel() { - private val _selectedDate = MutableStateFlow(LocalDate.now()) + private val _selectedDate = MutableStateFlow(null) val selectedDate get() = _selectedDate.asStateFlow() fun updateSelectedDate(date: LocalDate) = viewModelScope.launch { From da62b7dce3b49e0e32771edab3ef23ec6746275d Mon Sep 17 00:00:00 2001 From: boiledegg Date: Wed, 10 Jul 2024 02:29:04 +0900 Subject: [PATCH 09/43] =?UTF-8?q?[UI/#20]=20=EC=A3=BC=EA=B0=84=20=EC=BA=98?= =?UTF-8?q?=EB=A6=B0=EB=8D=94=20UI=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../terning/feature/calendar/CalendarWeek.kt | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 feature/src/main/java/com/terning/feature/calendar/CalendarWeek.kt diff --git a/feature/src/main/java/com/terning/feature/calendar/CalendarWeek.kt b/feature/src/main/java/com/terning/feature/calendar/CalendarWeek.kt new file mode 100644 index 000000000..5dc27f542 --- /dev/null +++ b/feature/src/main/java/com/terning/feature/calendar/CalendarWeek.kt @@ -0,0 +1,50 @@ +package com.terning.feature.calendar + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.LazyRow +import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.pager.HorizontalPager +import androidx.compose.foundation.pager.rememberPagerState +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.terning.feature.calendar.models.MonthData +import java.time.LocalDate +import java.time.YearMonth + +@Composable +fun CalendarWeek( + modifier: Modifier = Modifier, + selectedDate: LocalDate, + onDateSelected: (LocalDate) -> Unit = {} +) { + val monthData = MonthData(YearMonth.of(selectedDate.year, selectedDate.monthValue)) + val currentWeek = selectedDate.dayOfMonth / 7 + + val pagerState = rememberPagerState ( + initialPage = currentWeek, + pageCount = {monthData.totalDays / 7} + ) + + HorizontalPager( + modifier = modifier, + state = pagerState) { page -> + LazyRow( + modifier = Modifier + .fillMaxWidth() + .padding(20.dp), + horizontalArrangement = Arrangement.SpaceBetween + ) { + items(items = monthData.calendarMonth.weekDays[page]) { day -> + CalendarDay( + dayData = day, + isSelected = selectedDate == day.date, + isToday = day.date == LocalDate.now(), + onDateSelected = onDateSelected + ) + } + } + } +} \ No newline at end of file From 9c70c38475d8ad852bc353486df140edfcfc1ab4 Mon Sep 17 00:00:00 2001 From: boiledegg Date: Wed, 10 Jul 2024 02:29:38 +0900 Subject: [PATCH 10/43] =?UTF-8?q?[UI/#20]=20=EC=A3=BC=EA=B0=84=20=EC=BA=98?= =?UTF-8?q?=EB=A6=B0=EB=8D=94=20+=20=EB=8B=B9=EC=9D=BC=20=EC=8A=A4?= =?UTF-8?q?=ED=81=AC=EB=9E=A9=20=EB=AA=A9=EB=A1=9D=20=ED=91=9C=EC=8B=9C=20?= =?UTF-8?q?=ED=99=94=EB=A9=B4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../feature/calendar/CalendarWeekWithScrap.kt | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 feature/src/main/java/com/terning/feature/calendar/CalendarWeekWithScrap.kt diff --git a/feature/src/main/java/com/terning/feature/calendar/CalendarWeekWithScrap.kt b/feature/src/main/java/com/terning/feature/calendar/CalendarWeekWithScrap.kt new file mode 100644 index 000000000..e8c28d5f2 --- /dev/null +++ b/feature/src/main/java/com/terning/feature/calendar/CalendarWeekWithScrap.kt @@ -0,0 +1,59 @@ +package com.terning.feature.calendar + +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Card +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.shadow +import androidx.compose.ui.unit.dp +import com.terning.core.designsystem.theme.Grey200 +import com.terning.core.designsystem.theme.White +import com.terning.feature.calendar.models.Scrap +import java.time.LocalDate + +@Composable +fun CalendarWeekWithScrap( + modifier: Modifier = Modifier, + selectedDate: LocalDate?, + scrapLists: List> = listOf(), + onDateSelected: (LocalDate) -> Unit +) { + Column( + modifier = modifier + ) { + Card( + modifier = Modifier + .border(0.dp, Grey200, RoundedCornerShape(bottomStart = 20.dp, bottomEnd = 20.dp)) + .shadow( + shape = RoundedCornerShape(bottomStart = 20.dp, bottomEnd = 20.dp), + elevation = 1.dp + ), + + shape = RoundedCornerShape(bottomStart = 20.dp, bottomEnd = 20.dp), + ) { + CalendarWeek( + modifier = Modifier + .fillMaxWidth() + .background(White), + selectedDate = selectedDate?: LocalDate.now(), + onDateSelected = onDateSelected + ) + } + + LazyColumn( + modifier = Modifier + .fillMaxWidth() + ){ + /*items(items = scrapLists[selectedDate?.dayOfMonth - 1]) { + + }*/ + + } + } + +} \ No newline at end of file From ab47b7b3c7c42d0d173dfed76948cafcdc6f6115 Mon Sep 17 00:00:00 2001 From: boiledegg Date: Wed, 10 Jul 2024 02:30:22 +0900 Subject: [PATCH 11/43] =?UTF-8?q?[FEAT/#20]=20=EC=BA=98=EB=A6=B0=EB=8D=94?= =?UTF-8?q?=20=EC=A0=84=ED=99=98=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../terning/feature/calendar/CalendarRoute.kt | 51 +++++++++++++++---- 1 file changed, 42 insertions(+), 9 deletions(-) diff --git a/feature/src/main/java/com/terning/feature/calendar/CalendarRoute.kt b/feature/src/main/java/com/terning/feature/calendar/CalendarRoute.kt index 68f5e852c..a62f6a8d9 100644 --- a/feature/src/main/java/com/terning/feature/calendar/CalendarRoute.kt +++ b/feature/src/main/java/com/terning/feature/calendar/CalendarRoute.kt @@ -1,6 +1,11 @@ package com.terning.feature.calendar import androidx.activity.compose.BackHandler +import androidx.compose.animation.AnimatedContent +import androidx.compose.animation.SizeTransform +import androidx.compose.animation.slideInVertically +import androidx.compose.animation.slideOutVertically +import androidx.compose.animation.togetherWith import androidx.compose.foundation.background import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -106,16 +111,44 @@ fun CalendarScreen( .background(color = Grey200) ) - CalendarMonths( - modifier = Modifier.fillMaxSize(), - selectedDate = selectedDate, - onDateSelected = { - viewModel.updateSelectedDate(it) + AnimatedContent( + targetState = isWeekEnabled, + transitionSpec = { + if (!targetState) { + slideInVertically { fullHeight -> -fullHeight } togetherWith + slideOutVertically { fullHeight -> fullHeight } + } else { + slideInVertically { fullHeight -> fullHeight } togetherWith + slideOutVertically { fullHeight -> -fullHeight } + }.using( + sizeTransform = SizeTransform(clip = true) + ) }, - listState = listState, - pages = state.getPageCount(), - scrapLists = viewModel.mockScrapList, - ) + label = "" + ) { targetState -> + if (!targetState) { + CalendarMonths( + modifier = Modifier.fillMaxSize(), + selectedDate = selectedDate, + onDateSelected = { + viewModel.updateSelectedDate(it) + }, + listState = listState, + pages = state.getPageCount(), + scrapLists = viewModel.mockScrapList, + ) + } else { + CalendarWeekWithScrap( + modifier = Modifier + .fillMaxSize(), + selectedDate = selectedDate ?: LocalDate.now(), + scrapLists = viewModel.mockScrapList, + onDateSelected = { + viewModel.updateSelectedDate(it) + } + ) + } + } } } } From b0cc77f7d0d56ee7a1820444d5c955a821c0887c Mon Sep 17 00:00:00 2001 From: boiledegg Date: Wed, 10 Jul 2024 02:52:34 +0900 Subject: [PATCH 12/43] =?UTF-8?q?[CHORE/#20]=20=EC=95=A0=EB=8B=88=EB=A9=94?= =?UTF-8?q?=EC=9D=B4=EC=85=98=20=EB=9D=BC=EB=B2=A8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/terning/feature/calendar/CalendarRoute.kt | 6 +++++- feature/src/main/res/values/strings.xml | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/feature/src/main/java/com/terning/feature/calendar/CalendarRoute.kt b/feature/src/main/java/com/terning/feature/calendar/CalendarRoute.kt index a62f6a8d9..e187f8e6a 100644 --- a/feature/src/main/java/com/terning/feature/calendar/CalendarRoute.kt +++ b/feature/src/main/java/com/terning/feature/calendar/CalendarRoute.kt @@ -26,9 +26,11 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.runtime.snapshotFlow import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import com.terning.core.designsystem.theme.Grey200 +import com.terning.feature.R import com.terning.feature.calendar.component.CalendarTopBar import com.terning.feature.calendar.component.WeekDaysHeader import com.terning.feature.calendar.models.CalendarState @@ -124,7 +126,7 @@ fun CalendarScreen( sizeTransform = SizeTransform(clip = true) ) }, - label = "" + label = stringResource(id = R.string.calendar_animation_label) ) { targetState -> if (!targetState) { CalendarMonths( @@ -152,3 +154,5 @@ fun CalendarScreen( } } } + + diff --git a/feature/src/main/res/values/strings.xml b/feature/src/main/res/values/strings.xml index 2247cdd3a..73a86c796 100644 --- a/feature/src/main/res/values/strings.xml +++ b/feature/src/main/res/values/strings.xml @@ -35,5 +35,6 @@ previous next list + Calendar Transition \ No newline at end of file From eed08f5f0c6380b32066aaa09f02f7cc16ee8550 Mon Sep 17 00:00:00 2001 From: arinming Date: Wed, 10 Jul 2024 02:56:33 +0900 Subject: [PATCH 13/43] =?UTF-8?q?[FEAT/#11]=20ImageSlider=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/terning/feature/main/MainNavigator.kt | 3 +- .../com/terning/feature/search/SearchRoute.kt | 57 +++++------------- .../feature/search/component/DotsIndicator.kt | 27 +++++++++ .../feature/search/component/ImageSlider.kt | 58 +++++++++++++++++++ .../feature/search/component/IndicatorDots.kt | 23 ++++++++ 5 files changed, 124 insertions(+), 44 deletions(-) create mode 100644 feature/src/main/java/com/terning/feature/search/component/DotsIndicator.kt create mode 100644 feature/src/main/java/com/terning/feature/search/component/ImageSlider.kt create mode 100644 feature/src/main/java/com/terning/feature/search/component/IndicatorDots.kt diff --git a/feature/src/main/java/com/terning/feature/main/MainNavigator.kt b/feature/src/main/java/com/terning/feature/main/MainNavigator.kt index beb7b7920..c82fa571f 100644 --- a/feature/src/main/java/com/terning/feature/main/MainNavigator.kt +++ b/feature/src/main/java/com/terning/feature/main/MainNavigator.kt @@ -13,6 +13,7 @@ import com.terning.feature.calendar.navigation.navigateCalendar import com.terning.feature.home.navigation.navigateHome import com.terning.feature.mypage.navigation.navigateMyPage import com.terning.feature.onboarding.signin.navigation.SignIn +import com.terning.feature.search.navigation.Search import com.terning.feature.search.navigation.navigateSearch class MainNavigator( @@ -22,7 +23,7 @@ class MainNavigator( @Composable get() = navController .currentBackStackEntryAsState().value?.destination - val startDestination = SignIn + val startDestination = Search val currentTab: MainTab? @Composable get() = MainTab.find { tab -> diff --git a/feature/src/main/java/com/terning/feature/search/SearchRoute.kt b/feature/src/main/java/com/terning/feature/search/SearchRoute.kt index 90701416c..fc41b5340 100644 --- a/feature/src/main/java/com/terning/feature/search/SearchRoute.kt +++ b/feature/src/main/java/com/terning/feature/search/SearchRoute.kt @@ -1,22 +1,24 @@ package com.terning.feature.search +import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.CircleShape 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.draw.clip +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp -import com.terning.core.designsystem.component.textfield.NameTextField import com.terning.core.designsystem.component.textfield.SearchTextField -import com.terning.core.designsystem.theme.Grey400 -import com.terning.core.designsystem.theme.TerningMain -import com.terning.core.designsystem.theme.WarningRed import com.terning.feature.R +import com.terning.feature.search.component.ImageSlider @Composable fun SearchRoute() { @@ -26,34 +28,11 @@ fun SearchRoute() { @Composable fun SearchScreen() { var text by remember { mutableStateOf("") } - - // TODO 프로필 스크린 TextField로, 삭제될 코드입니다 - var helperMessage by remember { mutableStateOf(R.string.profile_text_field_helper) } - var helperIcon by remember { mutableStateOf(null) } - var helperColor by remember { mutableStateOf(Grey400) } - val specialCharacterPattern = Regex("[!@#\$%^&*(),.?\":{}|<>\\[\\]\\\\/]") - - // TODO 프로필 스크린 TextField로, 삭제될 코드입니다 - fun updateHelper(text: String) { - helperMessage = when { - text.isEmpty() -> R.string.profile_text_field_helper - specialCharacterPattern.containsMatchIn(text) -> R.string.profile_text_field_warning - text.length <= 12 -> R.string.profile_text_field_check - else -> R.string.profile_text_field_helper - } - helperIcon = when { - text.isEmpty() -> null - specialCharacterPattern.containsMatchIn(text) -> R.drawable.ic_warning - text.length <= 12 -> R.drawable.ic_check - else -> null - } - helperColor = when { - text.isEmpty() -> Grey400 - specialCharacterPattern.containsMatchIn(text) -> WarningRed - text.length <= 12 -> TerningMain - else -> Grey400 - } - } + val images = listOf( + R.drawable.ic_nav_search, + R.drawable.ic_check, + R.drawable.ic_nav_my_page, + ) Column( modifier = Modifier @@ -70,17 +49,9 @@ fun SearchScreen() { leftIcon = R.drawable.ic_nav_search ) - // TODO 프로필 스크린 TextField로, 삭제될 코드입니다 - NameTextField( - text = text, - onValueChange = { newText -> - text = newText - updateHelper(newText) - }, - hint = stringResource(R.string.profile_text_field_hint), - helperMessage = stringResource(helperMessage), - helperIcon = helperIcon, - helperColor = helperColor + ImageSlider( + modifier = Modifier, + images = images ) } } diff --git a/feature/src/main/java/com/terning/feature/search/component/DotsIndicator.kt b/feature/src/main/java/com/terning/feature/search/component/DotsIndicator.kt new file mode 100644 index 000000000..f9c5f3900 --- /dev/null +++ b/feature/src/main/java/com/terning/feature/search/component/DotsIndicator.kt @@ -0,0 +1,27 @@ +package com.terning.feature.search.component + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Row +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier + +@Composable +fun DotsIndicator( + modifier: Modifier = Modifier, + pageCount: Int, + currentPage: Int, +) { + Row( + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically, + modifier = modifier + ) { + repeat(pageCount) { index -> + IndicatorDots( + isSelected = index == currentPage, + modifier = modifier + ) + } + } +} \ No newline at end of file diff --git a/feature/src/main/java/com/terning/feature/search/component/ImageSlider.kt b/feature/src/main/java/com/terning/feature/search/component/ImageSlider.kt new file mode 100644 index 000000000..ca78861ff --- /dev/null +++ b/feature/src/main/java/com/terning/feature/search/component/ImageSlider.kt @@ -0,0 +1,58 @@ +package com.terning.feature.search.component + +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.wrapContentSize +import androidx.compose.foundation.pager.HorizontalPager +import androidx.compose.foundation.pager.rememberPagerState +import androidx.compose.material3.Card +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.unit.dp +import kotlinx.coroutines.delay + +@OptIn(ExperimentalFoundationApi::class) +@Composable +fun ImageSlider( + modifier: Modifier = Modifier, images: List, +) { + val pagerState = rememberPagerState(pageCount = { images.size }) + + LaunchedEffect(Unit) { + while (true) { + delay(3000) + val nextPage = (pagerState.currentPage + 1) % pagerState.pageCount + pagerState.scrollToPage(nextPage) + } + } + Column( + modifier.fillMaxWidth(), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Box(modifier = modifier.wrapContentSize()) { + HorizontalPager( + state = pagerState, + modifier = modifier + ) { currentPage -> + Card( + modifier + .wrapContentSize() + .padding(10.dp) + ) { + Image( + painter = painterResource(id = images[currentPage]), + contentDescription = null + ) + } + } + } + DotsIndicator(pageCount = images.size, currentPage = pagerState.currentPage) + } +} \ No newline at end of file diff --git a/feature/src/main/java/com/terning/feature/search/component/IndicatorDots.kt b/feature/src/main/java/com/terning/feature/search/component/IndicatorDots.kt new file mode 100644 index 000000000..98ff586e5 --- /dev/null +++ b/feature/src/main/java/com/terning/feature/search/component/IndicatorDots.kt @@ -0,0 +1,23 @@ +package com.terning.feature.search.component + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.dp + +@Composable +fun IndicatorDots( + isSelected: Boolean, modifier: Modifier, +) { + Box( + modifier = modifier + .padding(2.dp) + .clip(CircleShape) + .background(if (isSelected) Color(0xff373737) else Color(0xA8373737)) + ) +} \ No newline at end of file From 212475b01ed1095ce5f58d8d52a54dfa9c237d7b Mon Sep 17 00:00:00 2001 From: LEE YOU BIN Date: Wed, 10 Jul 2024 03:30:23 +0900 Subject: [PATCH 14/43] =?UTF-8?q?[FEAT/#27]=20=ED=9A=8C=EC=9B=90=EA=B0=80?= =?UTF-8?q?=EC=9E=85=20bottom=20sheet=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/build.gradle.kts | 3 +- .../bottomsheet/SignUpBottomSheet.kt | 32 -------- core/src/main/res/drawable/ic_character1.xml | 9 +++ core/src/main/res/drawable/ic_character2.xml | 9 +++ core/src/main/res/drawable/ic_character3.xml | 9 +++ core/src/main/res/drawable/ic_character4.xml | 9 +++ .../res/drawable/ic_selected_character.xml | 14 ++++ feature/build.gradle.kts | 1 + .../feature/onboarding/signin/SignInRoute.kt | 4 +- .../signup/component/SignUpBottomSheet.kt | 74 +++++++++++++++++++ gradle/libs.versions.toml | 2 + 11 files changed, 130 insertions(+), 36 deletions(-) delete mode 100644 core/src/main/java/com/terning/core/designsystem/component/bottomsheet/SignUpBottomSheet.kt create mode 100644 core/src/main/res/drawable/ic_character1.xml create mode 100644 core/src/main/res/drawable/ic_character2.xml create mode 100644 core/src/main/res/drawable/ic_character3.xml create mode 100644 core/src/main/res/drawable/ic_character4.xml create mode 100644 core/src/main/res/drawable/ic_selected_character.xml create mode 100644 feature/src/main/java/com/terning/feature/onboarding/signup/component/SignUpBottomSheet.kt diff --git a/core/build.gradle.kts b/core/build.gradle.kts index c53a6a378..2f11ebd4d 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -44,8 +44,9 @@ dependencies { // Kotlin implementation(libs.kotlin) - // Lifecycle Ktx + // AndroidXDependencies implementation(libs.androidx.lifecycle.runtime.ktx) + implementation(libs.androidx.compose.saveable) // Hilt implementation(libs.hilt.android) diff --git a/core/src/main/java/com/terning/core/designsystem/component/bottomsheet/SignUpBottomSheet.kt b/core/src/main/java/com/terning/core/designsystem/component/bottomsheet/SignUpBottomSheet.kt deleted file mode 100644 index 0bfc49b4f..000000000 --- a/core/src/main/java/com/terning/core/designsystem/component/bottomsheet/SignUpBottomSheet.kt +++ /dev/null @@ -1,32 +0,0 @@ -package com.terning.core.designsystem.component.bottomsheet - -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.padding -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.unit.dp -import com.terning.core.R -import com.terning.core.designsystem.theme.TerningTheme - -@Composable -fun SignUpBottomSheet( - modifier: Modifier = Modifier, - onDismiss: () -> Unit -) { - TerningBasicBottomSheet( - content = { - Column { - Text( - text = stringResource(id = R.string.bottom_sheet_title), - style = TerningTheme.typography.title2, - modifier = modifier.padding(start = 28.dp) - ) - - } - }, - onDismissRequest = { onDismiss() } - ) - -} \ No newline at end of file diff --git a/core/src/main/res/drawable/ic_character1.xml b/core/src/main/res/drawable/ic_character1.xml new file mode 100644 index 000000000..e7a473ec6 --- /dev/null +++ b/core/src/main/res/drawable/ic_character1.xml @@ -0,0 +1,9 @@ + + + diff --git a/core/src/main/res/drawable/ic_character2.xml b/core/src/main/res/drawable/ic_character2.xml new file mode 100644 index 000000000..e7a473ec6 --- /dev/null +++ b/core/src/main/res/drawable/ic_character2.xml @@ -0,0 +1,9 @@ + + + diff --git a/core/src/main/res/drawable/ic_character3.xml b/core/src/main/res/drawable/ic_character3.xml new file mode 100644 index 000000000..e7a473ec6 --- /dev/null +++ b/core/src/main/res/drawable/ic_character3.xml @@ -0,0 +1,9 @@ + + + diff --git a/core/src/main/res/drawable/ic_character4.xml b/core/src/main/res/drawable/ic_character4.xml new file mode 100644 index 000000000..e7a473ec6 --- /dev/null +++ b/core/src/main/res/drawable/ic_character4.xml @@ -0,0 +1,9 @@ + + + diff --git a/core/src/main/res/drawable/ic_selected_character.xml b/core/src/main/res/drawable/ic_selected_character.xml new file mode 100644 index 000000000..c5d459b5f --- /dev/null +++ b/core/src/main/res/drawable/ic_selected_character.xml @@ -0,0 +1,14 @@ + + + + diff --git a/feature/build.gradle.kts b/feature/build.gradle.kts index 16da9b5ee..372c480bb 100644 --- a/feature/build.gradle.kts +++ b/feature/build.gradle.kts @@ -69,6 +69,7 @@ dependencies { implementation(libs.androidx.workManager) implementation(libs.hilt.compiler) implementation(libs.androidx.lifecycle.runtime.compose.android) + implementation(libs.androidx.compose.saveable) // KspDependencies ksp(libs.hilt.android.compiler) diff --git a/feature/src/main/java/com/terning/feature/onboarding/signin/SignInRoute.kt b/feature/src/main/java/com/terning/feature/onboarding/signin/SignInRoute.kt index 259368a41..4cd57100b 100644 --- a/feature/src/main/java/com/terning/feature/onboarding/signin/SignInRoute.kt +++ b/feature/src/main/java/com/terning/feature/onboarding/signin/SignInRoute.kt @@ -24,12 +24,12 @@ import androidx.lifecycle.compose.LocalLifecycleOwner import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.flowWithLifecycle import androidx.navigation.NavHostController -import com.terning.core.designsystem.component.bottomsheet.SignUpBottomSheet import com.terning.core.designsystem.theme.TerningPointTheme import com.terning.core.extension.toast import com.terning.feature.R import com.terning.feature.home.navigation.navigateHome import com.terning.feature.onboarding.signin.component.KakaoButton +import com.terning.feature.onboarding.signup.component.SignUpBottomSheet @Composable fun SignInRoute( @@ -85,10 +85,8 @@ fun SignInScreen( if (showBottomSheet) { SignUpBottomSheet( - onDismiss = { showBottomSheet = false } ) - } } diff --git a/feature/src/main/java/com/terning/feature/onboarding/signup/component/SignUpBottomSheet.kt b/feature/src/main/java/com/terning/feature/onboarding/signup/component/SignUpBottomSheet.kt new file mode 100644 index 000000000..498312c0f --- /dev/null +++ b/feature/src/main/java/com/terning/feature/onboarding/signup/component/SignUpBottomSheet.kt @@ -0,0 +1,74 @@ +package com.terning.feature.onboarding.signup.component + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import com.terning.core.R +import com.terning.core.designsystem.component.bottomsheet.TerningBasicBottomSheet +import com.terning.core.designsystem.theme.TerningTheme +import com.terning.core.extension.noRippleClickable + +@Composable +fun SignUpBottomSheet( + modifier: Modifier = Modifier, + onDismiss: () -> Unit +) { + TerningBasicBottomSheet( + content = { + Column { + Text( + text = stringResource(id = R.string.bottom_sheet_title), + style = TerningTheme.typography.title2, + modifier = modifier.padding(start = 28.dp) + ) + RadioButtonGroup() + } + }, + onDismissRequest = { onDismiss() } + ) +} + +@Composable +fun RadioButtonGroup() { + val options = listOf( + R.drawable.ic_character1, + R.drawable.ic_character2, + R.drawable.ic_character3, + R.drawable.ic_character4 + ) + + var selectedOption by rememberSaveable { mutableIntStateOf(options[0]) } + + Column { + options.forEach { option -> + Row( + modifier = Modifier + .padding(horizontal = 28.dp, vertical = 8.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Image( + painter = painterResource(id = if (option == selectedOption) R.drawable.ic_selected_character else option), + contentDescription = null, + modifier = Modifier + .size(100.dp) + .noRippleClickable { + selectedOption = option + } + ) + } + } + } +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index dfe3113c2..398f4beb6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -26,6 +26,7 @@ androidxComposeBom = "2024.04.01" androidxComposeCompiler = "1.5.14" androidxComposeMaterial3 = "1.2.1" composeNavigation = "2.8.0-beta04" +composeSavable = "1.4.3" ## Hilt hilt = "2.48.1" @@ -100,6 +101,7 @@ androidx-compose-ui-test = { group = "androidx.compose.ui", name = "ui-test-juni androidx-compose-ui-testManifest = { group = "androidx.compose.ui", name = "ui-test-manifest" } androidx-compose-navigation = { group = "androidx.navigation", name = "navigation-compose", version.ref = "composeNavigation" } androidx-compose-navigation-test = { group = "androidx.navigation", name = "navigation-testing", version.ref = "composeNavigation" } +androidx-compose-saveable = {group = "androidx.compose.runtime", name = "runtime-saveable", version.ref = "composeSavable"} compose-compiler-gradle-plugin = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin" } androidx-ui = { group = "androidx.compose.ui", name = "ui" } From cdd13f8b66286787a8b4b10b4ed38102443a32b5 Mon Sep 17 00:00:00 2001 From: boiledegg Date: Wed, 10 Jul 2024 03:57:06 +0900 Subject: [PATCH 15/43] =?UTF-8?q?[MOD/#20]=20LocalDate=20=ED=99=95?= =?UTF-8?q?=EC=9E=A5=ED=95=A8=EC=88=98=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/terning/core/extension/LocalDateExt.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/com/terning/core/extension/LocalDateExt.kt b/core/src/main/java/com/terning/core/extension/LocalDateExt.kt index edcf61c96..ee8c97476 100644 --- a/core/src/main/java/com/terning/core/extension/LocalDateExt.kt +++ b/core/src/main/java/com/terning/core/extension/LocalDateExt.kt @@ -3,4 +3,8 @@ package com.terning.core.extension import java.time.LocalDate fun LocalDate.getStringAsTitle(): String = - "${year}년 ${monthValue.toString().padStart(2, '0')}월" \ No newline at end of file + "${year}년 ${monthValue.toString().padStart(2, '0')}월" + +fun LocalDate.getWeekIndexContainingSelectedDate(): Int = dayOfMonth / 7 + +fun LocalDate.isToday(): Boolean = this == LocalDate.now() \ No newline at end of file From 21a8942c4f6b07123c13b94cfe5df7c3789fbd2c Mon Sep 17 00:00:00 2001 From: boiledegg Date: Wed, 10 Jul 2024 03:57:48 +0900 Subject: [PATCH 16/43] =?UTF-8?q?[MOD/#20]=20=ED=99=95=EC=9E=A5=ED=95=A8?= =?UTF-8?q?=EC=88=98=20=EA=B8=B0=EB=B0=98=20=EC=BD=94=EB=93=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/terning/feature/calendar/CalendarMonth.kt | 4 ++-- .../main/java/com/terning/feature/calendar/CalendarWeek.kt | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/feature/src/main/java/com/terning/feature/calendar/CalendarMonth.kt b/feature/src/main/java/com/terning/feature/calendar/CalendarMonth.kt index 3bbc82493..48cab63ce 100644 --- a/feature/src/main/java/com/terning/feature/calendar/CalendarMonth.kt +++ b/feature/src/main/java/com/terning/feature/calendar/CalendarMonth.kt @@ -15,7 +15,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.terning.core.designsystem.theme.Grey150 import com.terning.core.designsystem.theme.TerningPointTheme -import com.terning.core.designsystem.theme.TerningTheme +import com.terning.core.extension.isToday import com.terning.feature.calendar.models.MonthData import com.terning.feature.calendar.models.Scrap import java.time.LocalDate @@ -49,7 +49,7 @@ fun CalendarMonth( CalendarDay( dayData = day, isSelected = selectedDate == day.date, - isToday = day.date == LocalDate.now(), + isToday = day.date.isToday(), onDateSelected = onDateSelected ) if(!day.isOutDate) { diff --git a/feature/src/main/java/com/terning/feature/calendar/CalendarWeek.kt b/feature/src/main/java/com/terning/feature/calendar/CalendarWeek.kt index 5dc27f542..20c4d993d 100644 --- a/feature/src/main/java/com/terning/feature/calendar/CalendarWeek.kt +++ b/feature/src/main/java/com/terning/feature/calendar/CalendarWeek.kt @@ -10,6 +10,8 @@ import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp +import com.terning.core.extension.getWeekIndexContainingSelectedDate +import com.terning.core.extension.isToday import com.terning.feature.calendar.models.MonthData import java.time.LocalDate import java.time.YearMonth @@ -21,7 +23,7 @@ fun CalendarWeek( onDateSelected: (LocalDate) -> Unit = {} ) { val monthData = MonthData(YearMonth.of(selectedDate.year, selectedDate.monthValue)) - val currentWeek = selectedDate.dayOfMonth / 7 + val currentWeek = selectedDate.getWeekIndexContainingSelectedDate() val pagerState = rememberPagerState ( initialPage = currentWeek, @@ -41,7 +43,7 @@ fun CalendarWeek( CalendarDay( dayData = day, isSelected = selectedDate == day.date, - isToday = day.date == LocalDate.now(), + isToday = day.date.isToday(), onDateSelected = onDateSelected ) } From 76615ccf5615a4e136c7e23aaed20ceeeec3f8c8 Mon Sep 17 00:00:00 2001 From: boiledegg Date: Wed, 10 Jul 2024 04:17:06 +0900 Subject: [PATCH 17/43] =?UTF-8?q?[FEAT/#20]=20=EC=A3=BC=EA=B0=84->?= =?UTF-8?q?=EC=9B=94=EA=B0=84=20=EC=A0=84=ED=99=98=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/terning/feature/calendar/CalendarRoute.kt | 8 ++++---- .../com/terning/feature/calendar/CalendarViewModel.kt | 3 +++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/feature/src/main/java/com/terning/feature/calendar/CalendarRoute.kt b/feature/src/main/java/com/terning/feature/calendar/CalendarRoute.kt index e187f8e6a..3acf797fe 100644 --- a/feature/src/main/java/com/terning/feature/calendar/CalendarRoute.kt +++ b/feature/src/main/java/com/terning/feature/calendar/CalendarRoute.kt @@ -73,13 +73,13 @@ fun CalendarScreen( } LaunchedEffect(key1 = selectedDate) { - if (selectedDate != null) - isWeekEnabled = true + isWeekEnabled = selectedDate != null } BackHandler { - if (isWeekEnabled) - isWeekEnabled = false + if (isWeekEnabled) { + viewModel.updateSelectedDate(selectedDate?: LocalDate.now()) + } } Scaffold( diff --git a/feature/src/main/java/com/terning/feature/calendar/CalendarViewModel.kt b/feature/src/main/java/com/terning/feature/calendar/CalendarViewModel.kt index 9c7568706..9eda16612 100644 --- a/feature/src/main/java/com/terning/feature/calendar/CalendarViewModel.kt +++ b/feature/src/main/java/com/terning/feature/calendar/CalendarViewModel.kt @@ -26,6 +26,9 @@ class CalendarViewModel @Inject constructor( fun updateSelectedDate(date: LocalDate) = viewModelScope.launch { if (_selectedDate.value != date) { _selectedDate.value = date + } else { + _selectedDate.value = null + } } From 6846986ec9ee1015493db73efacacd8dbe925d5c Mon Sep 17 00:00:00 2001 From: arinming Date: Wed, 10 Jul 2024 04:26:00 +0900 Subject: [PATCH 18/43] =?UTF-8?q?[FEAT/#11]=20=EA=B4=91=EA=B3=A0=20?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/terning/feature/search/SearchRoute.kt | 21 ++++++------ .../feature/search/component/DotsIndicator.kt | 4 ++- .../feature/search/component/ImageSlider.kt | 32 +++++++++++++------ .../feature/search/component/IndicatorDots.kt | 7 ++-- 4 files changed, 42 insertions(+), 22 deletions(-) diff --git a/feature/src/main/java/com/terning/feature/search/SearchRoute.kt b/feature/src/main/java/com/terning/feature/search/SearchRoute.kt index fc41b5340..d4934e5da 100644 --- a/feature/src/main/java/com/terning/feature/search/SearchRoute.kt +++ b/feature/src/main/java/com/terning/feature/search/SearchRoute.kt @@ -1,6 +1,7 @@ package com.terning.feature.search import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding @@ -37,17 +38,17 @@ fun SearchScreen() { Column( modifier = Modifier .fillMaxWidth() - .padding(horizontal = 16.dp) ) { - - SearchTextField( - text = text, - onValueChange = { newText -> - text = newText - }, - hint = stringResource(R.string.search_text_field_hint), - leftIcon = R.drawable.ic_nav_search - ) + Box(modifier = Modifier.padding(16.dp)) { + SearchTextField( + text = text, + onValueChange = { newText -> + text = newText + }, + hint = stringResource(R.string.search_text_field_hint), + leftIcon = R.drawable.ic_nav_search + ) + } ImageSlider( modifier = Modifier, diff --git a/feature/src/main/java/com/terning/feature/search/component/DotsIndicator.kt b/feature/src/main/java/com/terning/feature/search/component/DotsIndicator.kt index f9c5f3900..908eb460e 100644 --- a/feature/src/main/java/com/terning/feature/search/component/DotsIndicator.kt +++ b/feature/src/main/java/com/terning/feature/search/component/DotsIndicator.kt @@ -2,9 +2,11 @@ package com.terning.feature.search.component import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.padding import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp @Composable fun DotsIndicator( @@ -15,7 +17,7 @@ fun DotsIndicator( Row( horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically, - modifier = modifier + modifier = Modifier.padding(8.dp) ) { repeat(pageCount) { index -> IndicatorDots( diff --git a/feature/src/main/java/com/terning/feature/search/component/ImageSlider.kt b/feature/src/main/java/com/terning/feature/search/component/ImageSlider.kt index ca78861ff..ddfb8c0bf 100644 --- a/feature/src/main/java/com/terning/feature/search/component/ImageSlider.kt +++ b/feature/src/main/java/com/terning/feature/search/component/ImageSlider.kt @@ -1,10 +1,11 @@ package com.terning.feature.search.component -import androidx.compose.foundation.ExperimentalFoundationApi 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.fillMaxWidth +import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.wrapContentSize import androidx.compose.foundation.pager.HorizontalPager @@ -16,12 +17,13 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp +import com.terning.core.designsystem.theme.Grey200 import kotlinx.coroutines.delay -@OptIn(ExperimentalFoundationApi::class) @Composable fun ImageSlider( - modifier: Modifier = Modifier, images: List, + modifier: Modifier = Modifier, + images: List, ) { val pagerState = rememberPagerState(pageCount = { images.size }) @@ -33,26 +35,38 @@ fun ImageSlider( } } Column( - modifier.fillMaxWidth(), + modifier + .fillMaxWidth() + .background(Grey200), horizontalAlignment = Alignment.CenterHorizontally ) { - Box(modifier = modifier.wrapContentSize()) { + Box( + modifier = modifier + .wrapContentSize(), + contentAlignment = Alignment.BottomCenter + ) { HorizontalPager( state = pagerState, - modifier = modifier + modifier = modifier.wrapContentSize() ) { currentPage -> Card( modifier .wrapContentSize() - .padding(10.dp) ) { Image( painter = painterResource(id = images[currentPage]), - contentDescription = null + contentDescription = null, + modifier = modifier + .fillMaxWidth() + .height(112.dp) + .padding(16.dp) ) } } + DotsIndicator( + pageCount = images.size, + currentPage = pagerState.currentPage + ) } - DotsIndicator(pageCount = images.size, currentPage = pagerState.currentPage) } } \ No newline at end of file diff --git a/feature/src/main/java/com/terning/feature/search/component/IndicatorDots.kt b/feature/src/main/java/com/terning/feature/search/component/IndicatorDots.kt index 98ff586e5..dc91d16e5 100644 --- a/feature/src/main/java/com/terning/feature/search/component/IndicatorDots.kt +++ b/feature/src/main/java/com/terning/feature/search/component/IndicatorDots.kt @@ -3,12 +3,14 @@ package com.terning.feature.search.component import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.CircleShape import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip -import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp +import com.terning.core.designsystem.theme.TerningMain +import com.terning.core.designsystem.theme.White @Composable fun IndicatorDots( @@ -18,6 +20,7 @@ fun IndicatorDots( modifier = modifier .padding(2.dp) .clip(CircleShape) - .background(if (isSelected) Color(0xff373737) else Color(0xA8373737)) + .size(6.dp) + .background(if (isSelected) TerningMain else White) ) } \ No newline at end of file From 8f2970c9f90c612a1209af5400d8bd0c52393749 Mon Sep 17 00:00:00 2001 From: arinming Date: Wed, 10 Jul 2024 04:37:41 +0900 Subject: [PATCH 19/43] =?UTF-8?q?[FEAT/#11]=20=EC=9A=94=EC=A6=98=20?= =?UTF-8?q?=EB=8C=80=ED=95=99=EC=83=9D=EB=93=A4=EC=97=90=EA=B2=8C=20?= =?UTF-8?q?=EC=9D=B8=EA=B8=B0=20=EC=9E=88=EB=8A=94=20=EA=B3=B5=EA=B3=A0=20?= =?UTF-8?q?=ED=85=8D=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/textfield/SearchTextField.kt | 2 ++ .../com/terning/feature/main/MainNavigator.kt | 1 - .../com/terning/feature/search/SearchRoute.kt | 20 +++++++++++++------ feature/src/main/res/values/strings.xml | 2 +- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/core/src/main/java/com/terning/core/designsystem/component/textfield/SearchTextField.kt b/core/src/main/java/com/terning/core/designsystem/component/textfield/SearchTextField.kt index bc065431e..203e92b74 100644 --- a/core/src/main/java/com/terning/core/designsystem/component/textfield/SearchTextField.kt +++ b/core/src/main/java/com/terning/core/designsystem/component/textfield/SearchTextField.kt @@ -10,12 +10,14 @@ import com.terning.core.designsystem.theme.TerningTheme fun SearchTextField( text: String, onValueChange: (String) -> Unit, + readOnly: Boolean = false, hint: String, leftIcon: Int, ) { TerningBasicTextField( value = text, onValueChange = onValueChange, + readOnly = readOnly, textStyle = TerningTheme.typography.button3, textColor = Grey400, cursorBrush = SolidColor(Grey300), diff --git a/feature/src/main/java/com/terning/feature/main/MainNavigator.kt b/feature/src/main/java/com/terning/feature/main/MainNavigator.kt index c82fa571f..e67b04927 100644 --- a/feature/src/main/java/com/terning/feature/main/MainNavigator.kt +++ b/feature/src/main/java/com/terning/feature/main/MainNavigator.kt @@ -12,7 +12,6 @@ import androidx.navigation.navOptions import com.terning.feature.calendar.navigation.navigateCalendar import com.terning.feature.home.navigation.navigateHome import com.terning.feature.mypage.navigation.navigateMyPage -import com.terning.feature.onboarding.signin.navigation.SignIn import com.terning.feature.search.navigation.Search import com.terning.feature.search.navigation.navigateSearch diff --git a/feature/src/main/java/com/terning/feature/search/SearchRoute.kt b/feature/src/main/java/com/terning/feature/search/SearchRoute.kt index d4934e5da..a866d8018 100644 --- a/feature/src/main/java/com/terning/feature/search/SearchRoute.kt +++ b/feature/src/main/java/com/terning/feature/search/SearchRoute.kt @@ -1,23 +1,21 @@ package com.terning.feature.search -import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material3.Text 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.draw.clip -import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.terning.core.designsystem.component.textfield.SearchTextField +import com.terning.core.designsystem.theme.Black +import com.terning.core.designsystem.theme.TerningTheme import com.terning.feature.R import com.terning.feature.search.component.ImageSlider @@ -45,8 +43,9 @@ fun SearchScreen() { onValueChange = { newText -> text = newText }, + readOnly = true, hint = stringResource(R.string.search_text_field_hint), - leftIcon = R.drawable.ic_nav_search + leftIcon = R.drawable.ic_nav_search, ) } @@ -54,5 +53,14 @@ fun SearchScreen() { modifier = Modifier, images = images ) + Column { + Text( + text = stringResource(id = R.string.search_today_popular), + modifier = Modifier.padding(16.dp), + style = TerningTheme.typography.title1, + color = Black, + ) + } + } } diff --git a/feature/src/main/res/values/strings.xml b/feature/src/main/res/values/strings.xml index 2247cdd3a..247539e52 100644 --- a/feature/src/main/res/values/strings.xml +++ b/feature/src/main/res/values/strings.xml @@ -23,7 +23,7 @@ 관심있는 인턴 공고 키워드를 검색해보세요 - + 요즘 대학생들에게 인기 있는 공고 From 314d59285f5b8e99e5cb3c8d2f00e5b8fc13e03b Mon Sep 17 00:00:00 2001 From: arinming Date: Wed, 10 Jul 2024 04:47:30 +0900 Subject: [PATCH 20/43] =?UTF-8?q?[FEAT/#11]=20=EA=B3=B5=EA=B3=A0=20?= =?UTF-8?q?=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=ED=85=8D=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/terning/feature/search/SearchRoute.kt | 21 +++++++++++++++---- feature/src/main/res/values/strings.xml | 2 ++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/feature/src/main/java/com/terning/feature/search/SearchRoute.kt b/feature/src/main/java/com/terning/feature/search/SearchRoute.kt index a866d8018..5628d6d27 100644 --- a/feature/src/main/java/com/terning/feature/search/SearchRoute.kt +++ b/feature/src/main/java/com/terning/feature/search/SearchRoute.kt @@ -2,6 +2,7 @@ package com.terning.feature.search import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.material3.Text @@ -15,6 +16,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.terning.core.designsystem.component.textfield.SearchTextField import com.terning.core.designsystem.theme.Black +import com.terning.core.designsystem.theme.Grey400 import com.terning.core.designsystem.theme.TerningTheme import com.terning.feature.R import com.terning.feature.search.component.ImageSlider @@ -50,15 +52,26 @@ fun SearchScreen() { } ImageSlider( - modifier = Modifier, images = images ) - Column { + + Spacer(modifier = Modifier.padding(8.dp)) + + + Column( + modifier = Modifier.padding(horizontal = 16.dp), + ) { Text( text = stringResource(id = R.string.search_today_popular), - modifier = Modifier.padding(16.dp), + modifier = Modifier.padding(vertical = 4.dp), style = TerningTheme.typography.title1, - color = Black, + color = Black + ) + + Text( + text = stringResource(id = R.string.search_most_view_intern), + style = TerningTheme.typography.title5, + color = Grey400 ) } diff --git a/feature/src/main/res/values/strings.xml b/feature/src/main/res/values/strings.xml index 247539e52..39feacd21 100644 --- a/feature/src/main/res/values/strings.xml +++ b/feature/src/main/res/values/strings.xml @@ -24,6 +24,8 @@ 관심있는 인턴 공고 키워드를 검색해보세요 요즘 대학생들에게 인기 있는 공고 + 지금 조회수가 많은 공고들이에요 + 지금 스크랩 수가 많은 공고들이에요 From 7641fd4ddfdb438567390f0743c65523dfc3fbe2 Mon Sep 17 00:00:00 2001 From: arinming Date: Wed, 10 Jul 2024 05:25:26 +0900 Subject: [PATCH 21/43] =?UTF-8?q?[FEAT/#11]=20=EA=B3=B5=EA=B3=A0=20?= =?UTF-8?q?=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EC=BB=B4=ED=8F=AC=EB=84=8C?= =?UTF-8?q?=ED=8A=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/terning/feature/search/SearchRoute.kt | 36 +++++------ .../feature/search/component/SearchIntern.kt | 63 +++++++++++++++++++ .../search/component/SearchInternList.kt | 39 ++++++++++++ 3 files changed, 119 insertions(+), 19 deletions(-) create mode 100644 feature/src/main/java/com/terning/feature/search/component/SearchIntern.kt create mode 100644 feature/src/main/java/com/terning/feature/search/component/SearchInternList.kt diff --git a/feature/src/main/java/com/terning/feature/search/SearchRoute.kt b/feature/src/main/java/com/terning/feature/search/SearchRoute.kt index 5628d6d27..35a2d51c3 100644 --- a/feature/src/main/java/com/terning/feature/search/SearchRoute.kt +++ b/feature/src/main/java/com/terning/feature/search/SearchRoute.kt @@ -5,6 +5,7 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding +import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue @@ -16,10 +17,11 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.terning.core.designsystem.component.textfield.SearchTextField import com.terning.core.designsystem.theme.Black -import com.terning.core.designsystem.theme.Grey400 +import com.terning.core.designsystem.theme.Grey100 import com.terning.core.designsystem.theme.TerningTheme import com.terning.feature.R import com.terning.feature.search.component.ImageSlider +import com.terning.feature.search.component.SearchInternList @Composable fun SearchRoute() { @@ -57,23 +59,19 @@ fun SearchScreen() { Spacer(modifier = Modifier.padding(8.dp)) + Text( + text = stringResource(id = R.string.search_today_popular), + modifier = Modifier.padding(horizontal = 16.dp, vertical = 4.dp), + style = TerningTheme.typography.title1, + color = Black + ) - Column( - modifier = Modifier.padding(horizontal = 16.dp), - ) { - Text( - text = stringResource(id = R.string.search_today_popular), - modifier = Modifier.padding(vertical = 4.dp), - style = TerningTheme.typography.title1, - color = Black - ) - - Text( - text = stringResource(id = R.string.search_most_view_intern), - style = TerningTheme.typography.title5, - color = Grey400 - ) - } - + SearchInternList(type = "view") + HorizontalDivider( + thickness = 4.dp, + modifier = Modifier.padding(vertical = 8.dp), + color = Grey100, + ) + SearchInternList(type = "scrap") } -} +} \ No newline at end of file diff --git a/feature/src/main/java/com/terning/feature/search/component/SearchIntern.kt b/feature/src/main/java/com/terning/feature/search/component/SearchIntern.kt new file mode 100644 index 000000000..89ba2c0db --- /dev/null +++ b/feature/src/main/java/com/terning/feature/search/component/SearchIntern.kt @@ -0,0 +1,63 @@ +package com.terning.feature.search.component + +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +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.res.painterResource +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +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.feature.R + +@Composable +fun SearchIntern() { + Column( + verticalArrangement = Arrangement.spacedBy( + 10.dp, + Alignment.Top + ), + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier + .shadow( + elevation = 4.dp, + // TODO 효빈 그림자 PR 풀 받아서 바꾸기 + spotColor = Color(0x26DDDDDD), + ambientColor = Color(0x26DDDDDD) + ) + .background( + color = White, + shape = RoundedCornerShape(size = 5.dp) + ) + .padding(vertical = 8.dp) + ) { + Image( + painter = painterResource(id = R.drawable.ic_nav_search), + contentDescription = null, + modifier = Modifier + .fillMaxWidth() + .padding(16.dp) + .background(Grey400) + ) + Text( + text = "[유한킴벌리]\n그린캠프 w. 대학생 숲 \n활동가 모집", + modifier = Modifier.padding(horizontal = 8.dp), + style = TerningTheme.typography.body6, + color = Black, + overflow = TextOverflow.Ellipsis, + maxLines = 3 + ) + } +} \ No newline at end of file diff --git a/feature/src/main/java/com/terning/feature/search/component/SearchInternList.kt b/feature/src/main/java/com/terning/feature/search/component/SearchInternList.kt new file mode 100644 index 000000000..357b7a63a --- /dev/null +++ b/feature/src/main/java/com/terning/feature/search/component/SearchInternList.kt @@ -0,0 +1,39 @@ +package com.terning.feature.search.component + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.LazyRow +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import com.terning.core.designsystem.theme.Grey400 +import com.terning.core.designsystem.theme.TerningTheme +import com.terning.feature.R + +@Composable +fun SearchInternList( + type: String, +) { + Column(modifier = Modifier.padding(horizontal = 16.dp)) { + Text( + text = stringResource( + id = if (type == "view") R.string.search_most_view_intern + else R.string.search_most_scrap_intern + ), + style = TerningTheme.typography.title5, + color = Grey400 + ) + + LazyRow( + modifier = Modifier.padding(vertical = 8.dp), + horizontalArrangement = Arrangement.spacedBy(12.dp), + ) { + items(5) { + SearchIntern() + } + } + } +} \ No newline at end of file From 628c9a6124aa3972e1f08a480b9907ad6fb0814c Mon Sep 17 00:00:00 2001 From: arinming Date: Wed, 10 Jul 2024 05:29:25 +0900 Subject: [PATCH 22/43] =?UTF-8?q?[FIX/#11]=20=ED=83=90=EC=83=89=20?= =?UTF-8?q?=ED=85=8D=EC=8A=A4=ED=8A=B8=20=ED=95=84=EB=93=9C=20=EC=83=89?= =?UTF-8?q?=EC=83=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/designsystem/component/textfield/SearchTextField.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/com/terning/core/designsystem/component/textfield/SearchTextField.kt b/core/src/main/java/com/terning/core/designsystem/component/textfield/SearchTextField.kt index 203e92b74..db4f28f59 100644 --- a/core/src/main/java/com/terning/core/designsystem/component/textfield/SearchTextField.kt +++ b/core/src/main/java/com/terning/core/designsystem/component/textfield/SearchTextField.kt @@ -4,6 +4,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.SolidColor import com.terning.core.designsystem.theme.Grey300 import com.terning.core.designsystem.theme.Grey400 +import com.terning.core.designsystem.theme.TerningMain import com.terning.core.designsystem.theme.TerningTheme @Composable @@ -21,11 +22,11 @@ fun SearchTextField( textStyle = TerningTheme.typography.button3, textColor = Grey400, cursorBrush = SolidColor(Grey300), - drawLineColor = Grey300, + drawLineColor = TerningMain, strokeWidth = 2f, hint = hint, hintColor = Grey300, leftIcon = leftIcon, - leftIconColor = Grey400, + leftIconColor = TerningMain, ) } \ No newline at end of file From 4d5a56972cfaf38687bc622ecb95c8c7829af6be Mon Sep 17 00:00:00 2001 From: arinming Date: Wed, 10 Jul 2024 05:42:33 +0900 Subject: [PATCH 23/43] =?UTF-8?q?[DELETE/#11]=20=EC=95=88=EC=93=B0?= =?UTF-8?q?=EB=8A=94=20=EC=BD=94=EB=93=9C=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/component/TerningTextField.kt | 27 ------------------- 1 file changed, 27 deletions(-) delete mode 100644 core/src/main/java/com/terning/core/component/TerningTextField.kt diff --git a/core/src/main/java/com/terning/core/component/TerningTextField.kt b/core/src/main/java/com/terning/core/component/TerningTextField.kt deleted file mode 100644 index c80cd304a..000000000 --- a/core/src/main/java/com/terning/core/component/TerningTextField.kt +++ /dev/null @@ -1,27 +0,0 @@ -package com.terning.core.component - -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.text.BasicTextField -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import com.terning.core.designsystem.theme.TerningMain - -@Composable -fun TerningTextField( - value: String, - onValueChange: (String) -> Unit, - modifier: Modifier = Modifier, -) { - BasicTextField( - value = value, - onValueChange = onValueChange, - modifier = Modifier - .fillMaxWidth() - .background(TerningMain) - ) { - Column { - } - } -} \ No newline at end of file From cb739201067d4d1cc599bd4e2e75e510cffaf1d5 Mon Sep 17 00:00:00 2001 From: arinming Date: Wed, 10 Jul 2024 05:44:12 +0900 Subject: [PATCH 24/43] =?UTF-8?q?[FIX/#11]=20=EA=B2=BD=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/terning/feature/main/MainNavigator.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/feature/src/main/java/com/terning/feature/main/MainNavigator.kt b/feature/src/main/java/com/terning/feature/main/MainNavigator.kt index e67b04927..beb7b7920 100644 --- a/feature/src/main/java/com/terning/feature/main/MainNavigator.kt +++ b/feature/src/main/java/com/terning/feature/main/MainNavigator.kt @@ -12,7 +12,7 @@ import androidx.navigation.navOptions import com.terning.feature.calendar.navigation.navigateCalendar import com.terning.feature.home.navigation.navigateHome import com.terning.feature.mypage.navigation.navigateMyPage -import com.terning.feature.search.navigation.Search +import com.terning.feature.onboarding.signin.navigation.SignIn import com.terning.feature.search.navigation.navigateSearch class MainNavigator( @@ -22,7 +22,7 @@ class MainNavigator( @Composable get() = navController .currentBackStackEntryAsState().value?.destination - val startDestination = Search + val startDestination = SignIn val currentTab: MainTab? @Composable get() = MainTab.find { tab -> From 6e89f2a0f30ba9bd11b23632c86c0926eca3203a Mon Sep 17 00:00:00 2001 From: boiledegg Date: Wed, 10 Jul 2024 05:57:05 +0900 Subject: [PATCH 25/43] =?UTF-8?q?[ADD/#20]=20SelectedDateState=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../terning/feature/calendar/models/SelectedDateState.kt | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 feature/src/main/java/com/terning/feature/calendar/models/SelectedDateState.kt diff --git a/feature/src/main/java/com/terning/feature/calendar/models/SelectedDateState.kt b/feature/src/main/java/com/terning/feature/calendar/models/SelectedDateState.kt new file mode 100644 index 000000000..04864c848 --- /dev/null +++ b/feature/src/main/java/com/terning/feature/calendar/models/SelectedDateState.kt @@ -0,0 +1,8 @@ +package com.terning.feature.calendar.models + +import java.time.LocalDate + +data class SelectedDateState( + val selectedDate: LocalDate, + val isEnabled: Boolean +) From 05f7daf15955626cb29cf8254ccf89d04ed057cf Mon Sep 17 00:00:00 2001 From: boiledegg Date: Wed, 10 Jul 2024 05:57:26 +0900 Subject: [PATCH 26/43] =?UTF-8?q?[REFACTOR/#20]=20SelectedDateState=20?= =?UTF-8?q?=EA=B8=B0=EB=B0=98=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 --- .../terning/feature/calendar/CalendarMonth.kt | 7 +++-- .../feature/calendar/CalendarMonths.kt | 3 +- .../terning/feature/calendar/CalendarRoute.kt | 13 +++------ .../feature/calendar/CalendarViewModel.kt | 29 +++++++++++++++---- .../terning/feature/calendar/CalendarWeek.kt | 10 ++++--- .../feature/calendar/CalendarWeekWithScrap.kt | 5 ++-- 6 files changed, 43 insertions(+), 24 deletions(-) diff --git a/feature/src/main/java/com/terning/feature/calendar/CalendarMonth.kt b/feature/src/main/java/com/terning/feature/calendar/CalendarMonth.kt index 48cab63ce..fc9636da3 100644 --- a/feature/src/main/java/com/terning/feature/calendar/CalendarMonth.kt +++ b/feature/src/main/java/com/terning/feature/calendar/CalendarMonth.kt @@ -18,6 +18,7 @@ import com.terning.core.designsystem.theme.TerningPointTheme import com.terning.core.extension.isToday import com.terning.feature.calendar.models.MonthData import com.terning.feature.calendar.models.Scrap +import com.terning.feature.calendar.models.SelectedDateState import java.time.LocalDate import java.time.YearMonth @@ -26,7 +27,7 @@ fun CalendarMonth( modifier: Modifier = Modifier, monthData: MonthData, onDateSelected: (LocalDate) -> Unit, - selectedDate: LocalDate?, + selectedDate: SelectedDateState, scrapLists: List> = listOf() ) { Column( @@ -48,7 +49,7 @@ fun CalendarMonth( ) { CalendarDay( dayData = day, - isSelected = selectedDate == day.date, + isSelected = selectedDate.selectedDate == day.date && selectedDate.isEnabled, isToday = day.date.isToday(), onDateSelected = onDateSelected ) @@ -79,7 +80,7 @@ fun CalendarMonthPreview() { TerningPointTheme { CalendarMonth( monthData = MonthData(YearMonth.now()), - selectedDate = LocalDate.now(), + selectedDate = SelectedDateState(LocalDate.now(), true), onDateSelected = {}, scrapLists = listOf() ) diff --git a/feature/src/main/java/com/terning/feature/calendar/CalendarMonths.kt b/feature/src/main/java/com/terning/feature/calendar/CalendarMonths.kt index 25eb94ca0..5d4ecc101 100644 --- a/feature/src/main/java/com/terning/feature/calendar/CalendarMonths.kt +++ b/feature/src/main/java/com/terning/feature/calendar/CalendarMonths.kt @@ -10,6 +10,7 @@ import com.terning.feature.calendar.models.CalendarDefaults.flingBehavior import com.terning.feature.calendar.models.CalendarState.Companion.getDateByPage import com.terning.feature.calendar.models.MonthData import com.terning.feature.calendar.models.Scrap +import com.terning.feature.calendar.models.SelectedDateState import java.time.LocalDate import java.time.YearMonth @@ -18,7 +19,7 @@ fun CalendarMonths( listState: LazyListState, onDateSelected: (LocalDate) -> Unit, pages: Int, - selectedDate: LocalDate?, + selectedDate: SelectedDateState, scrapLists: List>, modifier: Modifier = Modifier, ) { diff --git a/feature/src/main/java/com/terning/feature/calendar/CalendarRoute.kt b/feature/src/main/java/com/terning/feature/calendar/CalendarRoute.kt index 3acf797fe..03afb65e3 100644 --- a/feature/src/main/java/com/terning/feature/calendar/CalendarRoute.kt +++ b/feature/src/main/java/com/terning/feature/calendar/CalendarRoute.kt @@ -59,7 +59,6 @@ fun CalendarScreen( var currentPage by remember { mutableIntStateOf(listState.firstVisibleItemIndex) } var isListExpanded by remember { mutableStateOf(false) } - var isWeekEnabled by remember { mutableStateOf(false) } LaunchedEffect(key1 = listState) { snapshotFlow { listState.firstVisibleItemIndex } @@ -72,13 +71,9 @@ fun CalendarScreen( } } - LaunchedEffect(key1 = selectedDate) { - isWeekEnabled = selectedDate != null - } - BackHandler { - if (isWeekEnabled) { - viewModel.updateSelectedDate(selectedDate?: LocalDate.now()) + if (selectedDate.isEnabled) { + viewModel.updateSelectedDate(selectedDate.selectedDate) } } @@ -114,7 +109,7 @@ fun CalendarScreen( ) AnimatedContent( - targetState = isWeekEnabled, + targetState = selectedDate.isEnabled, transitionSpec = { if (!targetState) { slideInVertically { fullHeight -> -fullHeight } togetherWith @@ -143,7 +138,7 @@ fun CalendarScreen( CalendarWeekWithScrap( modifier = Modifier .fillMaxSize(), - selectedDate = selectedDate ?: LocalDate.now(), + selectedDate = selectedDate, scrapLists = viewModel.mockScrapList, onDateSelected = { viewModel.updateSelectedDate(it) diff --git a/feature/src/main/java/com/terning/feature/calendar/CalendarViewModel.kt b/feature/src/main/java/com/terning/feature/calendar/CalendarViewModel.kt index 9eda16612..6a286807b 100644 --- a/feature/src/main/java/com/terning/feature/calendar/CalendarViewModel.kt +++ b/feature/src/main/java/com/terning/feature/calendar/CalendarViewModel.kt @@ -10,9 +10,11 @@ import com.terning.core.designsystem.theme.CalPurple import com.terning.core.designsystem.theme.CalRed import com.terning.core.designsystem.theme.CalYellow import com.terning.feature.calendar.models.Scrap +import com.terning.feature.calendar.models.SelectedDateState import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import java.time.LocalDate import javax.inject.Inject @@ -20,15 +22,29 @@ import javax.inject.Inject @HiltViewModel class CalendarViewModel @Inject constructor( ) : ViewModel() { - private val _selectedDate = MutableStateFlow(null) + private val _selectedDate = MutableStateFlow( + SelectedDateState( + selectedDate = LocalDate.now(), + isEnabled = false + ) + ) val selectedDate get() = _selectedDate.asStateFlow() fun updateSelectedDate(date: LocalDate) = viewModelScope.launch { - if (_selectedDate.value != date) { - _selectedDate.value = date + if (_selectedDate.value.selectedDate != date) { + _selectedDate.update { currentState -> + currentState.copy( + selectedDate = date, + isEnabled = true + ) + } } else { - _selectedDate.value = null - + _selectedDate.update { currentState -> + currentState.copy( + selectedDate = date, + isEnabled = !_selectedDate.value.isEnabled + ) + } } } @@ -63,18 +79,21 @@ class CalendarViewModel @Inject constructor( ) ) } + 3 -> { list.add( i, listOf() ) } + 4 -> { list.add( i, listOf() ) } + 5 -> { list.add( i, diff --git a/feature/src/main/java/com/terning/feature/calendar/CalendarWeek.kt b/feature/src/main/java/com/terning/feature/calendar/CalendarWeek.kt index 20c4d993d..7fb0e5d43 100644 --- a/feature/src/main/java/com/terning/feature/calendar/CalendarWeek.kt +++ b/feature/src/main/java/com/terning/feature/calendar/CalendarWeek.kt @@ -13,17 +13,19 @@ import androidx.compose.ui.unit.dp import com.terning.core.extension.getWeekIndexContainingSelectedDate import com.terning.core.extension.isToday import com.terning.feature.calendar.models.MonthData +import com.terning.feature.calendar.models.SelectedDateState import java.time.LocalDate import java.time.YearMonth @Composable fun CalendarWeek( modifier: Modifier = Modifier, - selectedDate: LocalDate, + selectedDate: SelectedDateState, onDateSelected: (LocalDate) -> Unit = {} ) { - val monthData = MonthData(YearMonth.of(selectedDate.year, selectedDate.monthValue)) - val currentWeek = selectedDate.getWeekIndexContainingSelectedDate() + val date = selectedDate.selectedDate + val monthData = MonthData(YearMonth.of(date.year, date.monthValue)) + val currentWeek = date.getWeekIndexContainingSelectedDate() val pagerState = rememberPagerState ( initialPage = currentWeek, @@ -42,7 +44,7 @@ fun CalendarWeek( items(items = monthData.calendarMonth.weekDays[page]) { day -> CalendarDay( dayData = day, - isSelected = selectedDate == day.date, + isSelected = selectedDate.selectedDate == day.date && selectedDate.isEnabled, isToday = day.date.isToday(), onDateSelected = onDateSelected ) diff --git a/feature/src/main/java/com/terning/feature/calendar/CalendarWeekWithScrap.kt b/feature/src/main/java/com/terning/feature/calendar/CalendarWeekWithScrap.kt index e8c28d5f2..00a1adde4 100644 --- a/feature/src/main/java/com/terning/feature/calendar/CalendarWeekWithScrap.kt +++ b/feature/src/main/java/com/terning/feature/calendar/CalendarWeekWithScrap.kt @@ -14,12 +14,13 @@ import androidx.compose.ui.unit.dp import com.terning.core.designsystem.theme.Grey200 import com.terning.core.designsystem.theme.White import com.terning.feature.calendar.models.Scrap +import com.terning.feature.calendar.models.SelectedDateState import java.time.LocalDate @Composable fun CalendarWeekWithScrap( modifier: Modifier = Modifier, - selectedDate: LocalDate?, + selectedDate: SelectedDateState, scrapLists: List> = listOf(), onDateSelected: (LocalDate) -> Unit ) { @@ -40,7 +41,7 @@ fun CalendarWeekWithScrap( modifier = Modifier .fillMaxWidth() .background(White), - selectedDate = selectedDate?: LocalDate.now(), + selectedDate = selectedDate, onDateSelected = onDateSelected ) } From 14575b5e184011827d2754c1fae3f00407da1356 Mon Sep 17 00:00:00 2001 From: LEE YOU BIN Date: Wed, 10 Jul 2024 06:16:24 +0900 Subject: [PATCH 27/43] =?UTF-8?q?[FEAT/#27]=20=ED=9A=8C=EC=9B=90=EA=B0=80?= =?UTF-8?q?=EC=9E=85=20=EB=B0=94=ED=85=80=20=EC=8B=9C=ED=8A=B8=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/button/TerningBasicButton.kt | 3 +- core/src/main/res/values/strings.xml | 3 - .../feature/onboarding/signin/SignInRoute.kt | 4 +- .../onboarding/signup/SignUpViewModel.kt | 10 +++ .../signup/component/SignUpBottomSheet.kt | 74 ++++++++++++------- .../src/main/res/drawable/ic_character1.xml | 0 .../src/main/res/drawable/ic_character2.xml | 0 .../src/main/res/drawable/ic_character3.xml | 0 .../src/main/res/drawable/ic_character4.xml | 0 .../src/main/res/drawable/ic_character5.xml | 9 +++ .../src/main/res/drawable/ic_character6.xml | 9 +++ .../res/drawable/ic_selected_character.xml | 0 feature/src/main/res/values/strings.xml | 11 ++- gradle/libs.versions.toml | 1 + 14 files changed, 91 insertions(+), 33 deletions(-) create mode 100644 feature/src/main/java/com/terning/feature/onboarding/signup/SignUpViewModel.kt rename {core => feature}/src/main/res/drawable/ic_character1.xml (100%) rename {core => feature}/src/main/res/drawable/ic_character2.xml (100%) rename {core => feature}/src/main/res/drawable/ic_character3.xml (100%) rename {core => feature}/src/main/res/drawable/ic_character4.xml (100%) create mode 100644 feature/src/main/res/drawable/ic_character5.xml create mode 100644 feature/src/main/res/drawable/ic_character6.xml rename {core => feature}/src/main/res/drawable/ic_selected_character.xml (100%) diff --git a/core/src/main/java/com/terning/core/designsystem/component/button/TerningBasicButton.kt b/core/src/main/java/com/terning/core/designsystem/component/button/TerningBasicButton.kt index 4da897a1d..ed923e9bd 100644 --- a/core/src/main/java/com/terning/core/designsystem/component/button/TerningBasicButton.kt +++ b/core/src/main/java/com/terning/core/designsystem/component/button/TerningBasicButton.kt @@ -3,6 +3,7 @@ package com.terning.core.designsystem.component.button import androidx.annotation.StringRes import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.interaction.collectIsPressedAsState +import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.material.ripple.LocalRippleTheme @@ -46,6 +47,7 @@ fun TerningBasicButton( CompositionLocalProvider(LocalRippleTheme provides NoRippleTheme) { Button( + contentPadding = PaddingValues(paddingVertical), modifier = modifier.fillMaxWidth(), interactionSource = interactionSource, enabled = isEnabled, @@ -61,7 +63,6 @@ fun TerningBasicButton( Text( text = stringResource(id = text), style = style, - modifier = modifier.padding(vertical = paddingVertical) ) } } diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index fc0204cbd..a60fd53c1 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -11,7 +11,4 @@ button - - 프로필 이미지 선택 - \ No newline at end of file diff --git a/feature/src/main/java/com/terning/feature/onboarding/signin/SignInRoute.kt b/feature/src/main/java/com/terning/feature/onboarding/signin/SignInRoute.kt index 4cd57100b..467d33fb5 100644 --- a/feature/src/main/java/com/terning/feature/onboarding/signin/SignInRoute.kt +++ b/feature/src/main/java/com/terning/feature/onboarding/signin/SignInRoute.kt @@ -85,10 +85,10 @@ fun SignInScreen( if (showBottomSheet) { SignUpBottomSheet( - onDismiss = { showBottomSheet = false } + onDismiss = { showBottomSheet = false }, + onStartDialog = { showBottomSheet = false } ) } - } } diff --git a/feature/src/main/java/com/terning/feature/onboarding/signup/SignUpViewModel.kt b/feature/src/main/java/com/terning/feature/onboarding/signup/SignUpViewModel.kt new file mode 100644 index 000000000..b0778653a --- /dev/null +++ b/feature/src/main/java/com/terning/feature/onboarding/signup/SignUpViewModel.kt @@ -0,0 +1,10 @@ +package com.terning.feature.onboarding.signup + +import androidx.lifecycle.ViewModel +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject + +@HiltViewModel +class SignUpViewModel @Inject constructor() : ViewModel(){ + +} \ No newline at end of file diff --git a/feature/src/main/java/com/terning/feature/onboarding/signup/component/SignUpBottomSheet.kt b/feature/src/main/java/com/terning/feature/onboarding/signup/component/SignUpBottomSheet.kt index 498312c0f..12516384b 100644 --- a/feature/src/main/java/com/terning/feature/onboarding/signup/component/SignUpBottomSheet.kt +++ b/feature/src/main/java/com/terning/feature/onboarding/signup/component/SignUpBottomSheet.kt @@ -1,40 +1,61 @@ package com.terning.feature.onboarding.signup.component import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size +import androidx.compose.foundation.lazy.grid.GridCells +import androidx.compose.foundation.lazy.grid.LazyVerticalGrid +import androidx.compose.foundation.lazy.grid.items import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.unit.dp -import com.terning.core.R +import androidx.compose.ui.unit.sp import com.terning.core.designsystem.component.bottomsheet.TerningBasicBottomSheet +import com.terning.core.designsystem.component.button.RoundButton import com.terning.core.designsystem.theme.TerningTheme import com.terning.core.extension.noRippleClickable +import com.terning.feature.R @Composable fun SignUpBottomSheet( modifier: Modifier = Modifier, - onDismiss: () -> Unit + onDismiss: () -> Unit, + onStartDialog: () -> Unit ) { TerningBasicBottomSheet( content = { Column { Text( - text = stringResource(id = R.string.bottom_sheet_title), + text = stringResource(id = R.string.sign_up_bottom_sheet_title), style = TerningTheme.typography.title2, - modifier = modifier.padding(start = 28.dp) + modifier = modifier + .padding( + start = 28.dp, + bottom = 25.dp + ), ) RadioButtonGroup() + Spacer(modifier = modifier.padding(bottom = 24.dp)) + RoundButton( + style = TerningTheme.typography.button0, + paddingVertical = 19.dp, + cornerRadius = 10.dp, + text = R.string.sign_up_dialog_start, + onButtonClick = { onStartDialog() }, + modifier = modifier.padding(horizontal = 24.dp) + ) + Spacer(modifier = modifier.padding(bottom = 36.dp)) } }, onDismissRequest = { onDismiss() } @@ -42,33 +63,36 @@ fun SignUpBottomSheet( } @Composable -fun RadioButtonGroup() { +fun RadioButtonGroup( + modifier: Modifier = Modifier +) { val options = listOf( R.drawable.ic_character1, R.drawable.ic_character2, R.drawable.ic_character3, - R.drawable.ic_character4 + R.drawable.ic_character4, + R.drawable.ic_character5, + R.drawable.ic_character6 ) var selectedOption by rememberSaveable { mutableIntStateOf(options[0]) } - Column { - options.forEach { option -> - Row( - modifier = Modifier - .padding(horizontal = 28.dp, vertical = 8.dp), - verticalAlignment = Alignment.CenterVertically - ) { - Image( - painter = painterResource(id = if (option == selectedOption) R.drawable.ic_selected_character else option), - contentDescription = null, - modifier = Modifier - .size(100.dp) - .noRippleClickable { - selectedOption = option - } - ) - } + LazyVerticalGrid( + columns = GridCells.Fixed(3), + verticalArrangement = Arrangement.spacedBy(20.dp), + modifier = modifier + .padding(horizontal = 20.dp) + ) { + items(options) { option -> + Image( + painter = painterResource(id = if (option == selectedOption) R.drawable.ic_selected_character else option), + contentDescription = stringResource(id = R.string.sign_up_bottom_sheet_description), + modifier = modifier + .size(76.dp) + .noRippleClickable { + selectedOption = option + } + ) } } } diff --git a/core/src/main/res/drawable/ic_character1.xml b/feature/src/main/res/drawable/ic_character1.xml similarity index 100% rename from core/src/main/res/drawable/ic_character1.xml rename to feature/src/main/res/drawable/ic_character1.xml diff --git a/core/src/main/res/drawable/ic_character2.xml b/feature/src/main/res/drawable/ic_character2.xml similarity index 100% rename from core/src/main/res/drawable/ic_character2.xml rename to feature/src/main/res/drawable/ic_character2.xml diff --git a/core/src/main/res/drawable/ic_character3.xml b/feature/src/main/res/drawable/ic_character3.xml similarity index 100% rename from core/src/main/res/drawable/ic_character3.xml rename to feature/src/main/res/drawable/ic_character3.xml diff --git a/core/src/main/res/drawable/ic_character4.xml b/feature/src/main/res/drawable/ic_character4.xml similarity index 100% rename from core/src/main/res/drawable/ic_character4.xml rename to feature/src/main/res/drawable/ic_character4.xml diff --git a/feature/src/main/res/drawable/ic_character5.xml b/feature/src/main/res/drawable/ic_character5.xml new file mode 100644 index 000000000..e7a473ec6 --- /dev/null +++ b/feature/src/main/res/drawable/ic_character5.xml @@ -0,0 +1,9 @@ + + + diff --git a/feature/src/main/res/drawable/ic_character6.xml b/feature/src/main/res/drawable/ic_character6.xml new file mode 100644 index 000000000..e7a473ec6 --- /dev/null +++ b/feature/src/main/res/drawable/ic_character6.xml @@ -0,0 +1,9 @@ + + + diff --git a/core/src/main/res/drawable/ic_selected_character.xml b/feature/src/main/res/drawable/ic_selected_character.xml similarity index 100% rename from core/src/main/res/drawable/ic_selected_character.xml rename to feature/src/main/res/drawable/ic_selected_character.xml diff --git a/feature/src/main/res/values/strings.xml b/feature/src/main/res/values/strings.xml index 2247cdd3a..a9f7c75b8 100644 --- a/feature/src/main/res/values/strings.xml +++ b/feature/src/main/res/values/strings.xml @@ -5,6 +5,7 @@ 서버통신 성공 서버통신 실패 + 캘린더 탐색 @@ -15,16 +16,22 @@ 카카오톡 로그인에 실패했습니다 로그인을 취소하였습니다 - + + 프로필 이미지 선택 + 회원가입 바텀시트 + 저장하기 + + 이름을 입력해주세요 12자리 이내, 문자/숫자 가능, 특수문자/기호 입력불가 이름에 특수문자는 입력할 수 없어요 이용 가능한 이름이에요 - + 관심있는 인턴 공고 키워드를 검색해보세요 + diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 398f4beb6..86c865a76 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -27,6 +27,7 @@ androidxComposeCompiler = "1.5.14" androidxComposeMaterial3 = "1.2.1" composeNavigation = "2.8.0-beta04" composeSavable = "1.4.3" +composeFlowRow = "0.30.0" ## Hilt hilt = "2.48.1" From e97ade3bc75ae72443619b6536356c3ca59eee54 Mon Sep 17 00:00:00 2001 From: LEE YOU BIN Date: Wed, 10 Jul 2024 06:24:02 +0900 Subject: [PATCH 28/43] =?UTF-8?q?[FEAT/#27]=20=EC=BA=90=EB=A6=AD=ED=84=B0?= =?UTF-8?q?=20=EB=B2=84=ED=8A=BC=20=ED=81=AC=EA=B8=B0=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../signup/component/SignUpBottomSheet.kt | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/feature/src/main/java/com/terning/feature/onboarding/signup/component/SignUpBottomSheet.kt b/feature/src/main/java/com/terning/feature/onboarding/signup/component/SignUpBottomSheet.kt index 12516384b..9c38c6f95 100644 --- a/feature/src/main/java/com/terning/feature/onboarding/signup/component/SignUpBottomSheet.kt +++ b/feature/src/main/java/com/terning/feature/onboarding/signup/component/SignUpBottomSheet.kt @@ -4,6 +4,7 @@ import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.grid.GridCells @@ -18,9 +19,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp import com.terning.core.designsystem.component.bottomsheet.TerningBasicBottomSheet import com.terning.core.designsystem.component.button.RoundButton import com.terning.core.designsystem.theme.TerningTheme @@ -80,15 +79,19 @@ fun RadioButtonGroup( LazyVerticalGrid( columns = GridCells.Fixed(3), verticalArrangement = Arrangement.spacedBy(20.dp), + horizontalArrangement = Arrangement.spacedBy(24.dp), modifier = modifier - .padding(horizontal = 20.dp) + .padding(horizontal = 42.dp) ) { items(options) { option -> Image( - painter = painterResource(id = if (option == selectedOption) R.drawable.ic_selected_character else option), + painter = painterResource( + id = if (option == selectedOption) R.drawable.ic_selected_character + else option + ), contentDescription = stringResource(id = R.string.sign_up_bottom_sheet_description), modifier = modifier - .size(76.dp) + .aspectRatio(1f) .noRippleClickable { selectedOption = option } From 109d375cb735c7d23da7ef489a66db4acc6deda9 Mon Sep 17 00:00:00 2001 From: LEE YOU BIN Date: Wed, 10 Jul 2024 06:58:43 +0900 Subject: [PATCH 29/43] =?UTF-8?q?[FEAT/#27]=20=EA=B8=B0=EB=B3=B8=20Theme?= =?UTF-8?q?=20->=20white?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/bottomsheet/TerningBasicBottomSheet.kt | 6 +++++- .../main/java/com/terning/core/designsystem/theme/Theme.kt | 2 +- .../com/terning/feature/onboarding/signin/SignInRoute.kt | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/com/terning/core/designsystem/component/bottomsheet/TerningBasicBottomSheet.kt b/core/src/main/java/com/terning/core/designsystem/component/bottomsheet/TerningBasicBottomSheet.kt index d13bda70d..c922054a6 100644 --- a/core/src/main/java/com/terning/core/designsystem/component/bottomsheet/TerningBasicBottomSheet.kt +++ b/core/src/main/java/com/terning/core/designsystem/component/bottomsheet/TerningBasicBottomSheet.kt @@ -1,13 +1,16 @@ package com.terning.core.designsystem.component.bottomsheet +import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ModalBottomSheet import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier @OptIn(ExperimentalMaterial3Api::class) @Composable fun TerningBasicBottomSheet( + modifier: Modifier = Modifier, content: @Composable () -> Unit, onDismissRequest: () -> Unit ) { @@ -17,7 +20,8 @@ fun TerningBasicBottomSheet( onDismissRequest = { onDismissRequest() }, - sheetState = sheetState + sheetState = sheetState, + modifier = modifier.navigationBarsPadding() ) { content() } diff --git a/core/src/main/java/com/terning/core/designsystem/theme/Theme.kt b/core/src/main/java/com/terning/core/designsystem/theme/Theme.kt index e7bea86a3..52025584b 100644 --- a/core/src/main/java/com/terning/core/designsystem/theme/Theme.kt +++ b/core/src/main/java/com/terning/core/designsystem/theme/Theme.kt @@ -9,7 +9,7 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.staticCompositionLocalOf private val LightColorScheme = lightColorScheme( - primary = TerningMain, + primary = White, ) private val LocalTerningTypography = staticCompositionLocalOf { diff --git a/feature/src/main/java/com/terning/feature/onboarding/signin/SignInRoute.kt b/feature/src/main/java/com/terning/feature/onboarding/signin/SignInRoute.kt index 467d33fb5..0354262a4 100644 --- a/feature/src/main/java/com/terning/feature/onboarding/signin/SignInRoute.kt +++ b/feature/src/main/java/com/terning/feature/onboarding/signin/SignInRoute.kt @@ -86,7 +86,7 @@ fun SignInScreen( if (showBottomSheet) { SignUpBottomSheet( onDismiss = { showBottomSheet = false }, - onStartDialog = { showBottomSheet = false } + onStartDialog = { showBottomSheet = false }, ) } } From 4217e3ed1cd356a4a0ff8752018052852e2bbd64 Mon Sep 17 00:00:00 2001 From: LEE YOU BIN Date: Wed, 10 Jul 2024 07:17:43 +0900 Subject: [PATCH 30/43] =?UTF-8?q?[FEAT/#27]=20BaseResponse=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/terning/data/dto/BaseResponse.kt | 6 ++---- .../feature/onboarding/signin/SignInRoute.kt | 15 +-------------- .../signup/component/SignUpBottomSheet.kt | 3 +-- 3 files changed, 4 insertions(+), 20 deletions(-) diff --git a/data/src/main/java/com/terning/data/dto/BaseResponse.kt b/data/src/main/java/com/terning/data/dto/BaseResponse.kt index 0de489ff1..a47d7bce9 100644 --- a/data/src/main/java/com/terning/data/dto/BaseResponse.kt +++ b/data/src/main/java/com/terning/data/dto/BaseResponse.kt @@ -7,10 +7,8 @@ import kotlinx.serialization.Serializable data class BaseResponse( @SerialName("status") val status: Int, - @SerialName("code") - val code: String, @SerialName("message") val message: String, - @SerialName("data") - val data: T, + @SerialName("result") + val result: T, ) diff --git a/feature/src/main/java/com/terning/feature/onboarding/signin/SignInRoute.kt b/feature/src/main/java/com/terning/feature/onboarding/signin/SignInRoute.kt index 0354262a4..c1c6a22c7 100644 --- a/feature/src/main/java/com/terning/feature/onboarding/signin/SignInRoute.kt +++ b/feature/src/main/java/com/terning/feature/onboarding/signin/SignInRoute.kt @@ -9,9 +9,6 @@ import androidx.compose.foundation.layout.wrapContentHeight 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.platform.LocalContext @@ -29,7 +26,6 @@ import com.terning.core.extension.toast import com.terning.feature.R import com.terning.feature.home.navigation.navigateHome import com.terning.feature.onboarding.signin.component.KakaoButton -import com.terning.feature.onboarding.signup.component.SignUpBottomSheet @Composable fun SignInRoute( @@ -60,7 +56,6 @@ fun SignInScreen( modifier: Modifier = Modifier, onSignInClick: () -> Unit = {}, ) { - var showBottomSheet by remember { mutableStateOf(false) } Column( modifier = modifier @@ -77,18 +72,10 @@ fun SignInScreen( KakaoButton( title = stringResource(id = R.string.sign_in_kakao_button), onSignInClick = { - //onSignInClick() - showBottomSheet = true + onSignInClick() }, modifier = modifier.padding(horizontal = 20.dp) ) - - if (showBottomSheet) { - SignUpBottomSheet( - onDismiss = { showBottomSheet = false }, - onStartDialog = { showBottomSheet = false }, - ) - } } } diff --git a/feature/src/main/java/com/terning/feature/onboarding/signup/component/SignUpBottomSheet.kt b/feature/src/main/java/com/terning/feature/onboarding/signup/component/SignUpBottomSheet.kt index 9c38c6f95..1cd62a4be 100644 --- a/feature/src/main/java/com/terning/feature/onboarding/signup/component/SignUpBottomSheet.kt +++ b/feature/src/main/java/com/terning/feature/onboarding/signup/component/SignUpBottomSheet.kt @@ -6,7 +6,6 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.lazy.grid.items @@ -54,7 +53,7 @@ fun SignUpBottomSheet( onButtonClick = { onStartDialog() }, modifier = modifier.padding(horizontal = 24.dp) ) - Spacer(modifier = modifier.padding(bottom = 36.dp)) + Spacer(modifier = modifier.padding(bottom = 15.dp)) } }, onDismissRequest = { onDismiss() } From 994bb001f021d28a8ade9486e96509dd337a121d Mon Sep 17 00:00:00 2001 From: LEE YOU BIN Date: Wed, 10 Jul 2024 07:34:57 +0900 Subject: [PATCH 31/43] =?UTF-8?q?[FEAT/#27]=20BaseResponse=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/src/main/java/com/terning/core/designsystem/theme/Theme.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/com/terning/core/designsystem/theme/Theme.kt b/core/src/main/java/com/terning/core/designsystem/theme/Theme.kt index 52025584b..e7bea86a3 100644 --- a/core/src/main/java/com/terning/core/designsystem/theme/Theme.kt +++ b/core/src/main/java/com/terning/core/designsystem/theme/Theme.kt @@ -9,7 +9,7 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.staticCompositionLocalOf private val LightColorScheme = lightColorScheme( - primary = White, + primary = TerningMain, ) private val LocalTerningTypography = staticCompositionLocalOf { From 1c06823e8e51e8ecce191a79f04bb37e39f236fd Mon Sep 17 00:00:00 2001 From: LEE YOU BIN Date: Wed, 10 Jul 2024 07:39:55 +0900 Subject: [PATCH 32/43] =?UTF-8?q?[FEAT/#27]=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/src/main/java/com/terning/core/designsystem/theme/Theme.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/com/terning/core/designsystem/theme/Theme.kt b/core/src/main/java/com/terning/core/designsystem/theme/Theme.kt index e7bea86a3..52025584b 100644 --- a/core/src/main/java/com/terning/core/designsystem/theme/Theme.kt +++ b/core/src/main/java/com/terning/core/designsystem/theme/Theme.kt @@ -9,7 +9,7 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.staticCompositionLocalOf private val LightColorScheme = lightColorScheme( - primary = TerningMain, + primary = White, ) private val LocalTerningTypography = staticCompositionLocalOf { From 7a8b4c3ba358d95411ddcc751c79dd10d2879570 Mon Sep 17 00:00:00 2001 From: LEE YOU BIN Date: Wed, 10 Jul 2024 07:45:06 +0900 Subject: [PATCH 33/43] =?UTF-8?q?[ADD/#35]=20Color=20=EC=86=8D=EC=84=B1=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../terning/core/designsystem/theme/Color.kt | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/core/src/main/java/com/terning/core/designsystem/theme/Color.kt b/core/src/main/java/com/terning/core/designsystem/theme/Color.kt index 0a5bfcab0..e9ed4d1be 100644 --- a/core/src/main/java/com/terning/core/designsystem/theme/Color.kt +++ b/core/src/main/java/com/terning/core/designsystem/theme/Color.kt @@ -17,22 +17,27 @@ val Black = Color(0xFF171717) val TerningMain = Color(0xFF1EA65E) val TerningMain2 = Color(0xFF179653) +// Sub Color +val TerningSub1 = Color(0xFF179653) +val TerningSub2 = Color(0xFF52C689) +val TerningSub3 = Color(0XFFE2F1E9) +val TerningSub4 = Color(0XFFE9F8F0) +val TerningSub5 = Color(0XFFF8FFFB) + +// Background +val Back = Color(0xFFF8F8F8) +val ToastGrey = Color(0XFF666666) + // Calendar Color val CalRed = Color(0xFFED4E54) - val CalOrange1 = Color(0xFFEE7647) val CalOrange2 = Color(0xFF5397F3) - val CalYellow = Color(0xFFF5E660) - val CalGreen1 = Color(0xFFC4E953) val CalGreen2 = Color(0xFF84D558) - val CalBlue1 = Color(0xFF45D0CC) val CalBlue2 = Color(0xFF4119F2) - val CalPurple = Color(0xFF9B64E2) - val CalPink = Color(0xFFF260AC) // Other From d6d4b7bae7ac3f05ea58926a585db1667dcd56fa Mon Sep 17 00:00:00 2001 From: LEE YOU BIN Date: Wed, 10 Jul 2024 16:54:40 +0900 Subject: [PATCH 34/43] =?UTF-8?q?[FEAT/#35]=20background=20White=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/src/main/java/com/terning/core/designsystem/theme/Theme.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/core/src/main/java/com/terning/core/designsystem/theme/Theme.kt b/core/src/main/java/com/terning/core/designsystem/theme/Theme.kt index e7bea86a3..3c37a431e 100644 --- a/core/src/main/java/com/terning/core/designsystem/theme/Theme.kt +++ b/core/src/main/java/com/terning/core/designsystem/theme/Theme.kt @@ -10,6 +10,7 @@ import androidx.compose.runtime.staticCompositionLocalOf private val LightColorScheme = lightColorScheme( primary = TerningMain, + background = White ) private val LocalTerningTypography = staticCompositionLocalOf { From 78f6405bcbc3de25f52704821bb0b1f96d6f585b Mon Sep 17 00:00:00 2001 From: LEE YOU BIN Date: Wed, 10 Jul 2024 16:56:44 +0900 Subject: [PATCH 35/43] =?UTF-8?q?[FEAT/#35]=20TopAppBar=20White=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designsystem/component/topappbar/TerningBasicTopAppBar.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/core/src/main/java/com/terning/core/designsystem/component/topappbar/TerningBasicTopAppBar.kt b/core/src/main/java/com/terning/core/designsystem/component/topappbar/TerningBasicTopAppBar.kt index 1f54bb766..b865b2a71 100644 --- a/core/src/main/java/com/terning/core/designsystem/component/topappbar/TerningBasicTopAppBar.kt +++ b/core/src/main/java/com/terning/core/designsystem/component/topappbar/TerningBasicTopAppBar.kt @@ -5,12 +5,14 @@ import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import com.terning.core.R import com.terning.core.designsystem.theme.TerningTheme +import com.terning.core.designsystem.theme.White @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -49,5 +51,6 @@ fun TerningBasicTopAppBar( action() } }, + colors = TopAppBarDefaults.topAppBarColors(White) ) } \ No newline at end of file From 4aa98567e0a45b5ade26ede27a66f2833e7507dd Mon Sep 17 00:00:00 2001 From: LEE YOU BIN Date: Wed, 10 Jul 2024 17:01:39 +0900 Subject: [PATCH 36/43] =?UTF-8?q?[FEAT/#27]=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/src/main/java/com/terning/core/designsystem/theme/Theme.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/com/terning/core/designsystem/theme/Theme.kt b/core/src/main/java/com/terning/core/designsystem/theme/Theme.kt index 52025584b..e7bea86a3 100644 --- a/core/src/main/java/com/terning/core/designsystem/theme/Theme.kt +++ b/core/src/main/java/com/terning/core/designsystem/theme/Theme.kt @@ -9,7 +9,7 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.staticCompositionLocalOf private val LightColorScheme = lightColorScheme( - primary = White, + primary = TerningMain, ) private val LocalTerningTypography = staticCompositionLocalOf { From 43482a49236e559b71c7066e59c348adf379ee86 Mon Sep 17 00:00:00 2001 From: boiledegg Date: Wed, 10 Jul 2024 17:36:25 +0900 Subject: [PATCH 37/43] =?UTF-8?q?[ADD/#38]=20ScrapBox=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designsystem/component/box/ScrapBox.kt | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 core/src/main/java/com/terning/core/designsystem/component/box/ScrapBox.kt diff --git a/core/src/main/java/com/terning/core/designsystem/component/box/ScrapBox.kt b/core/src/main/java/com/terning/core/designsystem/component/box/ScrapBox.kt new file mode 100644 index 000000000..20e63380e --- /dev/null +++ b/core/src/main/java/com/terning/core/designsystem/component/box/ScrapBox.kt @@ -0,0 +1,95 @@ +package com.terning.core.designsystem.component.box + +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +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.layout.width +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.shadow +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import com.terning.core.designsystem.theme.CalPink +import com.terning.core.designsystem.theme.CalPurple +import com.terning.core.designsystem.theme.Grey150 +import com.terning.core.designsystem.theme.White + +@Composable +fun ScrapBox( + cornerRadius: Dp, + scrapColor: Color, + modifier: Modifier = Modifier, + elevation: Dp = 0.dp, + borderWidth: Dp = 0.dp, + borderColor: Color = Grey150, + content: @Composable () -> Unit, +) { + Box( + modifier = modifier + .border( + width = borderWidth, + color = borderColor, + RoundedCornerShape(cornerRadius), + ) + .shadow( + elevation = elevation, + RoundedCornerShape(cornerRadius), + ) + ) { + Box( + modifier = Modifier + .background( + color = scrapColor, + shape = RoundedCornerShape(cornerRadius) + ) + .fillMaxSize() + ) + Box( + modifier = Modifier + .fillMaxSize() + .padding(start = 9.dp) + .background( + shape = RoundedCornerShape( + topEnd = cornerRadius, bottomEnd = cornerRadius + ), color = White + ) + ) { + content() + } + } +} + +@Preview(showBackground = true, showSystemUi = true) +@Composable +fun ScrapBoxPreview() { + Column { + ScrapBox( + modifier = Modifier + .height(116.dp) + .width(140.dp), + scrapColor = CalPink, + cornerRadius = 5.dp, + borderWidth = 1.dp + ) {} + + Spacer(modifier = Modifier.height(10.dp)) + + ScrapBox( + modifier = Modifier + .height(height = 92.dp) + .fillMaxWidth(), + scrapColor = CalPurple, + cornerRadius = 10.dp, + elevation = 1.dp + ) {} + } +} \ No newline at end of file From d10d5477dcbf54a0556b0cd62f3af27efe46e03a Mon Sep 17 00:00:00 2001 From: boiledegg Date: Wed, 10 Jul 2024 17:37:02 +0900 Subject: [PATCH 38/43] =?UTF-8?q?[ADD/#38]=20=EC=A3=BC=EC=84=9D=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../terning/core/designsystem/component/box/ScrapBox.kt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/core/src/main/java/com/terning/core/designsystem/component/box/ScrapBox.kt b/core/src/main/java/com/terning/core/designsystem/component/box/ScrapBox.kt index 20e63380e..f47153360 100644 --- a/core/src/main/java/com/terning/core/designsystem/component/box/ScrapBox.kt +++ b/core/src/main/java/com/terning/core/designsystem/component/box/ScrapBox.kt @@ -23,6 +23,14 @@ import com.terning.core.designsystem.theme.CalPurple import com.terning.core.designsystem.theme.Grey150 import com.terning.core.designsystem.theme.White +/** + * ScrapBox is made for easy customization of scrap box used in Calendar & Home Screen + * + * [modifier] must be assigned for assigning size of the box and padding + * [elevation] must be set greater than zero for shadow effect, mainly used in Calendar + * [borderWidth] must be set greater than zero for border effect, mainly used in Home + */ + @Composable fun ScrapBox( cornerRadius: Dp, From 3b353e67633e157317aca770e5025ac3e430b387 Mon Sep 17 00:00:00 2001 From: arinming Date: Wed, 10 Jul 2024 17:57:28 +0900 Subject: [PATCH 39/43] =?UTF-8?q?[REFACTOR/#11]=20padding=20=EA=B0=92=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designsystem/component/textfield/SearchTextField.kt | 4 ++-- .../component/textfield/TerningBasicTextField.kt | 7 ++++--- .../component/topappbar/TerningBasicTopAppBar.kt | 6 ++++-- .../main/java/com/terning/feature/main/MainNavigator.kt | 4 ++-- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/core/src/main/java/com/terning/core/designsystem/component/textfield/SearchTextField.kt b/core/src/main/java/com/terning/core/designsystem/component/textfield/SearchTextField.kt index db4f28f59..29dc5cf87 100644 --- a/core/src/main/java/com/terning/core/designsystem/component/textfield/SearchTextField.kt +++ b/core/src/main/java/com/terning/core/designsystem/component/textfield/SearchTextField.kt @@ -11,14 +11,13 @@ import com.terning.core.designsystem.theme.TerningTheme fun SearchTextField( text: String, onValueChange: (String) -> Unit, - readOnly: Boolean = false, hint: String, leftIcon: Int, + readOnly: Boolean = false, ) { TerningBasicTextField( value = text, onValueChange = onValueChange, - readOnly = readOnly, textStyle = TerningTheme.typography.button3, textColor = Grey400, cursorBrush = SolidColor(Grey300), @@ -28,5 +27,6 @@ fun SearchTextField( hintColor = Grey300, leftIcon = leftIcon, leftIconColor = TerningMain, + readOnly = readOnly, ) } \ No newline at end of file diff --git a/core/src/main/java/com/terning/core/designsystem/component/textfield/TerningBasicTextField.kt b/core/src/main/java/com/terning/core/designsystem/component/textfield/TerningBasicTextField.kt index 358e42b5a..a9045ef5e 100644 --- a/core/src/main/java/com/terning/core/designsystem/component/textfield/TerningBasicTextField.kt +++ b/core/src/main/java/com/terning/core/designsystem/component/textfield/TerningBasicTextField.kt @@ -37,7 +37,6 @@ import com.terning.core.designsystem.theme.White fun TerningBasicTextField( value: String, onValueChange: (String) -> Unit, - readOnly: Boolean = false, textStyle: TextStyle, textColor: Color, hintColor: Color, @@ -52,6 +51,7 @@ fun TerningBasicTextField( helperMessage: String = "", helperIcon: Int? = null, helperColor: Color = TerningMain, + readOnly: Boolean = false, ) { val keyboardController = LocalSoftwareKeyboardController.current val focusManager = LocalFocusManager.current @@ -62,7 +62,6 @@ fun TerningBasicTextField( onValueChange = onValueChange, singleLine = true, maxLines = 1, - readOnly = readOnly, keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done), keyboardActions = KeyboardActions( onDone = { @@ -124,7 +123,9 @@ fun TerningBasicTextField( ) } } - }) + }, + readOnly = readOnly, + ) Row( verticalAlignment = Alignment.CenterVertically, diff --git a/core/src/main/java/com/terning/core/designsystem/component/topappbar/TerningBasicTopAppBar.kt b/core/src/main/java/com/terning/core/designsystem/component/topappbar/TerningBasicTopAppBar.kt index 1f54bb766..e08a6d6f8 100644 --- a/core/src/main/java/com/terning/core/designsystem/component/topappbar/TerningBasicTopAppBar.kt +++ b/core/src/main/java/com/terning/core/designsystem/component/topappbar/TerningBasicTopAppBar.kt @@ -1,14 +1,17 @@ package com.terning.core.designsystem.component.topappbar +import androidx.compose.foundation.layout.padding import androidx.compose.material3.CenterAlignedTopAppBar import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier 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 import com.terning.core.R import com.terning.core.designsystem.theme.TerningTheme @@ -22,13 +25,11 @@ fun TerningBasicTopAppBar( ) { CenterAlignedTopAppBar( title = { - Text( text = title, textAlign = TextAlign.Center, style = TerningTheme.typography.title2 ) - }, navigationIcon = { if (showBackButton) { @@ -49,5 +50,6 @@ fun TerningBasicTopAppBar( action() } }, + modifier = Modifier.padding(horizontal = 16.dp) ) } \ No newline at end of file diff --git a/feature/src/main/java/com/terning/feature/main/MainNavigator.kt b/feature/src/main/java/com/terning/feature/main/MainNavigator.kt index beb7b7920..e67b04927 100644 --- a/feature/src/main/java/com/terning/feature/main/MainNavigator.kt +++ b/feature/src/main/java/com/terning/feature/main/MainNavigator.kt @@ -12,7 +12,7 @@ import androidx.navigation.navOptions import com.terning.feature.calendar.navigation.navigateCalendar import com.terning.feature.home.navigation.navigateHome import com.terning.feature.mypage.navigation.navigateMyPage -import com.terning.feature.onboarding.signin.navigation.SignIn +import com.terning.feature.search.navigation.Search import com.terning.feature.search.navigation.navigateSearch class MainNavigator( @@ -22,7 +22,7 @@ class MainNavigator( @Composable get() = navController .currentBackStackEntryAsState().value?.destination - val startDestination = SignIn + val startDestination = Search val currentTab: MainTab? @Composable get() = MainTab.find { tab -> From 8321ae2fb5283672fa9b8e6acfc880590fb23539 Mon Sep 17 00:00:00 2001 From: arinming Date: Wed, 10 Jul 2024 17:57:52 +0900 Subject: [PATCH 40/43] =?UTF-8?q?[ADD/#11]=20InternListType=20Enum=20class?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/terning/feature/search/SearchRoute.kt | 19 ++++++++++++++----- .../search/component/InternListType.kt | 6 ++++++ .../search/component/SearchInternList.kt | 10 ++++++---- 3 files changed, 26 insertions(+), 9 deletions(-) create mode 100644 feature/src/main/java/com/terning/feature/search/component/InternListType.kt diff --git a/feature/src/main/java/com/terning/feature/search/SearchRoute.kt b/feature/src/main/java/com/terning/feature/search/SearchRoute.kt index 35a2d51c3..dc075791f 100644 --- a/feature/src/main/java/com/terning/feature/search/SearchRoute.kt +++ b/feature/src/main/java/com/terning/feature/search/SearchRoute.kt @@ -21,6 +21,7 @@ import com.terning.core.designsystem.theme.Grey100 import com.terning.core.designsystem.theme.TerningTheme import com.terning.feature.R import com.terning.feature.search.component.ImageSlider +import com.terning.feature.search.component.InternListType import com.terning.feature.search.component.SearchInternList @Composable @@ -41,15 +42,20 @@ fun SearchScreen() { modifier = Modifier .fillMaxWidth() ) { - Box(modifier = Modifier.padding(16.dp)) { + Box( + modifier = Modifier.padding( + horizontal = 24.dp, + vertical = 16.dp + ) + ) { SearchTextField( text = text, onValueChange = { newText -> text = newText }, - readOnly = true, hint = stringResource(R.string.search_text_field_hint), leftIcon = R.drawable.ic_nav_search, + readOnly = true, ) } @@ -61,17 +67,20 @@ fun SearchScreen() { Text( text = stringResource(id = R.string.search_today_popular), - modifier = Modifier.padding(horizontal = 16.dp, vertical = 4.dp), + modifier = Modifier.padding( + horizontal = 24.dp, + vertical = 4.dp + ), style = TerningTheme.typography.title1, color = Black ) - SearchInternList(type = "view") + SearchInternList(type = InternListType.VIEW) HorizontalDivider( thickness = 4.dp, modifier = Modifier.padding(vertical = 8.dp), color = Grey100, ) - SearchInternList(type = "scrap") + SearchInternList(type = InternListType.SCRAP) } } \ No newline at end of file diff --git a/feature/src/main/java/com/terning/feature/search/component/InternListType.kt b/feature/src/main/java/com/terning/feature/search/component/InternListType.kt new file mode 100644 index 000000000..9caae356d --- /dev/null +++ b/feature/src/main/java/com/terning/feature/search/component/InternListType.kt @@ -0,0 +1,6 @@ +package com.terning.feature.search.component + +enum class InternListType(val type: String) { + VIEW("view"), + SCRAP("scrap"); +} diff --git a/feature/src/main/java/com/terning/feature/search/component/SearchInternList.kt b/feature/src/main/java/com/terning/feature/search/component/SearchInternList.kt index 357b7a63a..8c0eafa80 100644 --- a/feature/src/main/java/com/terning/feature/search/component/SearchInternList.kt +++ b/feature/src/main/java/com/terning/feature/search/component/SearchInternList.kt @@ -15,13 +15,15 @@ import com.terning.feature.R @Composable fun SearchInternList( - type: String, + type: InternListType, ) { - Column(modifier = Modifier.padding(horizontal = 16.dp)) { + Column(modifier = Modifier.padding(horizontal = 24.dp)) { Text( text = stringResource( - id = if (type == "view") R.string.search_most_view_intern - else R.string.search_most_scrap_intern + id = when (type) { + InternListType.VIEW -> R.string.search_most_view_intern + InternListType.SCRAP -> R.string.search_most_scrap_intern + } ), style = TerningTheme.typography.title5, color = Grey400 From 3b9c59f49bb15fbedd74c696ac69f70e6e25367e Mon Sep 17 00:00:00 2001 From: boiledegg Date: Wed, 10 Jul 2024 18:01:26 +0900 Subject: [PATCH 41/43] =?UTF-8?q?[CHORE/#38]=20=ED=94=84=EB=A6=AC=EB=B7=B0?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designsystem/component/box/ScrapBox.kt | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/core/src/main/java/com/terning/core/designsystem/component/box/ScrapBox.kt b/core/src/main/java/com/terning/core/designsystem/component/box/ScrapBox.kt index f47153360..03c6eb7f7 100644 --- a/core/src/main/java/com/terning/core/designsystem/component/box/ScrapBox.kt +++ b/core/src/main/java/com/terning/core/designsystem/component/box/ScrapBox.kt @@ -76,28 +76,28 @@ fun ScrapBox( } } -@Preview(showBackground = true, showSystemUi = true) +@Preview(showBackground = true) @Composable -fun ScrapBoxPreview() { - Column { - ScrapBox( - modifier = Modifier - .height(116.dp) - .width(140.dp), - scrapColor = CalPink, - cornerRadius = 5.dp, - borderWidth = 1.dp - ) {} - - Spacer(modifier = Modifier.height(10.dp)) +fun BorderedScrapBoxPreview() { + ScrapBox( + modifier = Modifier + .height(116.dp) + .width(140.dp), + scrapColor = CalPink, + cornerRadius = 5.dp, + borderWidth = 1.dp + ) {} +} - ScrapBox( - modifier = Modifier - .height(height = 92.dp) - .fillMaxWidth(), - scrapColor = CalPurple, - cornerRadius = 10.dp, - elevation = 1.dp - ) {} - } +@Preview(showBackground = true) +@Composable +fun ShadowedScrapBoxPreview() { + ScrapBox( + modifier = Modifier + .height(height = 92.dp) + .fillMaxWidth(), + scrapColor = CalPurple, + cornerRadius = 10.dp, + elevation = 1.dp + ) {} } \ No newline at end of file From cf2c328f9e4946d9c0e1f6cda158877f3180050d Mon Sep 17 00:00:00 2001 From: arinming Date: Wed, 10 Jul 2024 18:26:08 +0900 Subject: [PATCH 42/43] =?UTF-8?q?[FIX/#11]=20=EA=B2=BD=EB=A1=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/terning/feature/main/MainNavigator.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/feature/src/main/java/com/terning/feature/main/MainNavigator.kt b/feature/src/main/java/com/terning/feature/main/MainNavigator.kt index e67b04927..68d33fb38 100644 --- a/feature/src/main/java/com/terning/feature/main/MainNavigator.kt +++ b/feature/src/main/java/com/terning/feature/main/MainNavigator.kt @@ -12,6 +12,7 @@ import androidx.navigation.navOptions import com.terning.feature.calendar.navigation.navigateCalendar import com.terning.feature.home.navigation.navigateHome import com.terning.feature.mypage.navigation.navigateMyPage +import com.terning.feature.onboarding.signin.navigation.SignIn import com.terning.feature.search.navigation.Search import com.terning.feature.search.navigation.navigateSearch @@ -22,7 +23,7 @@ class MainNavigator( @Composable get() = navController .currentBackStackEntryAsState().value?.destination - val startDestination = Search + val startDestination = SignIn val currentTab: MainTab? @Composable get() = MainTab.find { tab -> From 067947a7559b1f31a7e68bceb95498328fd3a4d3 Mon Sep 17 00:00:00 2001 From: boiledegg Date: Wed, 10 Jul 2024 18:52:15 +0900 Subject: [PATCH 43/43] =?UTF-8?q?[REFACTOR/#20]=20=EB=A6=AC=EB=B7=B0=20?= =?UTF-8?q?=EA=B8=B0=EB=B0=98=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 --- .../java/com/terning/feature/calendar/CalendarRoute.kt | 3 ++- .../com/terning/feature/calendar/CalendarWeekWithScrap.kt | 7 +++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/feature/src/main/java/com/terning/feature/calendar/CalendarRoute.kt b/feature/src/main/java/com/terning/feature/calendar/CalendarRoute.kt index 03afb65e3..827f8d416 100644 --- a/feature/src/main/java/com/terning/feature/calendar/CalendarRoute.kt +++ b/feature/src/main/java/com/terning/feature/calendar/CalendarRoute.kt @@ -29,6 +29,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.terning.core.designsystem.theme.Grey200 import com.terning.feature.R import com.terning.feature.calendar.component.CalendarTopBar @@ -48,7 +49,7 @@ fun CalendarScreen( modifier: Modifier = Modifier, viewModel: CalendarViewModel = hiltViewModel() ) { - val selectedDate by viewModel.selectedDate.collectAsState() + val selectedDate by viewModel.selectedDate.collectAsStateWithLifecycle() val state by remember { mutableStateOf(CalendarState()) } val listState = rememberLazyListState( diff --git a/feature/src/main/java/com/terning/feature/calendar/CalendarWeekWithScrap.kt b/feature/src/main/java/com/terning/feature/calendar/CalendarWeekWithScrap.kt index 00a1adde4..fbdf774cc 100644 --- a/feature/src/main/java/com/terning/feature/calendar/CalendarWeekWithScrap.kt +++ b/feature/src/main/java/com/terning/feature/calendar/CalendarWeekWithScrap.kt @@ -29,7 +29,10 @@ fun CalendarWeekWithScrap( ) { Card( modifier = Modifier - .border(0.dp, Grey200, RoundedCornerShape(bottomStart = 20.dp, bottomEnd = 20.dp)) + .border( + width = 0.dp, + color = Grey200, + shape = RoundedCornerShape(bottomStart = 20.dp, bottomEnd = 20.dp)) .shadow( shape = RoundedCornerShape(bottomStart = 20.dp, bottomEnd = 20.dp), elevation = 1.dp @@ -49,7 +52,7 @@ fun CalendarWeekWithScrap( LazyColumn( modifier = Modifier .fillMaxWidth() - ){ + ) { /*items(items = scrapLists[selectedDate?.dayOfMonth - 1]) { }*/