@@ -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