Skip to content

Commit 7a650da

Browse files
committed
[BOOK-481] refactor: detail.stability check stable
1 parent 0654c04 commit 7a650da

4 files changed

Lines changed: 58 additions & 336 deletions

File tree

core/model/src/main/kotlin/com/ninecraft/booket/core/model/ReadingRecordsModel.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.ninecraft.booket.core.model
22

3-
import androidx.compose.runtime.Stable
3+
import androidx.compose.runtime.Immutable
44

55
data class ReadingRecordsModel(
66
val lastPage: Boolean = true,
@@ -10,7 +10,7 @@ data class ReadingRecordsModel(
1010
val readingRecords: List<ReadingRecordModel> = emptyList(),
1111
)
1212

13-
@Stable
13+
@Immutable
1414
data class ReadingRecordModel(
1515
val id: String = "",
1616
val userBookId: String = "",

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

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -374,7 +374,7 @@ internal fun BookDetailContent(
374374

375375
@ComponentPreview
376376
@Composable
377-
private fun BookDetailPreview() {
377+
private fun BookDetailEmptyPreview() {
378378
ReedTheme {
379379
BookDetailUi(
380380
state = BookDetailUiState(
@@ -394,7 +394,7 @@ private fun BookDetailPreview() {
394394

395395
@ComponentPreview
396396
@Composable
397-
private fun BookDetailWithSeedsPreview() {
397+
private fun BookDetailSeedStatsPreview() {
398398
ReedTheme {
399399
BookDetailUi(
400400
state = BookDetailUiState(
@@ -444,3 +444,57 @@ private fun BookDetailWithSeedsPreview() {
444444
)
445445
}
446446
}
447+
448+
@ComponentPreview
449+
@Composable
450+
private fun BookDetailSeedsStatsExpandedPreview() {
451+
ReedTheme {
452+
BookDetailUi(
453+
state = BookDetailUiState(
454+
uiState = UiState.Success,
455+
bookDetail = BookDetailModel(
456+
title = "데미안",
457+
author = "헤르만 헤세",
458+
publisher = "민음사",
459+
pubDate = "2023-01-01",
460+
coverImageUrl = "",
461+
),
462+
seedsStats = persistentListOf(
463+
EmotionModel(name = Emotion.WARM, count = 5),
464+
EmotionModel(name = Emotion.JOY, count = 3),
465+
EmotionModel(name = Emotion.SAD, count = 2),
466+
EmotionModel(name = Emotion.INSIGHT, count = 7),
467+
),
468+
isStatsExpanded = true,
469+
readingRecords = persistentListOf(
470+
ReadingRecordModel(
471+
id = "1",
472+
pageNumber = 42,
473+
quote = "새는 알에서 나오려고 투쟁한다. 알은 세계이다.",
474+
review = "정말 인상 깊은 구절이었다.",
475+
emotionTags = listOf("깨달음", "따뜻함"),
476+
createdAt = "2024-01-15T10:30:00.000000",
477+
),
478+
ReadingRecordModel(
479+
id = "2",
480+
pageNumber = 78,
481+
quote = "나는 더 이상 꿈을 꾸지 않으려 했다.",
482+
review = "성장통을 느끼는 부분",
483+
emotionTags = listOf("슬픔"),
484+
createdAt = "2024-01-20T14:20:00.000000",
485+
),
486+
ReadingRecordModel(
487+
id = "3",
488+
pageNumber = 156,
489+
quote = "운명과 성향은 같은 개념의 두 이름이다.",
490+
review = "내 삶을 돌아보게 되었다.",
491+
emotionTags = listOf("깨달음", "즐거움"),
492+
createdAt = "2024-01-25T09:15:00.000000",
493+
),
494+
),
495+
readingRecordsTotalCount = 3,
496+
eventSink = {},
497+
),
498+
)
499+
}
500+
}

feature/detail/stability/detail.stability

Lines changed: 0 additions & 267 deletions
Original file line numberDiff line numberDiff line change
@@ -28,126 +28,6 @@ internal fun com.ninecraft.booket.feature.detail.book.BookDetailUi(state: com.ni
2828
- state: STABLE (class with no mutable properties)
2929
- modifier: STABLE (marked @Stable or @Immutable)
3030

31-
@Composable
32-
internal fun com.ninecraft.booket.feature.detail.book.HandleBookDetailSideEffects(state: com.ninecraft.booket.feature.detail.book.BookDetailUiState, eventSink: kotlin.Function1<com.ninecraft.booket.feature.detail.book.BookDetailUiEvent, kotlin.Unit>): kotlin.Unit
33-
skippable: true
34-
restartable: true
35-
params:
36-
- state: STABLE (class with no mutable properties)
37-
- eventSink: STABLE (function type)
38-
39-
@Composable
40-
internal fun com.ninecraft.booket.feature.detail.book.component.BookItem(bookDetail: com.ninecraft.booket.core.model.BookDetailModel, modifier: androidx.compose.ui.Modifier): kotlin.Unit
41-
skippable: true
42-
restartable: true
43-
params:
44-
- bookDetail: STABLE (marked @Stable or @Immutable)
45-
- modifier: STABLE (marked @Stable or @Immutable)
46-
47-
@Composable
48-
public fun com.ninecraft.booket.feature.detail.book.component.BookStatusItem(item: com.ninecraft.booket.core.common.constants.BookStatus, selected: kotlin.Boolean, onClick: kotlin.Function0<kotlin.Unit>, modifier: androidx.compose.ui.Modifier): kotlin.Unit
49-
skippable: true
50-
restartable: true
51-
params:
52-
- item: STABLE (class with no mutable properties)
53-
- selected: STABLE (primitive type)
54-
- onClick: STABLE (function type)
55-
- modifier: STABLE (marked @Stable or @Immutable)
56-
57-
@Composable
58-
internal fun com.ninecraft.booket.feature.detail.book.component.BookUpdateBottomSheet(onDismissRequest: kotlin.Function0<kotlin.Unit>, sheetState: androidx.compose.material3.SheetState, onCloseButtonClick: kotlin.Function0<kotlin.Unit>, bookStatuses: kotlinx.collections.immutable.ImmutableList<com.ninecraft.booket.core.common.constants.BookStatus>, currentBookStatus: com.ninecraft.booket.core.common.constants.BookStatus?, selectedBookStatus: com.ninecraft.booket.core.common.constants.BookStatus, onItemSelected: kotlin.Function1<com.ninecraft.booket.core.common.constants.BookStatus, kotlin.Unit>, onBookUpdateButtonClick: kotlin.Function0<kotlin.Unit>, modifier: androidx.compose.ui.Modifier): kotlin.Unit
59-
skippable: true
60-
restartable: true
61-
params:
62-
- onDismissRequest: STABLE (function type)
63-
- sheetState: STABLE (marked @Stable or @Immutable)
64-
- onCloseButtonClick: STABLE (function type)
65-
- bookStatuses: STABLE (known stable type)
66-
- currentBookStatus: STABLE (class with no mutable properties)
67-
- selectedBookStatus: STABLE (class with no mutable properties)
68-
- onItemSelected: STABLE (function type)
69-
- onBookUpdateButtonClick: STABLE (function type)
70-
- modifier: STABLE (marked @Stable or @Immutable)
71-
72-
@Composable
73-
internal fun com.ninecraft.booket.feature.detail.book.component.CollectedSeeds(seedsStats: kotlinx.collections.immutable.ImmutableList<com.ninecraft.booket.core.model.EmotionModel>, isStatsExpanded: kotlin.Boolean, onToggleClick: kotlin.Function0<kotlin.Unit>, modifier: androidx.compose.ui.Modifier): kotlin.Unit
74-
skippable: true
75-
restartable: true
76-
params:
77-
- seedsStats: STABLE (known stable type)
78-
- isStatsExpanded: STABLE (primitive type)
79-
- onToggleClick: STABLE (function type)
80-
- modifier: STABLE (marked @Stable or @Immutable)
81-
82-
@Composable
83-
private fun com.ninecraft.booket.feature.detail.book.component.CollectedSeedsHeader(topEmotion: com.ninecraft.booket.core.model.EmotionModel?, isStatsExpanded: kotlin.Boolean, onToggleClick: kotlin.Function0<kotlin.Unit>, modifier: androidx.compose.ui.Modifier): kotlin.Unit
84-
skippable: true
85-
restartable: true
86-
params:
87-
- topEmotion: STABLE (marked @Stable or @Immutable)
88-
- isStatsExpanded: STABLE (primitive type)
89-
- onToggleClick: STABLE (function type)
90-
- modifier: STABLE (marked @Stable or @Immutable)
91-
92-
@Composable
93-
internal fun com.ninecraft.booket.feature.detail.book.component.DetailMenuBottomSheet(onDismissRequest: kotlin.Function0<kotlin.Unit>, sheetState: androidx.compose.material3.SheetState, onDeleteBookClick: kotlin.Function0<kotlin.Unit>, modifier: androidx.compose.ui.Modifier): kotlin.Unit
94-
skippable: true
95-
restartable: true
96-
params:
97-
- onDismissRequest: STABLE (function type)
98-
- sheetState: STABLE (marked @Stable or @Immutable)
99-
- onDeleteBookClick: STABLE (function type)
100-
- modifier: STABLE (marked @Stable or @Immutable)
101-
102-
@Composable
103-
private fun com.ninecraft.booket.feature.detail.book.component.DetailMenuItem(iconResId: kotlin.Int, iconDescription: kotlin.String, label: kotlin.String, color: androidx.compose.ui.graphics.Color, onClick: kotlin.Function0<kotlin.Unit>, modifier: androidx.compose.ui.Modifier): kotlin.Unit
104-
skippable: true
105-
restartable: true
106-
params:
107-
- iconResId: STABLE (primitive type)
108-
- iconDescription: STABLE (String is immutable)
109-
- label: STABLE (String is immutable)
110-
- color: STABLE (marked @Stable or @Immutable)
111-
- onClick: STABLE (function type)
112-
- modifier: STABLE (marked @Stable or @Immutable)
113-
114-
@Composable
115-
internal fun com.ninecraft.booket.feature.detail.book.component.EmotionAnalysisResultText(emotions: kotlinx.collections.immutable.ImmutableList<com.ninecraft.booket.core.model.EmotionModel>, brandColor: androidx.compose.ui.graphics.Color, secondaryColor: androidx.compose.ui.graphics.Color, emotionTextStyle: androidx.compose.ui.text.TextStyle, regularTextStyle: androidx.compose.ui.text.TextStyle): androidx.compose.ui.text.AnnotatedString?
116-
skippable: true
117-
restartable: true
118-
params:
119-
- emotions: STABLE (known stable type)
120-
- brandColor: STABLE (marked @Stable or @Immutable)
121-
- secondaryColor: STABLE (marked @Stable or @Immutable)
122-
- emotionTextStyle: STABLE (marked @Stable or @Immutable)
123-
- regularTextStyle: STABLE (marked @Stable or @Immutable)
124-
125-
@Composable
126-
private fun com.ninecraft.booket.feature.detail.book.component.EmotionRatioBar(seedsStats: kotlinx.collections.immutable.ImmutableList<com.ninecraft.booket.core.model.EmotionModel>, modifier: androidx.compose.ui.Modifier): kotlin.Unit
127-
skippable: true
128-
restartable: true
129-
params:
130-
- seedsStats: STABLE (known stable type)
131-
- modifier: STABLE (marked @Stable or @Immutable)
132-
133-
@Composable
134-
private fun com.ninecraft.booket.feature.detail.book.component.EmotionStatCard(emotion: com.ninecraft.booket.core.model.EmotionModel, modifier: androidx.compose.ui.Modifier): kotlin.Unit
135-
skippable: true
136-
restartable: true
137-
params:
138-
- emotion: STABLE (marked @Stable or @Immutable)
139-
- modifier: STABLE (marked @Stable or @Immutable)
140-
141-
@Composable
142-
internal fun com.ninecraft.booket.feature.detail.book.component.ReadingRecordsHeader(totalCount: kotlin.Int, currentRecordSort: com.ninecraft.booket.feature.detail.book.RecordSort, onReadingRecordClick: kotlin.Function0<kotlin.Unit>, modifier: androidx.compose.ui.Modifier): kotlin.Unit
143-
skippable: true
144-
restartable: true
145-
params:
146-
- totalCount: STABLE (primitive type)
147-
- currentRecordSort: STABLE (class with no mutable properties)
148-
- onReadingRecordClick: STABLE (function type)
149-
- modifier: STABLE (marked @Stable or @Immutable)
150-
15131
@Composable
15232
internal fun com.ninecraft.booket.feature.detail.book.component.RecordItem(recordInfo: com.ninecraft.booket.core.model.ReadingRecordModel, onRecordClick: kotlin.Function0<kotlin.Unit>, onRecordMenuClick: kotlin.Function1<com.ninecraft.booket.core.model.ReadingRecordModel, kotlin.Unit>, modifier: androidx.compose.ui.Modifier): kotlin.Unit
15333
skippable: true
@@ -158,150 +38,3 @@ internal fun com.ninecraft.booket.feature.detail.book.component.RecordItem(recor
15838
- onRecordMenuClick: STABLE (function type)
15939
- modifier: STABLE (marked @Stable or @Immutable)
16040

161-
@Composable
162-
internal fun com.ninecraft.booket.feature.detail.book.component.RecordSortBottomSheet(onDismissRequest: kotlin.Function0<kotlin.Unit>, sheetState: androidx.compose.material3.SheetState, onCloseButtonClick: kotlin.Function0<kotlin.Unit>, recordSortItems: kotlinx.collections.immutable.ImmutableList<com.ninecraft.booket.feature.detail.book.RecordSort>, currentRecordSort: com.ninecraft.booket.feature.detail.book.RecordSort, onItemSelected: kotlin.Function1<com.ninecraft.booket.feature.detail.book.RecordSort, kotlin.Unit>, modifier: androidx.compose.ui.Modifier): kotlin.Unit
163-
skippable: true
164-
restartable: true
165-
params:
166-
- onDismissRequest: STABLE (function type)
167-
- sheetState: STABLE (marked @Stable or @Immutable)
168-
- onCloseButtonClick: STABLE (function type)
169-
- recordSortItems: STABLE (known stable type)
170-
- currentRecordSort: STABLE (class with no mutable properties)
171-
- onItemSelected: STABLE (function type)
172-
- modifier: STABLE (marked @Stable or @Immutable)
173-
174-
@Composable
175-
public fun com.ninecraft.booket.feature.detail.book.component.RecordSortItem(item: com.ninecraft.booket.feature.detail.book.RecordSort, selected: kotlin.Boolean, onClick: kotlin.Function0<kotlin.Unit>, modifier: androidx.compose.ui.Modifier): kotlin.Unit
176-
skippable: true
177-
restartable: true
178-
params:
179-
- item: STABLE (class with no mutable properties)
180-
- selected: STABLE (primitive type)
181-
- onClick: STABLE (function type)
182-
- modifier: STABLE (marked @Stable or @Immutable)
183-
184-
@Composable
185-
internal fun com.ninecraft.booket.feature.detail.book.component.SeedItem(emotion: com.ninecraft.booket.core.model.EmotionModel, modifier: androidx.compose.ui.Modifier): kotlin.Unit
186-
skippable: true
187-
restartable: true
188-
params:
189-
- emotion: STABLE (marked @Stable or @Immutable)
190-
- modifier: STABLE (marked @Stable or @Immutable)
191-
192-
@Composable
193-
internal fun com.ninecraft.booket.feature.detail.card.HandleRecordCardSideEffects(state: com.ninecraft.booket.feature.detail.card.RecordCardUiState, recordCardGraphicsLayer: androidx.compose.ui.graphics.layer.GraphicsLayer, eventSink: kotlin.Function1<com.ninecraft.booket.feature.detail.card.RecordCardUiEvent, kotlin.Unit>): kotlin.Unit
194-
skippable: false
195-
restartable: true
196-
params:
197-
- state: STABLE (class with no mutable properties)
198-
- recordCardGraphicsLayer: UNSTABLE (has mutable properties or unstable members)
199-
- eventSink: STABLE (function type)
200-
201-
@Composable
202-
public fun com.ninecraft.booket.feature.detail.card.RecordCardPresenter.present(): com.ninecraft.booket.feature.detail.card.RecordCardUiState
203-
skippable: true
204-
restartable: true
205-
params:
206-
207-
@Composable
208-
internal fun com.ninecraft.booket.feature.detail.card.RecordCardUi(state: com.ninecraft.booket.feature.detail.card.RecordCardUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit
209-
skippable: true
210-
restartable: true
211-
params:
212-
- state: STABLE (class with no mutable properties)
213-
- modifier: STABLE (marked @Stable or @Immutable)
214-
215-
@Composable
216-
internal fun com.ninecraft.booket.feature.detail.card.component.RecordCard(quote: kotlin.String, bookTitle: kotlin.String, emotion: kotlin.String, modifier: androidx.compose.ui.Modifier): kotlin.Unit
217-
skippable: true
218-
restartable: true
219-
params:
220-
- quote: STABLE (String is immutable)
221-
- bookTitle: STABLE (String is immutable)
222-
- emotion: STABLE (String is immutable)
223-
- modifier: STABLE (marked @Stable or @Immutable)
224-
225-
@Composable
226-
internal fun com.ninecraft.booket.feature.detail.record.HandleRecordDetailSideEffects(state: com.ninecraft.booket.feature.detail.record.RecordDetailUiState): kotlin.Unit
227-
skippable: true
228-
restartable: true
229-
params:
230-
- state: STABLE (class with no mutable properties)
231-
232-
@Composable
233-
private fun com.ninecraft.booket.feature.detail.record.RecordDetailContent(state: com.ninecraft.booket.feature.detail.record.RecordDetailUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit
234-
skippable: true
235-
restartable: true
236-
params:
237-
- state: STABLE (class with no mutable properties)
238-
- modifier: STABLE (marked @Stable or @Immutable)
239-
240-
@Composable
241-
public fun com.ninecraft.booket.feature.detail.record.RecordDetailPresenter.present(): com.ninecraft.booket.feature.detail.record.RecordDetailUiState
242-
skippable: true
243-
restartable: true
244-
params:
245-
246-
@Composable
247-
internal fun com.ninecraft.booket.feature.detail.record.RecordDetailUi(state: com.ninecraft.booket.feature.detail.record.RecordDetailUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit
248-
skippable: true
249-
restartable: true
250-
params:
251-
- state: STABLE (class with no mutable properties)
252-
- modifier: STABLE (marked @Stable or @Immutable)
253-
254-
@Composable
255-
internal fun com.ninecraft.booket.feature.detail.record.component.BookItem(imageUrl: kotlin.String, bookTitle: kotlin.String, author: kotlin.String, publisher: kotlin.String, modifier: androidx.compose.ui.Modifier): kotlin.Unit
256-
skippable: true
257-
restartable: true
258-
params:
259-
- imageUrl: STABLE (String is immutable)
260-
- bookTitle: STABLE (String is immutable)
261-
- author: STABLE (String is immutable)
262-
- publisher: STABLE (String is immutable)
263-
- modifier: STABLE (marked @Stable or @Immutable)
264-
265-
@Composable
266-
internal fun com.ninecraft.booket.feature.detail.record.component.QuoteItem(quote: kotlin.String, page: kotlin.Int, modifier: androidx.compose.ui.Modifier): kotlin.Unit
267-
skippable: true
268-
restartable: true
269-
params:
270-
- quote: STABLE (String is immutable)
271-
- page: STABLE (primitive type)
272-
- modifier: STABLE (marked @Stable or @Immutable)
273-
274-
@Composable
275-
internal fun com.ninecraft.booket.feature.detail.record.component.RecordMenuBottomSheet(onDismissRequest: kotlin.Function0<kotlin.Unit>, sheetState: androidx.compose.material3.SheetState, onShareRecordClick: kotlin.Function0<kotlin.Unit>, onEditRecordClick: kotlin.Function0<kotlin.Unit>, onDeleteRecordClick: kotlin.Function0<kotlin.Unit>, modifier: androidx.compose.ui.Modifier): kotlin.Unit
276-
skippable: true
277-
restartable: true
278-
params:
279-
- onDismissRequest: STABLE (function type)
280-
- sheetState: STABLE (marked @Stable or @Immutable)
281-
- onShareRecordClick: STABLE (function type)
282-
- onEditRecordClick: STABLE (function type)
283-
- onDeleteRecordClick: STABLE (function type)
284-
- modifier: STABLE (marked @Stable or @Immutable)
285-
286-
@Composable
287-
private fun com.ninecraft.booket.feature.detail.record.component.RecordMenuItem(iconResId: kotlin.Int, iconDescription: kotlin.String, label: kotlin.String, color: androidx.compose.ui.graphics.Color, onClick: kotlin.Function0<kotlin.Unit>, modifier: androidx.compose.ui.Modifier): kotlin.Unit
288-
skippable: true
289-
restartable: true
290-
params:
291-
- iconResId: STABLE (primitive type)
292-
- iconDescription: STABLE (String is immutable)
293-
- label: STABLE (String is immutable)
294-
- color: STABLE (marked @Stable or @Immutable)
295-
- onClick: STABLE (function type)
296-
- modifier: STABLE (marked @Stable or @Immutable)
297-
298-
@Composable
299-
internal fun com.ninecraft.booket.feature.detail.record.component.ReviewItem(emotion: kotlin.String, createdAt: kotlin.String, review: kotlin.String, modifier: androidx.compose.ui.Modifier): kotlin.Unit
300-
skippable: true
301-
restartable: true
302-
params:
303-
- emotion: STABLE (String is immutable)
304-
- createdAt: STABLE (String is immutable)
305-
- review: STABLE (String is immutable)
306-
- modifier: STABLE (marked @Stable or @Immutable)
307-

0 commit comments

Comments
 (0)