ordering-ui-react-native 0.12.79 → 0.12.80

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 (26) hide show
  1. package/package.json +1 -1
  2. package/src/components/BusinessesListing/index.tsx +35 -3
  3. package/src/components/BusinessesListing/styles.tsx +10 -0
  4. package/src/theme.json +3 -1
  5. package/src/utils/index.tsx +27 -0
  6. package/themes/doordash/src/components/BusinessesListing/index.tsx +33 -1
  7. package/themes/doordash/src/components/BusinessesListing/styles.tsx +11 -1
  8. package/themes/doordash/src/utils/index.tsx +27 -0
  9. package/themes/instacart/src/components/BusinessesListing/index.tsx +35 -3
  10. package/themes/instacart/src/components/BusinessesListing/styles.tsx +11 -1
  11. package/themes/instacart/src/utils/index.tsx +27 -0
  12. package/themes/original/index.tsx +2 -0
  13. package/themes/original/src/components/ActiveOrders/index.tsx +36 -16
  14. package/themes/original/src/components/ActiveOrders/styles.tsx +10 -0
  15. package/themes/original/src/components/MessageListing/index.tsx +298 -0
  16. package/themes/original/src/components/MessageListing/styles.tsx +16 -0
  17. package/themes/original/src/components/Messages/index.tsx +123 -81
  18. package/themes/original/src/components/Messages/styles.tsx +8 -0
  19. package/themes/original/src/components/UserProfile/index.tsx +10 -0
  20. package/themes/original/src/utils/index.tsx +18 -0
  21. package/themes/single-business/src/components/BusinessesListing/index.tsx +33 -0
  22. package/themes/single-business/src/components/BusinessesListing/styles.tsx +9 -0
  23. package/themes/single-business/src/utils/index.tsx +27 -0
  24. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +36 -3
  25. package/themes/uber-eats/src/components/BusinessesListing/styles.tsx +8 -0
  26. package/themes/uber-eats/src/utils/index.tsx +27 -0
@@ -1,5 +1,6 @@
1
1
  import React, { useEffect, useState } from 'react';
2
2
  import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder';
3
+ import Geolocation from '@react-native-community/geolocation'
3
4
  import {
4
5
  View,
5
6
  StyleSheet,
@@ -28,6 +29,7 @@ import {
28
29
  TopHeader,
29
30
  DropOptionButton,
30
31
  WrapSearchBar,
32
+ FarAwayMessage
31
33
  } from './styles';
32
34
 
33
35
  import { SearchBar } from '../SearchBar';
@@ -41,6 +43,8 @@ import { useSafeAreaInsets } from 'react-native-safe-area-context';
41
43
  import { BusinessFeaturedController } from '../BusinessFeaturedController';
42
44
  import { getTypesText } from '../../utils';
43
45
  import NavBar from '../NavBar';
46
+ import { getDistance } from '../../utils'
47
+ import Ionicons from 'react-native-vector-icons/Ionicons'
44
48
 
45
49
  const PIXELS_TO_SCROLL = 1000;
46
50
 
@@ -97,6 +101,15 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
97
101
  height: 260,
98
102
  paddingHorizontal: 40
99
103
  },
104
+ iconStyle: {
105
+ fontSize: 18,
106
+ color: theme.colors.warning5,
107
+ marginRight: 8
108
+ },
109
+ farAwayMsg: {
110
+ paddingVertical: 6,
111
+ paddingHorizontal: 20
112
+ }
100
113
  });
101
114
 
102
115
 
@@ -109,6 +122,7 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
109
122
  const { top } = useSafeAreaInsets();
110
123
 
111
124
  const [featuredBusiness, setFeaturedBusinesses] = useState(Array);
125
+ const [isFarAway, setIsFarAway] = useState(false)
112
126
 
113
127
  const configTypes = configs?.order_types_allowed?.value.split('|').map((value: any) => Number(value)) || [];
114
128
 
@@ -135,6 +149,19 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
135
149
  }
136
150
  }, [businessesList.businesses]);
137
151
 
152
+ useEffect(() => {
153
+ Geolocation.getCurrentPosition((pos) => {
154
+ const crd = pos.coords
155
+ const distance = getDistance(crd.latitude, crd.longitude, orderState?.options?.address?.location?.lat, orderState?.options?.address?.location?.lng)
156
+ if (distance > 20) setIsFarAway(true)
157
+ else setIsFarAway(false)
158
+ }, (err) => {
159
+ console.log(`ERROR(${err.code}): ${err.message}`)
160
+ }, {
161
+ enableHighAccuracy: true, timeout: 15000, maximumAge: 10000
162
+ })
163
+ }, [orderState?.options?.address?.location])
164
+
138
165
  return (
139
166
  <ScrollView
140
167
  style={styles.container}
@@ -171,6 +198,12 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
171
198
  {orderState?.options?.address?.address}
172
199
  </OText>
173
200
  </AddressInput>
201
+ {isFarAway && (
202
+ <FarAwayMessage style={styles.farAwayMsg}>
203
+ <Ionicons name='md-warning-outline' style={styles.iconStyle} />
204
+ <OText size={12} numberOfLines={1} ellipsizeMode={'tail'} color={theme.colors.textNormal}>{t('YOU_ARE_FAR_FROM_ADDRESS', 'Your are far from this address')}</OText>
205
+ </FarAwayMessage>
206
+ )}
174
207
  <OrderControlContainer>
175
208
  <View style={styles.wrapperOrderOptions}>
176
209
  <DropOptionButton
@@ -95,3 +95,12 @@ export const WrapSearchBar = styled.View`
95
95
  background-color: ${(props: any) => props.theme.colors.white};
96
96
  flex: 1;
97
97
  `
98
+
99
+ export const FarAwayMessage = styled.View`
100
+ flex-direction: row;
101
+ align-items: center;
102
+ background-color: ${(props: any) => props.theme.colors.warning1};
103
+ border-radius: 7.6px;
104
+ border: 1px solid ${(props: any) => props.theme.colors.warning5};
105
+ width: 100%;
106
+ `
@@ -251,3 +251,30 @@ export const getTextOrderStatus = (s: string, t: any) => {
251
251
  const objectStatus = orderStatus.find((o) => o.key === status)
252
252
  return objectStatus && objectStatus
253
253
  }
254
+
255
+ /**
256
+ * Function to transform degree to radian
257
+ * @param {number} value for transform
258
+ *
259
+ */
260
+ export const convertToRadian = (value: number) => {
261
+ return value * Math.PI / 180
262
+ }
263
+
264
+ /**
265
+ * Function to distance between two locations
266
+ * @param lat1 Lat for first location
267
+ * @param lon1 Lon for first location
268
+ * @param lat2 Lat for second location
269
+ * @param lon2 Lon for second location
270
+ */
271
+ export const getDistance = (lat1: any, lon1: any, lat2: any, lon2: any) => {
272
+ const R = 6371 // km
273
+ const dLat = convertToRadian(lat2 - lat1)
274
+ const dLon = convertToRadian(lon2 - lon1)
275
+ const curLat1 = convertToRadian(lat1)
276
+ const curLat2 = convertToRadian(lat2)
277
+ const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(curLat1) * Math.cos(curLat2)
278
+ const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))
279
+ return R * c
280
+ }
@@ -1,7 +1,10 @@
1
- import React, { useState } from 'react'
1
+ import React, { useState, useEffect } from 'react'
2
2
  import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder'
3
3
  import { View, StyleSheet, ScrollView, Platform, PanResponder, I18nManager } from 'react-native'
4
4
  import MaterialIcon from 'react-native-vector-icons/MaterialIcons'
5
+ import Geolocation from '@react-native-community/geolocation'
6
+ import Ionicons from 'react-native-vector-icons/Ionicons'
7
+
5
8
  import {
6
9
  BusinessList as BusinessesListingController,
7
10
  useLanguage,
@@ -13,7 +16,7 @@ import {
13
16
  useToast
14
17
  } from 'ordering-components/native'
15
18
 
16
- import { BusinessListContainer, Divider, Search, OrderControlContainer, AddressInput, WrapMomentOption } from './styles'
19
+ import { BusinessListContainer, Divider, Search, OrderControlContainer, AddressInput, WrapMomentOption, FarAwayMessage } from './styles'
17
20
 
18
21
  import NavBar from '../NavBar'
19
22
  import { SearchBar } from '../SearchBar'
@@ -27,6 +30,7 @@ import { OrderTypeSelector } from '../OrderTypeSelector'
27
30
  import { MomentOption } from '../MomentOption'
28
31
  import { HighestRatedBusinesses } from '../HighestRatedBusinesses'
29
32
  import { useTheme } from 'styled-components/native'
33
+ import { getDistance } from '../../utils'
30
34
 
31
35
  const PIXELS_TO_SCROLL = 1200
32
36
 
@@ -61,7 +65,16 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
61
65
  borderColor: theme.colors.backgroundGray,
62
66
  borderWidth: 1,
63
67
  borderRadius: 10,
64
- }
68
+ },
69
+ iconStyle: {
70
+ fontSize: 18,
71
+ color: theme.colors.warning5,
72
+ marginRight: 8
73
+ },
74
+ farAwayMsg: {
75
+ paddingVertical: 6,
76
+ paddingHorizontal: 20
77
+ }
65
78
  })
66
79
 
67
80
  const [, t] = useLanguage()
@@ -73,6 +86,7 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
73
86
 
74
87
  const [openMomentOption, setOpenMomentOption] = useState(false)
75
88
  const configTypes = configs?.order_types_allowed?.value.split('|').map((value: any) => Number(value)) || []
89
+ const [isFarAway, setIsFarAway] = useState(false)
76
90
 
77
91
  const handleScroll = ({ nativeEvent }: any) => {
78
92
  const y = nativeEvent.contentOffset.y
@@ -85,6 +99,19 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
85
99
  }
86
100
  }
87
101
 
102
+ useEffect(() => {
103
+ Geolocation.getCurrentPosition((pos) => {
104
+ const crd = pos.coords
105
+ const distance = getDistance(crd.latitude, crd.longitude, orderState?.options?.address?.location?.lat, orderState?.options?.address?.location?.lng)
106
+ if (distance > 20) setIsFarAway(true)
107
+ else setIsFarAway(false)
108
+ }, (err) => {
109
+ console.log(`ERROR(${err.code}): ${err.message}`)
110
+ }, {
111
+ enableHighAccuracy: true, timeout: 15000, maximumAge: 10000
112
+ })
113
+ }, [orderState?.options?.address?.location])
114
+
88
115
  return (
89
116
  <BusinessListContainer>
90
117
  {!auth && (
@@ -114,6 +141,12 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
114
141
  style={{ marginRight: 10 }}
115
142
  />
116
143
  </AddressInput>
144
+ {isFarAway && (
145
+ <FarAwayMessage style={styles.farAwayMsg}>
146
+ <Ionicons name='md-warning-outline' style={styles.iconStyle} />
147
+ <OText size={12} numberOfLines={1} ellipsizeMode={'tail'} color={theme.colors.textNormal}>{t('YOU_ARE_FAR_FROM_ADDRESS', 'Your are far from this address')}</OText>
148
+ </FarAwayMessage>
149
+ )}
117
150
  <View style={styles.wrapperOrderOptions}>
118
151
  <OrderTypeSelector configTypes={configTypes} />
119
152
  <WrapMomentOption
@@ -52,3 +52,11 @@ export const WrapMomentOption = styled.TouchableOpacity`
52
52
  margin-horizontal: 10px;
53
53
  max-width: 240px;
54
54
  `
55
+
56
+ export const FarAwayMessage = styled.View`
57
+ flex-direction: row;
58
+ align-items: center;
59
+ background-color: ${(props: any) => props.theme.colors.warning1};
60
+ border-radius: 7.6px;
61
+ border: 1px solid ${(props: any) => props.theme.colors.warning5};
62
+ `
@@ -162,3 +162,30 @@ export const transformCountryCode = (countryCode : number) => {
162
162
  return parser(value)
163
163
  }
164
164
  }
165
+
166
+ /**
167
+ * Function to transform degree to radian
168
+ * @param {number} value for transform
169
+ *
170
+ */
171
+ export const convertToRadian = (value: number) => {
172
+ return value * Math.PI / 180
173
+ }
174
+
175
+ /**
176
+ * Function to distance between two locations
177
+ * @param lat1 Lat for first location
178
+ * @param lon1 Lon for first location
179
+ * @param lat2 Lat for second location
180
+ * @param lon2 Lon for second location
181
+ */
182
+ export const getDistance = (lat1: any, lon1: any, lat2: any, lon2: any) => {
183
+ const R = 6371 // km
184
+ const dLat = convertToRadian(lat2 - lat1)
185
+ const dLon = convertToRadian(lon2 - lon1)
186
+ const curLat1 = convertToRadian(lat1)
187
+ const curLat2 = convertToRadian(lat2)
188
+ const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(curLat1) * Math.cos(curLat2)
189
+ const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))
190
+ return R * c
191
+ }