@@ -4,14 +4,30 @@ import androidx.lifecycle.SavedStateHandle
44import com.xiaoyv.bangumi.core_resource.resources.Res
55import com.xiaoyv.bangumi.core_resource.resources.collect_cancel_success
66import com.xiaoyv.bangumi.core_resource.resources.collect_success
7+ import com.xiaoyv.bangumi.core_resource.resources.global_anime
8+ import com.xiaoyv.bangumi.core_resource.resources.global_blog
9+ import com.xiaoyv.bangumi.core_resource.resources.global_book
10+ import com.xiaoyv.bangumi.core_resource.resources.global_character
11+ import com.xiaoyv.bangumi.core_resource.resources.global_episode
12+ import com.xiaoyv.bangumi.core_resource.resources.global_game
13+ import com.xiaoyv.bangumi.core_resource.resources.global_group_topic
14+ import com.xiaoyv.bangumi.core_resource.resources.global_music
15+ import com.xiaoyv.bangumi.core_resource.resources.global_person
16+ import com.xiaoyv.bangumi.core_resource.resources.global_real
17+ import com.xiaoyv.bangumi.core_resource.resources.global_subject_topic
718import com.xiaoyv.bangumi.features.index.detail.IndexDetailArguments
819import com.xiaoyv.bangumi.shared.core.mvi.BaseState
920import com.xiaoyv.bangumi.shared.core.mvi.BaseSyntax
1021import com.xiaoyv.bangumi.shared.core.mvi.BaseViewModel
22+ import com.xiaoyv.bangumi.shared.core.types.IndexCatWebTabType
1123import com.xiaoyv.bangumi.shared.core.utils.awaitAll
1224import com.xiaoyv.bangumi.shared.core.utils.errMsg
1325import com.xiaoyv.bangumi.shared.data.manager.app.UserManager
26+ import com.xiaoyv.bangumi.shared.data.model.response.bgm.ComposeIndex
1427import com.xiaoyv.bangumi.shared.data.repository.IndexRepository
28+ import com.xiaoyv.bangumi.shared.ui.component.tab.ComposeTextTab
29+ import kotlinx.collections.immutable.ImmutableList
30+ import kotlinx.collections.immutable.toImmutableList
1531import org.jetbrains.compose.resources.getString
1632
1733/* *
@@ -45,7 +61,14 @@ class IndexDetailViewModel(
4561 ).onFailure {
4662 reduceError { it }
4763 }.onSuccess {
48- reduceContent(forceRefresh = true ) { state.copy(index = it.data1.copy(isBookmarked = it.data2)) }
64+ val tabs = createTabs(it.data1)
65+
66+ reduceContent(forceRefresh = true ) {
67+ state.copy(
68+ index = it.data1.copy(isBookmarked = it.data2),
69+ tabs = tabs
70+ )
71+ }
4972 }
5073 }
5174
@@ -61,4 +84,108 @@ class IndexDetailViewModel(
6184 postToast { toast }
6285 }
6386 }
87+
88+ private suspend fun createTabs (index : ComposeIndex ): ImmutableList <ComposeTextTab <String >> {
89+ val stats = index.stats
90+ val items = mutableListOf<ComposeTextTab <String >>()
91+
92+ // items.add(
93+ // ComposeTextTab(
94+ // IndexCatWebTabType.ALL,
95+ // labelText = getString(Res.string.global_all) + " " + index.total
96+ // )
97+ // )
98+
99+ if (stats.subject.anime > 0 ) {
100+ items.add(
101+ ComposeTextTab (
102+ IndexCatWebTabType .SUBJECT_ANIME ,
103+ labelText = getString(Res .string.global_anime) + " " + stats.subject.anime
104+ )
105+ )
106+ }
107+ if (stats.subject.book > 0 ) {
108+ items.add(
109+ ComposeTextTab (
110+ IndexCatWebTabType .SUBJECT_BOOK ,
111+ labelText = getString(Res .string.global_book) + " " + stats.subject.book
112+ )
113+ )
114+ }
115+ if (stats.subject.music > 0 ) {
116+ items.add(
117+ ComposeTextTab (
118+ IndexCatWebTabType .SUBJECT_MUSIC ,
119+ labelText = getString(Res .string.global_music) + " " + stats.subject.music
120+ )
121+ )
122+ }
123+ if (stats.subject.game > 0 ) {
124+ items.add(
125+ ComposeTextTab (
126+ IndexCatWebTabType .SUBJECT_GAME ,
127+ labelText = getString(Res .string.global_game) + " " + stats.subject.game
128+ )
129+ )
130+ }
131+ if (stats.subject.real > 0 ) {
132+ items.add(
133+ ComposeTextTab (
134+ IndexCatWebTabType .SUBJECT_REAL ,
135+ labelText = getString(Res .string.global_real) + " " + stats.subject.real
136+ )
137+ )
138+ }
139+
140+ if (stats.character > 0 ) {
141+ items.add(
142+ ComposeTextTab (
143+ IndexCatWebTabType .CHARACTER ,
144+ labelText = getString(Res .string.global_character) + " " + stats.character
145+ )
146+ )
147+ }
148+ if (stats.person > 0 ) {
149+ items.add(
150+ ComposeTextTab (
151+ IndexCatWebTabType .PERSON ,
152+ labelText = getString(Res .string.global_person) + " " + stats.person
153+ )
154+ )
155+ }
156+ if (stats.episode > 0 ) {
157+ items.add(
158+ ComposeTextTab (
159+ IndexCatWebTabType .EP ,
160+ labelText = getString(Res .string.global_episode) + " " + stats.episode
161+ )
162+ )
163+ }
164+ if (stats.blog > 0 ) {
165+ items.add(
166+ ComposeTextTab (
167+ IndexCatWebTabType .BLOG ,
168+ labelText = getString(Res .string.global_blog) + " " + stats.blog
169+ )
170+ )
171+ }
172+ if (stats.groupTopic > 0 ) {
173+ items.add(
174+ ComposeTextTab (
175+ IndexCatWebTabType .TOPIC_GROUP ,
176+ labelText = getString(Res .string.global_group_topic) + " " + stats.groupTopic
177+ )
178+ )
179+ }
180+ if (stats.subjectTopic > 0 ) {
181+ items.add(
182+ ComposeTextTab (
183+ IndexCatWebTabType .TOPIC_SUBJECT ,
184+ labelText = getString(Res .string.global_subject_topic) + " " + stats.subjectTopic
185+ )
186+ )
187+ }
188+
189+ return items.toImmutableList()
190+ }
64191}
0 commit comments