@@ -2,19 +2,26 @@ package com.ninecraft.booket.feature.detail.book.component
22
33import androidx.compose.foundation.clickable
44import androidx.compose.foundation.layout.Arrangement
5+ import androidx.compose.foundation.layout.Box
56import androidx.compose.foundation.layout.PaddingValues
67import androidx.compose.foundation.layout.Spacer
78import androidx.compose.foundation.layout.fillMaxWidth
89import androidx.compose.foundation.layout.height
910import androidx.compose.foundation.layout.padding
1011import androidx.compose.foundation.lazy.LazyColumn
12+ import androidx.compose.material3.Text
1113import androidx.compose.runtime.Composable
14+ import androidx.compose.ui.Alignment
1215import androidx.compose.ui.Modifier
16+ import androidx.compose.ui.res.stringResource
17+ import androidx.compose.ui.text.style.TextAlign
1318import androidx.compose.ui.unit.dp
1419import com.ninecraft.booket.core.designsystem.ComponentPreview
1520import com.ninecraft.booket.core.designsystem.theme.ReedTheme
21+ import com.ninecraft.booket.feature.detail.R
1622import com.ninecraft.booket.feature.detail.book.BookDetailUiEvent
1723import com.ninecraft.booket.feature.detail.book.BookDetailUiState
24+ import kotlinx.collections.immutable.persistentListOf
1825import kotlinx.collections.immutable.toImmutableList
1926
2027@Composable
@@ -26,8 +33,14 @@ internal fun RecordsCollection(
2633 modifier = modifier
2734 .fillMaxWidth()
2835 .padding(horizontal = ReedTheme .spacing.spacing5)
29- // contentPadding + Header + (RecordItem + padding) * size
30- .height(36 .dp + 40 .dp + (192 * state.recordCollections.size).dp),
36+ .then(
37+ if (state.recordCollections.isEmpty()) {
38+ Modifier .height(400 .dp)
39+ } else {
40+ // contentPadding + Header + (RecordItem + padding) * size
41+ Modifier .height(36 .dp + 40 .dp + (192 * state.recordCollections.size).dp)
42+ },
43+ ),
3144 contentPadding = PaddingValues (
3245 top = ReedTheme .spacing.spacing6,
3346 bottom = ReedTheme .spacing.spacing3,
@@ -39,24 +52,56 @@ internal fun RecordsCollection(
3952 RecordsCollectionHeader (state = state)
4053 Spacer (modifier = Modifier .height(ReedTheme .spacing.spacing1))
4154 }
42- items(
43- count = state.recordCollections.size,
44- key = { index -> state.recordCollections[index].id },
45- ) { index ->
46- val record = state.recordCollections[index]
47- RecordItem (
48- quote = record.quote,
49- emotionTags = record.emotionTags.toImmutableList(),
50- pageNumber = record.pageNumber,
51- createdAt = record.createdAt,
52- modifier = Modifier .clickable {
53- state.eventSink(BookDetailUiEvent .OnRecordItemClick (record.id))
54- },
55- )
55+
56+ if (state.recordCollections.isEmpty()) {
57+ item {
58+ Box (
59+ modifier = Modifier
60+ .fillMaxWidth()
61+ .height(324 .dp), // 400.dp - (contentPadding + Header)
62+ contentAlignment = Alignment .Center ,
63+ ) {
64+ Text (
65+ text = stringResource(R .string.records_collection_empty),
66+ color = ReedTheme .colors.contentSecondary,
67+ textAlign = TextAlign .Center ,
68+ style = ReedTheme .typography.body1Medium,
69+ )
70+ }
71+ }
72+ } else {
73+ items(
74+ count = state.recordCollections.size,
75+ key = { index -> state.recordCollections[index].id },
76+ ) { index ->
77+ val record = state.recordCollections[index]
78+ RecordItem (
79+ quote = record.quote,
80+ emotionTags = record.emotionTags.toImmutableList(),
81+ pageNumber = record.pageNumber,
82+ createdAt = record.createdAt,
83+ modifier = Modifier .clickable {
84+ state.eventSink(BookDetailUiEvent .OnRecordItemClick (record.id))
85+ },
86+ )
87+ }
5688 }
5789 }
5890}
5991
92+ @ComponentPreview
93+ @Composable
94+ private fun RecordsCollectionEmptyPreview () {
95+ ReedTheme {
96+ RecordsCollection (
97+ state = BookDetailUiState (
98+ recordCollections = persistentListOf(),
99+ eventSink = {},
100+ ),
101+ )
102+ }
103+ }
104+
60105@ComponentPreview
61106@Composable
62107private fun RecordsCollectionPreview () {
0 commit comments