From 0a93f563637fcf254c480a698a51e3cb00298997 Mon Sep 17 00:00:00 2001
From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com>
Date: Tue, 18 Mar 2025 16:02:34 +0900
Subject: [PATCH 01/27] =?UTF-8?q?[feat]:=20=EB=A9=94=EB=89=B4=20=ED=8F=B4?=
=?UTF-8?q?=EB=8D=94=20top=20app=20bar=20=ED=99=94=EB=A9=B4=20=EC=9D=B4?=
=?UTF-8?q?=EB=8F=99=20=EA=B5=AC=ED=98=84=20(#50)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.idea/deploymentTargetSelector.xml | 15 -----------
.../ui/addmenu/screen/AddMenuScreen.kt | 8 ++++--
.../menuFolder/component/MenuFolderButton.kt | 27 ++++++++++++-------
.../component/MenuFolderTopAppBar.kt | 8 +++---
.../ui/menuFolder/screen/MenuFolderScreen.kt | 17 +++++++++---
.../kuit/ourmenu/ui/navigator/MainNavGraph.kt | 12 +++++++++
.../com/kuit/ourmenu/ui/navigator/Routes.kt | 6 +++++
gradle/libs.versions.toml | 2 +-
gradle/wrapper/gradle-wrapper.properties | 2 +-
9 files changed, 62 insertions(+), 35 deletions(-)
diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml
index 9b3f5cb2..1f58bdfc 100644
--- a/.idea/deploymentTargetSelector.xml
+++ b/.idea/deploymentTargetSelector.xml
@@ -13,21 +13,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/addmenu/screen/AddMenuScreen.kt b/app/src/main/java/com/kuit/ourmenu/ui/addmenu/screen/AddMenuScreen.kt
index 0530f95e..44be08e7 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/addmenu/screen/AddMenuScreen.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/addmenu/screen/AddMenuScreen.kt
@@ -34,6 +34,8 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel
+import androidx.navigation.NavController
+import androidx.navigation.compose.rememberNavController
import com.kuit.ourmenu.R
import com.kuit.ourmenu.ui.addmenu.component.AddMenuSearchBackground
import com.kuit.ourmenu.ui.addmenu.component.bottomsheet.AddMenuBottomSheetContent
@@ -46,7 +48,7 @@ import com.kuit.ourmenu.ui.theme.ourMenuTypography
@OptIn(ExperimentalMaterial3Api::class)
@Composable
-fun AddMenuScreen(modifier: Modifier = Modifier) {
+fun AddMenuScreen(navController: NavController) {
var scaffoldState = rememberBottomSheetScaffoldState()
var showBottomSheet by rememberSaveable { mutableStateOf(false) }
var showSearchBackground by rememberSaveable { mutableStateOf(false) }
@@ -162,5 +164,7 @@ fun AddMenuScreen(modifier: Modifier = Modifier) {
@Preview(showBackground = true)
@Composable
private fun AddMenuScreenPreview() {
- AddMenuScreen()
+ val navController = rememberNavController()
+
+ AddMenuScreen(navController)
}
\ No newline at end of file
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/MenuFolderButton.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/MenuFolderButton.kt
index 0e79c7cc..45afe69f 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/MenuFolderButton.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/MenuFolderButton.kt
@@ -2,6 +2,7 @@ package com.kuit.ourmenu.ui.menuFolder.component
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
+import androidx.compose.foundation.clickable
import androidx.compose.foundation.gestures.detectHorizontalDragGestures
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
@@ -47,7 +48,10 @@ import kotlinx.coroutines.launch
fun MenuFolderButton(
isSwiped: Boolean, // 현재 버튼이 스와이프된 상태인지 확인
onSwipe: () -> Unit, // 새로운 버튼이 스와이프될 때 호출
- onReset: () -> Unit // 버튼이 닫히면 호출
+ onReset: () -> Unit, // 버튼이 닫히면 호출
+ onButtonClick: () -> Unit = {},
+ onEditClick: () -> Unit = {},
+ onDeleteClick: () -> Unit = {}
) {
var offsetX by remember { mutableFloatStateOf(0f) }
val scope = rememberCoroutineScope()
@@ -80,26 +84,30 @@ fun MenuFolderButton(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.CenterEnd
) {
- MenuFolderDeleteButton()
- MenuFolderEditButton()
+ MenuFolderDeleteButton(onDeleteClick)
+ MenuFolderEditButton(onEditClick)
}
// 스와이프 상태일 때만 offset 적용
- Box(modifier = Modifier.offset(x = if (isSwiped) offsetX.dp else 0.dp)) {
+ Box(modifier = Modifier
+ .offset(x = if (isSwiped) offsetX.dp else 0.dp)
+ .clickable(onClick = onButtonClick)
+ ) {
MenuFolderContent()
}
}
}
@Composable
-fun MenuFolderEditButton() {
+fun MenuFolderEditButton(onEditClick: () -> Unit = {}) {
Box(
modifier = Modifier
.padding(end = 64.dp)
.width(80.dp)
.fillMaxHeight()
.clip(RoundedCornerShape(topEnd = 12.dp, bottomEnd = 12.dp))
- .background(color = Neutral300),
+ .background(color = Neutral300)
+ .clickable(onClick = onEditClick),
contentAlignment = Alignment.CenterEnd
) {
Column(modifier = Modifier.padding(end = 20.dp)) {
@@ -119,14 +127,15 @@ fun MenuFolderEditButton() {
}
@Composable
-fun MenuFolderDeleteButton() {
+fun MenuFolderDeleteButton(onDeleteClick: () -> Unit = {}) {
Box(
modifier = Modifier
.width(80.dp)
.fillMaxHeight()
.clip(RoundedCornerShape(topEnd = 12.dp, bottomEnd = 12.dp))
- .background(color = Primary500Main),
- contentAlignment = Alignment.CenterEnd
+ .background(color = Primary500Main)
+ .clickable(onClick = onDeleteClick),
+ contentAlignment = Alignment.CenterEnd,
) {
Column(modifier = Modifier.padding(end = 20.dp)) {
Image(
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/MenuFolderTopAppBar.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/MenuFolderTopAppBar.kt
index 4da18245..b6d8b8df 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/MenuFolderTopAppBar.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/MenuFolderTopAppBar.kt
@@ -21,7 +21,7 @@ import com.kuit.ourmenu.ui.theme.NeutralWhite
@OptIn(ExperimentalMaterial3Api::class)
@Composable
-fun MenuFolderTopAppBar(modifier: Modifier = Modifier) {
+fun MenuFolderTopAppBar(onClick: () -> Unit) {
// 기본
TopAppBar(
modifier = Modifier
@@ -45,7 +45,7 @@ fun MenuFolderTopAppBar(modifier: Modifier = Modifier) {
},
actions = {
IconButton(
- onClick = { /* TODO : Add Menu Button Click Event */ },
+ onClick = onClick,
modifier = Modifier.padding(end = 20.dp)
) {
Icon(
@@ -61,5 +61,7 @@ fun MenuFolderTopAppBar(modifier: Modifier = Modifier) {
@Preview(showBackground = true)
@Composable
private fun HomeTopAppBarPreview() {
- MenuFolderTopAppBar()
+ MenuFolderTopAppBar(
+ onClick = {}
+ )
}
\ No newline at end of file
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderScreen.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderScreen.kt
index 4b544d45..854289b4 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderScreen.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderScreen.kt
@@ -21,16 +21,19 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
+import androidx.navigation.NavController
+import androidx.navigation.compose.rememberNavController
import com.kuit.ourmenu.R
import com.kuit.ourmenu.ui.menuFolder.component.AddButton
import com.kuit.ourmenu.ui.menuFolder.component.MenuFolderButton
import com.kuit.ourmenu.ui.menuFolder.component.MenuFolderTopAppBar
+import com.kuit.ourmenu.ui.navigator.Routes
import com.kuit.ourmenu.ui.theme.NeutralWhite
import com.kuit.ourmenu.ui.theme.Primary500Main
import com.kuit.ourmenu.ui.theme.ourMenuTypography
@Composable
-fun MenuFolderScreen(modifier: Modifier = Modifier) {
+fun MenuFolderScreen(navController: NavController) {
val menuCount = 5 // 임의로 정한 값
val menuFolderCount = 8 // 임의로 정한 값
@@ -39,7 +42,11 @@ fun MenuFolderScreen(modifier: Modifier = Modifier) {
Scaffold(
topBar = {
- MenuFolderTopAppBar()
+ MenuFolderTopAppBar(
+ onClick = {
+ navController.navigate(route = Routes.AddMenu)
+ }
+ )
}
) { innerPadding ->
LazyColumn(
@@ -79,7 +86,7 @@ fun MenuFolderScreen(modifier: Modifier = Modifier) {
MenuFolderButton(
isSwiped = swipedIndex == index, // 현재 스와이프된 아이템인지 확인
onSwipe = { swipedIndex = index }, // 새로운 버튼이 스와이프되면 상태 변경
- onReset = { if (swipedIndex == index) swipedIndex = -1 } // 닫히면 초기화
+ onReset = { if (swipedIndex == index) swipedIndex = -1 }, // 닫히면 초기화
)
}
@@ -98,5 +105,7 @@ fun MenuFolderScreen(modifier: Modifier = Modifier) {
@Preview(showBackground = true)
@Composable
private fun MenuFolderScreenPreview() {
- MenuFolderScreen()
+ val navController = rememberNavController()
+
+ MenuFolderScreen(navController)
}
\ No newline at end of file
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/navigator/MainNavGraph.kt b/app/src/main/java/com/kuit/ourmenu/ui/navigator/MainNavGraph.kt
index ce866e10..9af61fb6 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/navigator/MainNavGraph.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/navigator/MainNavGraph.kt
@@ -4,7 +4,9 @@ import androidx.compose.runtime.Composable
import androidx.navigation.NavHostController
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
+import com.kuit.ourmenu.ui.addmenu.screen.AddMenuScreen
import com.kuit.ourmenu.ui.home.screen.HomeScreen
+import com.kuit.ourmenu.ui.menuFolder.screen.MenuFolderScreen
import com.kuit.ourmenu.ui.onboarding.screen.LandingScreen
import com.kuit.ourmenu.ui.onboarding.screen.LoginScreen
import com.kuit.ourmenu.ui.onboarding.screen.signup.SignupEmailScreen
@@ -36,5 +38,15 @@ fun MainNavGraph(navController: NavHostController) {
composable {
SignupVerifyScreen(navController = navController)
}
+
+ // 메뉴판
+ composable {
+ MenuFolderScreen(navController = navController)
+ }
+
+ // 메뉴 추가
+ composable {
+ AddMenuScreen(navController = navController)
+ }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/navigator/Routes.kt b/app/src/main/java/com/kuit/ourmenu/ui/navigator/Routes.kt
index 1599e9fe..c23979bf 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/navigator/Routes.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/navigator/Routes.kt
@@ -10,6 +10,12 @@ sealed interface Routes{
// 지도
// 메뉴판
+ @Serializable
+ data object MenuFolder: Routes
+
+ // 메뉴 추가
+ @Serializable
+ data object AddMenu: Routes
// Mypage
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 7469bb5d..8de6174e 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -1,5 +1,5 @@
[versions]
-agp = "8.7.3"
+agp = "8.8.2"
converterGson = "2.11.0"
hiltAndroid = "2.52"
hiltNavigationCompose = "1.2.0"
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 7bc793cb..14adae71 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
#Fri Dec 27 14:17:39 KST 2024
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
From a37c7b5181fd2ecbf87dbe1d76d3e88657ee74ed Mon Sep 17 00:00:00 2001
From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com>
Date: Tue, 18 Mar 2025 16:30:07 +0900
Subject: [PATCH 02/27] =?UTF-8?q?[feat]:=20=EB=A9=94=EB=89=B4=20=ED=8F=B4?=
=?UTF-8?q?=EB=8D=94=20=EC=83=81=EC=84=B8=20=ED=99=94=EB=A9=B4=20=EC=9D=B4?=
=?UTF-8?q?=EB=8F=99,=20=EB=92=A4=EB=A1=9C=EA=B0=80=EA=B8=B0=20=EA=B5=AC?=
=?UTF-8?q?=ED=98=84=20(#50)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../common/topappbar/BackButtonTopAppBar.kt | 6 +-
.../screen/MenuFolderDetailScreen.kt | 185 ++++++++++--------
.../ui/menuFolder/screen/MenuFolderScreen.kt | 3 +
.../kuit/ourmenu/ui/navigator/MainNavGraph.kt | 6 +-
.../com/kuit/ourmenu/ui/navigator/Routes.kt | 2 +
5 files changed, 113 insertions(+), 89 deletions(-)
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/common/topappbar/BackButtonTopAppBar.kt b/app/src/main/java/com/kuit/ourmenu/ui/common/topappbar/BackButtonTopAppBar.kt
index 62865e0f..f75ee916 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/common/topappbar/BackButtonTopAppBar.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/common/topappbar/BackButtonTopAppBar.kt
@@ -17,10 +17,10 @@ import com.kuit.ourmenu.ui.theme.Neutral500
@OptIn(ExperimentalMaterial3Api::class)
@Composable
-fun BackButtonTopAppBar(color: Color, isKebabVisible: Boolean) {
+fun BackButtonTopAppBar(color: Color, isKebabVisible: Boolean, onBackClick: () -> Unit = {}) {
TopAppBar(
title = {
- IconButton(onClick = { TODO("뒤로가기 구현") }) {
+ IconButton(onClick = onBackClick) {
Icon(
painter = painterResource(R.drawable.ic_back),
contentDescription = "Back",
@@ -34,7 +34,7 @@ fun BackButtonTopAppBar(color: Color, isKebabVisible: Boolean) {
painter = painterResource(R.drawable.ic_kebab),
modifier = Modifier.padding(end = 18.dp),
contentDescription = "Menu",
- tint = color
+ tint = color,
)
}
},
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderDetailScreen.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderDetailScreen.kt
index 767c7e43..7d29c100 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderDetailScreen.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderDetailScreen.kt
@@ -15,6 +15,7 @@ import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.material3.Icon
+import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
@@ -26,6 +27,8 @@ import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
+import androidx.navigation.NavController
+import androidx.navigation.compose.rememberNavController
import com.kuit.ourmenu.R
import com.kuit.ourmenu.ui.common.topappbar.BackButtonTopAppBar
import com.kuit.ourmenu.ui.menuFolder.component.AddButton
@@ -35,112 +38,124 @@ import com.kuit.ourmenu.ui.theme.NeutralWhite
import com.kuit.ourmenu.ui.theme.ourMenuTypography
@Composable
-fun MenuFolderDetailScreen(modifier: Modifier = Modifier) {
+fun MenuFolderDetailScreen(navController: NavController) {
val menuCount = 13 // 임의로 정한 값
- Column(
- modifier = modifier.fillMaxSize()
- ) {
- Box(
- modifier = Modifier
- .height(192.dp),
- ) {
- Image(
- painter = painterResource(R.drawable.img_dummy_pizza),
- contentDescription = "menu folder image",
- contentScale = ContentScale.FillWidth,
- modifier = Modifier.fillMaxWidth()
- )
-
- // Gradient Overlay
- Box(
+ Scaffold(
+ topBar = {},
+ content = { innerPadding ->
+ Column(
modifier = Modifier
- .matchParentSize()
- .background(
- brush = Brush.verticalGradient(
- colors = listOf(
- Color.Black.copy(alpha = 0f), // 투명 (rgba(0, 0, 0, 0.00))
- Color.Black.copy(alpha = 0.5f) // 불투명 (rgba(0, 0, 0, 0.70))
- ),
- startY = 0f,
- endY = 400f // 점점 어두워지는 위치 설정
- )
+ .padding(innerPadding)
+ .fillMaxSize()
+ ) {
+ Box(
+ modifier = Modifier
+ .height(192.dp),
+ ) {
+ Image(
+ painter = painterResource(R.drawable.img_dummy_pizza),
+ contentDescription = "menu folder image",
+ contentScale = ContentScale.FillWidth,
+ modifier = Modifier.fillMaxWidth()
)
- )
- Row(
- horizontalArrangement = Arrangement.SpaceBetween,
- verticalAlignment = Alignment.CenterVertically,
- modifier = Modifier.padding(top = 144.dp, start = 20.dp, end = 20.dp).fillMaxWidth()
- ) {
+ Box(
+ modifier = Modifier
+ .matchParentSize()
+ .background(
+ brush = Brush.verticalGradient(
+ colors = listOf(
+ Color.Black.copy(alpha = 0f), // 투명 (rgba(0, 0, 0, 0.00))
+ Color.Black.copy(alpha = 0.5f) // 불투명 (rgba(0, 0, 0, 0.70))
+ ),
+ startY = 0f,
+ endY = 400f // 점점 어두워지는 위치 설정
+ )
+ )
+ )
- Row(
- verticalAlignment = Alignment.CenterVertically,
+ Row(
+ horizontalArrangement = Arrangement.SpaceBetween,
+ verticalAlignment = Alignment.CenterVertically,
+ modifier = Modifier
+ .padding(top = 144.dp, start = 20.dp, end = 20.dp)
+ .fillMaxWidth()
+ ) {
- ) {
- Image(
- painter = painterResource(id = R.drawable.img_popup_dice),
- contentDescription = "Folder Icon",
- modifier = Modifier.size(32.dp)
- )
- Spacer(modifier = Modifier.width(8.dp))
- Text(
- text = stringResource(R.string.menu_folder_name),
- color = NeutralWhite,
- style = ourMenuTypography().pretendard_600_20,
- )
- Spacer(modifier = Modifier.width(8.dp))
- Text(
- text = String.format(stringResource(R.string.count), menuCount),
- color = Neutral50,
- style = ourMenuTypography().pretendard_500_14,
- )
- }
+ Row(
+ verticalAlignment = Alignment.CenterVertically,
- // TODO: 드롭다운 만들기
- Row {
- Text(
- text = stringResource(R.string.sort_type),
- style = ourMenuTypography().pretendard_500_14,
- color = Neutral50
- )
+ ) {
+ Image(
+ painter = painterResource(id = R.drawable.img_popup_dice),
+ contentDescription = "Folder Icon",
+ modifier = Modifier.size(32.dp)
+ )
+ Spacer(modifier = Modifier.width(8.dp))
+ Text(
+ text = stringResource(R.string.menu_folder_name),
+ color = NeutralWhite,
+ style = ourMenuTypography().pretendard_600_20,
+ )
+ Spacer(modifier = Modifier.width(8.dp))
+ Text(
+ text = String.format(stringResource(R.string.count), menuCount),
+ color = Neutral50,
+ style = ourMenuTypography().pretendard_500_14,
+ )
+ }
- Spacer(modifier = Modifier.width(8.dp))
+ // TODO: 드롭다운 만들기
+ Row {
+ Text(
+ text = stringResource(R.string.sort_type),
+ style = ourMenuTypography().pretendard_500_14,
+ color = Neutral50
+ )
- Icon(
- painter = painterResource(id = R.drawable.ic_dropdown_btn),
- contentDescription = "Expand Down",
- tint = Neutral50
- )
+ Spacer(modifier = Modifier.width(8.dp))
+
+ Icon(
+ painter = painterResource(id = R.drawable.ic_dropdown_btn),
+ contentDescription = "Expand Down",
+ tint = Neutral50
+ )
+ }
+ }
}
- }
- BackButtonTopAppBar(NeutralWhite, true)
- }
+ LazyColumn(
+ modifier = Modifier.padding(top = 16.dp),
+ ) {
+ // TODO: 버튼 누르면 해당 페이지로 이동
+ items(menuCount) { index ->
+ MenuFolderMenuButton()
+ }
- LazyColumn(
- modifier = Modifier.padding(top = 16.dp),
- ) {
- // TODO: 버튼 누르면 해당 페이지로 이동
- items(menuCount) { index ->
- MenuFolderMenuButton()
+ item {
+ AddButton(
+ stringResource(R.string.add_menu),
+ modifier = Modifier.padding(start = 20.dp, end = 20.dp, top = 20.dp)
+ ) {
+ // TODO: 버튼 누르면 메뉴 추가 페이지로 이동
+ }
+ }
+ }
}
- item {
- AddButton(
- stringResource(R.string.add_menu),
- modifier = Modifier.padding(start = 20.dp, end = 20.dp, top = 20.dp)
- ) {
- // TODO: 버튼 누르면 메뉴 추가 페이지로 이동
- }
+ BackButtonTopAppBar(NeutralWhite, true) {
+ navController.popBackStack()
}
}
+ )
- }
}
@Preview(showBackground = true)
@Composable
private fun MenuFolderDetailScreenPreview() {
- MenuFolderDetailScreen()
+ val navController = rememberNavController()
+
+ MenuFolderDetailScreen(navController)
}
\ No newline at end of file
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderScreen.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderScreen.kt
index 854289b4..d37ec9d3 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderScreen.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderScreen.kt
@@ -87,6 +87,9 @@ fun MenuFolderScreen(navController: NavController) {
isSwiped = swipedIndex == index, // 현재 스와이프된 아이템인지 확인
onSwipe = { swipedIndex = index }, // 새로운 버튼이 스와이프되면 상태 변경
onReset = { if (swipedIndex == index) swipedIndex = -1 }, // 닫히면 초기화
+ onButtonClick = {
+ navController.navigate(route = Routes.MenuFolderDetail)
+ }
)
}
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/navigator/MainNavGraph.kt b/app/src/main/java/com/kuit/ourmenu/ui/navigator/MainNavGraph.kt
index 9af61fb6..bfe37391 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/navigator/MainNavGraph.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/navigator/MainNavGraph.kt
@@ -6,6 +6,7 @@ import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import com.kuit.ourmenu.ui.addmenu.screen.AddMenuScreen
import com.kuit.ourmenu.ui.home.screen.HomeScreen
+import com.kuit.ourmenu.ui.menuFolder.screen.MenuFolderDetailScreen
import com.kuit.ourmenu.ui.menuFolder.screen.MenuFolderScreen
import com.kuit.ourmenu.ui.onboarding.screen.LandingScreen
import com.kuit.ourmenu.ui.onboarding.screen.LoginScreen
@@ -16,7 +17,7 @@ import com.kuit.ourmenu.ui.onboarding.screen.signup.SignupVerifyScreen
@Composable
fun MainNavGraph(navController: NavHostController) {
- NavHost(navController, startDestination = Routes.Home) {
+ NavHost(navController, startDestination = Routes.MenuFolder) {
composable {
HomeScreen(navController = navController)
}
@@ -43,6 +44,9 @@ fun MainNavGraph(navController: NavHostController) {
composable {
MenuFolderScreen(navController = navController)
}
+ composable {
+ MenuFolderDetailScreen(navController = navController)
+ }
// 메뉴 추가
composable {
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/navigator/Routes.kt b/app/src/main/java/com/kuit/ourmenu/ui/navigator/Routes.kt
index c23979bf..801e24a7 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/navigator/Routes.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/navigator/Routes.kt
@@ -12,6 +12,8 @@ sealed interface Routes{
// 메뉴판
@Serializable
data object MenuFolder: Routes
+ @Serializable
+ data object MenuFolderDetail: Routes
// 메뉴 추가
@Serializable
From 0e5517f715c9d5e54c4e92ce308d0d007ecfdce8 Mon Sep 17 00:00:00 2001
From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com>
Date: Tue, 18 Mar 2025 17:30:36 +0900
Subject: [PATCH 03/27] =?UTF-8?q?[feat]:=20=EB=A9=94=EB=89=B4=20=EC=83=81?=
=?UTF-8?q?=EC=84=B8=20=ED=99=94=EB=A9=B4,=20=EB=A9=94=EB=89=B4=20?=
=?UTF-8?q?=EC=83=81=EC=84=B8=20=EC=A7=80=EB=8F=84=20=ED=99=94=EB=A9=B4?=
=?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EC=9D=B4=EB=8F=99=20=EA=B5=AC=ED=98=84=20?=
=?UTF-8?q?(#50)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../component/MenuFolderMenuButton.kt | 8 +++---
.../screen/MenuFolderAllMenuScreen.kt | 25 ++++++++++++++-----
.../screen/MenuFolderDetailScreen.kt | 11 ++++++--
.../menuinfo/screen/MenuInfoDefaultScreen.kt | 10 +++++---
.../ui/menuinfo/screen/MenuInfoMapScreen.kt | 12 ++++++---
.../kuit/ourmenu/ui/navigator/MainNavGraph.kt | 10 ++++++++
.../com/kuit/ourmenu/ui/navigator/Routes.kt | 6 +++++
7 files changed, 64 insertions(+), 18 deletions(-)
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/MenuFolderMenuButton.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/MenuFolderMenuButton.kt
index 6d96467c..97626489 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/MenuFolderMenuButton.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/MenuFolderMenuButton.kt
@@ -1,6 +1,7 @@
package com.kuit.ourmenu.ui.menuFolder.component
import androidx.compose.foundation.Image
+import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
@@ -29,16 +30,16 @@ import com.kuit.ourmenu.ui.theme.Neutral700
import com.kuit.ourmenu.ui.theme.Neutral900
import com.kuit.ourmenu.ui.theme.ourMenuTypography
-// TODO: 버튼 누르면 해당 페이지로 이동
@Composable
-fun MenuFolderMenuButton(modifier: Modifier = Modifier) {
+fun MenuFolderMenuButton(onMenuClick: () -> Unit = {}, onMapClick: () -> Unit = {}) {
val menuPrice = 12000
Row(
- modifier = modifier
+ modifier = Modifier
.fillMaxWidth()
.height(114.dp)
.padding(horizontal = 20.dp, vertical = 12.dp)
+ .clickable(onClick = onMenuClick)
) {
Image(
painter = painterResource(id = R.drawable.img_dummy_pizza),
@@ -111,6 +112,7 @@ fun MenuFolderMenuButton(modifier: Modifier = Modifier) {
Image(
painter = painterResource(id = R.drawable.ic_to_map),
contentDescription = "To Map",
+ modifier = Modifier.clickable(onClick = onMapClick)
)
}
}
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderAllMenuScreen.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderAllMenuScreen.kt
index c25ec209..b83f0049 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderAllMenuScreen.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderAllMenuScreen.kt
@@ -21,10 +21,13 @@ import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
+import androidx.navigation.NavController
+import androidx.navigation.compose.rememberNavController
import com.kuit.ourmenu.R
import com.kuit.ourmenu.ui.common.topappbar.BackButtonTopAppBar
import com.kuit.ourmenu.ui.menuFolder.component.AddButton
import com.kuit.ourmenu.ui.menuFolder.component.MenuFolderMenuButton
+import com.kuit.ourmenu.ui.navigator.Routes
import com.kuit.ourmenu.ui.theme.Neutral500
import com.kuit.ourmenu.ui.theme.Neutral700
import com.kuit.ourmenu.ui.theme.Neutral900
@@ -33,17 +36,19 @@ import com.kuit.ourmenu.ui.theme.Primary500Main
import com.kuit.ourmenu.ui.theme.ourMenuTypography
@Composable
-fun MenuFolderAllMenuScreen(modifier: Modifier = Modifier) {
+fun MenuFolderAllMenuScreen(navController: NavController) {
val menuCount = 13
val filterCount = 1
Scaffold(
topBar = {
- BackButtonTopAppBar(Neutral500, false)
+ BackButtonTopAppBar(Neutral500, false) {
+ navController.popBackStack()
+ }
}
) { innerPadding ->
Column(
- modifier = modifier
+ modifier = Modifier
.padding(innerPadding)
) {
Row(
@@ -117,9 +122,15 @@ fun MenuFolderAllMenuScreen(modifier: Modifier = Modifier) {
LazyColumn(
modifier = Modifier,
) {
- // TODO: 버튼 누르면 해당 페이지로 이동
items(menuCount) { index ->
- MenuFolderMenuButton()
+ MenuFolderMenuButton(
+ onMenuClick = {
+ navController.navigate(route = Routes.MenuInfo)
+ },
+ onMapClick = {
+ navController.navigate(route = Routes.MenuInfoMap)
+ }
+ )
}
item {
@@ -140,5 +151,7 @@ fun MenuFolderAllMenuScreen(modifier: Modifier = Modifier) {
@Preview(showBackground = true)
@Composable
private fun MenuFolderAllMenuScreenPreview() {
- MenuFolderAllMenuScreen()
+ val navController = rememberNavController()
+
+ MenuFolderAllMenuScreen(navController)
}
\ No newline at end of file
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderDetailScreen.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderDetailScreen.kt
index 7d29c100..abb8e0d6 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderDetailScreen.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderDetailScreen.kt
@@ -33,6 +33,7 @@ import com.kuit.ourmenu.R
import com.kuit.ourmenu.ui.common.topappbar.BackButtonTopAppBar
import com.kuit.ourmenu.ui.menuFolder.component.AddButton
import com.kuit.ourmenu.ui.menuFolder.component.MenuFolderMenuButton
+import com.kuit.ourmenu.ui.navigator.Routes
import com.kuit.ourmenu.ui.theme.Neutral50
import com.kuit.ourmenu.ui.theme.NeutralWhite
import com.kuit.ourmenu.ui.theme.ourMenuTypography
@@ -128,9 +129,15 @@ fun MenuFolderDetailScreen(navController: NavController) {
LazyColumn(
modifier = Modifier.padding(top = 16.dp),
) {
- // TODO: 버튼 누르면 해당 페이지로 이동
items(menuCount) { index ->
- MenuFolderMenuButton()
+ MenuFolderMenuButton(
+ onMenuClick = {
+ navController.navigate(route = Routes.MenuInfo)
+ },
+ onMapClick = {
+ navController.navigate(route = Routes.MenuInfoMap)
+ }
+ )
}
item {
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuinfo/screen/MenuInfoDefaultScreen.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuinfo/screen/MenuInfoDefaultScreen.kt
index f270eddf..c940db35 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/menuinfo/screen/MenuInfoDefaultScreen.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/menuinfo/screen/MenuInfoDefaultScreen.kt
@@ -12,6 +12,8 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
+import androidx.navigation.NavController
+import androidx.navigation.compose.rememberNavController
import com.kuit.ourmenu.ui.menuinfo.component.info.MenuInfoAdditionalContent
import com.kuit.ourmenu.ui.menuinfo.component.info.MenuInfoChipContent
import com.kuit.ourmenu.ui.menuinfo.component.info.MenuInfoContent
@@ -22,7 +24,7 @@ import com.kuit.ourmenu.ui.menuinfo.dummy.MenuInfoDummyData
import com.kuit.ourmenu.ui.theme.Neutral300
@Composable
-fun MenuInfoDefaultScreen() {
+fun MenuInfoDefaultScreen(navController: NavController) {
val pagerState = rememberPagerState { 3 }
@@ -67,7 +69,7 @@ fun MenuInfoDefaultScreen() {
modifier = Modifier
.align(Alignment.BottomEnd)
.padding(end = 20.dp, bottom = 28.dp),
- ) { }
+ ) { }
}
}
@@ -75,5 +77,7 @@ fun MenuInfoDefaultScreen() {
@Preview(showBackground = true)
@Composable
private fun MenuInfoDefaultPreview() {
- MenuInfoDefaultScreen()
+ val navController = rememberNavController()
+
+ MenuInfoDefaultScreen(navController)
}
\ No newline at end of file
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuinfo/screen/MenuInfoMapScreen.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuinfo/screen/MenuInfoMapScreen.kt
index a791faa7..45976c43 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/menuinfo/screen/MenuInfoMapScreen.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/menuinfo/screen/MenuInfoMapScreen.kt
@@ -18,15 +18,17 @@ import androidx.compose.ui.layout.onGloballyPositioned
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
+import androidx.navigation.NavController
+import androidx.navigation.compose.rememberNavController
import com.kuit.ourmenu.ui.common.GoToMapButton
import com.kuit.ourmenu.ui.common.bottomsheet.BottomSheetDragHandle
-import com.kuit.ourmenu.ui.common.topappbar.OurMenuAddButtonTopAppBar
import com.kuit.ourmenu.ui.common.bottomsheet.MenuInfoBottomSheetContent
+import com.kuit.ourmenu.ui.common.topappbar.OurMenuAddButtonTopAppBar
import com.kuit.ourmenu.ui.theme.NeutralWhite
@OptIn(ExperimentalMaterial3Api::class)
@Composable
-fun MenuInfoMapScreen(modifier: Modifier = Modifier) {
+fun MenuInfoMapScreen(navController: NavController) {
val scaffoldState = rememberBottomSheetScaffoldState()
var dragHandleHeight by remember { mutableStateOf(0.dp) }
var bottomSheetContentHeight by remember { mutableStateOf(0.dp) }
@@ -60,7 +62,7 @@ fun MenuInfoMapScreen(modifier: Modifier = Modifier) {
sheetPeekHeight = bottomSheetContentHeight,
) { innerPaddings ->
Box(
- modifier = modifier
+ modifier = Modifier
.fillMaxSize()
.padding(innerPaddings)
) {
@@ -79,5 +81,7 @@ fun MenuInfoMapScreen(modifier: Modifier = Modifier) {
@Preview(showBackground = true)
@Composable
private fun MenuInfoMapScreenPreview() {
- MenuInfoMapScreen()
+ val navController = rememberNavController()
+
+ MenuInfoMapScreen(navController)
}
\ No newline at end of file
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/navigator/MainNavGraph.kt b/app/src/main/java/com/kuit/ourmenu/ui/navigator/MainNavGraph.kt
index bfe37391..e525b31a 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/navigator/MainNavGraph.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/navigator/MainNavGraph.kt
@@ -8,6 +8,8 @@ import com.kuit.ourmenu.ui.addmenu.screen.AddMenuScreen
import com.kuit.ourmenu.ui.home.screen.HomeScreen
import com.kuit.ourmenu.ui.menuFolder.screen.MenuFolderDetailScreen
import com.kuit.ourmenu.ui.menuFolder.screen.MenuFolderScreen
+import com.kuit.ourmenu.ui.menuinfo.screen.MenuInfoDefaultScreen
+import com.kuit.ourmenu.ui.menuinfo.screen.MenuInfoMapScreen
import com.kuit.ourmenu.ui.onboarding.screen.LandingScreen
import com.kuit.ourmenu.ui.onboarding.screen.LoginScreen
import com.kuit.ourmenu.ui.onboarding.screen.signup.SignupEmailScreen
@@ -48,6 +50,14 @@ fun MainNavGraph(navController: NavHostController) {
MenuFolderDetailScreen(navController = navController)
}
+ // 메뉴
+ composable {
+ MenuInfoDefaultScreen(navController = navController)
+ }
+ composable {
+ MenuInfoMapScreen(navController = navController)
+ }
+
// 메뉴 추가
composable {
AddMenuScreen(navController = navController)
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/navigator/Routes.kt b/app/src/main/java/com/kuit/ourmenu/ui/navigator/Routes.kt
index 801e24a7..84f3b7c4 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/navigator/Routes.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/navigator/Routes.kt
@@ -15,6 +15,12 @@ sealed interface Routes{
@Serializable
data object MenuFolderDetail: Routes
+ // 메뉴
+ @Serializable
+ data object MenuInfo: Routes
+ @Serializable
+ data object MenuInfoMap: Routes
+
// 메뉴 추가
@Serializable
data object AddMenu: Routes
From 06d68459055241142a30aeb1dda3364d21db5ae4 Mon Sep 17 00:00:00 2001
From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com>
Date: Tue, 18 Mar 2025 17:32:16 +0900
Subject: [PATCH 04/27] =?UTF-8?q?[feat]:=20=EB=A9=94=EB=89=B4=20=EC=B6=94?=
=?UTF-8?q?=EA=B0=80=20=EB=B2=84=ED=8A=BC=20=EC=9D=B4=EB=8F=99=20=EA=B5=AC?=
=?UTF-8?q?=ED=98=84=20(#50)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ourmenu/ui/menuFolder/screen/MenuFolderAllMenuScreen.kt | 2 +-
.../kuit/ourmenu/ui/menuFolder/screen/MenuFolderDetailScreen.kt | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderAllMenuScreen.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderAllMenuScreen.kt
index b83f0049..8e28c988 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderAllMenuScreen.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderAllMenuScreen.kt
@@ -138,7 +138,7 @@ fun MenuFolderAllMenuScreen(navController: NavController) {
stringResource(R.string.add_menu),
modifier = Modifier.padding(start = 20.dp, end = 20.dp, top = 20.dp)
) {
- // TODO: 버튼 누르면 메뉴 추가 페이지로 이동
+ navController.navigate(route = Routes.AddMenu)
}
}
}
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderDetailScreen.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderDetailScreen.kt
index abb8e0d6..f01dff2e 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderDetailScreen.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderDetailScreen.kt
@@ -145,7 +145,7 @@ fun MenuFolderDetailScreen(navController: NavController) {
stringResource(R.string.add_menu),
modifier = Modifier.padding(start = 20.dp, end = 20.dp, top = 20.dp)
) {
- // TODO: 버튼 누르면 메뉴 추가 페이지로 이동
+ navController.navigate(route = Routes.AddMenu)
}
}
}
From 087e7f0a4765f4b941bebc445b99267b258f332c Mon Sep 17 00:00:00 2001
From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com>
Date: Tue, 18 Mar 2025 17:35:22 +0900
Subject: [PATCH 05/27] =?UTF-8?q?[feat]:=20=EC=A0=84=EC=B2=B4=20=EB=A9=94?=
=?UTF-8?q?=EB=89=B4=20=EB=B3=B4=EA=B8=B0=20=EC=9D=B4=EB=8F=99=20=EA=B5=AC?=
=?UTF-8?q?=ED=98=84=20(#50)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ourmenu/ui/menuFolder/screen/MenuFolderScreen.kt | 6 +++++-
.../com/kuit/ourmenu/ui/navigator/MainNavGraph.kt | 12 ++++++++----
.../java/com/kuit/ourmenu/ui/navigator/Routes.kt | 2 ++
3 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderScreen.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderScreen.kt
index d37ec9d3..756df97f 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderScreen.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderScreen.kt
@@ -1,6 +1,7 @@
package com.kuit.ourmenu.ui.menuFolder.screen
import androidx.compose.foundation.background
+import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
@@ -62,7 +63,10 @@ fun MenuFolderScreen(navController: NavController) {
.height(64.dp)
.fillMaxWidth()
.clip(RoundedCornerShape(12.dp))
- .background(Primary500Main),
+ .background(Primary500Main)
+ .clickable(onClick = {
+ navController.navigate(route = Routes.MenuFolderAllMenu)
+ }),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/navigator/MainNavGraph.kt b/app/src/main/java/com/kuit/ourmenu/ui/navigator/MainNavGraph.kt
index e525b31a..1e754048 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/navigator/MainNavGraph.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/navigator/MainNavGraph.kt
@@ -6,6 +6,7 @@ import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import com.kuit.ourmenu.ui.addmenu.screen.AddMenuScreen
import com.kuit.ourmenu.ui.home.screen.HomeScreen
+import com.kuit.ourmenu.ui.menuFolder.screen.MenuFolderAllMenuScreen
import com.kuit.ourmenu.ui.menuFolder.screen.MenuFolderDetailScreen
import com.kuit.ourmenu.ui.menuFolder.screen.MenuFolderScreen
import com.kuit.ourmenu.ui.menuinfo.screen.MenuInfoDefaultScreen
@@ -19,7 +20,7 @@ import com.kuit.ourmenu.ui.onboarding.screen.signup.SignupVerifyScreen
@Composable
fun MainNavGraph(navController: NavHostController) {
- NavHost(navController, startDestination = Routes.MenuFolder) {
+ NavHost(navController, startDestination = Routes.Home) {
composable {
HomeScreen(navController = navController)
}
@@ -49,11 +50,14 @@ fun MainNavGraph(navController: NavHostController) {
composable {
MenuFolderDetailScreen(navController = navController)
}
+ composable {
+ MenuFolderAllMenuScreen(navController = navController)
+ }
// 메뉴
- composable {
- MenuInfoDefaultScreen(navController = navController)
- }
+ composable {
+ MenuInfoDefaultScreen(navController = navController)
+ }
composable {
MenuInfoMapScreen(navController = navController)
}
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/navigator/Routes.kt b/app/src/main/java/com/kuit/ourmenu/ui/navigator/Routes.kt
index 84f3b7c4..2ab1348c 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/navigator/Routes.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/navigator/Routes.kt
@@ -14,6 +14,8 @@ sealed interface Routes{
data object MenuFolder: Routes
@Serializable
data object MenuFolderDetail: Routes
+ @Serializable
+ data object MenuFolderAllMenu: Routes
// 메뉴
@Serializable
From 32ffa9ee9d7584de59fb06680546e111ddaf2916 Mon Sep 17 00:00:00 2001
From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com>
Date: Thu, 20 Mar 2025 20:54:02 +0900
Subject: [PATCH 06/27] =?UTF-8?q?[ui]:=20=ED=95=84=ED=84=B0=20=EB=B0=94?=
=?UTF-8?q?=ED=85=80=EC=8B=9C=ED=8A=B8=20ui=20=EA=B5=AC=ED=98=84=20(#50)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../menuFolder/component/FilterBottomSheet.kt | 340 ++++++++++++++++++
1 file changed, 340 insertions(+)
create mode 100644 app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/FilterBottomSheet.kt
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/FilterBottomSheet.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/FilterBottomSheet.kt
new file mode 100644
index 00000000..310eec13
--- /dev/null
+++ b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/FilterBottomSheet.kt
@@ -0,0 +1,340 @@
+package com.kuit.ourmenu.ui.menuFolder.component
+
+import androidx.compose.foundation.interaction.MutableInteractionSource
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+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.size
+import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.lazy.LazyColumn
+import androidx.compose.foundation.shape.CircleShape
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.RangeSlider
+import androidx.compose.material3.SliderDefaults
+import androidx.compose.material3.SnackbarHostState
+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.rememberCoroutineScope
+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.draw.clip
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.kuit.ourmenu.R
+import com.kuit.ourmenu.ui.common.BottomHalfWidthButton
+import com.kuit.ourmenu.ui.common.OurSnackbarHost
+import com.kuit.ourmenu.ui.common.chip.TagChipGroup
+import com.kuit.ourmenu.ui.theme.Neutral300
+import com.kuit.ourmenu.ui.theme.Neutral400
+import com.kuit.ourmenu.ui.theme.Neutral500
+import com.kuit.ourmenu.ui.theme.Neutral900
+import com.kuit.ourmenu.ui.theme.NeutralWhite
+import com.kuit.ourmenu.ui.theme.Primary500Main
+import com.kuit.ourmenu.ui.theme.ourMenuTypography
+import kotlinx.coroutines.launch
+
+@OptIn(ExperimentalMaterial3Api::class)
+@Composable
+fun FilterBottomSheet(
+ modifier: Modifier = Modifier,
+ categoryTagList: List>,
+ nationalityTagList: List>,
+ tasteTagList: List>,
+ occasionTagList: List>,
+ onSelectedTagsChange: (List) -> Unit,
+ onApplyButtonClick: () -> Unit,
+) {
+ // toast를 위한 context
+ val context = LocalContext.current
+ val snackbarHostState = remember { SnackbarHostState() }
+ val scope = rememberCoroutineScope()
+
+ // 가격 범위 설정
+ val minPrice = 0f
+ val maxPrice = 50_000f
+ var priceRange by remember { mutableStateOf(minPrice..maxPrice) }
+ val stepSize = 5000f // 5000원 단위 조정
+
+ // 각 항목별로 선택된 태그 상태를 개별적으로 관리
+ var selectedCategoryTag by rememberSaveable { mutableStateOf(null) }
+ var selectedNationalityTag by rememberSaveable { mutableStateOf(null) }
+ var selectedTasteTag by rememberSaveable { mutableStateOf(null) }
+ var selectedOccasionTag by rememberSaveable { mutableStateOf(null) }
+
+ Box(modifier = Modifier.fillMaxSize()) {
+ Column(
+ modifier = Modifier
+ .fillMaxSize(),
+ verticalArrangement = Arrangement.SpaceBetween
+ ) {
+ Column(
+ modifier = Modifier
+ .fillMaxWidth()
+ ) {
+ Row(
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(horizontal = 20.dp),
+ horizontalArrangement = Arrangement.SpaceBetween
+ ) {
+ Text(
+ text = stringResource(R.string.filtering),
+ style = ourMenuTypography().pretendard_700_16
+ )
+ Text(
+ text = stringResource(R.string.select_one),
+ style = ourMenuTypography().pretendard_600_14,
+ color = Neutral500
+ )
+ }
+
+ Spacer(modifier = Modifier.height(20.dp))
+
+ LazyColumn(
+ modifier = Modifier
+ .padding(horizontal = 20.dp),
+ ) {
+ // ✅ 종류 (한 개만 선택 가능)
+ item {
+ TagChipGroup(
+ groupLabel = stringResource(R.string.type),
+ tags = categoryTagList,
+ selectedTags = listOfNotNull(selectedCategoryTag),
+ ) { tag ->
+ if (selectedCategoryTag != null && selectedCategoryTag != tag) {
+ scope.launch {
+ snackbarHostState.showSnackbar(context.getString(R.string.tag_max_one))
+ }
+ } else {
+ selectedCategoryTag = if (selectedCategoryTag == tag) null else tag
+ }
+ }
+ }
+
+ // ✅ 나라 별 음식 (한 개만 선택 가능)
+ item {
+ TagChipGroup(
+ groupLabel = stringResource(R.string.nationality),
+ tags = nationalityTagList,
+ selectedTags = listOfNotNull(selectedNationalityTag),
+ ) { tag ->
+ if (selectedNationalityTag != null && selectedNationalityTag != tag) {
+ scope.launch {
+ snackbarHostState.showSnackbar(context.getString(R.string.tag_max_one))
+ }
+ } else {
+ selectedNationalityTag =
+ if (selectedNationalityTag == tag) null else tag
+ }
+ }
+ }
+
+ // ✅ 맛 (한 개만 선택 가능)
+ item {
+ TagChipGroup(
+ groupLabel = stringResource(R.string.taste),
+ tags = tasteTagList,
+ selectedTags = listOfNotNull(selectedTasteTag),
+ ) { tag ->
+ if (selectedTasteTag != null && selectedTasteTag != tag) {
+ scope.launch {
+ snackbarHostState.showSnackbar(context.getString(R.string.tag_max_one))
+ }
+ } else {
+ selectedTasteTag = if (selectedTasteTag == tag) null else tag
+ }
+ }
+ }
+
+ // ✅ 상황 (한 개만 선택 가능)
+ item {
+ TagChipGroup(
+ groupLabel = stringResource(R.string.occasion),
+ tags = occasionTagList,
+ selectedTags = listOfNotNull(selectedOccasionTag),
+ ) { tag ->
+ if (selectedOccasionTag != null && selectedOccasionTag != tag) {
+ scope.launch {
+ snackbarHostState.showSnackbar(context.getString(R.string.tag_max_one))
+ }
+ } else {
+ selectedOccasionTag = if (selectedOccasionTag == tag) null else tag
+ }
+ }
+ }
+
+ item { Spacer(modifier = Modifier.height(12.dp)) }
+
+ // ✅ 가격 슬라이더
+ item {
+ Text(
+ text = stringResource(R.string.price_range_title),
+ style = ourMenuTypography().pretendard_400_14,
+ color = Neutral900
+ )
+ Spacer(modifier = Modifier.height(8.dp))
+ Text(
+ text = stringResource(
+ R.string.price_range,
+ priceRange.start.toInt(),
+ priceRange.endInclusive.toInt()
+ ),
+ style = ourMenuTypography().pretendard_700_18
+ )
+
+ Spacer(modifier = Modifier.height(8.dp))
+
+ RangeSlider(
+ value = priceRange,
+ onValueChange = { newValue ->
+ val adjustedStart =
+ (Math.round(newValue.start / stepSize) * stepSize).coerceAtLeast(
+ minPrice
+ )
+ val adjustedEnd =
+ (Math.round(newValue.endInclusive / stepSize) * stepSize).coerceAtMost(
+ maxPrice
+ )
+
+ priceRange = adjustedStart..adjustedEnd // ✅ 5000 단위 반올림 적용
+ },
+ valueRange = minPrice..maxPrice,
+ steps = ((maxPrice - minPrice) / stepSize - 1).toInt(), // 5000원 단위로 이동
+ colors = SliderDefaults.colors(
+ thumbColor = Primary500Main,
+ activeTrackColor = Primary500Main,
+ inactiveTrackColor = Neutral300,
+ activeTickColor = Primary500Main,
+ inactiveTickColor = Neutral300
+ ),
+ modifier = Modifier.padding(horizontal = 8.dp),
+ startThumb = {
+ SliderDefaults.Thumb(
+ interactionSource = remember { MutableInteractionSource() },
+ colors = SliderDefaults.colors(
+ thumbColor = Primary500Main
+ ),
+ modifier = Modifier
+ .size(28.dp)
+ .clip(CircleShape)
+ )
+ },
+ endThumb = {
+ SliderDefaults.Thumb(
+ interactionSource = remember { MutableInteractionSource() },
+ colors = SliderDefaults.colors(
+ thumbColor = Primary500Main
+ ),
+ modifier = Modifier
+ .size(28.dp)
+ .clip(CircleShape)
+ )
+ },
+ )
+
+ Spacer(modifier = Modifier.height(24.dp))
+ }
+ }
+
+ Spacer(modifier = Modifier.height(24.dp))
+
+ }
+
+ Row(
+ modifier = modifier
+ .fillMaxWidth()
+ .padding(bottom = 20.dp, start = 20.dp, end = 20.dp),
+ horizontalArrangement = Arrangement.Center
+ ) {
+ BottomHalfWidthButton(
+ modifier = modifier.weight(1f),
+ containerColor = Neutral400,
+ contentColor = NeutralWhite,
+ text = stringResource(R.string.reset)
+ ) {
+ // List 비우기
+ onSelectedTagsChange(emptyList())
+ }
+ Spacer(modifier = modifier.width(12.dp))
+ BottomHalfWidthButton(
+ modifier = modifier.weight(1f),
+ containerColor = Primary500Main,
+ contentColor = NeutralWhite,
+ text = stringResource(R.string.apply)
+ ) {
+ // TODO: 아이콘 선택으로 이동
+ onApplyButtonClick()
+ }
+ }
+ }
+
+ OurSnackbarHost(
+ modifier = Modifier
+ .align(Alignment.BottomCenter)
+ .padding(bottom = 60.dp),
+ hostState = snackbarHostState,
+ isChecked = false,
+ message = stringResource(R.string.tag_max_one)
+ )
+ }
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun FilterBottomSheetPreview() {
+ val categoryTags = listOf(
+ R.drawable.ic_tag_rice to "밥",
+ R.drawable.ic_tag_rice to "빵",
+ R.drawable.ic_tag_rice to "면",
+ R.drawable.ic_tag_rice to "고기",
+ R.drawable.ic_tag_rice to "생선",
+ R.drawable.ic_tag_rice to "카페",
+ R.drawable.ic_tag_rice to "디저트",
+ R.drawable.ic_tag_rice to "패스트푸드",
+ )
+ val nationalityTags = listOf(
+ R.drawable.ic_tag_rice to "한식",
+ R.drawable.ic_tag_rice to "중식",
+ R.drawable.ic_tag_rice to "일식",
+ R.drawable.ic_tag_rice to "양식",
+ R.drawable.ic_tag_rice to "아시안",
+ )
+ val tasteTags = listOf(
+ R.drawable.ic_tag_rice to "매콤함",
+ R.drawable.ic_tag_rice to "달달함",
+ R.drawable.ic_tag_rice to "시원함",
+ R.drawable.ic_tag_rice to "뜨끈함",
+ R.drawable.ic_tag_rice to "얼큰함",
+ )
+ val occasionTags = listOf(
+ R.drawable.ic_tag_rice to "혼밥",
+ R.drawable.ic_tag_rice to "비즈니스 미팅",
+ R.drawable.ic_tag_rice to "친구 약속",
+ R.drawable.ic_tag_rice to "데이트",
+ R.drawable.ic_tag_rice to "밥약",
+ R.drawable.ic_tag_rice to "단체",
+ )
+ var selectedTags by rememberSaveable { mutableStateOf(listOf()) }
+
+ FilterBottomSheet(
+ categoryTagList = categoryTags,
+ nationalityTagList = nationalityTags,
+ tasteTagList = tasteTags,
+ occasionTagList = occasionTags,
+ onSelectedTagsChange = { newSelectedTags -> selectedTags = newSelectedTags },
+ onApplyButtonClick = {}
+ )
+}
\ No newline at end of file
From 17c5557296e1cdd85f6ec8ec6345927a08725a8f Mon Sep 17 00:00:00 2001
From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com>
Date: Thu, 20 Mar 2025 20:54:27 +0900
Subject: [PATCH 07/27] =?UTF-8?q?[refactor]:=20=EA=B8=B0=EC=A1=B4=20?=
=?UTF-8?q?=EA=B5=AC=ED=98=84=EB=90=90=EB=8D=98=20=EB=B0=94=ED=85=80?=
=?UTF-8?q?=EC=8B=9C=ED=8A=B8=20=EC=88=98=EC=A0=95=20(#50)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../addmenu/component/bottomsheet/TagSelectBottomSheet.kt | 8 ++++----
.../java/com/kuit/ourmenu/ui/common/chip/TagChipGroup.kt | 7 +++++--
2 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/bottomsheet/TagSelectBottomSheet.kt b/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/bottomsheet/TagSelectBottomSheet.kt
index 35d1f19e..b9f7482c 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/bottomsheet/TagSelectBottomSheet.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/bottomsheet/TagSelectBottomSheet.kt
@@ -83,7 +83,7 @@ fun TagSelectBottomSheet(
//종류
TagChipGroup(
- groupLabel = "종류",
+ groupLabel = stringResource(R.string.type),
tags = categoryTagList,
selectedTags = selectedTagList,
) { tag ->
@@ -97,7 +97,7 @@ fun TagSelectBottomSheet(
}
//나라 별 음식
TagChipGroup(
- groupLabel = "나라 별 음식",
+ groupLabel = stringResource(R.string.nationality),
tags = nationalityTagList,
selectedTags = selectedTagList,
) { tag ->
@@ -111,7 +111,7 @@ fun TagSelectBottomSheet(
}
//맛
TagChipGroup(
- groupLabel = "맛",
+ groupLabel = stringResource(R.string.taste),
tags = tasteTagList,
selectedTags = selectedTagList,
) { tag ->
@@ -125,7 +125,7 @@ fun TagSelectBottomSheet(
}
//상황
TagChipGroup(
- groupLabel = "상황",
+ groupLabel = stringResource(R.string.occasion),
tags = occasionTagList,
selectedTags = selectedTagList,
) { tag ->
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/common/chip/TagChipGroup.kt b/app/src/main/java/com/kuit/ourmenu/ui/common/chip/TagChipGroup.kt
index 92c56fff..b3b06c1b 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/common/chip/TagChipGroup.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/common/chip/TagChipGroup.kt
@@ -15,9 +15,11 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
+import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.kuit.ourmenu.R
+import com.kuit.ourmenu.ui.theme.Neutral900
import com.kuit.ourmenu.ui.theme.ourMenuTypography
@OptIn(ExperimentalLayoutApi::class)
@@ -32,7 +34,8 @@ fun TagChipGroup(
Column(modifier = modifier.fillMaxWidth()){
Text(
text = groupLabel,
- style = ourMenuTypography().pretendard_500_14,
+ style = ourMenuTypography().pretendard_400_14,
+ color = Neutral900
)
Spacer(modifier = modifier.height(8.dp))
FlowRow(
@@ -73,7 +76,7 @@ private fun TagChipGroupPreview() {
var selectedTags by rememberSaveable { mutableStateOf(listOf()) }
TagChipGroup(
- groupLabel = "종류",
+ groupLabel = stringResource(R.string.type),
tags = tags,
selectedTags = selectedTags,
){ tag ->
From 4645d533a1e189a39af7fbe3214945d63d00bf6e Mon Sep 17 00:00:00 2001
From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com>
Date: Thu, 20 Mar 2025 20:54:43 +0900
Subject: [PATCH 08/27] =?UTF-8?q?[feat]:=20=EB=B0=94=ED=85=80=EC=8B=9C?=
=?UTF-8?q?=ED=8A=B8=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84=20=EC=A4=91?=
=?UTF-8?q?=20(#50)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../screen/MenuFolderAllMenuScreen.kt | 83 +++++++++++++++++--
app/src/main/res/values/strings.xml | 10 +++
2 files changed, 84 insertions(+), 9 deletions(-)
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderAllMenuScreen.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderAllMenuScreen.kt
index 8e28c988..85ed1a72 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderAllMenuScreen.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderAllMenuScreen.kt
@@ -1,6 +1,8 @@
package com.kuit.ourmenu.ui.menuFolder.screen
+import android.util.Log
import androidx.compose.foundation.Image
+import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
@@ -10,11 +12,22 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material3.BottomSheetScaffold
import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults
-import androidx.compose.material3.Scaffold
+import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Text
+import androidx.compose.material3.rememberBottomSheetScaffoldState
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableIntStateOf
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.runtime.saveable.rememberSaveable
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.snapshotFlow
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
@@ -24,8 +37,10 @@ import androidx.compose.ui.unit.dp
import androidx.navigation.NavController
import androidx.navigation.compose.rememberNavController
import com.kuit.ourmenu.R
+import com.kuit.ourmenu.ui.common.bottomsheet.BottomSheetDragHandle
import com.kuit.ourmenu.ui.common.topappbar.BackButtonTopAppBar
import com.kuit.ourmenu.ui.menuFolder.component.AddButton
+import com.kuit.ourmenu.ui.menuFolder.component.FilterBottomSheet
import com.kuit.ourmenu.ui.menuFolder.component.MenuFolderMenuButton
import com.kuit.ourmenu.ui.navigator.Routes
import com.kuit.ourmenu.ui.theme.Neutral500
@@ -34,17 +49,64 @@ import com.kuit.ourmenu.ui.theme.Neutral900
import com.kuit.ourmenu.ui.theme.NeutralWhite
import com.kuit.ourmenu.ui.theme.Primary500Main
import com.kuit.ourmenu.ui.theme.ourMenuTypography
+import kotlinx.coroutines.launch
+@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun MenuFolderAllMenuScreen(navController: NavController) {
val menuCount = 13
- val filterCount = 1
+ val filterCount by rememberSaveable { mutableIntStateOf(0) } // ✅ 선택된 필터 개수 상태 관리
+ var selectedFilters by rememberSaveable { mutableStateOf(listOf()) } // ✅ 선택된 필터 리스트
+
+ val scaffoldState = rememberBottomSheetScaffoldState()
+ var showBottomSheet by remember { mutableStateOf(false) }
+ val coroutineScope = rememberCoroutineScope()
+ LaunchedEffect(scaffoldState.bottomSheetState) {
+ snapshotFlow { scaffoldState.bottomSheetState.currentValue }
+ .collect { state ->
+ Log.d("AddMenuTagScreen", "BottomSheetState changed: $state")
+ }
+ }
- Scaffold(
+ BottomSheetScaffold(
+ scaffoldState = scaffoldState,
topBar = {
BackButtonTopAppBar(Neutral500, false) {
navController.popBackStack()
}
+ },
+ sheetContainerColor = NeutralWhite,
+ sheetPeekHeight = 0.dp,
+ sheetContent = {
+ FilterBottomSheet(
+ categoryTagList = listOf(
+ R.drawable.ic_tag_rice to "밥",
+ R.drawable.ic_tag_rice to "빵",
+ R.drawable.ic_tag_rice to "면"
+ ),
+ nationalityTagList = listOf(
+ R.drawable.ic_tag_rice to "한식",
+ R.drawable.ic_tag_rice to "중식",
+ R.drawable.ic_tag_rice to "일식"
+ ),
+ tasteTagList = listOf(
+ R.drawable.ic_tag_rice to "매콤함",
+ R.drawable.ic_tag_rice to "달달함",
+ R.drawable.ic_tag_rice to "시원함"
+ ),
+ occasionTagList = listOf(
+ R.drawable.ic_tag_rice to "혼밥",
+ R.drawable.ic_tag_rice to "친구 약속",
+ R.drawable.ic_tag_rice to "데이트"
+ ),
+ onApplyButtonClick = {
+ showBottomSheet = false
+ },
+ onSelectedTagsChange = { newSelectedTags -> selectedFilters = newSelectedTags },
+ )
+ },
+ sheetDragHandle = {
+ BottomSheetDragHandle()
}
) { innerPadding ->
Column(
@@ -76,7 +138,6 @@ fun MenuFolderAllMenuScreen(navController: NavController) {
)
}
- // TODO: 드롭다운 만들기
Row {
Text(
text = stringResource(R.string.sort_type),
@@ -93,10 +154,16 @@ fun MenuFolderAllMenuScreen(navController: NavController) {
}
}
- // TODO: 버튼 누르면 필터 적용
+ // ✅ 필터 버튼 (필터 개수 반영)
Card(
shape = RoundedCornerShape(12.dp),
- modifier = Modifier.padding(top = 24.dp, bottom = 16.dp, start = 20.dp),
+ modifier = Modifier
+ .padding(top = 24.dp, bottom = 16.dp, start = 20.dp)
+ .clickable {
+ coroutineScope.launch {
+ scaffoldState.bottomSheetState.expand() // ✅ 버튼 클릭 시 BottomSheet 열기
+ }
+ },
colors = CardDefaults.cardColors(containerColor = Primary500Main),
elevation = CardDefaults.cardElevation(defaultElevation = 8.dp)
) {
@@ -112,7 +179,7 @@ fun MenuFolderAllMenuScreen(navController: NavController) {
Spacer(modifier = Modifier.width(8.dp))
Text(
- text = "$filterCount",
+ text = "$filterCount", // ✅ 선택된 필터 개수 반영
color = NeutralWhite,
style = ourMenuTypography().pretendard_700_16
)
@@ -142,8 +209,6 @@ fun MenuFolderAllMenuScreen(navController: NavController) {
}
}
}
-
-
}
}
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 566ed508..baf1705c 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -97,4 +97,14 @@
%d 개
이름순
한강 뷰 맛집
+ 필터링
+ 각 항목 당 1개 선택
+ 가격대
+ %d원 ~ %d원
+ 태그는 항목 당 1개만 선택할 수 있어요
+
+ 종류
+ 나라 별 음식
+ 맛
+ 상황
\ No newline at end of file
From 82f18eea12d8f50b7c38d449fe90add29781052f Mon Sep 17 00:00:00 2001
From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com>
Date: Thu, 20 Mar 2025 21:05:20 +0900
Subject: [PATCH 09/27] =?UTF-8?q?[fix]:=20=EC=B4=88=EA=B8=B0=ED=99=94=20?=
=?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=88=98=EC=A0=95=20(#50)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../menuFolder/component/FilterBottomSheet.kt | 19 +++++++++++--------
1 file changed, 11 insertions(+), 8 deletions(-)
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/FilterBottomSheet.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/FilterBottomSheet.kt
index 310eec13..3d30ea12 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/FilterBottomSheet.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/FilterBottomSheet.kt
@@ -107,7 +107,7 @@ fun FilterBottomSheet(
modifier = Modifier
.padding(horizontal = 20.dp),
) {
- // ✅ 종류 (한 개만 선택 가능)
+ // 종류
item {
TagChipGroup(
groupLabel = stringResource(R.string.type),
@@ -124,7 +124,7 @@ fun FilterBottomSheet(
}
}
- // ✅ 나라 별 음식 (한 개만 선택 가능)
+ // 나라 별 음식
item {
TagChipGroup(
groupLabel = stringResource(R.string.nationality),
@@ -142,7 +142,7 @@ fun FilterBottomSheet(
}
}
- // ✅ 맛 (한 개만 선택 가능)
+ // 맛
item {
TagChipGroup(
groupLabel = stringResource(R.string.taste),
@@ -159,7 +159,7 @@ fun FilterBottomSheet(
}
}
- // ✅ 상황 (한 개만 선택 가능)
+ // 상황
item {
TagChipGroup(
groupLabel = stringResource(R.string.occasion),
@@ -178,7 +178,7 @@ fun FilterBottomSheet(
item { Spacer(modifier = Modifier.height(12.dp)) }
- // ✅ 가격 슬라이더
+ // 가격 슬라이더
item {
Text(
text = stringResource(R.string.price_range_title),
@@ -265,8 +265,12 @@ fun FilterBottomSheet(
contentColor = NeutralWhite,
text = stringResource(R.string.reset)
) {
- // List 비우기
- onSelectedTagsChange(emptyList())
+ // 모든 선택된 필터 초기화
+ selectedCategoryTag = null
+ selectedNationalityTag = null
+ selectedTasteTag = null
+ selectedOccasionTag = null
+ priceRange = minPrice..maxPrice
}
Spacer(modifier = modifier.width(12.dp))
BottomHalfWidthButton(
@@ -275,7 +279,6 @@ fun FilterBottomSheet(
contentColor = NeutralWhite,
text = stringResource(R.string.apply)
) {
- // TODO: 아이콘 선택으로 이동
onApplyButtonClick()
}
}
From 793291225fe99c65df7ec2f2f1abc4b9c77e97a6 Mon Sep 17 00:00:00 2001
From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com>
Date: Tue, 25 Mar 2025 23:29:15 +0900
Subject: [PATCH 10/27] =?UTF-8?q?[fix]:=20=EB=B0=94=ED=85=80=EC=8B=9C?=
=?UTF-8?q?=ED=8A=B8=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95=20(#50)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ui/menuFolder/screen/MenuFolderAllMenuScreen.kt | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderAllMenuScreen.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderAllMenuScreen.kt
index 85ed1a72..ff13f38c 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderAllMenuScreen.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderAllMenuScreen.kt
@@ -23,7 +23,6 @@ import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
@@ -55,11 +54,10 @@ import kotlinx.coroutines.launch
@Composable
fun MenuFolderAllMenuScreen(navController: NavController) {
val menuCount = 13
- val filterCount by rememberSaveable { mutableIntStateOf(0) } // ✅ 선택된 필터 개수 상태 관리
+ var filterCount by rememberSaveable { mutableIntStateOf(0) } // ✅ 선택된 필터 개수 상태 관리
var selectedFilters by rememberSaveable { mutableStateOf(listOf()) } // ✅ 선택된 필터 리스트
val scaffoldState = rememberBottomSheetScaffoldState()
- var showBottomSheet by remember { mutableStateOf(false) }
val coroutineScope = rememberCoroutineScope()
LaunchedEffect(scaffoldState.bottomSheetState) {
snapshotFlow { scaffoldState.bottomSheetState.currentValue }
@@ -100,7 +98,10 @@ fun MenuFolderAllMenuScreen(navController: NavController) {
R.drawable.ic_tag_rice to "데이트"
),
onApplyButtonClick = {
- showBottomSheet = false
+ coroutineScope.launch {
+ scaffoldState.bottomSheetState.partialExpand() // ✅ 적용 버튼 클릭 시 BottomSheet 닫기
+ }
+
},
onSelectedTagsChange = { newSelectedTags -> selectedFilters = newSelectedTags },
)
From 24be41da6ec438e2a374089b1e755688d02170de Mon Sep 17 00:00:00 2001
From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com>
Date: Tue, 25 Mar 2025 23:49:37 +0900
Subject: [PATCH 11/27] =?UTF-8?q?[fix]:=20=ED=95=84=ED=84=B0=20=EA=B0=9C?=
=?UTF-8?q?=EC=88=98=20=EB=B0=98=EC=98=81=20=EC=95=88=EB=90=98=EB=8A=94?=
=?UTF-8?q?=EA=B1=B0=20=EC=88=98=EC=A0=95=20(#50)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ui/menuFolder/component/FilterBottomSheet.kt | 16 ++++++++++++++++
.../menuFolder/screen/MenuFolderAllMenuScreen.kt | 1 +
2 files changed, 17 insertions(+)
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/FilterBottomSheet.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/FilterBottomSheet.kt
index 3d30ea12..99a40bbb 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/FilterBottomSheet.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/FilterBottomSheet.kt
@@ -74,6 +74,16 @@ fun FilterBottomSheet(
var selectedTasteTag by rememberSaveable { mutableStateOf(null) }
var selectedOccasionTag by rememberSaveable { mutableStateOf(null) }
+ fun updateSelectedTags() {
+ val selectedTags = listOfNotNull(
+ selectedCategoryTag,
+ selectedNationalityTag,
+ selectedTasteTag,
+ selectedOccasionTag
+ )
+ onSelectedTagsChange(selectedTags)
+ }
+
Box(modifier = Modifier.fillMaxSize()) {
Column(
modifier = Modifier
@@ -120,6 +130,7 @@ fun FilterBottomSheet(
}
} else {
selectedCategoryTag = if (selectedCategoryTag == tag) null else tag
+ updateSelectedTags()
}
}
}
@@ -138,6 +149,7 @@ fun FilterBottomSheet(
} else {
selectedNationalityTag =
if (selectedNationalityTag == tag) null else tag
+ updateSelectedTags()
}
}
}
@@ -155,6 +167,7 @@ fun FilterBottomSheet(
}
} else {
selectedTasteTag = if (selectedTasteTag == tag) null else tag
+ updateSelectedTags()
}
}
}
@@ -172,6 +185,7 @@ fun FilterBottomSheet(
}
} else {
selectedOccasionTag = if (selectedOccasionTag == tag) null else tag
+ updateSelectedTags()
}
}
}
@@ -271,6 +285,8 @@ fun FilterBottomSheet(
selectedTasteTag = null
selectedOccasionTag = null
priceRange = minPrice..maxPrice
+
+ onSelectedTagsChange(emptyList())
}
Spacer(modifier = modifier.width(12.dp))
BottomHalfWidthButton(
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderAllMenuScreen.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderAllMenuScreen.kt
index ff13f38c..f96bf42c 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderAllMenuScreen.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderAllMenuScreen.kt
@@ -99,6 +99,7 @@ fun MenuFolderAllMenuScreen(navController: NavController) {
),
onApplyButtonClick = {
coroutineScope.launch {
+ filterCount = selectedFilters.size // ✅ 적용 버튼 클릭 시 선택된 필터 개수 반영
scaffoldState.bottomSheetState.partialExpand() // ✅ 적용 버튼 클릭 시 BottomSheet 닫기
}
From 9dd4ee8f48903f9dd2d586a3d434709ee7f06440 Mon Sep 17 00:00:00 2001
From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com>
Date: Wed, 26 Mar 2025 01:21:57 +0900
Subject: [PATCH 12/27] =?UTF-8?q?[UI]:=20=EC=A0=95=EB=A0=AC=20=EB=93=9C?=
=?UTF-8?q?=EB=A1=AD=EB=8B=A4=EC=9A=B4=20=EC=BB=B4=ED=8F=AC=EB=84=8C?=
=?UTF-8?q?=ED=8A=B8=20=EC=83=9D=EC=84=B1=20(#50)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ui/menuFolder/component/SortDropdown.kt | 112 ++++++++++++++++++
1 file changed, 112 insertions(+)
create mode 100644 app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/SortDropdown.kt
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/SortDropdown.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/SortDropdown.kt
new file mode 100644
index 00000000..b7658dc0
--- /dev/null
+++ b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/SortDropdown.kt
@@ -0,0 +1,112 @@
+package com.kuit.ourmenu.ui.menuFolder.component
+
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.background
+import androidx.compose.foundation.clickable
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material3.DropdownMenu
+import androidx.compose.material3.DropdownMenuItem
+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.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.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.kuit.ourmenu.R
+import com.kuit.ourmenu.ui.theme.Neutral500
+import com.kuit.ourmenu.ui.theme.Neutral700
+import com.kuit.ourmenu.ui.theme.NeutralWhite
+import com.kuit.ourmenu.ui.theme.Primary500Main
+import com.kuit.ourmenu.ui.theme.ourMenuTypography
+
+@Composable
+fun SortDropdown(
+ options: List,
+ selectedOption: String,
+ onSelectedOptionChange: (String) -> Unit
+) {
+ var expanded by remember { mutableStateOf(false) }
+
+ Box {
+ Row(
+ modifier = Modifier.clickable {
+ expanded = true
+ },
+ verticalAlignment = Alignment.CenterVertically
+ ) {
+ Text(
+ text = selectedOption,
+ style = ourMenuTypography().pretendard_500_14,
+ color = Neutral700
+ )
+
+ Spacer(modifier = Modifier.width(8.dp))
+
+ Image(
+ painter = if (expanded) painterResource(id = R.drawable.ic_dropdown_btn_up) else painterResource(
+ id = R.drawable.ic_dropdown_btn
+ ),
+ modifier = Modifier.size(16.dp),
+ contentDescription = "Expand Down"
+ )
+ }
+
+ DropdownMenu(
+ modifier = Modifier
+ .width(72.dp)
+ .background(color = NeutralWhite, shape = RoundedCornerShape(8.dp)),
+ expanded = expanded,
+ onDismissRequest = { expanded = false }
+ ) {
+ options.forEach { option ->
+ val isSelected = option == selectedOption
+
+ DropdownMenuItem(
+ modifier = Modifier
+ .width(72.dp),
+ text = {
+ Text(
+ text = option,
+ style = ourMenuTypography().pretendard_500_14.copy(
+ color = if (isSelected) Primary500Main else Neutral500
+ )
+ )
+ },
+ onClick = {
+ onSelectedOptionChange(option)
+ }
+ )
+ }
+ }
+ }
+
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SortDropdownPreview() {
+ val options = listOf("이름순", "등록순", "가격순")
+ var selectedOption by rememberSaveable { mutableStateOf("이름순") }
+
+ Column(modifier = Modifier.fillMaxSize()) {
+ SortDropdown(
+ options = options,
+ selectedOption = selectedOption
+ ) {
+ selectedOption = it
+ }
+ }
+}
\ No newline at end of file
From f42ef94841ca4c8d269bca9dd6fffd72c39d6724 Mon Sep 17 00:00:00 2001
From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com>
Date: Wed, 26 Mar 2025 01:24:34 +0900
Subject: [PATCH 13/27] =?UTF-8?q?[fix]:=20toast=20message=20=EC=98=A4?=
=?UTF-8?q?=EB=A5=98=20=EC=88=98=EC=A0=95=20(#50)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ui/addmenu/component/bottomsheet/TagSelectBottomSheet.kt | 1 -
.../kuit/ourmenu/ui/menuFolder/component/FilterBottomSheet.kt | 3 +--
2 files changed, 1 insertion(+), 3 deletions(-)
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/bottomsheet/TagSelectBottomSheet.kt b/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/bottomsheet/TagSelectBottomSheet.kt
index b9f7482c..e9aadedc 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/bottomsheet/TagSelectBottomSheet.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/bottomsheet/TagSelectBottomSheet.kt
@@ -173,7 +173,6 @@ fun TagSelectBottomSheet(
.padding(bottom = 60.dp),
hostState = snackbarHostState,
isChecked = false,
- message = stringResource(R.string.tag_number_warning)
)
}
}
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/FilterBottomSheet.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/FilterBottomSheet.kt
index 99a40bbb..d357c9e2 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/FilterBottomSheet.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/FilterBottomSheet.kt
@@ -223,7 +223,7 @@ fun FilterBottomSheet(
maxPrice
)
- priceRange = adjustedStart..adjustedEnd // ✅ 5000 단위 반올림 적용
+ priceRange = adjustedStart..adjustedEnd // 5000 단위 반올림 적용
},
valueRange = minPrice..maxPrice,
steps = ((maxPrice - minPrice) / stepSize - 1).toInt(), // 5000원 단위로 이동
@@ -306,7 +306,6 @@ fun FilterBottomSheet(
.padding(bottom = 60.dp),
hostState = snackbarHostState,
isChecked = false,
- message = stringResource(R.string.tag_max_one)
)
}
}
From 070145003444ca47a4323be84e581faedc1f3bf3 Mon Sep 17 00:00:00 2001
From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com>
Date: Wed, 26 Mar 2025 01:34:33 +0900
Subject: [PATCH 14/27] =?UTF-8?q?[UI]:=20=EB=93=9C=EB=A1=AD=EB=8B=A4?=
=?UTF-8?q?=EC=9A=B4=20=EC=83=89=EC=83=81=20=EC=88=98=EC=A0=95=20(#50)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ourmenu/ui/menuFolder/component/SortDropdown.kt | 9 ++++++---
app/src/main/res/drawable/ic_dropdown_btn_up.xml | 13 +++++++++++++
app/src/main/res/values/strings.xml | 1 -
3 files changed, 19 insertions(+), 4 deletions(-)
create mode 100644 app/src/main/res/drawable/ic_dropdown_btn_up.xml
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/SortDropdown.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/SortDropdown.kt
index b7658dc0..23b98e90 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/SortDropdown.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/SortDropdown.kt
@@ -1,6 +1,5 @@
package com.kuit.ourmenu.ui.menuFolder.component
-import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
@@ -13,6 +12,7 @@ import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.DropdownMenu
import androidx.compose.material3.DropdownMenuItem
+import androidx.compose.material3.Icon
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
@@ -22,6 +22,7 @@ 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.graphics.Color
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
@@ -34,6 +35,7 @@ import com.kuit.ourmenu.ui.theme.ourMenuTypography
@Composable
fun SortDropdown(
+ color: Color = Neutral700,
options: List,
selectedOption: String,
onSelectedOptionChange: (String) -> Unit
@@ -50,15 +52,16 @@ fun SortDropdown(
Text(
text = selectedOption,
style = ourMenuTypography().pretendard_500_14,
- color = Neutral700
+ color = color
)
Spacer(modifier = Modifier.width(8.dp))
- Image(
+ Icon(
painter = if (expanded) painterResource(id = R.drawable.ic_dropdown_btn_up) else painterResource(
id = R.drawable.ic_dropdown_btn
),
+ tint = color,
modifier = Modifier.size(16.dp),
contentDescription = "Expand Down"
)
diff --git a/app/src/main/res/drawable/ic_dropdown_btn_up.xml b/app/src/main/res/drawable/ic_dropdown_btn_up.xml
new file mode 100644
index 00000000..0a7f15f1
--- /dev/null
+++ b/app/src/main/res/drawable/ic_dropdown_btn_up.xml
@@ -0,0 +1,13 @@
+
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index baf1705c..fb74a352 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -95,7 +95,6 @@
%d 원
전체 메뉴
%d 개
- 이름순
한강 뷰 맛집
필터링
각 항목 당 1개 선택
From 817a897b6a41cf8fecac7d313cb6b7b08c39feaf Mon Sep 17 00:00:00 2001
From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com>
Date: Wed, 26 Mar 2025 01:35:15 +0900
Subject: [PATCH 15/27] =?UTF-8?q?[feat]:=20=EC=A0=95=EB=A0=AC=20=EB=93=9C?=
=?UTF-8?q?=EB=A1=AD=EB=8B=A4=EC=9A=B4=20=EC=A0=81=EC=9A=A9=ED=95=98?=
=?UTF-8?q?=EA=B8=B0=20(#50)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../screen/MenuFolderAllMenuScreen.kt | 36 +++++++++----------
.../screen/MenuFolderDetailScreen.kt | 30 ++++++++--------
2 files changed, 30 insertions(+), 36 deletions(-)
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderAllMenuScreen.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderAllMenuScreen.kt
index f96bf42c..6de8731b 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderAllMenuScreen.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderAllMenuScreen.kt
@@ -41,6 +41,7 @@ import com.kuit.ourmenu.ui.common.topappbar.BackButtonTopAppBar
import com.kuit.ourmenu.ui.menuFolder.component.AddButton
import com.kuit.ourmenu.ui.menuFolder.component.FilterBottomSheet
import com.kuit.ourmenu.ui.menuFolder.component.MenuFolderMenuButton
+import com.kuit.ourmenu.ui.menuFolder.component.SortDropdown
import com.kuit.ourmenu.ui.navigator.Routes
import com.kuit.ourmenu.ui.theme.Neutral500
import com.kuit.ourmenu.ui.theme.Neutral700
@@ -54,8 +55,11 @@ import kotlinx.coroutines.launch
@Composable
fun MenuFolderAllMenuScreen(navController: NavController) {
val menuCount = 13
- var filterCount by rememberSaveable { mutableIntStateOf(0) } // ✅ 선택된 필터 개수 상태 관리
- var selectedFilters by rememberSaveable { mutableStateOf(listOf()) } // ✅ 선택된 필터 리스트
+ var filterCount by rememberSaveable { mutableIntStateOf(0) } // 선택된 필터 개수 상태 관리
+ var selectedFilters by rememberSaveable { mutableStateOf(listOf()) } // 선택된 필터 리스트
+
+ val options = listOf("이름순", "등록순", "가격순")
+ var selectedOption by rememberSaveable { mutableStateOf("이름순") }
val scaffoldState = rememberBottomSheetScaffoldState()
val coroutineScope = rememberCoroutineScope()
@@ -99,8 +103,8 @@ fun MenuFolderAllMenuScreen(navController: NavController) {
),
onApplyButtonClick = {
coroutineScope.launch {
- filterCount = selectedFilters.size // ✅ 적용 버튼 클릭 시 선택된 필터 개수 반영
- scaffoldState.bottomSheetState.partialExpand() // ✅ 적용 버튼 클릭 시 BottomSheet 닫기
+ filterCount = selectedFilters.size // 적용 버튼 클릭 시 선택된 필터 개수 반영
+ scaffoldState.bottomSheetState.partialExpand() // 적용 버튼 클릭 시 BottomSheet 닫기
}
},
@@ -140,30 +144,22 @@ fun MenuFolderAllMenuScreen(navController: NavController) {
)
}
- Row {
- Text(
- text = stringResource(R.string.sort_type),
- style = ourMenuTypography().pretendard_500_14,
- color = Neutral700
- )
-
- Spacer(modifier = Modifier.width(8.dp))
-
- Image(
- painter = painterResource(id = R.drawable.ic_dropdown_btn),
- contentDescription = "Expand Down"
- )
+ SortDropdown(
+ options = options,
+ selectedOption = selectedOption,
+ ) {
+ selectedOption = it
}
}
- // ✅ 필터 버튼 (필터 개수 반영)
+ // 필터 버튼 (필터 개수 반영)
Card(
shape = RoundedCornerShape(12.dp),
modifier = Modifier
.padding(top = 24.dp, bottom = 16.dp, start = 20.dp)
.clickable {
coroutineScope.launch {
- scaffoldState.bottomSheetState.expand() // ✅ 버튼 클릭 시 BottomSheet 열기
+ scaffoldState.bottomSheetState.expand() // 버튼 클릭 시 BottomSheet 열기
}
},
colors = CardDefaults.cardColors(containerColor = Primary500Main),
@@ -181,7 +177,7 @@ fun MenuFolderAllMenuScreen(navController: NavController) {
Spacer(modifier = Modifier.width(8.dp))
Text(
- text = "$filterCount", // ✅ 선택된 필터 개수 반영
+ text = "$filterCount", // 선택된 필터 개수 반영
color = NeutralWhite,
style = ourMenuTypography().pretendard_700_16
)
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderDetailScreen.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderDetailScreen.kt
index f01dff2e..a7d8f914 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderDetailScreen.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderDetailScreen.kt
@@ -14,10 +14,13 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.LazyColumn
-import androidx.compose.material3.Icon
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+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.graphics.Brush
@@ -33,6 +36,7 @@ import com.kuit.ourmenu.R
import com.kuit.ourmenu.ui.common.topappbar.BackButtonTopAppBar
import com.kuit.ourmenu.ui.menuFolder.component.AddButton
import com.kuit.ourmenu.ui.menuFolder.component.MenuFolderMenuButton
+import com.kuit.ourmenu.ui.menuFolder.component.SortDropdown
import com.kuit.ourmenu.ui.navigator.Routes
import com.kuit.ourmenu.ui.theme.Neutral50
import com.kuit.ourmenu.ui.theme.NeutralWhite
@@ -42,6 +46,9 @@ import com.kuit.ourmenu.ui.theme.ourMenuTypography
fun MenuFolderDetailScreen(navController: NavController) {
val menuCount = 13 // 임의로 정한 값
+ val options = listOf("이름순", "등록순", "가격순")
+ var selectedOption by rememberSaveable { mutableStateOf("이름순") }
+
Scaffold(
topBar = {},
content = { innerPadding ->
@@ -107,21 +114,12 @@ fun MenuFolderDetailScreen(navController: NavController) {
)
}
- // TODO: 드롭다운 만들기
- Row {
- Text(
- text = stringResource(R.string.sort_type),
- style = ourMenuTypography().pretendard_500_14,
- color = Neutral50
- )
-
- Spacer(modifier = Modifier.width(8.dp))
-
- Icon(
- painter = painterResource(id = R.drawable.ic_dropdown_btn),
- contentDescription = "Expand Down",
- tint = Neutral50
- )
+ SortDropdown(
+ options = options,
+ selectedOption = selectedOption,
+ color = NeutralWhite
+ ) {
+ selectedOption = it
}
}
}
From 24b3579472ede5f8a6b4a9d2dcc4ad9a01897700 Mon Sep 17 00:00:00 2001
From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com>
Date: Thu, 27 Mar 2025 21:30:14 +0900
Subject: [PATCH 16/27] =?UTF-8?q?[fix]:=20api=20BASE=5FURL=EB=AC=B8?=
=?UTF-8?q?=EC=A0=9C=20=ED=95=B4=EA=B2=B0=20(#50)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/build.gradle.kts | 6 +++++-
gradle.properties | 4 +++-
2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 70f3cff9..5a32f2c2 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -25,7 +25,7 @@ android {
versionName = "1.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
- buildConfigField("String", "BASE_URL", properties["BASE_URL"].toString())
+ buildConfigField("String", "BASE_URL", "\"${properties["BASE_URL"]}\"")
manifestPlaceholders["KAKAO_APP_KEY"] = properties["KAKAO_APP_KEY"].toString()
buildConfigField("String", "KAKAO_APP_KEY", properties["KAKAO_APP_KEY"].toString())
@@ -96,6 +96,10 @@ dependencies {
// Kakao SDK
implementation("com.kakao.sdk:v2-all:2.20.6")
implementation("com.kakao.sdk:v2-user:2.20.6") // 카카오 로그인 API 모듈
+
+ // image
+ implementation("io.coil-kt.coil3:coil-compose:3.1.0")
+ implementation("io.coil-kt.coil3:coil-network-okhttp:3.1.0")
}
// Hilt를 사용할 때 필요한 Annotation Processor
diff --git a/gradle.properties b/gradle.properties
index 20e2a015..2661ee69 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -20,4 +20,6 @@ kotlin.code.style=official
# Enables namespacing of each library's R class so that its R class includes only the
# resources declared in the library itself and none from the library's dependencies,
# thereby reducing the size of the R class for that library
-android.nonTransitiveRClass=true
\ No newline at end of file
+android.nonTransitiveRClass=true
+
+android.defaults.buildfeatures.buildconfig=true
\ No newline at end of file
From b618c2e908cef5429593bd4f0adde175d9477ed4 Mon Sep 17 00:00:00 2001
From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com>
Date: Thu, 27 Mar 2025 21:32:13 +0900
Subject: [PATCH 17/27] =?UTF-8?q?[feat]:=20menuFolder=20Response=20?=
=?UTF-8?q?=EC=83=9D=EC=84=B1=20(#50)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../model/menuFolder/response/MenuFolderResponse.kt | 10 ++++++++++
1 file changed, 10 insertions(+)
create mode 100644 app/src/main/java/com/kuit/ourmenu/data/model/menuFolder/response/MenuFolderResponse.kt
diff --git a/app/src/main/java/com/kuit/ourmenu/data/model/menuFolder/response/MenuFolderResponse.kt b/app/src/main/java/com/kuit/ourmenu/data/model/menuFolder/response/MenuFolderResponse.kt
new file mode 100644
index 00000000..9c95d534
--- /dev/null
+++ b/app/src/main/java/com/kuit/ourmenu/data/model/menuFolder/response/MenuFolderResponse.kt
@@ -0,0 +1,10 @@
+package com.kuit.ourmenu.data.model.menuFolder.response
+
+data class MenuFolderResponse(
+ val menuFolderId: Int,
+ val menuFolderTitle: String,
+ val menuFolderUrl: String,
+ val menuFolderIcon: String,
+ val menuIds: List,
+ val index: Int,
+)
\ No newline at end of file
From cd7edc8c5c450c0ee97dc1aa586cd524200602bc Mon Sep 17 00:00:00 2001
From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com>
Date: Thu, 27 Mar 2025 21:32:31 +0900
Subject: [PATCH 18/27] =?UTF-8?q?[feat]:=20menuFolder=20Service=20?=
=?UTF-8?q?=EC=9E=91=EC=84=B1=20(#50)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../com/kuit/ourmenu/data/service/MenuFolderService.kt | 10 ++++++++++
1 file changed, 10 insertions(+)
create mode 100644 app/src/main/java/com/kuit/ourmenu/data/service/MenuFolderService.kt
diff --git a/app/src/main/java/com/kuit/ourmenu/data/service/MenuFolderService.kt b/app/src/main/java/com/kuit/ourmenu/data/service/MenuFolderService.kt
new file mode 100644
index 00000000..9c1274a7
--- /dev/null
+++ b/app/src/main/java/com/kuit/ourmenu/data/service/MenuFolderService.kt
@@ -0,0 +1,10 @@
+package com.kuit.ourmenu.data.service
+
+import com.kuit.ourmenu.data.model.base.BaseResponse
+import com.kuit.ourmenu.data.model.menuFolder.response.MenuFolderResponse
+import retrofit2.http.GET
+
+interface MenuFolderService {
+ @GET("api/menu-folders")
+ suspend fun getMenuFolders(): BaseResponse>
+}
\ No newline at end of file
From ab24a8b28270edb6ae8dd0f7c8ed477138f07689 Mon Sep 17 00:00:00 2001
From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com>
Date: Thu, 27 Mar 2025 21:32:42 +0900
Subject: [PATCH 19/27] =?UTF-8?q?[feat]:=20menuFolder=20Repository=20?=
=?UTF-8?q?=EC=83=9D=EC=84=B1=20(#50)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../data/repository/MenuFolderRepository.kt | 15 +++++++++++++++
1 file changed, 15 insertions(+)
create mode 100644 app/src/main/java/com/kuit/ourmenu/data/repository/MenuFolderRepository.kt
diff --git a/app/src/main/java/com/kuit/ourmenu/data/repository/MenuFolderRepository.kt b/app/src/main/java/com/kuit/ourmenu/data/repository/MenuFolderRepository.kt
new file mode 100644
index 00000000..79b2464d
--- /dev/null
+++ b/app/src/main/java/com/kuit/ourmenu/data/repository/MenuFolderRepository.kt
@@ -0,0 +1,15 @@
+package com.kuit.ourmenu.data.repository
+
+import com.kuit.ourmenu.data.model.base.handleBaseResponse
+import com.kuit.ourmenu.data.service.MenuFolderService
+import javax.inject.Inject
+import javax.inject.Singleton
+
+@Singleton
+class MenuFolderRepository @Inject constructor(
+ private val menuFolderService: MenuFolderService,
+) {
+ suspend fun getMenuFolders() = runCatching {
+ menuFolderService.getMenuFolders().handleBaseResponse().getOrThrow()
+ }
+}
\ No newline at end of file
From be6fa4af9a66ab70841feda57cbbaabf40f335f8 Mon Sep 17 00:00:00 2001
From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com>
Date: Thu, 27 Mar 2025 21:32:53 +0900
Subject: [PATCH 20/27] =?UTF-8?q?[feat]:=20menuFolder=20ViewModel=20?=
=?UTF-8?q?=EC=9E=91=EC=84=B1=20(#50)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../viewmodel/MenuFolderViewModel.kt | 52 +++++++++++++++++++
1 file changed, 52 insertions(+)
create mode 100644 app/src/main/java/com/kuit/ourmenu/ui/menuFolder/viewmodel/MenuFolderViewModel.kt
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/viewmodel/MenuFolderViewModel.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/viewmodel/MenuFolderViewModel.kt
new file mode 100644
index 00000000..e6ec22f1
--- /dev/null
+++ b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/viewmodel/MenuFolderViewModel.kt
@@ -0,0 +1,52 @@
+package com.kuit.ourmenu.ui.menuFolder.viewmodel
+
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import com.kuit.ourmenu.data.model.menuFolder.response.MenuFolderResponse
+import com.kuit.ourmenu.data.repository.MenuFolderRepository
+import dagger.hilt.android.lifecycle.HiltViewModel
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.asStateFlow
+import kotlinx.coroutines.launch
+import javax.inject.Inject
+
+@HiltViewModel
+class MenuFolderViewModel @Inject constructor(
+ private val menuFolderRepository: MenuFolderRepository
+): ViewModel() {
+
+ private val _menuFolders = MutableStateFlow>(emptyList())
+ val menuFolders = _menuFolders.asStateFlow()
+
+ private val _error: MutableStateFlow = MutableStateFlow(null)
+ val error = _error.asStateFlow()
+
+ private val _isLoading = MutableStateFlow(false)
+ val isLoading = _isLoading.asStateFlow()
+// val menuFolders = mutableStateListOf()
+// private val isLoading = mutableStateOf(false)
+// private val errorMessage = mutableStateOf(null)
+
+ init {
+ getMenuFolders()
+ }
+
+ fun getMenuFolders() {
+ viewModelScope.launch {
+ _isLoading.value = true
+ _error.value = null
+
+ menuFolderRepository.getMenuFolders()
+ .onSuccess { response ->
+ if (response != null) {
+ _menuFolders.value = response.sortedBy { it.index }
+ }
+ }
+ .onFailure { throwable ->
+ _error.value = throwable.message ?: "메뉴 폴더를 불러오는 중 오류가 발생했습니다."
+ }
+
+ _isLoading.value = false
+ }
+ }
+}
\ No newline at end of file
From 24086537f87cc5fb250213b1abe3de2e968a389e Mon Sep 17 00:00:00 2001
From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com>
Date: Thu, 27 Mar 2025 21:33:07 +0900
Subject: [PATCH 21/27] =?UTF-8?q?[feat]:=20service=20module=20=EC=88=98?=
=?UTF-8?q?=EC=A0=95=20(#50)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../main/java/com/kuit/ourmenu/data/di/ServiceModule.kt | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/app/src/main/java/com/kuit/ourmenu/data/di/ServiceModule.kt b/app/src/main/java/com/kuit/ourmenu/data/di/ServiceModule.kt
index a5dc9f44..eba4aef0 100644
--- a/app/src/main/java/com/kuit/ourmenu/data/di/ServiceModule.kt
+++ b/app/src/main/java/com/kuit/ourmenu/data/di/ServiceModule.kt
@@ -2,6 +2,7 @@ package com.kuit.ourmenu.data.di
import com.kuit.ourmenu.data.service.AuthService
import com.kuit.ourmenu.data.service.DummyService
+import com.kuit.ourmenu.data.service.MenuFolderService
import com.kuit.ourmenu.data.service.UserService
import dagger.Module
import dagger.Provides
@@ -28,4 +29,10 @@ object ServiceModule {
@Singleton
fun providesUserService(retrofit: Retrofit): UserService =
retrofit.create(UserService::class.java)
+
+ @Provides
+ @Singleton
+ fun provideMenuFolderService(retrofit: Retrofit): MenuFolderService =
+ retrofit.create(MenuFolderService::class.java)
+
}
\ No newline at end of file
From e6f5f0c3d0e899f007a8887c6678a32c2be59838 Mon Sep 17 00:00:00 2001
From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com>
Date: Thu, 27 Mar 2025 21:33:33 +0900
Subject: [PATCH 22/27] =?UTF-8?q?[feat]:=20menuFolderIconType=20enum=20?=
=?UTF-8?q?=EC=83=9D=EC=84=B1=20(#50)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../menuFolder/response/MenuFolderIconType.kt | 36 +++++++++++++++++++
1 file changed, 36 insertions(+)
create mode 100644 app/src/main/java/com/kuit/ourmenu/data/model/menuFolder/response/MenuFolderIconType.kt
diff --git a/app/src/main/java/com/kuit/ourmenu/data/model/menuFolder/response/MenuFolderIconType.kt b/app/src/main/java/com/kuit/ourmenu/data/model/menuFolder/response/MenuFolderIconType.kt
new file mode 100644
index 00000000..1cc975e1
--- /dev/null
+++ b/app/src/main/java/com/kuit/ourmenu/data/model/menuFolder/response/MenuFolderIconType.kt
@@ -0,0 +1,36 @@
+package com.kuit.ourmenu.data.model.menuFolder.response
+
+enum class MenuFolderIconType {
+ ANGRY,
+ BAEKSUK,
+ BASKET,
+ BREAD,
+ CLOUD,
+ COFFEE,
+ CONGRATS,
+ COUPLE,
+ CRY,
+ DICE,
+ DOUGHNUT,
+ FIRE,
+ FISH,
+ FISH_BREAD,
+ HAMBURGER,
+ HEART,
+ ICE_CREAM,
+ JJAMBBONG,
+ LEAF,
+ MAN,
+ MEAT,
+ NOODLE,
+ PEOPLE,
+ RAMEN,
+ RICE,
+ SMILE,
+ SNOWMAN,
+ SPOON_AND_CHOPSTICK,
+ SUN,
+ SUNNY,
+ SUSHI,
+ TABLE,
+}
\ No newline at end of file
From 1687bcd75106db805c9cbed8b6ecaa94db2d8779 Mon Sep 17 00:00:00 2001
From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com>
Date: Thu, 27 Mar 2025 21:33:43 +0900
Subject: [PATCH 23/27] =?UTF-8?q?[feat]:=20menuFolder=20api=20=EC=97=B0?=
=?UTF-8?q?=EA=B2=B0=20=EB=A1=9C=EC=A7=81=20=EC=9E=91=EC=84=B1=20(#50)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../menuFolder/component/MenuFolderButton.kt | 40 +++--
.../ui/menuFolder/screen/MenuFolderScreen.kt | 151 ++++++++++++------
2 files changed, 131 insertions(+), 60 deletions(-)
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/MenuFolderButton.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/MenuFolderButton.kt
index 45afe69f..dbded571 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/MenuFolderButton.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/MenuFolderButton.kt
@@ -35,7 +35,9 @@ import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
+import coil3.compose.AsyncImage
import com.kuit.ourmenu.R
+import com.kuit.ourmenu.data.model.menuFolder.response.MenuFolderResponse
import com.kuit.ourmenu.ui.theme.Neutral300
import com.kuit.ourmenu.ui.theme.Neutral700
import com.kuit.ourmenu.ui.theme.NeutralWhite
@@ -46,6 +48,7 @@ import kotlinx.coroutines.launch
@Composable
fun MenuFolderButton(
+ menuFolder: MenuFolderResponse,
isSwiped: Boolean, // 현재 버튼이 스와이프된 상태인지 확인
onSwipe: () -> Unit, // 새로운 버튼이 스와이프될 때 호출
onReset: () -> Unit, // 버튼이 닫히면 호출
@@ -89,11 +92,14 @@ fun MenuFolderButton(
}
// 스와이프 상태일 때만 offset 적용
- Box(modifier = Modifier
- .offset(x = if (isSwiped) offsetX.dp else 0.dp)
- .clickable(onClick = onButtonClick)
+ Box(
+ modifier = Modifier
+ .offset(x = if (isSwiped) offsetX.dp else 0.dp)
+ .clickable(onClick = onButtonClick)
) {
- MenuFolderContent()
+ MenuFolderContent(
+ menuFolder = menuFolder
+ )
}
}
}
@@ -154,15 +160,18 @@ fun MenuFolderDeleteButton(onDeleteClick: () -> Unit = {}) {
}
@Composable
-fun MenuFolderContent() {
- val menuCount = 5 // 임의로 정한 값
+fun MenuFolderContent(
+ menuFolder: MenuFolderResponse,
+) {
+ val menuCount = menuFolder.menuIds.size
Box(
modifier = Modifier
.fillMaxSize()
) {
- Image(
- painter = painterResource(id = R.drawable.img_dummy_pizza),
+ AsyncImage(
+// painter = painterResource(id = R.drawable.img_dummy_pizza),
+ model = menuFolder.menuFolderUrl,
contentDescription = "Folder Image",
contentScale = ContentScale.FillWidth,
modifier = Modifier
@@ -194,7 +203,7 @@ fun MenuFolderContent() {
)
Spacer(modifier = Modifier.width(4.dp))
Text(
- text = stringResource(R.string.menu_folder_name),
+ text = menuFolder.menuFolderTitle,
color = NeutralWhite,
style = ourMenuTypography().pretendard_500_24,
)
@@ -220,5 +229,16 @@ fun gradientBrush(): Brush {
@Preview(showBackground = true)
@Composable
private fun MenuFolderButtonPreview() {
- MenuFolderButton(false, {}, {})
+ val dummyMenuFolder = MenuFolderResponse(
+ menuFolderId = 1,
+ menuFolderTitle = "인기 메뉴",
+ menuFolderUrl = "https://ourmenu-default.s3.ap-northeast-2.amazonaws.com/default_menu_folder_img.svg",
+ menuFolderIcon = "DICE",
+ menuIds = listOf(1, 2, 3),
+ index = 0
+ )
+
+ MenuFolderButton(
+ menuFolder = dummyMenuFolder,
+ false, {}, {})
}
\ No newline at end of file
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderScreen.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderScreen.kt
index 756df97f..3c2096bb 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderScreen.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderScreen.kt
@@ -1,5 +1,6 @@
package com.kuit.ourmenu.ui.menuFolder.screen
+import android.util.Log
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
@@ -8,6 +9,7 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
+import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
@@ -22,25 +24,38 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
+import androidx.hilt.navigation.compose.hiltViewModel
+import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.navigation.NavController
import androidx.navigation.compose.rememberNavController
import com.kuit.ourmenu.R
import com.kuit.ourmenu.ui.menuFolder.component.AddButton
import com.kuit.ourmenu.ui.menuFolder.component.MenuFolderButton
import com.kuit.ourmenu.ui.menuFolder.component.MenuFolderTopAppBar
+import com.kuit.ourmenu.ui.menuFolder.viewmodel.MenuFolderViewModel
import com.kuit.ourmenu.ui.navigator.Routes
import com.kuit.ourmenu.ui.theme.NeutralWhite
import com.kuit.ourmenu.ui.theme.Primary500Main
import com.kuit.ourmenu.ui.theme.ourMenuTypography
@Composable
-fun MenuFolderScreen(navController: NavController) {
+fun MenuFolderScreen(
+ navController: NavController,
+ viewModel: MenuFolderViewModel = hiltViewModel()
+) {
val menuCount = 5 // 임의로 정한 값
val menuFolderCount = 8 // 임의로 정한 값
// 현재 스와이프된 버튼의 인덱스를 관리 (한 번에 하나만 스와이프되도록)
var swipedIndex by remember { mutableIntStateOf(-1) }
+ val menuFolders by viewModel.menuFolders.collectAsStateWithLifecycle()
+ val isLoading by viewModel.isLoading.collectAsStateWithLifecycle()
+ val error by viewModel.error.collectAsStateWithLifecycle()
+ val totalMenuCount = menuFolders.sumOf { it.menuIds.size }
+
+ Log.d("MenuFolderScreen", "menuFolders: $menuFolders")
+
Scaffold(
topBar = {
MenuFolderTopAppBar(
@@ -50,63 +65,99 @@ fun MenuFolderScreen(navController: NavController) {
)
}
) { innerPadding ->
- LazyColumn(
- modifier = Modifier
- .padding(innerPadding)
- .padding(horizontal = 20.dp),
- verticalArrangement = Arrangement.spacedBy(8.dp)
- ) {
- item {
- Column(
- modifier = Modifier
- .padding(top = 24.dp)
- .height(64.dp)
- .fillMaxWidth()
- .clip(RoundedCornerShape(12.dp))
- .background(Primary500Main)
- .clickable(onClick = {
- navController.navigate(route = Routes.MenuFolderAllMenu)
- }),
- horizontalAlignment = Alignment.CenterHorizontally,
- verticalArrangement = Arrangement.Center
- ) {
- Text(
- text = stringResource(R.string.see_all_menu),
- color = NeutralWhite,
- style = ourMenuTypography().pretendard_700_18
- )
+// if (isLoading) {
+// // 로딩 상태 표시
+// Column(
+// modifier = Modifier
+// .padding(innerPadding)
+// .fillMaxWidth()
+// .padding(top = 100.dp),
+// horizontalAlignment = Alignment.CenterHorizontally
+// ) {
+// Text(text = "로딩 중...", style = ourMenuTypography().pretendard_500_16)
+// }
+// } else if (error != null) {
+// // 에러 상태 표시
+// Column(
+// modifier = Modifier
+// .padding(innerPadding)
+// .fillMaxWidth()
+// .padding(top = 100.dp),
+// horizontalAlignment = Alignment.CenterHorizontally
+// ) {
+// Text(text = error ?: "에러 발생", color = MaterialTheme.colorScheme.error)
+// }
+// } else {
+ LazyColumn(
+ modifier = Modifier
+ .padding(innerPadding)
+ .padding(horizontal = 20.dp),
+ verticalArrangement = Arrangement.spacedBy(8.dp)
+ ) {
+ item {
+ Column(
+ modifier = Modifier
+ .padding(top = 24.dp)
+ .height(64.dp)
+ .fillMaxWidth()
+ .clip(RoundedCornerShape(12.dp))
+ .background(Primary500Main)
+ .clickable(onClick = {
+ navController.navigate(route = Routes.MenuFolderAllMenu)
+ }),
+ horizontalAlignment = Alignment.CenterHorizontally,
+ verticalArrangement = Arrangement.Center
+ ) {
+ Text(
+ text = stringResource(R.string.see_all_menu),
+ color = NeutralWhite,
+ style = ourMenuTypography().pretendard_700_18
+ )
- Text(
- text = String.format(stringResource(R.string.menu_count), menuCount),
- color = NeutralWhite,
- style = ourMenuTypography().pretendard_500_14,
+ Text(
+ text = String.format(stringResource(R.string.menu_count), totalMenuCount),
+ color = NeutralWhite,
+ style = ourMenuTypography().pretendard_500_14,
+ )
+ }
+ }
+
+ // 스와이프 제어
+ // TODO: 드래그 앤 드롭 구현
+// items(menuFolderCount) { index ->
+// MenuFolderButton(
+// isSwiped = swipedIndex == index, // 현재 스와이프된 아이템인지 확인
+// onSwipe = { swipedIndex = index }, // 새로운 버튼이 스와이프되면 상태 변경
+// onReset = { if (swipedIndex == index) swipedIndex = -1 }, // 닫히면 초기화
+// onButtonClick = {
+// navController.navigate(route = Routes.MenuFolderDetail)
+// }
+// )
+// }
+ // 서버에서 받아온 menuFolders 기준으로 출력
+ itemsIndexed(menuFolders) { index, folder ->
+ MenuFolderButton(
+ menuFolder = folder,
+ isSwiped = swipedIndex == index,
+ onSwipe = { swipedIndex = index },
+ onReset = { if (swipedIndex == index) swipedIndex = -1 },
+ onButtonClick = {
+ navController.navigate(route = Routes.MenuFolderDetail)
+ }
)
}
- }
- // 스와이프 제어
- // TODO: 드래그 앤 드롭 구현
- items(menuFolderCount) { index ->
- MenuFolderButton(
- isSwiped = swipedIndex == index, // 현재 스와이프된 아이템인지 확인
- onSwipe = { swipedIndex = index }, // 새로운 버튼이 스와이프되면 상태 변경
- onReset = { if (swipedIndex == index) swipedIndex = -1 }, // 닫히면 초기화
- onButtonClick = {
- navController.navigate(route = Routes.MenuFolderDetail)
+ item {
+ AddButton(
+ stringResource(R.string.add_menu_folder),
+ modifier = Modifier
+ ) {
+ // TODO: 버튼 누르면 메뉴판 추가 페이지로 이동
}
- )
- }
-
- item {
- AddButton(
- stringResource(R.string.add_menu_folder),
- modifier = Modifier
- ) {
- // TODO: 버튼 누르면 메뉴판 추가 페이지로 이동
}
}
}
- }
+// }
}
@Preview(showBackground = true)
From 5ae5f944da0825da162623325e9012c6d14f3e4f Mon Sep 17 00:00:00 2001
From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com>
Date: Fri, 28 Mar 2025 16:22:39 +0900
Subject: [PATCH 24/27] =?UTF-8?q?[feat]:=20coil=20=EC=84=B8=ED=8C=85=20(#5?=
=?UTF-8?q?0)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/build.gradle.kts | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 5a32f2c2..3d4da186 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -100,6 +100,7 @@ dependencies {
// image
implementation("io.coil-kt.coil3:coil-compose:3.1.0")
implementation("io.coil-kt.coil3:coil-network-okhttp:3.1.0")
+ implementation("io.coil-kt.coil3:coil-svg:3.1.0")
}
// Hilt를 사용할 때 필요한 Annotation Processor
From 0069c3453c4e1c355f9a1028749199647323a5ea Mon Sep 17 00:00:00 2001
From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com>
Date: Fri, 28 Mar 2025 16:23:57 +0900
Subject: [PATCH 25/27] =?UTF-8?q?[fix]:=20api=20=EC=97=B0=EA=B2=B0=20?=
=?UTF-8?q?=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95=20(#50)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../data/model/menuFolder/response/MenuFolderResponse.kt | 3 +++
1 file changed, 3 insertions(+)
diff --git a/app/src/main/java/com/kuit/ourmenu/data/model/menuFolder/response/MenuFolderResponse.kt b/app/src/main/java/com/kuit/ourmenu/data/model/menuFolder/response/MenuFolderResponse.kt
index 9c95d534..77e23550 100644
--- a/app/src/main/java/com/kuit/ourmenu/data/model/menuFolder/response/MenuFolderResponse.kt
+++ b/app/src/main/java/com/kuit/ourmenu/data/model/menuFolder/response/MenuFolderResponse.kt
@@ -1,5 +1,8 @@
package com.kuit.ourmenu.data.model.menuFolder.response
+import kotlinx.serialization.Serializable
+
+@Serializable
data class MenuFolderResponse(
val menuFolderId: Int,
val menuFolderTitle: String,
From c3fc627178b1573c7d3e8719999957dfd1f91cd9 Mon Sep 17 00:00:00 2001
From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com>
Date: Fri, 28 Mar 2025 16:26:17 +0900
Subject: [PATCH 26/27] =?UTF-8?q?[chore]:=20=ED=95=84=EC=9A=94=EC=97=86?=
=?UTF-8?q?=EB=8A=94=20=EC=A3=BC=EC=84=9D=20=EC=82=AD=EC=A0=9C=20(#50)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../menuFolder/component/MenuFolderButton.kt | 1 -
.../ui/menuFolder/screen/MenuFolderScreen.kt | 141 +++++++-----------
.../viewmodel/MenuFolderViewModel.kt | 24 +--
3 files changed, 63 insertions(+), 103 deletions(-)
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/MenuFolderButton.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/MenuFolderButton.kt
index dbded571..4e6cb28b 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/MenuFolderButton.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/component/MenuFolderButton.kt
@@ -170,7 +170,6 @@ fun MenuFolderContent(
.fillMaxSize()
) {
AsyncImage(
-// painter = painterResource(id = R.drawable.img_dummy_pizza),
model = menuFolder.menuFolderUrl,
contentDescription = "Folder Image",
contentScale = ContentScale.FillWidth,
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderScreen.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderScreen.kt
index 3c2096bb..63154350 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderScreen.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderScreen.kt
@@ -43,16 +43,11 @@ fun MenuFolderScreen(
navController: NavController,
viewModel: MenuFolderViewModel = hiltViewModel()
) {
- val menuCount = 5 // 임의로 정한 값
- val menuFolderCount = 8 // 임의로 정한 값
-
// 현재 스와이프된 버튼의 인덱스를 관리 (한 번에 하나만 스와이프되도록)
var swipedIndex by remember { mutableIntStateOf(-1) }
val menuFolders by viewModel.menuFolders.collectAsStateWithLifecycle()
- val isLoading by viewModel.isLoading.collectAsStateWithLifecycle()
- val error by viewModel.error.collectAsStateWithLifecycle()
- val totalMenuCount = menuFolders.sumOf { it.menuIds.size }
+ val totalMenuCount = menuFolders.sumOf { it.menuIds.size } // 전체 메뉴 개수 - 서버에서 받아오도록 수정
Log.d("MenuFolderScreen", "menuFolders: $menuFolders")
@@ -65,99 +60,63 @@ fun MenuFolderScreen(
)
}
) { innerPadding ->
-// if (isLoading) {
-// // 로딩 상태 표시
-// Column(
-// modifier = Modifier
-// .padding(innerPadding)
-// .fillMaxWidth()
-// .padding(top = 100.dp),
-// horizontalAlignment = Alignment.CenterHorizontally
-// ) {
-// Text(text = "로딩 중...", style = ourMenuTypography().pretendard_500_16)
-// }
-// } else if (error != null) {
-// // 에러 상태 표시
-// Column(
-// modifier = Modifier
-// .padding(innerPadding)
-// .fillMaxWidth()
-// .padding(top = 100.dp),
-// horizontalAlignment = Alignment.CenterHorizontally
-// ) {
-// Text(text = error ?: "에러 발생", color = MaterialTheme.colorScheme.error)
-// }
-// } else {
- LazyColumn(
- modifier = Modifier
- .padding(innerPadding)
- .padding(horizontal = 20.dp),
- verticalArrangement = Arrangement.spacedBy(8.dp)
- ) {
- item {
- Column(
- modifier = Modifier
- .padding(top = 24.dp)
- .height(64.dp)
- .fillMaxWidth()
- .clip(RoundedCornerShape(12.dp))
- .background(Primary500Main)
- .clickable(onClick = {
- navController.navigate(route = Routes.MenuFolderAllMenu)
- }),
- horizontalAlignment = Alignment.CenterHorizontally,
- verticalArrangement = Arrangement.Center
- ) {
- Text(
- text = stringResource(R.string.see_all_menu),
- color = NeutralWhite,
- style = ourMenuTypography().pretendard_700_18
- )
-
- Text(
- text = String.format(stringResource(R.string.menu_count), totalMenuCount),
- color = NeutralWhite,
- style = ourMenuTypography().pretendard_500_14,
- )
- }
- }
+ LazyColumn(
+ modifier = Modifier
+ .padding(innerPadding)
+ .padding(horizontal = 20.dp),
+ verticalArrangement = Arrangement.spacedBy(8.dp)
+ ) {
+ item {
+ Column(
+ modifier = Modifier
+ .padding(top = 24.dp)
+ .height(64.dp)
+ .fillMaxWidth()
+ .clip(RoundedCornerShape(12.dp))
+ .background(Primary500Main)
+ .clickable(onClick = {
+ navController.navigate(route = Routes.MenuFolderAllMenu)
+ }),
+ horizontalAlignment = Alignment.CenterHorizontally,
+ verticalArrangement = Arrangement.Center
+ ) {
+ Text(
+ text = stringResource(R.string.see_all_menu),
+ color = NeutralWhite,
+ style = ourMenuTypography().pretendard_700_18
+ )
- // 스와이프 제어
- // TODO: 드래그 앤 드롭 구현
-// items(menuFolderCount) { index ->
-// MenuFolderButton(
-// isSwiped = swipedIndex == index, // 현재 스와이프된 아이템인지 확인
-// onSwipe = { swipedIndex = index }, // 새로운 버튼이 스와이프되면 상태 변경
-// onReset = { if (swipedIndex == index) swipedIndex = -1 }, // 닫히면 초기화
-// onButtonClick = {
-// navController.navigate(route = Routes.MenuFolderDetail)
-// }
-// )
-// }
- // 서버에서 받아온 menuFolders 기준으로 출력
- itemsIndexed(menuFolders) { index, folder ->
- MenuFolderButton(
- menuFolder = folder,
- isSwiped = swipedIndex == index,
- onSwipe = { swipedIndex = index },
- onReset = { if (swipedIndex == index) swipedIndex = -1 },
- onButtonClick = {
- navController.navigate(route = Routes.MenuFolderDetail)
- }
+ Text(
+ text = String.format(stringResource(R.string.menu_count), totalMenuCount),
+ color = NeutralWhite,
+ style = ourMenuTypography().pretendard_500_14,
)
}
+ }
- item {
- AddButton(
- stringResource(R.string.add_menu_folder),
- modifier = Modifier
- ) {
- // TODO: 버튼 누르면 메뉴판 추가 페이지로 이동
+ // TODO: 드래그 앤 드롭 구현
+ itemsIndexed(menuFolders) { index, folder ->
+ MenuFolderButton(
+ menuFolder = folder,
+ isSwiped = swipedIndex == index,
+ onSwipe = { swipedIndex = index },
+ onReset = { if (swipedIndex == index) swipedIndex = -1 },
+ onButtonClick = {
+ navController.navigate(route = Routes.MenuFolderDetail)
}
+ )
+ }
+
+ item {
+ AddButton(
+ stringResource(R.string.add_menu_folder),
+ modifier = Modifier
+ ) {
+ // TODO: 버튼 누르면 메뉴판 추가 페이지로 이동
}
}
}
-// }
+ }
}
@Preview(showBackground = true)
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/viewmodel/MenuFolderViewModel.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/viewmodel/MenuFolderViewModel.kt
index e6ec22f1..8f753473 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/viewmodel/MenuFolderViewModel.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/viewmodel/MenuFolderViewModel.kt
@@ -1,5 +1,6 @@
package com.kuit.ourmenu.ui.menuFolder.viewmodel
+import android.util.Log
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.kuit.ourmenu.data.model.menuFolder.response.MenuFolderResponse
@@ -13,7 +14,7 @@ import javax.inject.Inject
@HiltViewModel
class MenuFolderViewModel @Inject constructor(
private val menuFolderRepository: MenuFolderRepository
-): ViewModel() {
+) : ViewModel() {
private val _menuFolders = MutableStateFlow>(emptyList())
val menuFolders = _menuFolders.asStateFlow()
@@ -23,9 +24,6 @@ class MenuFolderViewModel @Inject constructor(
private val _isLoading = MutableStateFlow(false)
val isLoading = _isLoading.asStateFlow()
-// val menuFolders = mutableStateListOf()
-// private val isLoading = mutableStateOf(false)
-// private val errorMessage = mutableStateOf(null)
init {
getMenuFolders()
@@ -37,14 +35,18 @@ class MenuFolderViewModel @Inject constructor(
_error.value = null
menuFolderRepository.getMenuFolders()
- .onSuccess { response ->
- if (response != null) {
- _menuFolders.value = response.sortedBy { it.index }
+ .fold(
+ onSuccess = { response ->
+ if (response != null) {
+ _menuFolders.value = response.sortedBy { it.index }
+ Log.d("test", _menuFolders.value.toString())
+ }
+ },
+ onFailure = { throwable ->
+ _error.value = throwable.message ?: "메뉴 폴더를 불러오는 중 오류가 발생했습니다."
+ Log.d("test2", _error.value.toString())
}
- }
- .onFailure { throwable ->
- _error.value = throwable.message ?: "메뉴 폴더를 불러오는 중 오류가 발생했습니다."
- }
+ )
_isLoading.value = false
}
From 681692961dc2045b03d4aa7141d87098e55d66d7 Mon Sep 17 00:00:00 2001
From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com>
Date: Sun, 30 Mar 2025 18:37:33 +0900
Subject: [PATCH 27/27] =?UTF-8?q?[fix]:=20=EB=B2=84=EC=A0=84=20=EB=B0=94?=
=?UTF-8?q?=EB=80=90=EA=B1=B0=20=EB=90=98=EB=8F=8C=EB=A6=AC=EA=B8=B0=20(#5?=
=?UTF-8?q?0)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
gradle/libs.versions.toml | 2 +-
gradle/wrapper/gradle-wrapper.properties | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 8de6174e..7469bb5d 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -1,5 +1,5 @@
[versions]
-agp = "8.8.2"
+agp = "8.7.3"
converterGson = "2.11.0"
hiltAndroid = "2.52"
hiltNavigationCompose = "1.2.0"
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 14adae71..7bc793cb 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
#Fri Dec 27 14:17:39 KST 2024
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists