Skip to content

Commit 8875c7b

Browse files
committed
✨ 컴포즈로 커스텀 Dialog 및 DropDownMenu 추가
1 parent 1e79db9 commit 8875c7b

File tree

2 files changed

+181
-0
lines changed

2 files changed

+181
-0
lines changed
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
package com.whyranoid.presentation.compose
2+
3+
import androidx.compose.foundation.layout.wrapContentSize
4+
import androidx.compose.material.Button
5+
import androidx.compose.material.DropdownMenu
6+
import androidx.compose.material.DropdownMenuItem
7+
import androidx.compose.material.Text
8+
import androidx.compose.runtime.Composable
9+
import androidx.compose.runtime.getValue
10+
import androidx.compose.runtime.mutableStateOf
11+
import androidx.compose.runtime.remember
12+
import androidx.compose.runtime.setValue
13+
import androidx.compose.ui.Modifier
14+
15+
@Composable
16+
fun DateDropDownMenu(
17+
selectedDate: String,
18+
onDateSelected: (String) -> Unit
19+
) {
20+
val dateList = "월 화 수 목 금 토 일".split(" ").toList()
21+
var isDropDownMenuExpanded by remember { mutableStateOf(false) }
22+
Button(
23+
onClick = { isDropDownMenuExpanded = true }
24+
) {
25+
Text(text = selectedDate)
26+
}
27+
28+
DropdownMenu(
29+
modifier = Modifier
30+
.wrapContentSize(),
31+
expanded = isDropDownMenuExpanded,
32+
onDismissRequest = { isDropDownMenuExpanded = false }
33+
) {
34+
dateList.forEach { date ->
35+
DropdownMenuItem(onClick = {
36+
onDateSelected(date)
37+
isDropDownMenuExpanded = false
38+
}) {
39+
Text(text = date)
40+
}
41+
}
42+
}
43+
}
44+
45+
@Composable
46+
fun HourDropDownMenu(
47+
selectedHour: String,
48+
onHourSelected: (String) -> Unit
49+
) {
50+
val hourList =
51+
"0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23".split(" ").toList()
52+
var isDropDownMenuExpanded by remember { mutableStateOf(false) }
53+
Button(
54+
onClick = { isDropDownMenuExpanded = true }
55+
) {
56+
Text(text = selectedHour)
57+
}
58+
59+
DropdownMenu(
60+
modifier = Modifier
61+
.wrapContentSize(),
62+
expanded = isDropDownMenuExpanded,
63+
onDismissRequest = { isDropDownMenuExpanded = false }
64+
) {
65+
hourList.forEach { hour ->
66+
DropdownMenuItem(onClick = {
67+
onHourSelected(hour)
68+
isDropDownMenuExpanded = false
69+
}) {
70+
Text(text = hour)
71+
}
72+
}
73+
}
74+
}
75+
76+
@Composable
77+
fun MinuteDropDownMenu(
78+
selectedMinute: String,
79+
onMinuteSelected: (String) -> Unit
80+
) {
81+
val minuteList =
82+
"0 5 10 15 20 25 30 35 40 45 50 55 60".split(" ").toList()
83+
var isDropDownMenuExpanded by remember { mutableStateOf(false) }
84+
85+
Button(
86+
onClick = { isDropDownMenuExpanded = true }
87+
) {
88+
Text(text = selectedMinute)
89+
}
90+
91+
DropdownMenu(
92+
modifier = Modifier
93+
.wrapContentSize(),
94+
expanded = isDropDownMenuExpanded,
95+
onDismissRequest = { isDropDownMenuExpanded = false }
96+
) {
97+
minuteList.forEach { minute ->
98+
DropdownMenuItem(onClick = {
99+
onMinuteSelected(minute)
100+
isDropDownMenuExpanded = false
101+
}) {
102+
Text(text = minute)
103+
}
104+
}
105+
}
106+
}
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package com.whyranoid.presentation.compose
2+
3+
import androidx.compose.foundation.layout.Column
4+
import androidx.compose.foundation.layout.Spacer
5+
import androidx.compose.foundation.layout.padding
6+
import androidx.compose.material.AlertDialog
7+
import androidx.compose.material.Text
8+
import androidx.compose.material.TextButton
9+
import androidx.compose.runtime.Composable
10+
import androidx.compose.runtime.getValue
11+
import androidx.compose.runtime.mutableStateOf
12+
import androidx.compose.runtime.remember
13+
import androidx.compose.runtime.setValue
14+
import androidx.compose.ui.Modifier
15+
import androidx.compose.ui.unit.dp
16+
import com.whyranoid.presentation.community.group.CreateGroupViewModel
17+
18+
@Composable
19+
fun RulePicker(
20+
declarationDialogState: Boolean,
21+
viewModel: CreateGroupViewModel
22+
) {
23+
var selectedDate by remember { mutableStateOf("요일") }
24+
var selectedHour by remember { mutableStateOf("시간") }
25+
var selectedMinute by remember { mutableStateOf("") }
26+
if (declarationDialogState) {
27+
AlertDialog(
28+
onDismissRequest = {
29+
viewModel.onDialogDismiss()
30+
},
31+
title = {
32+
Text(text = "요일 및 시간을 골라주세요!!")
33+
},
34+
text = {
35+
Column {
36+
DateDropDownMenu(selectedDate) { date ->
37+
selectedDate = date
38+
}
39+
Spacer(modifier = Modifier.padding(bottom = 10.dp))
40+
HourDropDownMenu(selectedHour) { hour ->
41+
selectedHour = hour
42+
}
43+
Spacer(modifier = Modifier.padding(bottom = 10.dp))
44+
MinuteDropDownMenu(selectedMinute) { minute ->
45+
selectedMinute = minute
46+
}
47+
}
48+
},
49+
confirmButton = {
50+
TextButton(
51+
onClick = {
52+
viewModel.onDialogConfirm(selectedDate, selectedHour, selectedMinute)
53+
selectedDate = "요일"
54+
selectedHour = "시간"
55+
selectedMinute = ""
56+
}
57+
) {
58+
Text("확인")
59+
}
60+
},
61+
dismissButton = {
62+
TextButton(
63+
onClick = {
64+
viewModel.onDialogDismiss()
65+
selectedDate = "요일"
66+
selectedHour = "시간"
67+
selectedMinute = ""
68+
}
69+
) {
70+
Text("취소")
71+
}
72+
}
73+
)
74+
}
75+
}

0 commit comments

Comments
 (0)