Skip to content

Commit e4d24ab

Browse files
committed
Refactor for better readability
1 parent 48dc8e5 commit e4d24ab

File tree

1 file changed

+112
-89
lines changed

1 file changed

+112
-89
lines changed

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersScreen.kt

Lines changed: 112 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -53,116 +53,139 @@ fun WooPosOrdersScreen(
5353
BackHandler { onNavigationEvent(WooPosNavigationEvent.GoBack) }
5454

5555
Row(modifier = Modifier.fillMaxSize()) {
56-
// Left pane
57-
Column(
56+
WooPosOrdersLeftPane(
57+
state = state,
58+
onBackClicked = onBackClicked,
59+
onRefresh = viewModel::refresh,
60+
onOrderSelected = viewModel::onOrderSelected,
5861
modifier = Modifier
5962
.weight(0.3f)
6063
.fillMaxHeight()
6164
.background(MaterialTheme.colorScheme.surface)
62-
) {
63-
WooPosToolbar(
64-
titleText = stringResource(R.string.woopos_orders_title),
65-
onBackClicked = onBackClicked,
66-
)
65+
)
6766

68-
val refreshing =
69-
when (val s = state) {
70-
is WooPosOrdersState.Content -> s.pullToRefreshState == WooPosPullToRefreshState.Refreshing
71-
is WooPosOrdersState.Error -> s.pullToRefreshState == WooPosPullToRefreshState.Refreshing
72-
is WooPosOrdersState.Empty -> false
73-
is WooPosOrdersState.Loading -> false
74-
}
67+
WooPosOrdersRightPane(
68+
state = state,
69+
modifier = Modifier
70+
.weight(0.7f)
71+
.fillMaxHeight()
72+
.background(MaterialTheme.colorScheme.surfaceContainerLow)
73+
)
74+
}
75+
}
7576

76-
val pullRefreshState = rememberPullRefreshState(
77-
refreshing = refreshing,
78-
onRefresh = { viewModel.refresh() }
79-
)
77+
@OptIn(ExperimentalMaterialApi::class)
78+
@Composable
79+
private fun WooPosOrdersLeftPane(
80+
state: WooPosOrdersState,
81+
onBackClicked: () -> Unit,
82+
onRefresh: () -> Unit,
83+
onOrderSelected: (Long) -> Unit,
84+
modifier: Modifier = Modifier
85+
) {
86+
Column(modifier = modifier) {
87+
WooPosToolbar(
88+
titleText = stringResource(R.string.woopos_orders_title),
89+
onBackClicked = onBackClicked,
90+
)
8091

81-
Box(
82-
modifier = Modifier
83-
.fillMaxSize()
84-
.pullRefresh(pullRefreshState)
85-
) {
86-
when (val s = state) {
87-
is WooPosOrdersState.Loading -> {
88-
Column(
89-
modifier = Modifier.fillMaxSize(),
90-
horizontalAlignment = Alignment.CenterHorizontally
91-
) {
92-
WooPosText(
93-
text = stringResource(R.string.loading),
94-
style = WooPosTypography.BodyMedium,
95-
color = MaterialTheme.colorScheme.onSurfaceVariant,
96-
modifier = Modifier.padding(WooPosSpacing.Large.value)
97-
)
98-
}
99-
}
92+
val refreshing = when (state) {
93+
is WooPosOrdersState.Content -> state.pullToRefreshState == WooPosPullToRefreshState.Refreshing
94+
is WooPosOrdersState.Error -> state.pullToRefreshState == WooPosPullToRefreshState.Refreshing
95+
is WooPosOrdersState.Empty -> false
96+
is WooPosOrdersState.Loading -> false
97+
}
10098

101-
is WooPosOrdersState.Error -> {
102-
Column(
103-
modifier = Modifier.fillMaxSize(),
104-
horizontalAlignment = Alignment.CenterHorizontally
105-
) {
106-
WooPosText(
107-
text = s.message,
108-
style = WooPosTypography.BodyMedium,
109-
color = MaterialTheme.colorScheme.error,
110-
modifier = Modifier.padding(WooPosSpacing.Large.value)
111-
)
112-
}
99+
val pullRefreshState = rememberPullRefreshState(
100+
refreshing = refreshing,
101+
onRefresh = onRefresh
102+
)
103+
104+
Box(
105+
modifier = Modifier
106+
.fillMaxSize()
107+
.pullRefresh(pullRefreshState)
108+
) {
109+
when (state) {
110+
is WooPosOrdersState.Loading -> {
111+
Column(
112+
modifier = Modifier.fillMaxSize(),
113+
horizontalAlignment = Alignment.CenterHorizontally
114+
) {
115+
WooPosText(
116+
text = stringResource(R.string.loading),
117+
style = WooPosTypography.BodyMedium,
118+
color = MaterialTheme.colorScheme.onSurfaceVariant,
119+
modifier = Modifier.padding(WooPosSpacing.Large.value)
120+
)
113121
}
122+
}
114123

115-
is WooPosOrdersState.Empty -> {
116-
Column(
117-
modifier = Modifier.fillMaxSize(),
118-
horizontalAlignment = Alignment.CenterHorizontally
119-
) {
120-
WooPosText(
121-
text = "No orders found",
122-
style = WooPosTypography.BodyMedium,
123-
color = MaterialTheme.colorScheme.onSurfaceVariant,
124-
modifier = Modifier.padding(WooPosSpacing.Large.value)
125-
)
126-
}
124+
is WooPosOrdersState.Error -> {
125+
Column(
126+
modifier = Modifier.fillMaxSize(),
127+
horizontalAlignment = Alignment.CenterHorizontally
128+
) {
129+
WooPosText(
130+
text = state.message,
131+
style = WooPosTypography.BodyMedium,
132+
color = MaterialTheme.colorScheme.error,
133+
modifier = Modifier.padding(WooPosSpacing.Large.value)
134+
)
127135
}
136+
}
128137

129-
is WooPosOrdersState.Content -> {
130-
WooPosOrdersListPaneScreen(
131-
items = s.items,
132-
selectedOrderId = s.selectedOrderId,
133-
onOrderSelected = viewModel::onOrderSelected,
134-
modifier = Modifier.fillMaxSize()
138+
is WooPosOrdersState.Empty -> {
139+
Column(
140+
modifier = Modifier.fillMaxSize(),
141+
horizontalAlignment = Alignment.CenterHorizontally
142+
) {
143+
WooPosText(
144+
text = "No orders found",
145+
style = WooPosTypography.BodyMedium,
146+
color = MaterialTheme.colorScheme.onSurfaceVariant,
147+
modifier = Modifier.padding(WooPosSpacing.Large.value)
135148
)
136149
}
137150
}
138151

139-
// PTR indicator at the top of the list area
140-
PullRefreshIndicator(
141-
refreshing = refreshing,
142-
state = pullRefreshState,
143-
modifier = Modifier
144-
.align(Alignment.TopCenter)
145-
.padding(top = WooPosSpacing.XSmall.value),
146-
backgroundColor = MaterialTheme.colorScheme.surface,
147-
contentColor = MaterialTheme.colorScheme.primary
148-
)
152+
is WooPosOrdersState.Content -> {
153+
WooPosOrdersListPaneScreen(
154+
items = state.items,
155+
selectedOrderId = state.selectedOrderId,
156+
onOrderSelected = onOrderSelected,
157+
modifier = Modifier.fillMaxSize()
158+
)
159+
}
149160
}
150-
}
151161

152-
// Right pane
153-
val selectedItem: OrderItemViewState? = when (val s = state) {
154-
is WooPosOrdersState.Content -> s.items.firstOrNull { it.id == s.selectedOrderId }
155-
else -> null
162+
PullRefreshIndicator(
163+
refreshing = refreshing,
164+
state = pullRefreshState,
165+
modifier = Modifier
166+
.align(Alignment.TopCenter)
167+
.padding(top = WooPosSpacing.XSmall.value),
168+
backgroundColor = MaterialTheme.colorScheme.surface,
169+
contentColor = MaterialTheme.colorScheme.primary
170+
)
156171
}
172+
}
173+
}
157174

158-
WooPosOrdersDetailPaneScreen(
159-
selected = selectedItem,
160-
modifier = Modifier
161-
.weight(0.7f)
162-
.fillMaxHeight()
163-
.background(MaterialTheme.colorScheme.surfaceContainerLow)
164-
)
175+
@Composable
176+
private fun WooPosOrdersRightPane(
177+
state: WooPosOrdersState,
178+
modifier: Modifier = Modifier
179+
) {
180+
val selectedItem: OrderItemViewState? = when (state) {
181+
is WooPosOrdersState.Content -> state.items.firstOrNull { it.id == state.selectedOrderId }
182+
else -> null
165183
}
184+
185+
WooPosOrdersDetailPaneScreen(
186+
selected = selectedItem,
187+
modifier = modifier.fillMaxSize()
188+
)
166189
}
167190

168191
@Composable

0 commit comments

Comments
 (0)