ordering-ui-react-native 0.15.31 → 0.15.33-release

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/package.json +4 -2
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/BusinessController/index.tsx +8 -2
  4. package/src/components/BusinessTypeFilter/index.tsx +4 -1
  5. package/src/components/BusinessesListing/index.tsx +1 -1
  6. package/src/components/Checkout/index.tsx +23 -3
  7. package/src/components/DriverTips/index.tsx +11 -6
  8. package/src/components/LanguageSelector/index.tsx +7 -2
  9. package/src/components/LoginForm/index.tsx +3 -1
  10. package/src/components/OrderDetails/index.tsx +2 -2
  11. package/src/components/PaymentOptions/index.tsx +9 -16
  12. package/src/components/PaymentOptionsWebView/index.tsx +123 -124
  13. package/src/components/SignupForm/index.tsx +3 -1
  14. package/src/components/SingleProductCard/index.tsx +16 -4
  15. package/src/components/StripeElementsForm/index.tsx +27 -48
  16. package/src/components/UpsellingProducts/index.tsx +1 -1
  17. package/src/components/UserProfileForm/index.tsx +63 -6
  18. package/src/components/UserProfileForm/styles.tsx +8 -0
  19. package/src/components/VerifyPhone/styles.tsx +1 -2
  20. package/src/components/shared/OModal.tsx +1 -1
  21. package/src/config.json +0 -2
  22. package/src/hooks/useCountdownTimer.tsx +26 -0
  23. package/src/navigators/HomeNavigator.tsx +6 -0
  24. package/src/pages/BusinessProductsList.tsx +1 -0
  25. package/src/pages/BusinessesListing.tsx +1 -1
  26. package/src/pages/Checkout.tsx +1 -1
  27. package/src/pages/Sessions.tsx +22 -0
  28. package/src/types/index.tsx +5 -11
  29. package/src/utils/index.tsx +68 -1
  30. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +103 -15
  31. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -0
  32. package/themes/business/src/components/Chat/index.tsx +38 -86
  33. package/themes/business/src/components/DriverMap/index.tsx +6 -5
  34. package/themes/business/src/components/Home/index.tsx +128 -55
  35. package/themes/business/src/components/Home/styles.tsx +8 -1
  36. package/themes/business/src/components/LoginForm/index.tsx +89 -2
  37. package/themes/business/src/components/LoginForm/styles.tsx +6 -0
  38. package/themes/business/src/components/LogoutButton/index.tsx +1 -1
  39. package/themes/business/src/components/NewOrderNotification/index.tsx +79 -105
  40. package/themes/business/src/components/OrderDetails/Business.tsx +1 -1
  41. package/themes/business/src/components/OrderDetails/Delivery.tsx +32 -15
  42. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +157 -89
  43. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +6 -0
  44. package/themes/business/src/components/OrderDetails/styles.tsx +7 -0
  45. package/themes/business/src/components/OrdersListManager/index.tsx +52 -49
  46. package/themes/business/src/components/OrdersOption/index.tsx +57 -50
  47. package/themes/business/src/components/PreviousOrders/index.tsx +50 -14
  48. package/themes/business/src/components/shared/OModal.tsx +1 -1
  49. package/themes/business/src/types/index.tsx +5 -1
  50. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  51. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  52. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  53. package/themes/kiosk/src/components/Cart/index.tsx +98 -24
  54. package/themes/kiosk/src/components/Cart/styles.tsx +6 -0
  55. package/themes/kiosk/src/components/CartBottomSheet/index.tsx +1 -1
  56. package/themes/kiosk/src/components/CartBottomSheet/styles.tsx +1 -1
  57. package/themes/kiosk/src/components/CartContent/index.tsx +13 -3
  58. package/themes/kiosk/src/components/CartItem/index.tsx +20 -8
  59. package/themes/kiosk/src/components/Checkout/index.tsx +34 -22
  60. package/themes/kiosk/src/components/CustomerName/index.tsx +7 -8
  61. package/themes/kiosk/src/components/Intro/index.tsx +13 -13
  62. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  63. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  64. package/themes/kiosk/src/components/OrderDetails/index.tsx +167 -67
  65. package/themes/kiosk/src/components/OrderDetails/styles.tsx +5 -0
  66. package/themes/kiosk/src/components/OrderSummary/index.tsx +1 -1
  67. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +10 -12
  68. package/themes/kiosk/src/components/PaymentOptions/index.tsx +1 -1
  69. package/themes/kiosk/src/components/ProductForm/index.tsx +174 -125
  70. package/themes/kiosk/src/components/ProductForm/styles.tsx +1 -1
  71. package/themes/kiosk/src/components/ProductOption/index.tsx +1 -0
  72. package/themes/kiosk/src/components/ProductOption/styles.tsx +1 -0
  73. package/themes/kiosk/src/components/UpsellingProducts/index.tsx +48 -34
  74. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  75. package/themes/kiosk/src/types/index.d.ts +2 -0
  76. package/themes/original/index.tsx +184 -1
  77. package/themes/original/src/components/ActiveOrders/index.tsx +15 -132
  78. package/themes/original/src/components/ActiveOrders/styles.tsx +0 -54
  79. package/themes/original/src/components/AddressForm/index.tsx +15 -10
  80. package/themes/original/src/components/AddressList/index.tsx +56 -18
  81. package/themes/original/src/components/AppleLogin/index.tsx +117 -78
  82. package/themes/original/src/components/BusinessBasicInformation/index.tsx +96 -45
  83. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +28 -1
  84. package/themes/original/src/components/BusinessController/index.tsx +77 -29
  85. package/themes/original/src/components/BusinessController/styles.tsx +27 -0
  86. package/themes/original/src/components/BusinessFeaturedController/index.tsx +20 -1
  87. package/themes/original/src/components/BusinessFeaturedController/styles.tsx +23 -0
  88. package/themes/original/src/components/BusinessListingSearch/index.tsx +125 -7
  89. package/themes/original/src/components/BusinessListingSearch/styles.tsx +14 -1
  90. package/themes/original/src/components/BusinessMenuList/index.tsx +11 -4
  91. package/themes/original/src/components/BusinessPreorder/index.tsx +142 -122
  92. package/themes/original/src/components/BusinessProductsCategories/index.tsx +9 -7
  93. package/themes/original/src/components/BusinessProductsList/CategoryDescription/index.tsx +44 -0
  94. package/themes/original/src/components/BusinessProductsList/index.tsx +140 -37
  95. package/themes/original/src/components/BusinessProductsList/styles.tsx +29 -2
  96. package/themes/original/src/components/BusinessProductsListing/index.tsx +112 -14
  97. package/themes/original/src/components/BusinessProductsListing/styles.tsx +22 -0
  98. package/themes/original/src/components/BusinessReviews/index.tsx +4 -25
  99. package/themes/original/src/components/BusinessTypeFilter/index.tsx +1 -2
  100. package/themes/original/src/components/BusinessesListing/index.tsx +98 -72
  101. package/themes/original/src/components/Cart/index.tsx +21 -17
  102. package/themes/original/src/components/CartContent/index.tsx +2 -2
  103. package/themes/original/src/components/Checkout/index.tsx +59 -48
  104. package/themes/original/src/components/DriverTips/index.tsx +17 -12
  105. package/themes/original/src/components/Favorite/index.tsx +91 -0
  106. package/themes/original/src/components/Favorite/styles.tsx +22 -0
  107. package/themes/original/src/components/FavoriteList/index.tsx +287 -0
  108. package/themes/original/src/components/FavoriteList/styles.tsx +5 -0
  109. package/themes/original/src/components/ForgotPasswordForm/index.tsx +84 -4
  110. package/themes/original/src/components/GPSButton/index.tsx +15 -8
  111. package/themes/original/src/components/GoogleMap/index.tsx +1 -0
  112. package/themes/original/src/components/Help/index.tsx +21 -4
  113. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +115 -90
  114. package/themes/original/src/components/Home/index.tsx +1 -1
  115. package/themes/original/src/components/LastOrders/index.tsx +12 -1
  116. package/themes/original/src/components/LoginForm/Otp/index.tsx +90 -0
  117. package/themes/original/src/components/LoginForm/Otp/styles.tsx +7 -0
  118. package/themes/original/src/components/LoginForm/index.tsx +394 -155
  119. package/themes/original/src/components/LoginForm/styles.tsx +7 -4
  120. package/themes/original/src/components/LogoutButton/index.tsx +7 -1
  121. package/themes/original/src/components/MessageListing/index.tsx +10 -1
  122. package/themes/original/src/components/Messages/index.tsx +34 -25
  123. package/themes/original/src/components/Messages/styles.tsx +1 -3
  124. package/themes/original/src/components/MomentOption/index.tsx +10 -1
  125. package/themes/original/src/components/MomentOption/styles.tsx +1 -1
  126. package/themes/original/src/components/OrderDetails/index.tsx +56 -33
  127. package/themes/original/src/components/OrderDetails/styles.tsx +1 -2
  128. package/themes/original/src/components/OrderProgress/index.tsx +4 -4
  129. package/themes/original/src/components/OrderProgress/styles.tsx +1 -0
  130. package/themes/original/src/components/OrderSummary/index.tsx +3 -3
  131. package/themes/original/src/components/OrderTypeSelector/index.tsx +4 -2
  132. package/themes/original/src/components/OrdersOption/index.tsx +59 -58
  133. package/themes/original/src/components/OrdersOption/styles.tsx +0 -6
  134. package/themes/original/src/components/PaymentOptionCash/index.tsx +2 -2
  135. package/themes/original/src/components/PaymentOptionWallet/index.tsx +22 -24
  136. package/themes/original/src/components/PaymentOptionWallet/styles.tsx +1 -1
  137. package/themes/original/src/components/PaymentOptions/index.tsx +9 -21
  138. package/themes/original/src/components/PhoneInputNumber/index.tsx +1 -1
  139. package/themes/original/src/components/PreviousOrders/index.tsx +18 -145
  140. package/themes/original/src/components/ProductForm/index.tsx +76 -61
  141. package/themes/original/src/components/ProductForm/styles.tsx +2 -2
  142. package/themes/original/src/components/ProductItemAccordion/index.tsx +2 -2
  143. package/themes/original/src/components/ProductOptionSubOption/index.tsx +18 -12
  144. package/themes/original/src/components/Promotions/index.tsx +250 -0
  145. package/themes/original/src/components/Promotions/styles.tsx +60 -0
  146. package/themes/original/src/components/ReviewOrder/index.tsx +10 -9
  147. package/themes/original/src/components/ReviewProducts/index.tsx +1 -1
  148. package/themes/original/src/components/SearchBar/index.tsx +4 -1
  149. package/themes/original/src/components/Sessions/index.tsx +160 -0
  150. package/themes/original/src/components/Sessions/styles.tsx +15 -0
  151. package/themes/original/src/components/SignupForm/index.tsx +9 -4
  152. package/themes/original/src/components/SingleOrderCard/index.tsx +282 -0
  153. package/themes/original/src/components/SingleOrderCard/styles.tsx +54 -0
  154. package/themes/original/src/components/SingleProductCard/index.tsx +82 -30
  155. package/themes/original/src/components/SingleProductCard/styles.tsx +28 -1
  156. package/themes/original/src/components/StripeElementsForm/index.tsx +55 -74
  157. package/themes/original/src/components/TaxInformation/index.tsx +10 -4
  158. package/themes/original/src/components/UpsellingProducts/index.tsx +86 -74
  159. package/themes/original/src/components/UserDetails/index.tsx +4 -95
  160. package/themes/original/src/components/UserFormDetails/index.tsx +34 -24
  161. package/themes/original/src/components/UserProfile/index.tsx +66 -14
  162. package/themes/original/src/components/UserProfileForm/index.tsx +20 -18
  163. package/themes/original/src/components/UserVerification/index.tsx +178 -192
  164. package/themes/original/src/components/VerifyPhone/index.tsx +10 -7
  165. package/themes/original/src/components/VerifyPhone/styles.tsx +2 -1
  166. package/themes/original/src/components/Wallets/index.tsx +76 -9
  167. package/themes/original/src/components/Wallets/styles.tsx +21 -0
  168. package/themes/original/src/components/shared/HeaderTitle.tsx +21 -0
  169. package/themes/original/src/components/shared/OModal.tsx +4 -2
  170. package/themes/original/src/components/shared/index.tsx +2 -0
  171. package/themes/original/src/config/constants.tsx +6 -6
  172. package/themes/original/src/types/index.tsx +115 -9
  173. package/themes/original/src/utils/index.tsx +28 -2
  174. package/themes/single-business/src/components/AddressList/index.tsx +1 -1
  175. package/themes/single-business/src/components/OrderTypeSelector/index.tsx +6 -6
  176. package/themes/single-business/src/components/UserProfile/index.tsx +1 -1
  177. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
  178. package/src/components/StripeMethodForm/index.tsx +0 -174
@@ -43,7 +43,7 @@ export const ReviewOrderUI = (props: ReviewOrderParams) => {
43
43
  logoWrapper: {
44
44
  shadowColor: theme.colors.black,
45
45
  shadowRadius: 3,
46
- shadowOffset: {width: 1, height: 4},
46
+ shadowOffset: { width: 1, height: 4 },
47
47
  elevation: 3,
48
48
  borderRadius: 8,
49
49
  shadowOpacity: 0.1,
@@ -108,11 +108,11 @@ export const ReviewOrderUI = (props: ReviewOrderParams) => {
108
108
  }
109
109
 
110
110
  const qualificationList = [
111
- { key: 1, text: t('TERRIBLE', 'Terrible'), percent: 0, parentStyle: { left: '0%' }, isInnerStyle: false, pointerColor: false },
111
+ { key: 1, text: t('TERRIBLE', 'Terrible'), percent: 0, parentStyle: { left: '0%' }, isInnerStyle: false, pointerColor: false },
112
112
  { key: 2, text: t('BAD', 'Bad'), percent: 0.25, parentStyle: { left: '25%' }, isInnerStyle: true, pointerColor: true },
113
113
  { key: 3, text: t('OKAY', 'Okay'), percent: 0.5, parentStyle: { left: '50%' }, isInnerStyle: true, pointerColor: true },
114
114
  { key: 4, text: t('GOOD', 'Good'), percent: 0.75, parentStyle: { left: '75%' }, isInnerStyle: true, pointerColor: true },
115
- { key: 5, text: t('GREAT', 'Great'), percent: 1, parentStyle: { right: '0%' }, isInnerStyle: false, pointerColor: false }
115
+ { key: 5, text: t('GREAT', 'Great'), percent: 1, parentStyle: { right: '0%' }, isInnerStyle: false, pointerColor: false }
116
116
  ]
117
117
 
118
118
  const commentsList = reviewCommentList('order')
@@ -137,7 +137,7 @@ export const ReviewOrderUI = (props: ReviewOrderParams) => {
137
137
  return found
138
138
  }
139
139
 
140
- const handleContinueClick = () => {
140
+ const handleContinueClick = () => {
141
141
  if (!order?.review) {
142
142
  onSubmit()
143
143
  } else {
@@ -183,7 +183,7 @@ export const ReviewOrderUI = (props: ReviewOrderParams) => {
183
183
  comments.map(comment => _comments += comment.content + '. ')
184
184
  }
185
185
  let _comment
186
- _comment = _comments + extraComment
186
+ _comment = _comments + extraComment
187
187
  setStars({ ...stars, comments: _comment })
188
188
  }, [comments, extraComment])
189
189
 
@@ -214,7 +214,7 @@ export const ReviewOrderUI = (props: ReviewOrderParams) => {
214
214
  <OText color={theme.colors.primary}>{t('ORDER_REVIEWED', 'This order has been already reviewed')}</OText>
215
215
  </View>
216
216
  ) : (
217
- <View style={{flex: 1, justifyContent: 'flex-end'}}>
217
+ <View style={{ flex: 1, justifyContent: 'flex-end' }}>
218
218
  <FormReviews>
219
219
  <OText mBottom={13} color={theme.colors.textNormal}>{t('HOW_WAS_YOUR_ORDER', 'How was your order?')}</OText>
220
220
  <RatingBarContainer>
@@ -266,7 +266,7 @@ export const ReviewOrderUI = (props: ReviewOrderParams) => {
266
266
  style={{ height: 35, paddingLeft: 5, paddingRight: 5, marginHorizontal: 3, marginVertical: 10 }}
267
267
  imgRightSrc={isSelectedComment(commentItem.key) ? theme.images.general.close : null}
268
268
  imgRightStyle={{ tintColor: theme.colors.white, right: 5, margin: 5 }}
269
- onClick={() => handleChangeComment(commentItem) }
269
+ onClick={() => handleChangeComment(commentItem)}
270
270
  />
271
271
  ))}
272
272
  </CommentsButtonGroup>
@@ -304,7 +304,7 @@ export const ReviewOrderUI = (props: ReviewOrderParams) => {
304
304
  textStyle={{ color: theme.colors.white, paddingRight: 10 }}
305
305
  text={t('CONTINUE', 'Continue')}
306
306
  style={{ borderRadius: 8 }}
307
- imgRightSrc={theme.images.general.arrow_right}
307
+ imgRightSrc={theme.images.general.arrow_right}
308
308
  imgRightStyle={{ tintColor: theme.colors.white, right: 5, margin: 5 }}
309
309
  onClick={handleSubmit(handleContinueClick)}
310
310
  />
@@ -317,7 +317,8 @@ export const ReviewOrderUI = (props: ReviewOrderParams) => {
317
317
  export const ReviewOrder = (props: ReviewOrderParams) => {
318
318
  const reviewOrderProps = {
319
319
  ...props,
320
- UIComponent: ReviewOrderUI
320
+ UIComponent: ReviewOrderUI,
321
+ defaultStar: 5
321
322
  }
322
323
  return <ReviewOrderController {...reviewOrderProps} />
323
324
  }
@@ -74,7 +74,7 @@ const ReviewProductsUI = (props: ReviewProductParams) => {
74
74
  titleWrapStyle={{ paddingHorizontal: 0 }}
75
75
  titleStyle={{ marginRight: 0, marginLeft: 0 }}
76
76
  />
77
- {order?.products.map((product: any) => (
77
+ {order?.products?.map((product: any) => (
78
78
  <SingleProductReview
79
79
  key={product.id}
80
80
  product={product}
@@ -20,7 +20,9 @@ export const SearchBar = (props: any) => {
20
20
  inputStyle,
21
21
  onPress,
22
22
  isDisabled,
23
- iconCustomRight
23
+ iconCustomRight,
24
+ onSubmitEditing,
25
+ blurOnSubmit
24
26
  } = props
25
27
 
26
28
  const theme = useTheme();
@@ -88,6 +90,7 @@ export const SearchBar = (props: any) => {
88
90
  inputStyle={{padding: 0, paddingTop: Platform.OS == 'android' ? 2 : 0, ...inputStyle}}
89
91
  onPress={() => onPress && onPress()}
90
92
  iconCustomRight={iconCustomRight}
93
+ onSubmitEditing={() => onSubmitEditing && onSubmitEditing()}
91
94
  />
92
95
  {isCancelButtonShow && (
93
96
  <OButton
@@ -0,0 +1,160 @@
1
+ import React, { useState } from 'react'
2
+ import { View, TouchableOpacity } from 'react-native'
3
+ import { useLanguage, useSession, useUtils, Sessions as SessionsController } from 'ordering-components/native'
4
+ import NavBar from '../NavBar'
5
+ import { SessionsParams } from '../../types'
6
+ import { OAlert } from '../../../../../src/components/shared'
7
+ import { OButton, OIcon, OText } from '../shared'
8
+ import { useTheme } from 'styled-components/native'
9
+ import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder'
10
+ import AntIcon from 'react-native-vector-icons/AntDesign'
11
+
12
+ import {
13
+ SessionsWrapper,
14
+ SessionItem,
15
+ DurationWrapper
16
+ } from './styles'
17
+
18
+ export const SessionsUI = (props: SessionsParams) => {
19
+ const {
20
+ navigation,
21
+ sessionsList,
22
+ actionState,
23
+ handleDeleteSession,
24
+ handleDeleteAllSessions
25
+ } = props
26
+
27
+ const [, t] = useLanguage()
28
+ const [{ user }] = useSession()
29
+ const [{ parseDate }] = useUtils()
30
+ const theme = useTheme()
31
+ const [confirm, setConfirm] = useState<any>({ open: false, content: null, handleOnAccept: null, id: null, title: null })
32
+ const goToBack = () => navigation?.canGoBack() && navigation.goBack()
33
+
34
+ const onDeleteSession = (session: any) => {
35
+ setConfirm({
36
+ open: true,
37
+ title: t('WEB_APPNAME', 'Ordering'),
38
+ content: [t('QUESTION_DELETE_SESSION', 'Are you sure to delete this session?')],
39
+ handleOnAccept: () => {
40
+ handleDeleteSession(session)
41
+ setConfirm({ ...confirm, open: false })
42
+ }
43
+ })
44
+ }
45
+
46
+ const onDeleteAllSessions = (isOldUser: any, deleteCurrent: any) => {
47
+ setConfirm({
48
+ open: true,
49
+ title: t('WEB_APPNAME', 'Ordering'),
50
+ content:
51
+ isOldUser
52
+ ? [t('QUESTION_ENABLE_ALL_SESSIONS', 'Are you sure to enable all sessions?')]
53
+ : deleteCurrent
54
+ ? [t('QUESTION_DELETE_ALL_SESSIONS', 'Are you sure that you want to delete all sessions?')]
55
+ : [t('QUESTION_DELETE_ALL_SESSIONS_EXCEPT_CURRENT', 'Are you sure that you want to delete all sessions except current?')],
56
+ handleOnAccept: () => {
57
+ handleDeleteAllSessions(deleteCurrent)
58
+ setConfirm({ ...confirm, open: false })
59
+ }
60
+ })
61
+ }
62
+
63
+ return (
64
+ <>
65
+ <NavBar
66
+ title={t('SESSIONS', 'Sessions')}
67
+ titleAlign={'center'}
68
+ onActionLeft={goToBack}
69
+ showCall={false}
70
+ paddingTop={10}
71
+ btnStyle={{ paddingLeft: 0 }}
72
+ />
73
+ {user?.session_strategy === 'jwt_session' ? (
74
+ <>
75
+ {sessionsList.loading ? (
76
+ [...Array(5).keys()].map(i => (
77
+ <SessionItem key={i}>
78
+ <Placeholder Animation={Fade}>
79
+ <View style={{ flexDirection: 'row', alignItems: 'center' }}>
80
+ <View style={{ flex: 1}}>
81
+ <PlaceholderLine width={40} />
82
+ <PlaceholderLine width={40} />
83
+ </View>
84
+ <PlaceholderLine width={5}/>
85
+ </View>
86
+ </Placeholder>
87
+ </SessionItem>
88
+ ))
89
+ ) : (
90
+ sessionsList.sessions.length > 0 ? (
91
+ <SessionsWrapper>
92
+ {sessionsList.sessions.map((session: any) => (
93
+ <SessionItem key={session.id}>
94
+ <DurationWrapper>
95
+ <OText>{parseDate(session.created_at)}</OText>
96
+ <OText>{parseDate(session.valid_thru)}</OText>
97
+ </DurationWrapper>
98
+ {session.current && (
99
+ <OText mLeft={15} style={{ flex: 1 }}>({t('CURRENT', 'Current')})</OText>
100
+ )}
101
+ <TouchableOpacity
102
+ onPress={() => onDeleteSession(session)}
103
+ >
104
+ <AntIcon name='close' size={16} color={theme.colors.red} />
105
+ </TouchableOpacity>
106
+ </SessionItem>
107
+ ))}
108
+ <OButton
109
+ text={t('DELETE_ALL_SESSIONS', 'Delete all sessions')}
110
+ isDisabled={actionState.loading}
111
+ textStyle={{ color: theme.colors.white, fontSize: 14 }}
112
+ onClick={() => onDeleteAllSessions(false, true)}
113
+ style={{ borderRadius: 7.6, marginTop: 30 }}
114
+ />
115
+ <OButton
116
+ text={t('DELETE_ALL_SESSIONS_EXCEPT_CURRENT', 'Delete all sessions except current')}
117
+ isDisabled={actionState.loading}
118
+ textStyle={{ color: theme.colors.white, fontSize: 14 }}
119
+ onClick={() => onDeleteAllSessions(false, false)}
120
+ style={{ borderRadius: 7.6, marginTop: 20 }}
121
+ />
122
+ </SessionsWrapper>
123
+ ) : (
124
+ <OText>{t('YOU_DONT_HAVE_ANY_SESSIONS', 'You don\'t have any sessions')}</OText>
125
+ )
126
+ )}
127
+ </>
128
+ ) : (
129
+ <View>
130
+ <OText>
131
+ {t('YOU_DONT_HAVE_ENABLED_THE_SESSIONS', 'You don\'t have enabled the sessions, please active them to have a better control of your sessions.')}
132
+ </OText>
133
+ <OButton
134
+ text={t('ACTIVE_SESSIONS', 'Active sessions')}
135
+ isDisabled={actionState.loading}
136
+ textStyle={{ color: theme.colors.white, fontSize: 14 }}
137
+ onClick={() => onDeleteAllSessions(true, false)}
138
+ style={{ borderRadius: 7.6, marginTop: 20 }}
139
+ />
140
+ </View>
141
+ )}
142
+ <OAlert
143
+ open={confirm.open}
144
+ title={confirm.title}
145
+ content={confirm.content}
146
+ onAccept={confirm.handleOnAccept}
147
+ onCancel={() => setConfirm({ ...confirm, open: false, title: null })}
148
+ onClose={() => setConfirm({ ...confirm, open: false, title: null })}
149
+ />
150
+ </>
151
+ )
152
+ }
153
+
154
+ export const Sessions = (props: SessionsParams) => {
155
+ const sessionsProps = {
156
+ ...props,
157
+ UIComponent: SessionsUI
158
+ }
159
+ return <SessionsController {...sessionsProps} />
160
+ }
@@ -0,0 +1,15 @@
1
+ import styled from 'styled-components/native'
2
+
3
+ export const SessionsWrapper = styled.View`
4
+ `
5
+ export const SessionItem = styled.View`
6
+ flex-direction: row;
7
+ align-items: center;
8
+ justify-content: space-between;
9
+ padding-vertical: 15px;
10
+ border-bottom-color: ${(props: any) => props.theme.colors.lightGray};
11
+ border-bottom-width: 1px;
12
+ `
13
+ export const DurationWrapper = styled.View`
14
+ /* flex-direction: row; */
15
+ `
@@ -126,7 +126,10 @@ const SignupFormUI = (props: SignupParams) => {
126
126
  const phoneRef = useRef<any>(null);
127
127
  const passwordRef = useRef<any>(null);
128
128
 
129
- const showInputPhoneNumber = (validationFields?.fields?.checkout?.cellphone?.enabled ?? false) || configs?.verification_phone_required?.value === '1'
129
+ const showInputPhoneNumber = (validationFields?.fields?.checkout?.cellphone?.enabled ?? false) || configs?.verification_phone_required?.value === '1'
130
+ const googleLoginEnabled = configs?.google_login_enabled?.value === '1' || !configs?.google_login_enabled?.enabled
131
+ const facebookLoginEnabled = configs?.facebook_login_enabled?.value === '1' || !configs?.facebook_login_enabled?.enabled
132
+ const appleLoginEnabled = configs?.apple_login_enabled?.value === '1' || !configs?.apple_login_enabled?.enabled
130
133
 
131
134
  const handleRefs = (ref: any, code: string) => {
132
135
  switch (code) {
@@ -684,7 +687,9 @@ const SignupFormUI = (props: SignupParams) => {
684
687
  <ButtonsWrapper>
685
688
  <SocialButtons>
686
689
  {(configs?.facebook_login?.value === 'true' || configs?.facebook_login?.value === '1') &&
687
- configs?.facebook_id?.value && (
690
+ configs?.facebook_id?.value &&
691
+ facebookLoginEnabled &&
692
+ (
688
693
  <FacebookLogin
689
694
  notificationState={notificationState}
690
695
  handleErrors={(err: any) => showToast(ToastType.Error, err)}
@@ -692,7 +697,7 @@ const SignupFormUI = (props: SignupParams) => {
692
697
  handleSuccessFacebookLogin={handleSuccessFacebook}
693
698
  />
694
699
  )}
695
- {(configs?.google_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null) && (
700
+ {(configs?.google_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null) && googleLoginEnabled && (
696
701
  <GoogleLogin
697
702
  notificationState={notificationState}
698
703
  webClientId={configs?.google_login_client_id?.value}
@@ -701,7 +706,7 @@ const SignupFormUI = (props: SignupParams) => {
701
706
  handleSuccessGoogleLogin={handleSuccessFacebook}
702
707
  />
703
708
  )}
704
- {(configs?.apple_login_client_id?.value !== '' && configs?.apple_login_client_id?.value !== null) && (
709
+ {(configs?.apple_login_client_id?.value !== '' && configs?.apple_login_client_id?.value !== null) && appleLoginEnabled && (
705
710
  <AppleLogin
706
711
  notificationState={notificationState}
707
712
  handleErrors={(err: any) => showToast(ToastType.Error, err)}
@@ -0,0 +1,282 @@
1
+ import React, { useState } from 'react';
2
+ import moment from 'moment';
3
+ import {
4
+ SingleOrderCard as SingleOrderCardController,
5
+ useUtils,
6
+ useLanguage
7
+ } from 'ordering-components/native';
8
+ import { StyleSheet, TouchableOpacity, View } from 'react-native';
9
+ import { useTheme } from 'styled-components/native';
10
+ import { OIcon, OText, OButton } from '../shared';
11
+ import IconAntDesign from 'react-native-vector-icons/AntDesign'
12
+ import { SingleOrderCardParams } from '../../types';
13
+
14
+ import {
15
+ Container,
16
+ InnerContainer,
17
+ Logo,
18
+ CardInfoWrapper,
19
+ ContentHeader,
20
+ ButtonWrapper,
21
+ ContentFooter,
22
+ UnreadMessageCounter,
23
+ Price
24
+ } from './styles';
25
+
26
+ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
27
+ const {
28
+ order,
29
+ reorderLoading,
30
+ handleReorder,
31
+ getOrderStatus,
32
+ handleFavoriteOrder,
33
+ onNavigationRedirect,
34
+ pastOrders,
35
+ isMessageView,
36
+ handleClickOrder
37
+ } = props;
38
+
39
+ const [{ parsePrice, optimizeImage }] = useUtils();
40
+ const [, t] = useLanguage();
41
+ const theme = useTheme();
42
+
43
+ const [reorderSelected, setReorderSelected] = useState<number | null>(null);
44
+
45
+ const allowedOrderStatus = [1, 2, 5, 6, 10, 11, 12];
46
+
47
+ const styles = StyleSheet.create({
48
+ logo: {
49
+ borderRadius: 8,
50
+ width: 64,
51
+ height: 64
52
+ },
53
+ logoWrapper: {
54
+ overflow: 'hidden',
55
+ backgroundColor: 'white',
56
+ borderRadius: 8,
57
+ shadowColor: '#000000',
58
+ shadowOffset: { width: 1, height: 1 },
59
+ shadowOpacity: 0.1,
60
+ shadowRadius: 1,
61
+ elevation: 3
62
+ },
63
+ buttonText: {
64
+ color: theme.colors.primary,
65
+ fontSize: 10,
66
+ marginLeft: 2,
67
+ marginRight: 2,
68
+ },
69
+ reorderLoading: {
70
+ width: 80,
71
+ height: 40,
72
+ borderRadius: 10,
73
+ },
74
+ reorderbutton: {
75
+ height: 23,
76
+ paddingLeft: 10,
77
+ paddingRight: 10,
78
+ borderRadius: 23,
79
+ shadowOpacity: 0,
80
+ backgroundColor: theme.colors.primaryContrast,
81
+ borderWidth: 0,
82
+ },
83
+ reviewButton: {
84
+ height: 23,
85
+ maxHeight: 23,
86
+ backgroundColor: theme.colors.white,
87
+ alignItems: 'center',
88
+ justifyContent: 'center',
89
+ paddingHorizontal: 10,
90
+ borderRadius: 23,
91
+ borderWidth: 1,
92
+ borderColor: theme.colors.primaryContrast,
93
+ marginRight: 2
94
+ },
95
+ infoText: {
96
+ flexDirection: 'row',
97
+ alignItems: 'center'
98
+ }
99
+ });
100
+
101
+ const handleReorderClick = (id: number) => {
102
+ setReorderSelected(id);
103
+ handleReorder && handleReorder(id);
104
+ };
105
+
106
+ const handleClickOrderReview = (order: any) => {
107
+ if (pastOrders) {
108
+ onNavigationRedirect &&
109
+ onNavigationRedirect('ReviewOrder', {
110
+ order: {
111
+ id: order?.id,
112
+ business_id: order?.business_id,
113
+ logo: order?.business?.logo,
114
+ driver: order?.driver,
115
+ products: order?.products,
116
+ review: order?.review,
117
+ user_review: order?.user_review
118
+ },
119
+ });
120
+ return
121
+ }
122
+ if (isMessageView) {
123
+ handleClickOrder(order?.uuid)
124
+ return
125
+ }
126
+ onNavigationRedirect &&
127
+ onNavigationRedirect('OrderDetails', { orderId: order?.uuid });
128
+ };
129
+
130
+ const handleClickViewOrder = (uuid: string) => {
131
+ onNavigationRedirect &&
132
+ onNavigationRedirect('OrderDetails', { orderId: uuid });
133
+ };
134
+
135
+ const formatDate = (date: string, option?: any) => {
136
+ return option?.utc ? moment.utc(date).format('DD/MM/YY \u2022 h:m a') : moment(date).format('DD/MM/YY \u2022 h:m a');
137
+ };
138
+
139
+ const handleChangeFavorite = () => {
140
+ handleFavoriteOrder && handleFavoriteOrder(!order?.favorite)
141
+ };
142
+
143
+ return (
144
+ <Container
145
+ onPress={() => handleClickViewOrder(order?.uuid)}
146
+ activeOpacity={0.7}
147
+ >
148
+ <InnerContainer>
149
+ {!!order.business?.logo && (
150
+ <Logo style={styles.logoWrapper}>
151
+ <OIcon
152
+ url={optimizeImage(order.business?.logo, 'h_300,c_limit')}
153
+ style={styles.logo}
154
+ />
155
+ </Logo>
156
+ )}
157
+ <CardInfoWrapper>
158
+ <ContentHeader>
159
+ <View style={{ flex: 1 }}>
160
+ <OText size={12} lineHeight={18} weight={'600'} numberOfLines={1} ellipsizeMode={'tail'}>
161
+ {order.business?.name}
162
+ </OText>
163
+ </View>
164
+ {!!!pastOrders && (
165
+ <>
166
+ {isMessageView ? (
167
+ <>
168
+ {order?.unread_count > 0 && (
169
+ <UnreadMessageCounter>
170
+ <OText size={12} color={theme.colors.primary} lineHeight={18} >
171
+ {order?.unread_count}
172
+ </OText>
173
+ </UnreadMessageCounter>
174
+ )}
175
+ </>
176
+ ) : (
177
+ <Price>
178
+ <OText size={12} lineHeight={18}>
179
+ {parsePrice(order?.summary?.total || order?.total)}
180
+ </OText>
181
+ </Price>
182
+ )}
183
+ </>
184
+ )}
185
+ {!!pastOrders && (
186
+ <ButtonWrapper>
187
+ {allowedOrderStatus.includes(parseInt(order?.status)) &&
188
+ !order.review && (
189
+ <TouchableOpacity
190
+ onPress={() => handleClickOrderReview(order)}
191
+ style={styles.reviewButton}>
192
+ <OText size={10} color={theme.colors.primary} numberOfLines={1}>
193
+ {t('REVIEW', 'Review')}
194
+ </OText>
195
+ </TouchableOpacity>
196
+ )}
197
+ {order.cart && (
198
+ <OButton
199
+ text={t('REORDER', 'Reorder')}
200
+ imgRightSrc={''}
201
+ textStyle={styles.buttonText}
202
+ style={
203
+ reorderLoading && order.id === reorderSelected
204
+ ? styles.reorderLoading
205
+ : styles.reorderbutton
206
+ }
207
+ onClick={() => handleReorderClick(order.id)}
208
+ isLoading={reorderLoading && order.id === reorderSelected}
209
+ />
210
+ )}
211
+ </ButtonWrapper>
212
+ )}
213
+ </ContentHeader>
214
+ <ContentFooter>
215
+ <View style={{ flex: 1 }}>
216
+ <View style={styles.infoText}>
217
+ {!!!pastOrders && (
218
+ <>
219
+ <OText
220
+ size={10}
221
+ space
222
+ color={theme.colors.textSecondary}
223
+ style={{ marginVertical: 3 }}
224
+ lineHeight={15}
225
+ numberOfLines={1}
226
+ >
227
+ {t('ORDER_NO', 'Order No') + '.'}
228
+ </OText>
229
+ <OText
230
+ size={10}
231
+ color={theme.colors.textSecondary}
232
+ style={{ marginVertical: 3 }}
233
+ lineHeight={15}
234
+ numberOfLines={1}
235
+ >
236
+ {order.id + ` \u2022 `}
237
+ </OText>
238
+ </>
239
+ )}
240
+ <OText
241
+ size={10}
242
+ lineHeight={15}
243
+ color={theme.colors.textSecondary}
244
+ style={{ marginVertical: 3 }}
245
+ numberOfLines={1}>
246
+ {order?.delivery_datetime_utc
247
+ ? formatDate(order?.delivery_datetime_utc)
248
+ : formatDate(order?.delivery_datetime, { utc: false })}
249
+ </OText>
250
+ </View>
251
+ <OText
252
+ color={theme.colors.primary}
253
+ size={10}
254
+ lineHeight={15}
255
+ numberOfLines={1}>
256
+ {getOrderStatus(order.status)?.value}
257
+ </OText>
258
+ </View>
259
+ <TouchableOpacity
260
+ onPress={handleChangeFavorite}
261
+ style={{ marginTop: 5 }}
262
+ >
263
+ <IconAntDesign
264
+ name={order?.favorite ? 'heart' : 'hearto'}
265
+ color={theme.colors.danger5}
266
+ size={16}
267
+ />
268
+ </TouchableOpacity>
269
+ </ContentFooter>
270
+ </CardInfoWrapper>
271
+ </InnerContainer>
272
+ </Container>
273
+ )
274
+ }
275
+
276
+ export const SingleOrderCard = (props: any) => {
277
+ const singleOrderCardProps = {
278
+ ...props,
279
+ UIComponent: SingleOrderCardUI
280
+ }
281
+ return <SingleOrderCardController {...singleOrderCardProps} />
282
+ }
@@ -0,0 +1,54 @@
1
+ import styled from 'styled-components/native'
2
+
3
+ export const Container = styled.TouchableOpacity`
4
+ border-radius: 7.6px;
5
+ box-shadow: 0 1px 2px #0000001A;
6
+ margin-bottom: 10px;
7
+ padding-vertical: 5px;
8
+ `
9
+
10
+ export const InnerContainer = styled.View`
11
+ flex-direction: row;
12
+ width: 100%;
13
+ `
14
+
15
+ export const Logo = styled.View`
16
+ border-radius: 7.6px;
17
+ margin-right: 12px;
18
+ `
19
+
20
+ export const CardInfoWrapper = styled.View`
21
+ flex: 1;
22
+ `
23
+
24
+ export const ContentHeader = styled.View`
25
+ flex-direction: row;
26
+ justify-content: space-between;
27
+ `
28
+
29
+ export const ButtonWrapper = styled.View`
30
+ flex-direction: row;
31
+ align-items: center;
32
+ `
33
+
34
+ export const ContentFooter = styled.View`
35
+ flex-direction: row;
36
+ width: 100%;
37
+ `
38
+
39
+ export const UnreadMessageCounter = styled.View`
40
+ justify-content: center;
41
+ align-items: center;
42
+ margin-left: 10px;
43
+ width: 24px;
44
+ height: 24px;
45
+ border-radius: 7.6px;
46
+ background-color: ${(props: any) => props.theme.colors.primaryContrast};
47
+ `
48
+
49
+ export const Price = styled.View`
50
+ justify-content: space-between;
51
+ align-items: flex-end;
52
+ margin-left: 10px;
53
+ width: 30%;
54
+ `