Skip to content

Commit 070b7a2

Browse files
committed
[BOOK-188] feat: 내 기록 모음이 존재하지 않을 때 EmptyView 추가
1 parent 1b2236b commit 070b7a2

File tree

3 files changed

+69
-17
lines changed

3 files changed

+69
-17
lines changed

feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/BookDetailUi.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,13 @@ internal fun BookDetailContent(
225225
modifier = Modifier.weight(2.34f),
226226
)
227227
}
228-
CollectedSeed(state = state)
228+
229+
if (state.recordCollections.isEmpty()) {
230+
Spacer(modifier = Modifier.height(ReedTheme.spacing.spacing10))
231+
} else {
232+
CollectedSeed(state = state)
233+
}
234+
229235
ReedDivider()
230236
RecordsCollection(state = state)
231237
}

feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/component/RecordsCollection.kt

Lines changed: 61 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,26 @@ package com.ninecraft.booket.feature.detail.book.component
22

33
import androidx.compose.foundation.clickable
44
import androidx.compose.foundation.layout.Arrangement
5+
import androidx.compose.foundation.layout.Box
56
import androidx.compose.foundation.layout.PaddingValues
67
import androidx.compose.foundation.layout.Spacer
78
import androidx.compose.foundation.layout.fillMaxWidth
89
import androidx.compose.foundation.layout.height
910
import androidx.compose.foundation.layout.padding
1011
import androidx.compose.foundation.lazy.LazyColumn
12+
import androidx.compose.material3.Text
1113
import androidx.compose.runtime.Composable
14+
import androidx.compose.ui.Alignment
1215
import androidx.compose.ui.Modifier
16+
import androidx.compose.ui.res.stringResource
17+
import androidx.compose.ui.text.style.TextAlign
1318
import androidx.compose.ui.unit.dp
1419
import com.ninecraft.booket.core.designsystem.ComponentPreview
1520
import com.ninecraft.booket.core.designsystem.theme.ReedTheme
21+
import com.ninecraft.booket.feature.detail.R
1622
import com.ninecraft.booket.feature.detail.book.BookDetailUiEvent
1723
import com.ninecraft.booket.feature.detail.book.BookDetailUiState
24+
import kotlinx.collections.immutable.persistentListOf
1825
import 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
62107
private fun RecordsCollectionPreview() {

feature/detail/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@
88
<string name="record_sort_title">정렬</string>
99
<string name="record_collection">내 기록 모음</string>
1010
<string name="collected_seed_title">내가 모은 씨앗</string>
11+
<string name="records_collection_empty">첫 기록을 남겨 보세요!\n나만의 아카이브를 만들 수 있어요.</string>
1112
</resources>

0 commit comments

Comments
 (0)