Skip to content

Commit 1533248

Browse files
committed
FIX: 제보 히스토리 UI State 수정 - 선택된 카테고리/진행 상황에 따라 해당되는 제보 목록만 표시되도록 수정
1 parent 8e0e7e9 commit 1533248

2 files changed

Lines changed: 88 additions & 50 deletions

File tree

presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/ReportHistoryScreen.kt

Lines changed: 59 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -77,69 +77,78 @@ private fun ReportHistoryScreen(
7777
)
7878
}
7979

80-
// chip list
81-
8280
Spacer(modifier = Modifier.width(8.dp))
8381
}
8482

8583
Spacer(modifier = Modifier.height(24.dp))
8684

8785
Box(
88-
modifier = Modifier.weight(1f),
86+
modifier = Modifier.fillMaxWidth().weight(1f),
8987
) {
90-
LazyColumn(
91-
modifier = Modifier.fillMaxSize(),
92-
contentPadding = PaddingValues(horizontal = 16.dp),
93-
) {
94-
state.reportHistoriesPerDays.forEach { reportHistoriesPerDay ->
95-
stickyHeader {
96-
Box(
97-
modifier = Modifier
98-
.fillMaxWidth()
99-
.height(40.dp)
100-
.background(color = BitnagilTheme.colors.coolGray99),
101-
) {
102-
Text(
103-
text = reportHistoriesPerDay.date.toString(),
104-
modifier = Modifier.align(Alignment.CenterStart),
105-
style = BitnagilTheme.typography.body2SemiBold,
106-
)
88+
if (state.filteredReportHistoriesPerDays.isNotEmpty())
89+
LazyColumn(
90+
modifier = Modifier.fillMaxSize(),
91+
contentPadding = PaddingValues(horizontal = 16.dp),
92+
) {
93+
state.reportHistoriesPerDays.forEach { reportHistoriesPerDay ->
94+
stickyHeader {
95+
Box(
96+
modifier = Modifier
97+
.fillMaxWidth()
98+
.height(40.dp)
99+
.background(color = BitnagilTheme.colors.coolGray99),
100+
) {
101+
Text(
102+
text = reportHistoriesPerDay.date.toString(),
103+
modifier = Modifier.align(Alignment.CenterStart),
104+
style = BitnagilTheme.typography.body2SemiBold,
105+
)
106+
}
107107
}
108-
}
109108

110-
itemsIndexed(reportHistoriesPerDay.reports) { index, report ->
111-
ReportHistoryItem(
112-
modifier = Modifier.padding(bottom = if (index == reportHistoriesPerDay.reports.lastIndex) 24.dp else 10.dp),
113-
report = report,
114-
onClick = {},
115-
)
109+
itemsIndexed(reportHistoriesPerDay.reports) { index, report ->
110+
ReportHistoryItem(
111+
modifier = Modifier.padding(bottom = if (index == reportHistoriesPerDay.reports.lastIndex) 24.dp else 10.dp),
112+
report = report,
113+
onClick = {},
114+
)
115+
}
116116
}
117117
}
118-
}
119-
120-
Row(
121-
verticalAlignment = Alignment.CenterVertically,
122-
horizontalArrangement = Arrangement.spacedBy(5.dp),
123-
modifier = Modifier
124-
.height(40.dp)
125-
.align(Alignment.TopEnd)
126-
.clickableWithoutRipple { },
127-
) {
128-
Text(
129-
text = "카테고리",
130-
color = BitnagilTheme.colors.coolGray40,
131-
style = BitnagilTheme.typography.body2Medium,
132-
modifier = Modifier.padding(start = 10.dp),
133-
)
118+
else
119+
Column(
120+
modifier = Modifier.align(Alignment.Center),
121+
verticalArrangement = Arrangement.spacedBy(2.dp),
122+
horizontalAlignment = Alignment.CenterHorizontally
123+
) {
124+
Text(text = "제보한 내역이 없어요.", style = BitnagilTheme.typography.subtitle1SemiBold)
125+
Text(text = "원하는 카테고리로 제보를 시작해 보세요.", style = BitnagilTheme.typography.body2Regular, color = BitnagilTheme.colors.coolGray70)
126+
}
134127

135-
BitnagilIcon(
136-
id = R.drawable.ic_down_arrow,
137-
tint = BitnagilTheme.colors.coolGray40,
128+
if (state.showCategorySelectButton)
129+
Row(
130+
verticalAlignment = Alignment.CenterVertically,
131+
horizontalArrangement = Arrangement.spacedBy(5.dp),
138132
modifier = Modifier
139-
.padding(end = 13.dp)
140-
.size(16.dp),
141-
)
142-
}
133+
.height(40.dp)
134+
.align(Alignment.TopEnd)
135+
.clickableWithoutRipple { },
136+
) {
137+
Text(
138+
text = state.selectedReportCategory?.title ?: "카테고리",
139+
color = BitnagilTheme.colors.coolGray40,
140+
style = BitnagilTheme.typography.body2Medium,
141+
modifier = Modifier.padding(start = 10.dp),
142+
)
143+
144+
BitnagilIcon(
145+
id = R.drawable.ic_down_arrow,
146+
tint = BitnagilTheme.colors.coolGray40,
147+
modifier = Modifier
148+
.padding(end = 13.dp)
149+
.size(16.dp),
150+
)
151+
}
143152
}
144153
}
145154
}

presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/model/ReportHistoryState.kt

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,33 @@ data class ReportHistoryState(
77
val selectedReportProcess: ReportProcess,
88
val reportHistoriesPerDays: List<ReportHistoriesPerDayUiModel>,
99
) {
10+
val filteredReportHistoriesPerDays: List<ReportHistoriesPerDayUiModel> = reportHistoriesPerDays
11+
.map { reportHistoriesPerDay ->
12+
reportHistoriesPerDay.copy(
13+
reports = reportHistoriesPerDay.reports.filter {
14+
val processMatched = when (selectedReportProcess) {
15+
ReportProcess.Total -> true
16+
ReportProcess.Reported -> it.process == ReportProcess.Reported
17+
ReportProcess.Progress -> it.process == ReportProcess.Progress
18+
ReportProcess.Complete -> it.process == ReportProcess.Complete
19+
}
20+
21+
val categoryMatched = when(selectedReportCategory) {
22+
ReportCategory.TrafficFacilities -> it.category == ReportCategory.TrafficFacilities
23+
ReportCategory.LightingFacilities -> it.category == ReportCategory.LightingFacilities
24+
ReportCategory.WaterFacilities -> it.category == ReportCategory.WaterFacilities
25+
ReportCategory.Amenities -> it.category == ReportCategory.Amenities
26+
null -> true
27+
}
28+
29+
processMatched && categoryMatched
30+
},
31+
)
32+
}
33+
.filter { reportHistoriesPerDay ->
34+
reportHistoriesPerDay.reports.isNotEmpty()
35+
}
36+
1037
val reportProcessWithCounts: List<ReportProcessWithCount> = listOf(
1138
ReportProcessWithCount(ReportProcess.Total, reportHistoriesPerDays.sumOf { it.reports.size }),
1239
ReportProcessWithCount(
@@ -23,6 +50,8 @@ data class ReportHistoryState(
2350
),
2451
)
2552

53+
val showCategorySelectButton: Boolean = reportHistoriesPerDays.isNotEmpty()
54+
2655
companion object {
2756
val Init = ReportHistoryState(
2857
reportProcesses = listOf(),

0 commit comments

Comments
 (0)