1
1
package com.cornellappdev.scoop.ui.components.search
2
2
3
+ import androidx.compose.foundation.background
3
4
import androidx.compose.foundation.layout.*
5
+ import androidx.compose.foundation.shape.RoundedCornerShape
6
+ import androidx.compose.material.ButtonDefaults
4
7
import androidx.compose.material.Text
8
+ import androidx.compose.material.TextButton
5
9
import androidx.compose.material.icons.Icons
6
10
import androidx.compose.material.icons.filled.CalendarToday
7
11
import androidx.compose.material.icons.filled.NearMe
@@ -10,24 +14,48 @@ import androidx.compose.runtime.Composable
10
14
import androidx.compose.runtime.mutableStateOf
11
15
import androidx.compose.runtime.saveable.rememberSaveable
12
16
import androidx.compose.ui.Alignment
17
+ import androidx.compose.ui.Alignment.Companion.Center
13
18
import androidx.compose.ui.Modifier
14
19
import androidx.compose.ui.graphics.Color
15
20
import androidx.compose.ui.res.stringResource
16
21
import androidx.compose.ui.text.TextStyle
22
+ import androidx.compose.ui.text.font.FontWeight.Companion.Bold
17
23
import androidx.compose.ui.text.style.TextAlign
18
24
import androidx.compose.ui.unit.dp
19
25
import androidx.compose.ui.unit.sp
20
26
import com.cornellappdev.scoop.R
21
27
import com.cornellappdev.scoop.ui.components.general.CityPicker
22
28
import com.cornellappdev.scoop.ui.components.general.DatePicker
29
+ import com.cornellappdev.scoop.ui.theme.Green
23
30
import com.cornellappdev.scoop.ui.theme.PlaceholderGray
31
+ import com.cornellappdev.scoop.ui.theme.typography
32
+ import com.cornellappdev.scoop.ui.viewmodel.SearchScreenViewModel
24
33
34
+ /* *
35
+ * Displays the first page of search including departure location, arrival location, and date
36
+ */
25
37
@Composable
26
- fun SearchFirstPage () {
38
+ fun SearchFirstPage (
39
+ onProceedClicked : () -> Unit ,
40
+ searchScreenViewModel : SearchScreenViewModel
41
+ ) {
27
42
val departureLocation = rememberSaveable { mutableStateOf(" " ) }
28
43
val arrivalLocation = rememberSaveable { mutableStateOf(" " ) }
29
44
val dateText = rememberSaveable { mutableStateOf(" " ) }
30
45
46
+ val proceedEnabled = rememberSaveable {
47
+ mutableStateOf(
48
+ searchScreenViewModel.search.departureLocationName != null
49
+ && searchScreenViewModel.search.arrivalLocationName != null
50
+ && searchScreenViewModel.search.departureDate != null
51
+ )
52
+ }
53
+ val updateProceedEnabled = {
54
+ proceedEnabled.value = searchScreenViewModel.search.departureLocationName != null
55
+ && searchScreenViewModel.search.arrivalLocationName != null
56
+ && searchScreenViewModel.search.departureDate != null
57
+ }
58
+
31
59
Column (
32
60
modifier = Modifier
33
61
.fillMaxWidth()
@@ -42,15 +70,19 @@ fun SearchFirstPage() {
42
70
textAlign = TextAlign .Center
43
71
)
44
72
Spacer (
45
- modifier = Modifier .height(120 .dp)
73
+ modifier = Modifier .height(150 .dp)
46
74
)
47
75
CityPicker (
48
76
cityState = departureLocation,
49
77
placeholder = " Departure location" ,
50
78
placeholderColor = PlaceholderGray ,
51
79
icon = Icons .Filled .NearMe ,
52
80
disableDivider = true
53
- )
81
+ ) { name, id ->
82
+ searchScreenViewModel.setDepartureName(name)
83
+ searchScreenViewModel.setDeparturePlaceId(id)
84
+ updateProceedEnabled()
85
+ }
54
86
Spacer (
55
87
modifier = Modifier .height(24 .dp)
56
88
)
@@ -60,7 +92,11 @@ fun SearchFirstPage() {
60
92
placeholderColor = PlaceholderGray ,
61
93
icon = Icons .Filled .Place ,
62
94
disableDivider = true
63
- )
95
+ ) { name, id ->
96
+ searchScreenViewModel.setArrivalName(name)
97
+ searchScreenViewModel.setArrivalPlaceId(id)
98
+ updateProceedEnabled()
99
+ }
64
100
Spacer (
65
101
modifier = Modifier .height(24 .dp)
66
102
)
@@ -71,9 +107,36 @@ fun SearchFirstPage() {
71
107
disableDivider = true ,
72
108
) {
73
109
dateText.value = it
110
+ searchScreenViewModel.setDepartureDate(it)
111
+ updateProceedEnabled()
74
112
}
75
113
Spacer (
76
114
modifier = Modifier .height(71 .dp)
77
115
)
116
+ TextButton (
117
+ onClick = onProceedClicked,
118
+ modifier = Modifier
119
+ .fillMaxWidth()
120
+ .height(50 .dp)
121
+ .padding(horizontal = 8 .dp)
122
+ .background(Green , RoundedCornerShape (25 .dp)),
123
+ shape = RoundedCornerShape (25 .dp),
124
+ colors = ButtonDefaults .buttonColors(
125
+ backgroundColor = Green ,
126
+ disabledBackgroundColor = Color (0xFFDBE5DF )
127
+ ),
128
+ enabled = proceedEnabled.value
129
+ ) {
130
+ Box (modifier = Modifier .fillMaxSize()) {
131
+ Text (
132
+ text = " Find Trips" ,
133
+ style = typography.body1,
134
+ color = Color .White ,
135
+ fontWeight = Bold ,
136
+ modifier = Modifier .align(Center ),
137
+ textAlign = TextAlign .Center
138
+ )
139
+ }
140
+ }
78
141
}
79
142
}
0 commit comments