@@ -16,9 +16,6 @@ import kotlinx.coroutines.flow.launchIn
1616import kotlinx.coroutines.flow.onEach
1717import org.wordpress.android.R
1818import org.wordpress.android.analytics.AnalyticsTracker.Stat
19- import org.wordpress.android.fluxc.network.rest.wpcom.site.AllDomainsDomain
20- import org.wordpress.android.fluxc.network.rest.wpcom.site.DomainStatus
21- import org.wordpress.android.fluxc.network.rest.wpcom.site.StatusType
2219import org.wordpress.android.modules.UI_THREAD
2320import org.wordpress.android.ui.domains.management.util.DomainLocalSearchEngine
2421import org.wordpress.android.ui.domains.usecases.AllDomains
@@ -28,6 +25,9 @@ import org.wordpress.android.ui.compose.theme.success
2825import org.wordpress.android.ui.compose.theme.warning
2926import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper
3027import org.wordpress.android.viewmodel.ScopedViewModel
28+ import uniffi.wp_api.AllDomainItem
29+ import uniffi.wp_api.DomainListItemStatus
30+ import uniffi.wp_api.DomainListItemStatusType
3131import java.time.LocalDate
3232import java.time.ZoneId
3333import java.util.Date
@@ -44,7 +44,8 @@ class DomainManagementViewModel @Inject constructor(
4444 private val _actionEvents = MutableSharedFlow <ActionEvent >()
4545 val actionEvents: Flow <ActionEvent > = _actionEvents
4646
47- private val _uiStateFlow : MutableStateFlow <UiState > = MutableStateFlow (UiState .PopulatedList .Initial )
47+ private val _uiStateFlow : MutableStateFlow <UiState > =
48+ MutableStateFlow (UiState .PopulatedList .Initial )
4849 val uiStateFlow = _uiStateFlow .asStateFlow()
4950
5051 private val searchQuery = MutableStateFlow (" " )
@@ -66,7 +67,8 @@ class DomainManagementViewModel @Inject constructor(
6667 _uiStateFlow .value = when (it) {
6768 AllDomains .Empty -> UiState .Empty
6869 AllDomains .Error -> UiState .Error
69- is AllDomains .Success -> UiState .PopulatedList .Loaded .Complete (it.domains)
70+ is AllDomains .Success ->
71+ UiState .PopulatedList .Loaded .Complete (it.domains)
7072 }
7173 }
7274 }
@@ -119,102 +121,107 @@ class DomainManagementViewModel @Inject constructor(
119121 }
120122
121123 sealed class ActionEvent {
122- data class DomainTapped (val domain : String , val detailUrl : String ): ActionEvent()
123- object AddDomainTapped: ActionEvent()
124- object NavigateBackTapped: ActionEvent()
124+ data class DomainTapped (
125+ val domain : String ,
126+ val detailUrl : String
127+ ) : ActionEvent()
128+ object AddDomainTapped : ActionEvent()
129+ object NavigateBackTapped : ActionEvent()
125130 }
126131
127132 sealed class UiState {
128- sealed class PopulatedList : UiState () {
129- object Initial: PopulatedList()
133+ sealed class PopulatedList : UiState () {
134+ object Initial : PopulatedList()
130135 sealed class Loaded : PopulatedList () {
131- abstract val allDomains: List <AllDomainsDomain >
136+ abstract val allDomains: List <AllDomainItem >
132137 data class Complete (
133- override val allDomains : List <AllDomainsDomain >
134- ): Loaded()
138+ override val allDomains : List <AllDomainItem >
139+ ) : Loaded()
135140 data class Filtered (
136- override val allDomains : List <AllDomainsDomain >,
137- val filtered : List <AllDomainsDomain >
141+ override val allDomains : List <AllDomainItem >,
142+ val filtered : List <AllDomainItem >
138143 ) : Loaded()
139144 }
140145 }
141- object Empty: UiState()
142- object Error: UiState()
146+ object Empty : UiState()
147+ object Error : UiState()
143148 }
144149}
145150
146151sealed class DomainCardUiState {
147- object Initial: DomainCardUiState()
152+ object Initial : DomainCardUiState()
148153 data class Loaded (
149- val domain : String? ,
150- val title : String? ,
154+ val domain : String ,
155+ val title : String ,
151156 val detailUrl : String? ,
152157 val statusUiState : StatusRowUiState ,
153- ): DomainCardUiState()
158+ ) : DomainCardUiState()
154159
155160 companion object {
156161 @Composable
157- fun fromDomain (domain : AllDomainsDomain ? ) = (domain ? : AllDomainsDomain ()).let {
158- val domainStatus = it.domainStatus ? : DomainStatus ()
159- Loaded (
160- domain = it.domain,
161- title = it.blogName,
162- detailUrl = it.getDomainDetailsUrl(),
163- statusUiState = StatusRowUiState .Loaded (
164- indicatorColor = domainStatus.indicatorColor,
165- statusText = domainStatus.statusText,
166- textColor = domainStatus.textColor,
167- isBold = domainStatus.isBold,
168- expiry = it.expiry?.toLocalDate(),
169- )
162+ fun fromDomain (domain : AllDomainItem ) = Loaded (
163+ domain = domain.domain,
164+ title = domain.blogName,
165+ detailUrl = domain.getDomainDetailsUrl(),
166+ statusUiState = StatusRowUiState .Loaded (
167+ indicatorColor = domain.domainStatus.indicatorColor,
168+ statusText = domain.domainStatus.statusText,
169+ textColor = domain.domainStatus.textColor,
170+ isBold = domain.domainStatus.isBold,
171+ expiry = domain.expiry?.toLocalDate(),
170172 )
171- }
173+ )
172174 }
173175}
174176
175177sealed class StatusRowUiState {
176- object Initial: StatusRowUiState()
178+ object Initial : StatusRowUiState()
177179 data class Loaded (
178180 val indicatorColor : Color ,
179181 val statusText : String ,
180182 val textColor : Color ,
181183 val isBold : Boolean = false ,
182184 val expiry : LocalDate ? ,
183- ): StatusRowUiState()
185+ ) : StatusRowUiState()
184186}
185187
186188private fun Date.toLocalDate (zoneId : ZoneId = ZoneId .systemDefault()) =
187189 toInstant().atZone(zoneId).toLocalDate()
188- val DomainStatus .indicatorColor
190+
191+ val DomainListItemStatus .indicatorColor
189192 @Composable
190193 get() = when (statusType) {
191- StatusType .SUCCESS -> MaterialTheme .colorScheme.success
192- StatusType .NEUTRAL -> MaterialTheme .colorScheme.neutral
193- StatusType .ALERT -> MaterialTheme .colorScheme.error
194- StatusType .WARNING -> MaterialTheme .colorScheme.warning
195- StatusType .ERROR -> MaterialTheme .colorScheme.error
196- StatusType .UNKNOWN -> MaterialTheme .colorScheme.error
197- null -> MaterialTheme .colorScheme.error
194+ is DomainListItemStatusType .Success ,
195+ is DomainListItemStatusType .Premium ->
196+ MaterialTheme .colorScheme.success
197+ is DomainListItemStatusType .Neutral ->
198+ MaterialTheme .colorScheme.neutral
199+ is DomainListItemStatusType .Alert ->
200+ MaterialTheme .colorScheme.error
201+ is DomainListItemStatusType .Warning ->
202+ MaterialTheme .colorScheme.warning
203+ is DomainListItemStatusType .Error ,
204+ is DomainListItemStatusType .Other ->
205+ MaterialTheme .colorScheme.error
198206 }
199207
200- val DomainStatus .statusText
208+ val DomainListItemStatus .statusText
201209 @Composable
202- get() = status ? : stringResource(id = R .string.error)
210+ get() = label.ifEmpty { stringResource(id = R .string.error) }
203211
204- val DomainStatus .textColor
212+ val DomainListItemStatus .textColor
205213 @Composable
206214 get() = when (statusType) {
207- StatusType . ERROR ,
208- StatusType . UNKNOWN ,
209- null -> MaterialTheme .colorScheme.error
215+ is DomainListItemStatusType . Error ,
216+ is DomainListItemStatusType . Other ->
217+ MaterialTheme .colorScheme.error
210218 else -> LocalTextStyle .current.color
211219 }
212220
213- val DomainStatus .isBold
221+ val DomainListItemStatus .isBold
214222 @Composable
215223 get() = when (statusType) {
216- StatusType .ERROR ,
217- StatusType .UNKNOWN ,
218- null -> true
224+ is DomainListItemStatusType .Error ,
225+ is DomainListItemStatusType .Other -> true
219226 else -> false
220227 }
0 commit comments