ordering-ui-react-native 0.15.39 → 0.15.42

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ordering-ui-react-native",
3
- "version": "0.15.39",
3
+ "version": "0.15.42",
4
4
  "description": "Reusable components made in react native",
5
5
  "main": "src/index.tsx",
6
6
  "author": "ordering.inc",
@@ -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',
@@ -60,6 +60,7 @@ import {
60
60
  OAlert,
61
61
  OModal,
62
62
  OBottomPopup,
63
+ HeaderTitle
63
64
  } from './src/components/shared';
64
65
 
65
66
  import { Container } from './src/layouts/Container';
@@ -134,6 +135,7 @@ export {
134
135
  OAlert,
135
136
  OModal,
136
137
  OBottomPopup,
138
+ HeaderTitle,
137
139
 
138
140
  // layout
139
141
  Container,
@@ -108,6 +108,9 @@ const AddressFormUI = (props: AddressFormParams) => {
108
108
  top: 12,
109
109
  zIndex: 1002,
110
110
  },
111
+ wrapperNavbar: Platform.OS === 'ios'
112
+ ? { paddingVertical: 0, paddingHorizontal: 40 }
113
+ : { paddingVertical: 20, paddingHorizontal: 40 }
111
114
  });
112
115
 
113
116
  const [, t] = useLanguage();
@@ -500,16 +503,18 @@ const AddressFormUI = (props: AddressFormParams) => {
500
503
  keyboardShouldPersistTaps='always'
501
504
  listViewDisplayed={false}
502
505
  >
503
- <NavBar
504
- title={t('WHERE_DO_WE_DELIVERY', 'Where do we delivery?')}
505
- titleAlign={'center'}
506
- onActionLeft={goToBack}
507
- showCall={false}
508
- paddingTop={20}
509
- btnStyle={{ paddingLeft: 40 }}
510
- titleStyle={{ fontSize: 14 }}
511
- titleWrapStyle={{ paddingHorizontal: 0 }}
512
- />
506
+ <View style={styles.wrapperNavbar}>
507
+ <NavBar
508
+ title={t('WHERE_DO_WE_DELIVERY', 'Where do we delivery?')}
509
+ titleAlign={'center'}
510
+ onActionLeft={goToBack}
511
+ showCall={false}
512
+ btnStyle={{ paddingLeft: 0 }}
513
+ style={{ flexDirection: 'column', alignItems: 'flex-start' }}
514
+ titleWrapStyle={{ paddingHorizontal: 0 }}
515
+ titleStyle={{ marginRight: 0, marginLeft: 0 }}
516
+ />
517
+ </View>
513
518
  <TouchableWithoutFeedback onPress={Keyboard.dismiss}>
514
519
  <AddressFormContainer style={{ height: 600, overflow: 'scroll' }}>
515
520
  <View>
@@ -1,7 +1,7 @@
1
1
  import React, { useEffect } from 'react'
2
2
  import { AddressList as AddressListController, useLanguage, useOrder, useSession } from 'ordering-components/native'
3
3
  import { AddressListContainer, AddressItem } from './styles'
4
- import { StyleSheet, View } from 'react-native'
4
+ import { Platform, StyleSheet, View } from 'react-native'
5
5
  import { OButton, OText, OAlert, OModal, OIcon } from '../shared'
6
6
  import { Container } from '../../layouts/Container'
7
7
  import { AddressListParams } from '../../types'
@@ -261,6 +261,32 @@ const AddressListUI = (props: AddressListParams) => {
261
261
  )}
262
262
  {!addressList.loading && !addressList.error && (
263
263
  <>
264
+ {addressList?.addresses?.length === 0 && (
265
+ <View
266
+ style={{
267
+ flexDirection: 'column',
268
+ paddingHorizontal: 10,
269
+ paddingTop: 20
270
+ }}
271
+ >
272
+ <OText
273
+ size={24}
274
+ lineHeight={36}
275
+ weight={Platform.OS === 'ios' ? '600' : 'bold'}
276
+ style={{
277
+ textAlign: 'center',
278
+ marginRight: 40,
279
+ color: theme.colors.textNormal,
280
+ paddingHorizontal: 0,
281
+ width: '100%',
282
+ marginLeft: 0
283
+ }}
284
+ >
285
+ {t('ADDRESS_LIST', 'Address List')}
286
+ </OText>
287
+ </View>
288
+ )}
289
+
264
290
  <OButton
265
291
  text={t('ADD_NEW_ADDRESS', 'Add new Address')}
266
292
  imgRightSrc=''
@@ -4,7 +4,7 @@ import { useUtils, useOrder, useLanguage } from 'ordering-components/native';
4
4
  import { useTheme } from 'styled-components/native';
5
5
  import { OIcon, OText, OModal } from '../shared';
6
6
  import { BusinessBasicInformationParams } from '../../types';
7
- import { convertHoursToMinutes } from '../../utils';
7
+ import { convertHoursToMinutes, shape } from '../../utils';
8
8
  import { BusinessInformation } from '../BusinessInformation';
9
9
  import { BusinessReviews } from '../BusinessReviews';
10
10
  import dayjs from 'dayjs';
@@ -22,6 +22,8 @@ import {
22
22
  BusinessInfoItem,
23
23
  WrapReviews,
24
24
  WrapBusinessInfo,
25
+ TitleWrapper,
26
+ RibbonBox
25
27
  } from './styles';
26
28
  import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder';
27
29
  const types = ['food', 'laundry', 'alcohol', 'groceries'];
@@ -121,9 +123,29 @@ export const BusinessBasicInformation = (
121
123
  <PlaceholderLine height={30} width={20} />
122
124
  </Placeholder>
123
125
  ) : (
124
- <OText size={24} weight={'600'}>
125
- {business?.name}
126
- </OText>
126
+ <TitleWrapper>
127
+ <OText size={24} weight={'600'}>
128
+ {business?.name}
129
+ </OText>
130
+ {business?.ribbon?.enabled && (
131
+ <RibbonBox
132
+ bgColor={business?.ribbon?.color}
133
+ isRoundRect={business?.ribbon?.shape === shape?.rectangleRound}
134
+ isCapsule={business?.ribbon?.shape === shape?.capsuleShape}
135
+ >
136
+ <OText
137
+ size={10}
138
+ weight={'400'}
139
+ color={theme.colors.white}
140
+ numberOfLines={2}
141
+ ellipsizeMode='tail'
142
+ lineHeight={13}
143
+ >
144
+ {business?.ribbon?.text}
145
+ </OText>
146
+ </RibbonBox>
147
+ )}
148
+ </TitleWrapper>
127
149
  )}
128
150
  </BusinessInfoItem>
129
151
  {loading ? (
@@ -1,4 +1,4 @@
1
- import styled from 'styled-components/native';
1
+ import styled, { css } from 'styled-components/native';
2
2
  import { Platform } from 'react-native';
3
3
 
4
4
  export const BusinessContainer = styled.View`
@@ -41,3 +41,30 @@ export const WrapBusinessInfo = styled.TouchableOpacity`
41
41
  top: 16px;
42
42
  end: 39px;
43
43
  `;
44
+
45
+ export const TitleWrapper = styled.View`
46
+ width: 100%;
47
+ flex-direction: row;
48
+ align-items: center;
49
+ justify-content: space-between;
50
+ `
51
+
52
+ export const RibbonBox = styled.View`
53
+ margin-left: 5px;
54
+ background-color: ${(props: any) => props.theme.colors.primary};
55
+ padding: 2px 8px;
56
+ max-width: 180px;
57
+ align-self: flex-start;
58
+
59
+ ${(props: any) => props.bgColor && css`
60
+ background-color: ${props.bgColor};
61
+ `}
62
+
63
+ ${(props: any) => props.isRoundRect && css`
64
+ border-radius: 7.6px;
65
+ `}
66
+
67
+ ${(props: any) => props.isCapsule && css`
68
+ border-radius: 50px;
69
+ `}
70
+ `
@@ -45,9 +45,6 @@ export const BusinessControllerUI = (props: BusinessControllerParams) => {
45
45
  const [orderState] = useOrder();
46
46
  const [, t] = useLanguage();
47
47
  const theme = useTheme()
48
- const [{ configs }] = useConfig();
49
- const isPreOrderSetting = configs?.preorder_status_enabled?.value === '1'
50
-
51
48
  const styles = StyleSheet.create({
52
49
  headerStyle: {
53
50
  borderTopLeftRadius: 7.6,
@@ -115,7 +112,7 @@ export const BusinessControllerUI = (props: BusinessControllerParams) => {
115
112
  };
116
113
 
117
114
  const handleBusinessClick = (selectedBusiness: any) => {
118
- if (business?.open || !isPreOrderSetting) handleClick && handleClick(selectedBusiness)
115
+ if (business?.open) handleClick && handleClick(selectedBusiness)
119
116
  else {
120
117
  navigation.navigate('BusinessPreorder', { business: selectedBusiness, handleBusinessClick: handleClick })
121
118
  }
@@ -111,7 +111,7 @@ const BusinessProductsCategoriesUI = (props: any) => {
111
111
  categories.length &&
112
112
  categories.map((category: any) => (
113
113
  <Tab
114
- key={category.name}
114
+ key={category.id}
115
115
  onPress={() => handleCategoryScroll(category)}
116
116
  style={[
117
117
  category.id === 'featured' && !featured && styles.featuredStyle,
@@ -4,11 +4,12 @@ import { SingleProductCard } from '../SingleProductCard';
4
4
  import { NotFoundSource } from '../NotFoundSource';
5
5
  import { BusinessProductsListParams } from '../../types';
6
6
  import { OButton, OIcon, OModal, OText } from '../shared';
7
- import { ProductsContainer, ErrorMessage, WrapperNotFound } from './styles';
7
+ import { ProductsContainer, ErrorMessage, WrapperNotFound, RibbonBox } from './styles';
8
8
  import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder';
9
9
  import { View, ScrollView } from 'react-native';
10
10
  import { StyleSheet } from 'react-native';
11
11
  import { useTheme } from 'styled-components/native';
12
+ import { shape } from '../../utils'
12
13
 
13
14
  const BusinessProductsListUI = (props: BusinessProductsListParams) => {
14
15
  const {
@@ -110,6 +111,24 @@ const BusinessProductsListUI = (props: BusinessProductsListParams) => {
110
111
  <OText size={16} weight="600">
111
112
  {category.name}
112
113
  </OText>
114
+ {category?.ribbon?.enabled && (
115
+ <RibbonBox
116
+ bgColor={category?.ribbon?.color}
117
+ isRoundRect={category?.ribbon?.shape === shape?.rectangleRound}
118
+ isCapsule={category?.ribbon?.shape === shape?.capsuleShape}
119
+ >
120
+ <OText
121
+ size={10}
122
+ weight={'400'}
123
+ color={theme.colors.white}
124
+ numberOfLines={2}
125
+ ellipsizeMode='tail'
126
+ lineHeight={13}
127
+ >
128
+ {category?.ribbon?.text}
129
+ </OText>
130
+ </RibbonBox>
131
+ )}
113
132
  </View>
114
133
  {!!category?.description && (
115
134
  <View style={{ position: 'relative' }}>
@@ -1,4 +1,4 @@
1
- import styled from 'styled-components/native'
1
+ import styled, { css } from 'styled-components/native'
2
2
 
3
3
  export const ProductsContainer = styled.View`
4
4
  `
@@ -11,4 +11,23 @@ export const ErrorMessage = styled.View`
11
11
 
12
12
  export const WrapperNotFound = styled.View`
13
13
  height: 500px;
14
+ `
15
+
16
+ export const RibbonBox = styled.View`
17
+ margin-left: 5px;
18
+ background-color: ${(props: any) => props.theme.colors.primary};
19
+ padding: 2px 8px;
20
+ max-width: 180px;
21
+
22
+ ${(props: any) => props.bgColor && css`
23
+ background-color: ${props.bgColor};
24
+ `}
25
+
26
+ ${(props: any) => props.isRoundRect && css`
27
+ border-radius: 7.6px;
28
+ `}
29
+
30
+ ${(props: any) => props.isCapsule && css`
31
+ border-radius: 50px;
32
+ `}
14
33
  `
@@ -61,7 +61,6 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
61
61
  handleChangeSearch,
62
62
  businessId
63
63
  } = props;
64
-
65
64
  const theme = useTheme();
66
65
  const isFocused = useIsFocused();
67
66
  const appState = useRef(AppState.currentState)
@@ -22,9 +22,9 @@ export const CartContent = (props: any) => {
22
22
  <CCContainer>
23
23
  {isOrderStateCarts && carts?.length > 0 && (
24
24
  <>
25
- <OText size={24} lineHeight={36} weight={'600'} style={{ marginBottom: 20 }}>
25
+ {/* <OText size={24} lineHeight={36} weight={'600'} style={{ marginBottom: 20 }}>
26
26
  {carts.length > 1 ? t('MY_CARTS', 'My Carts') : t('CART', 'Cart')}
27
- </OText>
27
+ </OText> */}
28
28
  {carts.map((cart: any, i: number) => (
29
29
  <CCList key={i} style={{ overflow: 'visible' }}>
30
30
  {cart.products.length > 0 && (
@@ -540,6 +540,11 @@ const styles = StyleSheet.create({
540
540
 
541
541
  export const Messages = (props: MessagesParams) => {
542
542
  const [allMessages, setAllMessages] = useState(props.messages)
543
+
544
+ useEffect(() => {
545
+ setAllMessages(props.messages)
546
+ }, [props.messages])
547
+
543
548
  const MessagesProps = {
544
549
  ...props,
545
550
  UIComponent: MessagesUI,
@@ -1,7 +1,5 @@
1
-
2
1
  import styled, { css } from 'styled-components/native'
3
2
 
4
-
5
3
  export const Wrapper = styled.View`
6
4
  flex: 1;
7
5
  background-color: ${(props: any) => props.theme.colors.white};
@@ -39,4 +37,4 @@ export const MessageTypeItem = styled.View`
39
37
  ${({ active }: any) => active && css`
40
38
  background-color: ${(props: any) => props.theme.colors.whiteGray};
41
39
  `}
42
- `
40
+ `
@@ -7,10 +7,11 @@ import {
7
7
  } from 'ordering-components/native';
8
8
  import { useTheme } from 'styled-components/native';
9
9
  import { SingleProductCardParams } from '../../types';
10
- import { CardContainer, CardInfo, SoldOut, QuantityContainer, PricesContainer } from './styles';
10
+ import { CardContainer, CardInfo, SoldOut, QuantityContainer, PricesContainer, RibbonBox, LogoWrapper } from './styles';
11
11
  import { StyleSheet } from 'react-native';
12
12
  import { OText, OIcon } from '../shared';
13
13
  import FastImage from 'react-native-fast-image'
14
+ import { shape } from '../../utils';
14
15
 
15
16
  export const SingleProductCard = (props: SingleProductCardParams) => {
16
17
  const {
@@ -46,8 +47,7 @@ export const SingleProductCard = (props: SingleProductCardParams) => {
46
47
  productStyle: {
47
48
  width: 75,
48
49
  height: 75,
49
- borderRadius: 7.6,
50
- marginStart: 12
50
+ borderRadius: 7.6
51
51
  },
52
52
  quantityContainer: {
53
53
  position: 'absolute',
@@ -136,21 +136,42 @@ export const SingleProductCard = (props: SingleProductCardParams) => {
136
136
  {product?.description}
137
137
  </OText>
138
138
  </CardInfo>
139
- {product?.images ? (
140
- <FastImage
141
- style={styles.productStyle}
142
- source={{
143
- uri: optimizeImage(product?.images, 'h_250,c_limit'),
144
- priority: FastImage.priority.normal,
145
- }}
146
- resizeMode={FastImage.resizeMode.cover}
147
- />
148
- ) : (
149
- <OIcon
150
- src={theme?.images?.dummies?.product}
151
- style={styles.productStyle}
152
- />
153
- )}
139
+ <LogoWrapper>
140
+ {product?.ribbon?.enabled && (
141
+ <RibbonBox
142
+ bgColor={product?.ribbon?.color}
143
+ isRoundRect={product?.ribbon?.shape === shape?.rectangleRound}
144
+ isCapsule={product?.ribbon?.shape === shape?.capsuleShape}
145
+ >
146
+ <OText
147
+ size={10}
148
+ weight={'400'}
149
+ color={theme.colors.white}
150
+ numberOfLines={2}
151
+ ellipsizeMode='tail'
152
+ lineHeight={13}
153
+ >
154
+ {product?.ribbon?.text}
155
+ </OText>
156
+ </RibbonBox>
157
+ )}
158
+ {product?.images ? (
159
+ <FastImage
160
+ style={styles.productStyle}
161
+ source={{
162
+ uri: optimizeImage(product?.images, 'h_250,c_limit'),
163
+ priority: FastImage.priority.normal,
164
+ }}
165
+ resizeMode={FastImage.resizeMode.cover}
166
+ />
167
+ ) : (
168
+ <OIcon
169
+ src={theme?.images?.dummies?.product}
170
+ style={styles.productStyle}
171
+ />
172
+ )}
173
+ </LogoWrapper>
174
+
154
175
  {(isSoldOut || maxProductQuantity <= 0) && (
155
176
  <SoldOut>
156
177
  <OText size={12} weight="bold" color={theme.colors.textSecondary} style={styles.soldOutTextStyle}>
@@ -1,4 +1,4 @@
1
- import styled from 'styled-components/native'
1
+ import styled, { css } from 'styled-components/native'
2
2
 
3
3
  export const CardContainer = styled.TouchableOpacity`
4
4
  flex: 1;
@@ -31,3 +31,30 @@ export const PricesContainer = styled.View`
31
31
  flex-direction: row;
32
32
  align-items: center;
33
33
  `
34
+
35
+ export const LogoWrapper = styled.View`
36
+ position: relative;
37
+ margin-left: 12px;
38
+ `
39
+
40
+ export const RibbonBox = styled.View`
41
+ position: absolute;
42
+ z-index: 1;
43
+ top: -4px;
44
+ right: -4px;
45
+ background-color: ${(props: any) => props.theme.colors.primary};
46
+ padding: 1px 8px;
47
+ max-width: 60px;
48
+
49
+ ${(props: any) => props.bgColor && css`
50
+ background-color: ${props.bgColor};
51
+ `}
52
+
53
+ ${(props: any) => props.isRoundRect && css`
54
+ border-radius: 7.6px;
55
+ `}
56
+
57
+ ${(props: any) => props.isCapsule && css`
58
+ border-radius: 50px;
59
+ `}
60
+ `
@@ -136,10 +136,10 @@ const ProfileListUI = (props: ProfileParams) => {
136
136
  }
137
137
 
138
138
  return (
139
- <View style={{ flex: 1, height: height - top - bottom - 62 }}>
140
- <OText size={24} style={{ marginTop: 15, paddingHorizontal: 40 }}>
139
+ <View style={{ flex: 1, height: height - top - bottom - 62, paddingTop: 20 }}>
140
+ {/* <OText size={24} style={{ marginTop: 15, paddingHorizontal: 40 }}>
141
141
  {t('PROFILE', 'Profile')}
142
- </OText>
142
+ </OText> */}
143
143
  <CenterView style={styles.pagePadding}>
144
144
  {user?.photo && (
145
145
  <View style={styles.photo}>
@@ -0,0 +1,20 @@
1
+ import React from 'react';
2
+ import OText from './OText';
3
+
4
+ const HeaderTitle = (props: any) => {
5
+ const { text, style } = props
6
+ return (
7
+ <OText
8
+ size={24}
9
+ style={style ?? {
10
+ marginTop: 30,
11
+ paddingHorizontal: 40,
12
+ textTransform: 'capitalize'
13
+ }}
14
+ >
15
+ {text}
16
+ </OText>
17
+ )
18
+ }
19
+
20
+ export default HeaderTitle
@@ -11,6 +11,7 @@ import OKeyButton from './OKeyButton'
11
11
  import OModal from './OModal'
12
12
  import OAlert from './OAlert'
13
13
  import OBottomPopup from './OBottomPopup'
14
+ import HeaderTitle from './HeaderTitle'
14
15
 
15
16
  export {
16
17
  OText,
@@ -26,4 +27,5 @@ export {
26
27
  OAlert,
27
28
  OModal,
28
29
  OBottomPopup,
30
+ HeaderTitle
29
31
  }
@@ -170,6 +170,15 @@ export const getTypesText = (value: number) => {
170
170
  return ret?.content;
171
171
  }
172
172
 
173
+ /**
174
+ * List shape for ribbon
175
+ */
176
+ export const shape = {
177
+ rectangle: 'rectangle',
178
+ rectangleRound: 'rectangle_round',
179
+ capsuleShape: 'capsule_shape'
180
+ }
181
+
173
182
  /**
174
183
  * Function to transform degree to radian
175
184
  * @param {number} value for transform