ordering-ui-react-native 0.15.21 → 0.15.23-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 (151) hide show
  1. package/package.json +5 -3
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/BusinessTypeFilter/index.tsx +12 -2
  4. package/src/components/BusinessTypeFilter/styles.tsx +1 -1
  5. package/src/components/BusinessesListing/index.tsx +1 -1
  6. package/src/components/Checkout/index.tsx +0 -1
  7. package/src/components/LanguageSelector/index.tsx +1 -0
  8. package/src/components/OrderDetails/index.tsx +26 -5
  9. package/src/components/PaymentOptions/index.tsx +9 -16
  10. package/src/components/PaymentOptionsWebView/index.tsx +123 -124
  11. package/src/components/StripeElementsForm/index.tsx +27 -48
  12. package/src/components/UserProfileForm/index.tsx +63 -6
  13. package/src/components/UserProfileForm/styles.tsx +8 -0
  14. package/src/components/VerifyPhone/styles.tsx +1 -2
  15. package/src/config.json +0 -2
  16. package/src/navigators/HomeNavigator.tsx +6 -0
  17. package/src/pages/BusinessProductsList.tsx +1 -0
  18. package/src/pages/BusinessesListing.tsx +1 -1
  19. package/src/pages/Checkout.tsx +1 -1
  20. package/src/pages/Sessions.tsx +22 -0
  21. package/src/types/index.tsx +3 -9
  22. package/src/utils/index.tsx +68 -1
  23. package/themes/business/index.tsx +2 -0
  24. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +56 -8
  25. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +5 -0
  26. package/themes/business/src/components/Chat/index.tsx +38 -86
  27. package/themes/business/src/components/Home/index.tsx +128 -55
  28. package/themes/business/src/components/Home/styles.tsx +8 -1
  29. package/themes/business/src/components/NewOrderNotification/index.tsx +59 -98
  30. package/themes/business/src/components/OrderDetails/Business.tsx +2 -1
  31. package/themes/business/src/components/OrderDetails/Delivery.tsx +22 -13
  32. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +151 -89
  33. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +91 -17
  34. package/themes/business/src/components/OrderDetails/styles.tsx +7 -0
  35. package/themes/business/src/components/OrdersListManager/index.tsx +874 -0
  36. package/themes/business/src/components/OrdersListManager/styles.tsx +123 -0
  37. package/themes/business/src/components/OrdersListManager/utils.tsx +216 -0
  38. package/themes/business/src/components/OrdersOption/index.tsx +53 -49
  39. package/themes/business/src/components/PreviousOrders/index.tsx +75 -22
  40. package/themes/business/src/types/index.tsx +2 -1
  41. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  42. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  43. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  44. package/themes/kiosk/src/components/BusinessController/index.tsx +27 -6
  45. package/themes/kiosk/src/components/BusinessController/styles.tsx +1 -1
  46. package/themes/kiosk/src/components/BusinessProductsListing/index.tsx +48 -21
  47. package/themes/kiosk/src/components/Cart/index.tsx +98 -24
  48. package/themes/kiosk/src/components/Cart/styles.tsx +6 -0
  49. package/themes/kiosk/src/components/CartBottomSheet/index.tsx +1 -1
  50. package/themes/kiosk/src/components/CartBottomSheet/styles.tsx +1 -1
  51. package/themes/kiosk/src/components/CartContent/index.tsx +13 -3
  52. package/themes/kiosk/src/components/CartItem/index.tsx +20 -8
  53. package/themes/kiosk/src/components/CategoriesMenu/index.tsx +6 -5
  54. package/themes/kiosk/src/components/CustomerName/index.tsx +89 -88
  55. package/themes/kiosk/src/components/Intro/index.tsx +13 -13
  56. package/themes/kiosk/src/components/LanguageSelector/index.tsx +12 -8
  57. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  58. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  59. package/themes/kiosk/src/components/OrderDetails/index.tsx +136 -41
  60. package/themes/kiosk/src/components/OrderDetails/styles.tsx +5 -0
  61. package/themes/kiosk/src/components/OrderSummary/index.tsx +1 -1
  62. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +10 -12
  63. package/themes/kiosk/src/components/ProductForm/index.tsx +174 -125
  64. package/themes/kiosk/src/components/ProductForm/styles.tsx +1 -1
  65. package/themes/kiosk/src/components/ProductOption/index.tsx +1 -0
  66. package/themes/kiosk/src/components/ProductOption/styles.tsx +1 -0
  67. package/themes/kiosk/src/components/UpsellingProducts/index.tsx +48 -34
  68. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  69. package/themes/kiosk/src/components/shared/OCard.tsx +112 -78
  70. package/themes/kiosk/src/types/index.d.ts +2 -0
  71. package/themes/original/index.tsx +178 -1
  72. package/themes/original/src/components/AddressForm/index.tsx +15 -10
  73. package/themes/original/src/components/AddressList/index.tsx +56 -18
  74. package/themes/original/src/components/AppleLogin/index.tsx +117 -78
  75. package/themes/original/src/components/BusinessBasicInformation/index.tsx +96 -45
  76. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +28 -1
  77. package/themes/original/src/components/BusinessController/index.tsx +52 -22
  78. package/themes/original/src/components/BusinessController/styles.tsx +22 -0
  79. package/themes/original/src/components/BusinessFeaturedController/index.tsx +20 -1
  80. package/themes/original/src/components/BusinessFeaturedController/styles.tsx +23 -0
  81. package/themes/original/src/components/BusinessListingSearch/index.tsx +4 -0
  82. package/themes/original/src/components/BusinessMenuList/index.tsx +11 -4
  83. package/themes/original/src/components/BusinessPreorder/index.tsx +141 -121
  84. package/themes/original/src/components/BusinessProductsCategories/index.tsx +7 -5
  85. package/themes/original/src/components/BusinessProductsList/index.tsx +127 -20
  86. package/themes/original/src/components/BusinessProductsList/styles.tsx +29 -2
  87. package/themes/original/src/components/BusinessProductsListing/index.tsx +92 -37
  88. package/themes/original/src/components/BusinessProductsListing/styles.tsx +22 -0
  89. package/themes/original/src/components/BusinessReviews/index.tsx +4 -25
  90. package/themes/original/src/components/BusinessTypeFilter/index.tsx +1 -2
  91. package/themes/original/src/components/BusinessesListing/index.tsx +48 -57
  92. package/themes/original/src/components/Cart/index.tsx +18 -14
  93. package/themes/original/src/components/CartContent/index.tsx +2 -2
  94. package/themes/original/src/components/Checkout/index.tsx +42 -27
  95. package/themes/original/src/components/ForgotPasswordForm/index.tsx +84 -4
  96. package/themes/original/src/components/GoogleMap/index.tsx +1 -0
  97. package/themes/original/src/components/Help/index.tsx +21 -4
  98. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +97 -89
  99. package/themes/original/src/components/Home/index.tsx +1 -1
  100. package/themes/original/src/components/LastOrders/index.tsx +12 -1
  101. package/themes/original/src/components/LoginForm/index.tsx +73 -2
  102. package/themes/original/src/components/LoginForm/styles.tsx +6 -1
  103. package/themes/original/src/components/MessageListing/index.tsx +10 -1
  104. package/themes/original/src/components/Messages/index.tsx +34 -25
  105. package/themes/original/src/components/Messages/styles.tsx +1 -3
  106. package/themes/original/src/components/MomentOption/index.tsx +10 -1
  107. package/themes/original/src/components/MomentOption/styles.tsx +1 -1
  108. package/themes/original/src/components/OrderDetails/index.tsx +34 -27
  109. package/themes/original/src/components/OrderDetails/styles.tsx +1 -2
  110. package/themes/original/src/components/OrderProgress/index.tsx +4 -4
  111. package/themes/original/src/components/OrderProgress/styles.tsx +1 -0
  112. package/themes/original/src/components/OrderSummary/index.tsx +2 -2
  113. package/themes/original/src/components/OrderTypeSelector/index.tsx +4 -2
  114. package/themes/original/src/components/OrdersOption/index.tsx +25 -33
  115. package/themes/original/src/components/OrdersOption/styles.tsx +0 -6
  116. package/themes/original/src/components/PaymentOptionWallet/index.tsx +10 -4
  117. package/themes/original/src/components/PaymentOptionWallet/styles.tsx +1 -1
  118. package/themes/original/src/components/PaymentOptions/index.tsx +9 -19
  119. package/themes/original/src/components/PreviousOrders/index.tsx +19 -13
  120. package/themes/original/src/components/ProductForm/index.tsx +40 -33
  121. package/themes/original/src/components/ProductForm/styles.tsx +2 -2
  122. package/themes/original/src/components/ProductOptionSubOption/index.tsx +5 -3
  123. package/themes/original/src/components/Promotions/index.tsx +250 -0
  124. package/themes/original/src/components/Promotions/styles.tsx +60 -0
  125. package/themes/original/src/components/ReviewOrder/index.tsx +10 -9
  126. package/themes/original/src/components/ReviewProducts/index.tsx +1 -1
  127. package/themes/original/src/components/Sessions/index.tsx +160 -0
  128. package/themes/original/src/components/Sessions/styles.tsx +15 -0
  129. package/themes/original/src/components/SingleProductCard/index.tsx +47 -21
  130. package/themes/original/src/components/SingleProductCard/styles.tsx +28 -1
  131. package/themes/original/src/components/StripeElementsForm/index.tsx +55 -72
  132. package/themes/original/src/components/TaxInformation/index.tsx +10 -4
  133. package/themes/original/src/components/UpsellingProducts/index.tsx +87 -71
  134. package/themes/original/src/components/UserDetails/index.tsx +4 -95
  135. package/themes/original/src/components/UserFormDetails/index.tsx +32 -31
  136. package/themes/original/src/components/UserProfile/index.tsx +62 -14
  137. package/themes/original/src/components/UserProfileForm/index.tsx +20 -18
  138. package/themes/original/src/components/VerifyPhone/index.tsx +10 -7
  139. package/themes/original/src/components/VerifyPhone/styles.tsx +2 -1
  140. package/themes/original/src/components/Wallets/index.tsx +75 -8
  141. package/themes/original/src/components/Wallets/styles.tsx +21 -0
  142. package/themes/original/src/components/shared/HeaderTitle.tsx +21 -0
  143. package/themes/original/src/components/shared/index.tsx +2 -0
  144. package/themes/original/src/config/constants.tsx +6 -6
  145. package/themes/original/src/types/index.tsx +46 -4
  146. package/themes/original/src/utils/index.tsx +12 -2
  147. package/themes/single-business/src/components/AddressList/index.tsx +1 -1
  148. package/themes/single-business/src/components/OrderTypeSelector/index.tsx +6 -6
  149. package/themes/single-business/src/components/UserProfile/index.tsx +1 -1
  150. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
  151. package/src/components/StripeMethodForm/index.tsx +0 -168
@@ -7,11 +7,10 @@ import {
7
7
  useConfirmSetupIntent,
8
8
  createPaymentMethod
9
9
  } from '@stripe/stripe-react-native';
10
- import configs from '../../config.json'
10
+
11
11
  import { ErrorMessage } from './styles';
12
12
 
13
13
  import { StripeElementsForm as StripeFormController } from './naked';
14
- import { StripeMethodForm } from '../StripeMethodForm';
15
14
  import { OButton, OText } from '../shared';
16
15
  import { useTheme } from 'styled-components/native';
17
16
 
@@ -23,10 +22,6 @@ const StripeElementsFormUI = (props: any) => {
23
22
  businessId,
24
23
  requirements,
25
24
  stripeTokenHandler,
26
- methodsPay,
27
- paymethod,
28
- onCancel,
29
- cart
30
25
  } = props;
31
26
 
32
27
  const theme = useTheme();
@@ -126,49 +121,33 @@ const StripeElementsFormUI = (props: any) => {
126
121
  <View style={styles.container}>
127
122
  {publicKey ? (
128
123
  <View style={{ flex: 1 }}>
129
- <StripeProvider
130
- publishableKey={publicKey}
131
- merchantIdentifier={`merchant.${configs.apple_app_id}`}
132
- >
133
- {methodsPay?.includes(paymethod) ? (
134
- <StripeMethodForm
135
- handleSource={handleSource}
136
- onCancel={onCancel}
137
- cart={cart}
138
- setErrors={setErrors}
139
- paymethod={paymethod}
140
- devMode={publicKey?.includes('test')}
141
- />
142
- ) : (
143
- <CardField
144
- postalCodeEnabled={true}
145
- cardStyle={{
146
- backgroundColor: '#FFFFFF',
147
- textColor: '#000000',
148
- }}
149
- style={{
150
- width: '100%',
151
- height: 50,
152
- marginVertical: 30,
153
- zIndex: 9999,
154
- }}
155
- onCardChange={(cardDetails: any) => setCard(cardDetails)}
156
- />
157
- )}
158
- </StripeProvider>
159
- {!methodsPay?.includes(paymethod) && (
160
- <OButton
161
- text={t('SAVE_CARD', 'Save card')}
162
- bgColor={isCompleted ? theme.colors.primary : theme.colors.backgroundGray}
163
- borderColor={isCompleted ? theme.colors.primary :theme.colors.backgroundGray}
164
- style={styles.btnAddStyle}
165
- textStyle={{color: 'white'}}
166
- imgRightSrc={null}
167
- onClick={() => handleSaveCard()}
168
- isDisabled={!isCompleted}
169
- isLoading={confirmSetupLoading || values.loadingAdd || createPmLoading}
124
+ <StripeProvider publishableKey={publicKey}>
125
+ <CardField
126
+ postalCodeEnabled={true}
127
+ cardStyle={{
128
+ backgroundColor: '#FFFFFF',
129
+ textColor: '#000000',
130
+ }}
131
+ style={{
132
+ width: '100%',
133
+ height: 50,
134
+ marginVertical: 30,
135
+ zIndex: 9999,
136
+ }}
137
+ onCardChange={(cardDetails: any) => setCard(cardDetails)}
170
138
  />
171
- )}
139
+ </StripeProvider>
140
+ <OButton
141
+ text={t('SAVE_CARD', 'Save card')}
142
+ bgColor={isCompleted ? theme.colors.primary : theme.colors.backgroundGray}
143
+ borderColor={isCompleted ? theme.colors.primary :theme.colors.backgroundGray}
144
+ style={styles.btnAddStyle}
145
+ textStyle={{color: 'white'}}
146
+ imgRightSrc={null}
147
+ onClick={() => handleSaveCard()}
148
+ isDisabled={!isCompleted}
149
+ isLoading={confirmSetupLoading || values.loadingAdd || createPmLoading}
150
+ />
172
151
  {!!errors && (
173
152
  <ErrorMessage>
174
153
  <OText
@@ -1,5 +1,6 @@
1
- import React from 'react';
1
+ import React, { useEffect, useState } from 'react';
2
2
  import {
3
+ UserFormDetails as UserProfileController,
3
4
  useSession,
4
5
  useLanguage,
5
6
  } from 'ordering-components/native';
@@ -13,6 +14,7 @@ import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityI
13
14
  import Ionicons from 'react-native-vector-icons/Ionicons'
14
15
 
15
16
  import {
17
+ OAlert,
16
18
  OIcon,
17
19
  OText
18
20
  } from '../shared';
@@ -20,18 +22,24 @@ import {
20
22
  Container,
21
23
  Names,
22
24
  UserInfoContainer,
23
- LanguageContainer
25
+ LanguageContainer,
26
+ RemoveAccountContainer
24
27
  } from './styles';
25
28
 
26
- export const UserProfileForm = (props: ProfileParams) => {
29
+ export const UserProfileFormUI = (props: ProfileParams) => {
27
30
  const {
28
- navigation
31
+ navigation,
32
+ handleRemoveAccount,
33
+ removeAccountState
29
34
  } = props;
30
35
 
31
36
  const theme = useTheme();
32
- const [{ user }] = useSession();
37
+ const [{ user }, { logout }] = useSession();
33
38
  const [, t] = useLanguage();
34
39
 
40
+ const isAdmin = user?.level === 0
41
+ const [confirm, setConfirm] = useState<any>({ open: false, content: null, handleOnAccept: null, id: null, title: null })
42
+
35
43
  const styles = StyleSheet.create({
36
44
  linkStyle: {
37
45
  color: theme.colors.primary,
@@ -44,6 +52,9 @@ export const UserProfileForm = (props: ProfileParams) => {
44
52
  },
45
53
  iconStyle: {
46
54
  fontSize: 24
55
+ },
56
+ removeAccount: {
57
+ flexDirection: 'row'
47
58
  }
48
59
  });
49
60
 
@@ -78,13 +89,31 @@ export const UserProfileForm = (props: ProfileParams) => {
78
89
  },
79
90
  chevronUp: {
80
91
  display: 'none'
81
- }
92
+ },
82
93
  })
83
94
 
84
95
  const onRedirect = (route: string, params?: any) => {
85
96
  navigation.navigate(route, params)
86
97
  }
87
98
 
99
+ const onRemoveAccount = () => {
100
+ setConfirm({
101
+ open: true,
102
+ content: [t('QUESTION_REMOVE_ACCOUNT', 'Are you sure that you want to remove your account?')],
103
+ title: t('ACCOUNT_ALERT', 'Account alert'),
104
+ handleOnAccept: () => {
105
+ setConfirm({ ...confirm, open: false })
106
+ handleRemoveAccount && handleRemoveAccount(user?.id)
107
+ }
108
+ })
109
+ }
110
+
111
+ useEffect(() => {
112
+ if (removeAccountState?.result === 'OK') {
113
+ logout()
114
+ }
115
+ }, [removeAccountState])
116
+
88
117
  return (
89
118
  <Container>
90
119
  <View>
@@ -134,7 +163,35 @@ export const UserProfileForm = (props: ProfileParams) => {
134
163
  <LanguageSelector pickerStyle={_pickerStyle} />
135
164
  </LanguageContainer>
136
165
  <LogoutButton />
166
+ <RemoveAccountContainer>
167
+ <TouchableOpacity
168
+ disabled={isAdmin}
169
+ style={styles.removeAccount}
170
+ onPress={() => onRemoveAccount()}
171
+ activeOpacity={0.7}
172
+ >
173
+ <OIcon src={theme.images.general.user} width={20} color={theme.colors.black} style={{ marginEnd: 14 }} />
174
+ <OText size={14} weight={'400'} style={{ opacity: isAdmin ? 0.5 : 1, top: 1 }} color={theme.colors.red}>{t('REMOVE_ACCOUNT', 'Remove account')}</OText>
175
+ </TouchableOpacity>
176
+ </RemoveAccountContainer>
137
177
  </View>
178
+ <OAlert
179
+ open={confirm.open}
180
+ title={confirm.title}
181
+ content={confirm.content}
182
+ onAccept={confirm.handleOnAccept}
183
+ onCancel={() => setConfirm({ ...confirm, open: false, title: null })}
184
+ onClose={() => setConfirm({ ...confirm, open: false, title: null })}
185
+ />
138
186
  </Container>
139
187
  );
140
188
  };
189
+
190
+ export const UserProfileForm = (props: any) => {
191
+ const profileProps = {
192
+ ...props,
193
+ UIComponent: UserProfileFormUI,
194
+ useSessionUser: true
195
+ };
196
+ return <UserProfileController {...profileProps} />;
197
+ };
@@ -35,3 +35,11 @@ export const LanguageContainer = styled.View`
35
35
  align-items: center;
36
36
  margin-bottom: 10px;
37
37
  `
38
+
39
+ export const RemoveAccountContainer = styled.View`
40
+ flex-direction: row;
41
+ justify-content: flex-start;
42
+ align-items: center;
43
+ margin-bottom: 10px;
44
+ margin-top: 15px;
45
+ `
@@ -2,7 +2,7 @@ import styled from 'styled-components/native';
2
2
 
3
3
  export const Container = styled.View`
4
4
  width: 100%;
5
- padding: 0 43px;
5
+ padding: 0 30px;
6
6
  `
7
7
 
8
8
  export const CountDownContainer = styled.View`
@@ -20,7 +20,6 @@ export const ResendSection = styled.View`
20
20
  display: flex;
21
21
  flex-direction: row;
22
22
  justify-content: center;
23
- flex-wrap: wrap;
24
23
  `
25
24
 
26
25
  export const WrappCountdown = styled.View`
package/src/config.json CHANGED
@@ -3,8 +3,6 @@
3
3
  "notification_app": "orderingapp",
4
4
  "app_name": "Ordering",
5
5
  "project": "reactdemo",
6
- "apple_app_id": "com.delivery",
7
- "android_app_id": "com.delivery",
8
6
  "api": {
9
7
  "url": "https://apiv4.ordering.co",
10
8
  "language": "en",
@@ -20,6 +20,7 @@ import Help from '../pages/Help'
20
20
  import HelpOrder from '../pages/HelpOrder'
21
21
  import HelpGuide from '../pages/HelpGuide'
22
22
  import HelpAccountAndPayment from '../pages/HelpAccountAndPayment'
23
+ import Sessions from '../pages/Sessions';
23
24
  import Splash from '../pages/Splash';
24
25
  import ProductDetails from '../pages/ProductDetails';
25
26
  const Stack = createStackNavigator();
@@ -164,6 +165,11 @@ const HomeNavigator = (e : any) => {
164
165
  component={HelpAccountAndPayment}
165
166
  options={{ headerShown: false }}
166
167
  />
168
+ <Stack.Screen
169
+ name="Sessions"
170
+ component={Sessions}
171
+ options={{ headerShown: false }}
172
+ />
167
173
  </>
168
174
  )}
169
175
  </>
@@ -31,6 +31,7 @@ const BusinessProductsList = (props: any) => {
31
31
  'open',
32
32
  'about',
33
33
  'description',
34
+ 'ribbon',
34
35
  'address',
35
36
  'location',
36
37
  'schedule',
@@ -21,7 +21,7 @@ const BusinessesListing = (props: any) => {
21
21
  ...props,
22
22
  isSearchByName: true,
23
23
  isSearchByDescription: true,
24
- propsToFetch: ['id', 'name', 'header', 'logo', 'location', 'schedule', 'open', 'delivery_price', 'distance', 'delivery_time', 'pickup_time', 'reviews', 'featured', 'offers', 'food', 'laundry', 'alcohol', 'groceries', 'slug'],
24
+ propsToFetch: ['id', 'name', 'header', 'logo', 'ribbon', 'location', 'schedule', 'open', 'delivery_price', 'distance', 'delivery_time', 'pickup_time', 'reviews', 'featured', 'offers', 'food', 'laundry', 'alcohol', 'groceries', 'slug'],
25
25
  onBusinessClick: (business: any) => {
26
26
  props.navigation.navigate('Business', { store: store || business.slug, header: business.header, logo: business.logo })
27
27
  }
@@ -7,7 +7,7 @@ import styled from 'styled-components/native';
7
7
 
8
8
  import { useOrder, useLanguage, ToastType, useToast } from 'ordering-components/native';
9
9
 
10
- const stripePaymentOptions = ['stripe', 'stripe_direct', 'stripe_connect', 'google_pay', 'apple_pay'];
10
+ const stripePaymentOptions = ['stripe', 'stripe_direct', 'stripe_connect'];
11
11
 
12
12
  const KeyboardView = styled.KeyboardAvoidingView`
13
13
  flex: 1;
@@ -0,0 +1,22 @@
1
+ import React from 'react'
2
+ import { Container } from '../../themes/original/src/layouts/Container'
3
+ import { Sessions as SessionsController } from '../../themes/original/src/components/Sessions'
4
+
5
+ interface Props {
6
+ navigation: any;
7
+ route: any;
8
+ }
9
+
10
+ const Sessions = (props: Props) => {
11
+ const sessionsProps = {
12
+ ...props
13
+ }
14
+
15
+ return (
16
+ <Container>
17
+ <SessionsController {...sessionsProps} />
18
+ </Container>
19
+ )
20
+ }
21
+
22
+ export default Sessions
@@ -31,6 +31,8 @@ export interface ProfileParams {
31
31
  validationFields?: any;
32
32
  showField?: any;
33
33
  isRequiredField?: any;
34
+ handleRemoveAccount?: any,
35
+ removeAccountState?: any
34
36
  }
35
37
 
36
38
  export interface AddressListParams {
@@ -287,6 +289,7 @@ export interface OrderDetailsParams {
287
289
  isFromRoot?: any;
288
290
  goToBusinessList?: any;
289
291
  onNavigationRedirect?: any;
292
+ getOrder?: () => {}
290
293
  }
291
294
  export interface ProductItemAccordionParams {
292
295
  key?: any;
@@ -474,12 +477,3 @@ export interface HelpGuideParams {
474
477
  export interface HelpAccountAndPaymentParams {
475
478
  navigation: any;
476
479
  }
477
-
478
- export interface StripeMethodFormParams {
479
- cart: any;
480
- handleSource: ({id, card} : {id : string, card : any}) => void;
481
- onCancel: () => void;
482
- setErrors: (error: string) => void;
483
- paymethod: string;
484
- devMode?: boolean;
485
- }
@@ -200,7 +200,7 @@ export const transformCountryCode = (countryCode : number) => {
200
200
  */
201
201
  export const reviewCommentList = (type: string) => {
202
202
  const [, t] = useLanguage()
203
-
203
+ // TODO: improve this function
204
204
  const reviews: any = {
205
205
  order: {
206
206
  1: {
@@ -386,3 +386,70 @@ export const transformCountryCode = (countryCode : number) => {
386
386
 
387
387
  return reviews[type]
388
388
  }
389
+
390
+ /**
391
+ * function to manage order comment list
392
+ * @param {string} param0 type of orders to return
393
+ * @returns object with orders dictionary
394
+ */
395
+ export const orderCommentList = (value: string) => {
396
+ const [, t] = useLanguage()
397
+ const dictionary: any = {
398
+ reject: 6,
399
+ forcePickUp: 9,
400
+ pickupFailed: 10,
401
+ forceDelivery: 11,
402
+ deliveryFailed: 12,
403
+ notReady: 14
404
+ }
405
+
406
+ const status = dictionary[value]
407
+
408
+ const messages: any = {
409
+ 6: [// on reject order
410
+ 'Very far away',
411
+ 'Driver/ vehicle incident',
412
+ 'Destination unreachable',
413
+ 'Unavailable driver',
414
+ 'Other'
415
+ ],
416
+ 9: [// on force pickup status
417
+ 'I forgot to complete it in the location',
418
+ 'I didn\'t have internet connection',
419
+ 'Other'
420
+ ],
421
+ 10: [// on pickup failed by driver
422
+ 'Very far away',
423
+ 'Driver/ vehicle incident',
424
+ 'Destination unreachable',
425
+ 'Store closed',
426
+ 'Unavailable driver',
427
+ 'Other'
428
+ ],
429
+ 11: [// on force delivery status
430
+ 'I forgot to complete it in the location',
431
+ 'I didn\'t have internet connection',
432
+ 'Other'
433
+ ],
434
+ 12: [// on delivery failed by driver
435
+ 'Very far away',
436
+ 'Driver/ vehicle incident',
437
+ 'Destination unreachable',
438
+ 'Recipient unavailable',
439
+ 'Refused- incorrect/ missing items',
440
+ 'Refused- damage',
441
+ 'Other'
442
+ ],
443
+ 14: [// on order not ready
444
+ 'Store didn\'t receive the order on time',
445
+ 'Store very busy',
446
+ 'Other'
447
+ ]
448
+ }
449
+
450
+ if (!messages[status]) return null
451
+
452
+ const list = messages[status].map((val: any, i: number) => ({ key: i, value: val, content: t(`REJECT_REASON_${val.toUpperCase()}`, val.replace(/_/g, ' ')) }))
453
+
454
+ return { list }
455
+ }
@@ -16,6 +16,7 @@ import { OrderMessage } from './src/components/OrderMessage';
16
16
  import { OrderDetailsBusiness } from './src/components/OrderDetails/Business';
17
17
  import { OrderDetailsDelivery } from './src/components/OrderDetails/Delivery';
18
18
  import { OrdersOption } from './src/components/OrdersOption';
19
+ import { OrdersListManager } from './src/components/OrdersListManager';
19
20
  import { OrdersOptionStatus } from './src/components/OrdersOptionStatus';
20
21
  import { OrdersOptionBusiness } from './src/components/OrdersOptionBusiness';
21
22
  import { OrdersOptionCity } from './src/components/OrdersOptionCity';
@@ -84,6 +85,7 @@ export {
84
85
  OrderDetailsDelivery,
85
86
  OrderMessage,
86
87
  OrdersOption,
88
+ OrdersListManager,
87
89
  OrdersOptionStatus,
88
90
  OrdersOptionBusiness,
89
91
  OrdersOptionCity,
@@ -9,12 +9,14 @@ import {
9
9
  } from 'react-native';
10
10
  import { useTheme } from 'styled-components/native';
11
11
  import { useLanguage } from 'ordering-components/native';
12
- import { Content, Timer, TimeField, Header, Action, Comments } from './styles';
12
+ import { Content, Timer, TimeField, Header, Action, Comments, CommentsButtonGroup } from './styles';
13
13
  import { FloatingButton } from '../FloatingButton';
14
14
  import { OText, OButton, OTextarea, OIconButton } from '../shared';
15
15
  import { AcceptOrRejectOrderParams } from '../../types';
16
16
  import { useSafeAreaInsets } from 'react-native-safe-area-context';
17
17
 
18
+ import { orderCommentList } from '../../../../../src/utils'
19
+
18
20
  export const AcceptOrRejectOrder = (props: AcceptOrRejectOrderParams) => {
19
21
  const {
20
22
  customerCellphone,
@@ -39,15 +41,33 @@ export const AcceptOrRejectOrder = (props: AcceptOrRejectOrderParams) => {
39
41
  const [min, setMin] = useState('00');
40
42
  const [time, setTime] = useState('');
41
43
  const [comments, setComments] = useState('');
44
+ const [commentList, setCommentList] = useState<any>([]);
42
45
  const [isKeyboardShow, setIsKeyboardShow] = useState(false);
43
46
  const { top, bottom } = useSafeAreaInsets()
44
47
 
48
+ const orderCommentsList = orderCommentList(action)
49
+
45
50
  let codeNumberPhone, numberPhone, numberToShow;
46
51
  const phoneNumber = customerCellphone;
47
52
  const titleOrder = t(orderTitle[action]?.key, orderTitle[action]?.text)
48
53
  const buttonText = t(orderTitle[action]?.btnKey, orderTitle[action]?.btnText)
49
54
  const showTextArea = ['reject', 'deliveryFailed', 'pickupFailed', 'notReady', 'forcePickUp', 'forceDelivery'].includes(action)
50
55
 
56
+ const isSelectedComment = (commentKey: number) => {
57
+ const found = commentList.find((comment: any) => comment?.key === commentKey)
58
+ return found
59
+ }
60
+
61
+ const handleChangeComments = (commentItem: any) => {
62
+ const found = commentList.find((comment: any) => comment?.key === commentItem.key)
63
+ if (found) {
64
+ const _comments = commentList.filter((comment: any) => comment?.key !== commentItem.key)
65
+ setCommentList(_comments)
66
+ } else {
67
+ setCommentList([...commentList, commentItem])
68
+ }
69
+ }
70
+
51
71
  const handleFocus = () => {
52
72
  viewRef?.current?.measure((x: any, y: any) => {
53
73
  scrollViewRef?.current?.scrollTo({ x: 0, y });
@@ -152,6 +172,12 @@ export const AcceptOrRejectOrder = (props: AcceptOrRejectOrderParams) => {
152
172
  const handleAcceptOrReject = () => {
153
173
  handleFixTime();
154
174
 
175
+ let _comments = ''
176
+ if (commentList.length > 0) {
177
+ commentList.map((comment: any) => (_comments += comment.content + '. '))
178
+ }
179
+ const _comment = _comments + comments
180
+
155
181
  let minsToSend = min;
156
182
 
157
183
  if (min > '60') minsToSend = '59';
@@ -165,7 +191,7 @@ export const AcceptOrRejectOrder = (props: AcceptOrRejectOrderParams) => {
165
191
  status: 7,
166
192
  },
167
193
  rejectByBusiness: {
168
- comment: comments,
194
+ comment: _comment,
169
195
  status: 5,
170
196
  },
171
197
  acceptByDriver: {
@@ -173,27 +199,27 @@ export const AcceptOrRejectOrder = (props: AcceptOrRejectOrderParams) => {
173
199
  status: 8,
174
200
  },
175
201
  rejectByDriver: {
176
- comment: comments,
202
+ comment: _comment,
177
203
  status: 6,
178
204
  },
179
205
  pickupFailedByDriver: {
180
- comment: comments,
206
+ comment: _comment,
181
207
  status: 10
182
208
  },
183
209
  deliveryFailedByDriver: {
184
- comment: comments,
210
+ comment: _comment,
185
211
  status: 12
186
212
  },
187
213
  orderNotReady: {
188
- comment: comments,
214
+ comment: _comment,
189
215
  status: 14
190
216
  },
191
217
  forcePickUp: {
192
- reasons: comments,
218
+ reasons: _comment,
193
219
  status: 9
194
220
  },
195
221
  forceDelivery: {
196
- reasons: comments,
222
+ reasons: _comment,
197
223
  status: 11
198
224
  }
199
225
  };
@@ -387,6 +413,28 @@ export const AcceptOrRejectOrder = (props: AcceptOrRejectOrderParams) => {
387
413
  onBlur={() => actions && action === 'accept' && timerRef?.current?.focus?.()}
388
414
  />
389
415
 
416
+ {orderCommentsList && (
417
+ <CommentsButtonGroup>
418
+ {orderCommentsList?.list?.map((comment: any) => (
419
+ <OButton
420
+ key={comment.key}
421
+ text={comment.content}
422
+ bgColor={isSelectedComment(comment.key) ? theme.colors.primary : theme.colors.tabBar}
423
+ borderColor={isSelectedComment(comment.key) ? theme.colors.primary : theme.colors.tabBar}
424
+ textStyle={{
425
+ color: isSelectedComment(comment.key) ? theme.colors.white : theme.colors.darkText,
426
+ fontSize: 12,
427
+ paddingRight: isSelectedComment(comment.key) ? 15 : 0
428
+ }}
429
+ style={{ height: 35, paddingLeft: 5, paddingRight: 5, marginHorizontal: 3, marginVertical: 10 }}
430
+ imgRightSrc={isSelectedComment(comment.key) ? theme.images.general.close : null}
431
+ imgRightStyle={{ tintColor: theme.colors.white, right: 5, margin: 5 }}
432
+ onClick={() => handleChangeComments(comment) }
433
+ />
434
+ ))}
435
+ </CommentsButtonGroup>
436
+ )}
437
+
390
438
  {showTextArea && (
391
439
  <Comments ref={viewRef}>
392
440
  <OTextarea
@@ -35,3 +35,8 @@ export const Comments = styled.View`
35
35
  margin-top: 20px;
36
36
  padding-bottom: 40px;
37
37
  `;
38
+
39
+ export const CommentsButtonGroup = styled.View`
40
+ flex-direction: row;
41
+ flex-wrap: wrap;
42
+ `