@@ -3,11 +3,6 @@ package com.woocommerce.android.ui.orders.wooshippinglabels
3
3
import android.content.res.Configuration
4
4
import android.os.Parcelable
5
5
import androidx.compose.animation.AnimatedVisibility
6
- import androidx.compose.animation.core.tween
7
- import androidx.compose.animation.fadeIn
8
- import androidx.compose.animation.fadeOut
9
- import androidx.compose.animation.scaleIn
10
- import androidx.compose.animation.scaleOut
11
6
import androidx.compose.foundation.background
12
7
import androidx.compose.foundation.clickable
13
8
import androidx.compose.foundation.interaction.MutableInteractionSource
@@ -24,9 +19,7 @@ import androidx.compose.foundation.layout.padding
24
19
import androidx.compose.foundation.layout.size
25
20
import androidx.compose.foundation.layout.sizeIn
26
21
import androidx.compose.foundation.layout.width
27
- import androidx.compose.foundation.layout.widthIn
28
22
import androidx.compose.foundation.rememberScrollState
29
- import androidx.compose.foundation.shape.RoundedCornerShape
30
23
import androidx.compose.foundation.verticalScroll
31
24
import androidx.compose.material.BottomSheetScaffoldState
32
25
import androidx.compose.material.Divider
@@ -36,13 +29,8 @@ import androidx.compose.material.ModalBottomSheetState
36
29
import androidx.compose.material.ModalBottomSheetValue
37
30
import androidx.compose.material.Surface
38
31
import androidx.compose.material.Text
39
- import androidx.compose.material.icons.Icons
40
- import androidx.compose.material.icons.outlined.CheckCircleOutline
41
- import androidx.compose.material.icons.outlined.Close
42
- import androidx.compose.material.icons.outlined.Info
43
32
import androidx.compose.material.rememberModalBottomSheetState
44
33
import androidx.compose.runtime.Composable
45
- import androidx.compose.runtime.LaunchedEffect
46
34
import androidx.compose.runtime.remember
47
35
import androidx.compose.ui.Alignment
48
36
import androidx.compose.ui.Modifier
@@ -60,16 +48,16 @@ import com.woocommerce.android.R
60
48
import com.woocommerce.android.extensions.appendWithIfNotEmpty
61
49
import com.woocommerce.android.ui.compose.animations.SkeletonView
62
50
import com.woocommerce.android.ui.compose.theme.WooThemeWithBackground
63
- import com.woocommerce.android.ui.orders.wooshippinglabels.address.AddressNotification
64
51
import com.woocommerce.android.ui.orders.wooshippinglabels.address.AddressSectionLandscape
65
52
import com.woocommerce.android.ui.orders.wooshippinglabels.address.AddressSectionPortrait
66
53
import com.woocommerce.android.ui.orders.wooshippinglabels.address.AddressStatus
67
54
import com.woocommerce.android.ui.orders.wooshippinglabels.address.getShipFrom
68
55
import com.woocommerce.android.ui.orders.wooshippinglabels.address.getShipTo
56
+ import com.woocommerce.android.ui.orders.wooshippinglabels.components.NoticeBanner
57
+ import com.woocommerce.android.ui.orders.wooshippinglabels.components.NoticeBannerUiState
69
58
import com.woocommerce.android.ui.orders.wooshippinglabels.models.DestinationShippingAddress
70
59
import com.woocommerce.android.ui.orders.wooshippinglabels.models.OriginShippingAddress
71
60
import com.woocommerce.android.util.StringUtils
72
- import kotlinx.coroutines.delay
73
61
import kotlinx.parcelize.Parcelize
74
62
75
63
@Composable
@@ -80,17 +68,14 @@ fun ShipmentDetails(
80
68
shippingLines : List <ShippingLineSummaryUI >,
81
69
shippingAddresses : WooShippingAddresses ,
82
70
shippingRateSummary : ShippingRateSummaryUI ? ,
83
- addressNotification : AddressNotification ? ,
84
- itnNotification : ItnMissingNotification ? = null,
85
71
modifier : Modifier = Modifier ,
72
+ noticeBannerUiState : NoticeBannerUiState ? = null,
86
73
isShipmentDetailsExpanded : Boolean = false,
87
74
onShipmentDetailsExpandedChange : (Boolean ) -> Boolean ,
88
75
onEditDestinationAddress : (DestinationShippingAddress ) -> Unit ,
89
- onEditOriginAddress : (OriginShippingAddress ) -> Unit ,
90
76
destinationStatus : AddressStatus ,
91
77
markOrderComplete : Boolean = false,
92
78
onMarkOrderCompleteChange : (Boolean ) -> Unit = {},
93
- onDismissAddressNotification : () -> Unit = {},
94
79
handlerModifier : Modifier = Modifier ,
95
80
isReadOnly : Boolean = false
96
81
) {
@@ -128,23 +113,7 @@ fun ShipmentDetails(
128
113
.padding(top = dimensionResource(R .dimen.minor_100) * LocalConfiguration .current.fontScale)
129
114
)
130
115
131
- ShippingAddressNotification (
132
- addressNotification = addressNotification,
133
- onDismiss = onDismissAddressNotification,
134
- onAction = {
135
- addressNotification?.let {
136
- when {
137
- it.isSuccess.not () && it.isDestinationNotification -> {
138
- onEditDestinationAddress(shippingAddresses.shipTo)
139
- }
140
- it.isSuccess.not () && it.isDestinationNotification.not () -> {
141
- onEditOriginAddress(shippingAddresses.shipFrom)
142
- }
143
- }
144
- }
145
- }
146
- )
147
- ItnMissingNotification (itnNotification)
116
+ NoticeBanner (noticeBannerUiState)
148
117
149
118
Spacer (
150
119
modifier = Modifier .size(
@@ -559,178 +528,6 @@ private fun ShipmentCostRow(
559
528
}
560
529
}
561
530
562
- @Composable
563
- private fun ItnMissingNotification (
564
- itnNotification : ItnMissingNotification ? ,
565
- modifier : Modifier = Modifier
566
- ) {
567
- AnimatedVisibility (
568
- visible = itnNotification != null ,
569
- enter = fadeIn(
570
- animationSpec = tween(
571
- durationMillis = 180
572
- )
573
- ) + scaleIn(
574
- animationSpec = tween(
575
- durationMillis = 180
576
- )
577
- ),
578
- exit = fadeOut(
579
- animationSpec = tween(
580
- durationMillis = 90
581
- )
582
- ) + scaleOut(
583
- animationSpec = tween(
584
- durationMillis = 90
585
- )
586
-
587
- )
588
- ) {
589
- if (itnNotification == null ) return @AnimatedVisibility
590
-
591
- val rowModifier = when (LocalConfiguration .current.orientation) {
592
- Configuration .ORIENTATION_LANDSCAPE -> {
593
- modifier.widthIn(max = 600 .dp).fillMaxWidth()
594
- }
595
- else -> {
596
- modifier.fillMaxWidth()
597
- }
598
- }
599
-
600
- Row (
601
- verticalAlignment = Alignment .CenterVertically ,
602
- modifier = rowModifier
603
- .padding(dimensionResource(R .dimen.major_100))
604
- .background(
605
- color = colorResource(R .color.woo_red_5),
606
- shape = RoundedCornerShape (dimensionResource(R .dimen.corner_radius_large))
607
- )
608
- .padding(vertical = 8 .dp, horizontal = 16 .dp),
609
- ) {
610
- Icon (
611
- imageVector = Icons .Outlined .Info ,
612
- tint = MaterialTheme .colors.error,
613
- contentDescription = null
614
- )
615
- Spacer (Modifier .size(dimensionResource(R .dimen.minor_50)))
616
- Text (
617
- text = itnNotification.errorMessage,
618
- style = MaterialTheme .typography.body2,
619
- color = MaterialTheme .colors.error,
620
- modifier = Modifier .weight(1f )
621
- )
622
- Icon (
623
- imageVector = Icons .Outlined .Close ,
624
- tint = MaterialTheme .colors.error,
625
- contentDescription = null ,
626
- modifier = Modifier .clickable {
627
- itnNotification.onErrorDismissed()
628
- }
629
- )
630
- }
631
- }
632
- }
633
-
634
- @Composable
635
- private fun ShippingAddressNotification (
636
- addressNotification : AddressNotification ? ,
637
- modifier : Modifier = Modifier ,
638
- onAction : () -> Unit = {},
639
- onDismiss : () -> Unit = {}
640
- ) {
641
- AnimatedVisibility (
642
- visible = addressNotification != null && addressNotification.isExpired().not (),
643
- enter = fadeIn(
644
- animationSpec = tween(
645
- durationMillis = 180
646
- )
647
- ) + scaleIn(
648
- animationSpec = tween(
649
- durationMillis = 180
650
- )
651
- ),
652
- exit = fadeOut(
653
- animationSpec = tween(
654
- durationMillis = 90
655
- )
656
- ) + scaleOut(
657
- animationSpec = tween(
658
- durationMillis = 90
659
- )
660
-
661
- )
662
- ) {
663
- if (addressNotification != null && addressNotification.isExpired().not ()) {
664
- if (addressNotification.expireAfter != null ) {
665
- LaunchedEffect (addressNotification) {
666
- delay(addressNotification.expireAfter)
667
- onDismiss()
668
- }
669
- }
670
-
671
- val color = if (addressNotification.isSuccess) {
672
- colorResource(id = R .color.woo_shipping_label_success)
673
- } else {
674
- colorResource(id = R .color.woo_shipping_label_error)
675
- }
676
-
677
- val backgroundColor = if (addressNotification.isSuccess) {
678
- colorResource(id = R .color.woo_shipping_label_success_surface)
679
- } else {
680
- colorResource(id = R .color.woo_shipping_label_error_surface)
681
- }
682
-
683
- val icon = if (addressNotification.isSuccess) {
684
- Icons .Outlined .CheckCircleOutline
685
- } else {
686
- Icons .Outlined .Info
687
- }
688
-
689
- val configuration = LocalConfiguration .current
690
- val rowModifier = when (configuration.orientation) {
691
- Configuration .ORIENTATION_LANDSCAPE -> {
692
- modifier.widthIn(max = 600 .dp).fillMaxWidth()
693
- }
694
- else -> {
695
- modifier.fillMaxWidth()
696
- }
697
- }
698
-
699
- Row (
700
- rowModifier
701
- .padding(dimensionResource(R .dimen.major_100))
702
- .background(
703
- color = backgroundColor,
704
- shape = RoundedCornerShape (dimensionResource(R .dimen.corner_radius_large))
705
- )
706
- .clickable { onAction() }
707
- .padding(vertical = 8 .dp, horizontal = 16 .dp),
708
- verticalAlignment = Alignment .CenterVertically
709
- ) {
710
- Icon (
711
- imageVector = icon,
712
- contentDescription = null ,
713
- tint = color,
714
- modifier = Modifier .padding(end = 8 .dp)
715
- )
716
- Text (
717
- text = stringResource(addressNotification.message),
718
- color = color,
719
- modifier = Modifier .weight(1f )
720
- )
721
- if (addressNotification.isSuccess.not ()) {
722
- Icon (
723
- imageVector = Icons .Outlined .Close ,
724
- contentDescription = null ,
725
- tint = color,
726
- modifier = Modifier .clickable { onDismiss() }
727
- )
728
- }
729
- }
730
- }
731
- }
732
- }
733
-
734
531
@Preview
735
532
@Composable
736
533
private fun ShipmentCostSectionPreview () {
@@ -771,11 +568,6 @@ data class ShippingRateSummaryUI(
771
568
val optionFee : String? = null
772
569
) : Parcelable
773
570
774
- data class ItnMissingNotification (
775
- val errorMessage : String ,
776
- val onErrorDismissed : () -> Unit
777
- )
778
-
779
571
@Composable
780
572
fun VerticalDivider (
781
573
modifier : Modifier = Modifier ,
0 commit comments