Skip to content

[Dynamic Dashboard] Orders card #11486

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 22 commits into from
May 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ data class DashboardWidget(
POPULAR_PRODUCTS(R.string.my_store_widget_top_products_title, "top_performers"),
BLAZE(R.string.my_store_widget_blaze_title, "blaze"),
REVIEWS(R.string.my_store_widget_reviews_title, "reviews"),
ORDERS(R.string.my_store_widget_orders_title, "orders"),
}

sealed interface Status : Parcelable {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,10 @@ data class Order(
@IgnoredOnParcel
val isRefundAvailable = !isOrderFullyRefunded && quantityOfItemsWhichPossibleToRefund > 0 && isOrderPaid

@IgnoredOnParcel
val billingName
get() = getBillingName("")

val hasMultipleShippingLines: Boolean
get() = shippingLines.size > 1

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import org.wordpress.android.fluxc.model.order.ShippingLine as WCShippingLine

class OrderMapper @Inject constructor(
private val getLocations: GetLocations,
private val dateUtils: DateUtils
private val dateUtils: DateUtils,
) {
fun toAppModel(databaseEntity: OrderEntity): Order {
val metaDataList = databaseEntity.getMetaDataList()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.woocommerce.android.R

@Composable
Expand All @@ -24,26 +25,26 @@ fun WCTag(
modifier: Modifier = Modifier,
textColor: Color = colorResource(id = R.color.tag_text_main),
backgroundColor: Color = colorResource(R.color.tag_bg_main),
textStyle: TextStyle = MaterialTheme.typography.caption
textStyle: TextStyle = MaterialTheme.typography.caption,
fontWeight: FontWeight = FontWeight.Bold
) {
Box(
modifier = modifier
.clip(RoundedCornerShape(percent = 35))
.clip(RoundedCornerShape(4.dp))
.background(backgroundColor)
.padding(
start = dimensionResource(id = R.dimen.minor_50),
end = dimensionResource(id = R.dimen.minor_50),
horizontal = dimensionResource(id = R.dimen.minor_50),
)
) {
Text(
modifier = Modifier.padding(
horizontal = dimensionResource(id = R.dimen.minor_75),
vertical = dimensionResource(id = R.dimen.minor_25)
vertical = dimensionResource(id = R.dimen.minor_50)
),
text = text,
style = textStyle,
color = textColor,
fontWeight = FontWeight.Bold
fontWeight = fontWeight
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import com.woocommerce.android.ui.compose.component.WCOutlinedButton
import com.woocommerce.android.ui.dashboard.DashboardViewModel.DashboardEvent.OpenRangePicker
import com.woocommerce.android.ui.dashboard.blaze.DashboardBlazeCard
import com.woocommerce.android.ui.dashboard.onboarding.DashboardOnboardingCard
import com.woocommerce.android.ui.dashboard.orders.DashboardOrdersCard
import com.woocommerce.android.ui.dashboard.reviews.DashboardReviewsCard
import com.woocommerce.android.ui.dashboard.stats.DashboardStatsCard
import com.woocommerce.android.ui.dashboard.topperformers.DashboardTopPerformersWidgetCard
Expand Down Expand Up @@ -134,6 +135,11 @@ private fun ConfigurableWidgetCard(
modifier = modifier
)

DashboardWidget.Type.ORDERS -> DashboardOrdersCard(
parentViewModel = dashboardViewModel,
modifier = modifier
)

DashboardWidget.Type.REVIEWS -> DashboardReviewsCard(
parentViewModel = dashboardViewModel,
modifier = modifier
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ class DashboardDataStore @Inject constructor(
private val supportedWidgets: List<DashboardWidget.Type> = DashboardWidget.Type.entries
.filter {
FeatureFlag.DYNAMIC_DASHBOARD_M2.isEnabled() ||
it != DashboardWidget.Type.ORDERS &&
it != DashboardWidget.Type.REVIEWS
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import javax.inject.Inject
class DashboardRepository @Inject constructor(
selectedSite: SelectedSite,
private val dashboardDataStore: DashboardDataStore,
observeStatsWidgetsStatus: ObserveStatsWidgetsStatus,
observeSiteOrdersState: ObserveSiteOrdersState,
observeBlazeWidgetStatus: ObserveBlazeWidgetStatus,
observeOnboardingWidgetStatus: ObserveOnboardingWidgetStatus
) {
Expand All @@ -28,7 +28,7 @@ class DashboardRepository @Inject constructor(
SiteComponentEntryPoint::class.java
).siteCoroutineScope()

private val statsWidgetsStatus = observeStatsWidgetsStatus()
private val siteOrdersState = observeSiteOrdersState()
.stateIn(
scope = siteCoroutineScope,
started = SharingStarted.Lazily,
Expand All @@ -51,11 +51,11 @@ class DashboardRepository @Inject constructor(

val widgets = combine(
dashboardDataStore.widgets,
statsWidgetsStatus,
siteOrdersState,
blazeWidgetStatus,
onboardingWidgetStatus
) { widgets, statsWidgetStatus, blazeWidgetStatus, onboardingWidgetStatus ->
widgets.toDomainModel(statsWidgetStatus, blazeWidgetStatus, onboardingWidgetStatus)
) { widgets, siteOrdersState, blazeWidgetStatus, onboardingWidgetStatus ->
widgets.toDomainModel(siteOrdersState, blazeWidgetStatus, onboardingWidgetStatus)
}

suspend fun updateWidgets(widgets: List<DashboardWidget>) = dashboardDataStore.updateDashboard(
Expand All @@ -77,7 +77,7 @@ class DashboardRepository @Inject constructor(
}

private fun List<DashboardWidgetDataModel>.toDomainModel(
statsWidgetsStatus: DashboardWidget.Status,
siteOrdersState: DashboardWidget.Status,
blazeWidgetStatus: DashboardWidget.Status,
onboardingWidgetStatus: DashboardWidget.Status
): List<DashboardWidget> {
Expand All @@ -88,10 +88,9 @@ class DashboardRepository @Inject constructor(
isSelected = widget.isAdded,
status = when (type) {
DashboardWidget.Type.STATS,
DashboardWidget.Type.POPULAR_PRODUCTS -> statsWidgetsStatus

DashboardWidget.Type.ORDERS,
DashboardWidget.Type.POPULAR_PRODUCTS -> siteOrdersState
DashboardWidget.Type.BLAZE -> blazeWidgetStatus

DashboardWidget.Type.ONBOARDING -> onboardingWidgetStatus

else -> DashboardWidget.Status.Available
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import org.wordpress.android.fluxc.store.WCOrderStore.HasOrdersResult
import javax.inject.Inject

@OptIn(ExperimentalCoroutinesApi::class)
class ObserveStatsWidgetsStatus @Inject constructor(
class ObserveSiteOrdersState @Inject constructor(
private val selectedSite: SelectedSite,
private val orderStore: WCOrderStore,
private val coroutineDispatchers: CoroutineDispatchers
Expand Down
Loading
Loading