ordering-ui-external 1.8.10 → 1.9.1

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 (80) hide show
  1. package/_bundles/{0.ordering-ui.b6cdd549ac5beb984576.js → 0.ordering-ui.a97bdaf67c563ada4c74.js} +0 -0
  2. package/_bundles/{1.ordering-ui.b6cdd549ac5beb984576.js → 1.ordering-ui.a97bdaf67c563ada4c74.js} +0 -0
  3. package/_bundles/{2.ordering-ui.b6cdd549ac5beb984576.js → 2.ordering-ui.a97bdaf67c563ada4c74.js} +0 -0
  4. package/_bundles/{4.ordering-ui.b6cdd549ac5beb984576.js → 4.ordering-ui.a97bdaf67c563ada4c74.js} +0 -0
  5. package/_bundles/{5.ordering-ui.b6cdd549ac5beb984576.js → 5.ordering-ui.a97bdaf67c563ada4c74.js} +0 -0
  6. package/_bundles/{6.ordering-ui.b6cdd549ac5beb984576.js → 6.ordering-ui.a97bdaf67c563ada4c74.js} +0 -0
  7. package/_bundles/{7.ordering-ui.b6cdd549ac5beb984576.js → 7.ordering-ui.a97bdaf67c563ada4c74.js} +1 -1
  8. package/_bundles/{7.ordering-ui.b6cdd549ac5beb984576.js.LICENSE.txt → 7.ordering-ui.a97bdaf67c563ada4c74.js.LICENSE.txt} +0 -0
  9. package/_bundles/{8.ordering-ui.b6cdd549ac5beb984576.js → 8.ordering-ui.a97bdaf67c563ada4c74.js} +0 -0
  10. package/_bundles/{9.ordering-ui.b6cdd549ac5beb984576.js → 9.ordering-ui.a97bdaf67c563ada4c74.js} +0 -0
  11. package/_bundles/{ordering-ui.b6cdd549ac5beb984576.js → ordering-ui.a97bdaf67c563ada4c74.js} +2 -2
  12. package/_bundles/{ordering-ui.b6cdd549ac5beb984576.js.LICENSE.txt → ordering-ui.a97bdaf67c563ada4c74.js.LICENSE.txt} +0 -0
  13. package/_modules/components/PaymentOptions/index.js +2 -2
  14. package/_modules/themes/five/index.js +7 -0
  15. package/_modules/themes/five/src/components/BusinessBasicInformation/index.js +2 -7
  16. package/_modules/themes/five/src/components/BusinessInformation/index.js +7 -6
  17. package/_modules/themes/five/src/components/BusinessProductsListing/index.js +3 -1
  18. package/_modules/themes/five/src/components/BusinessesListing/layouts/OriginalBusinessesListing/index.js +2 -2
  19. package/_modules/themes/five/src/components/BusinessesListing/layouts/OriginalBusinessesListing/styles.js +5 -3
  20. package/_modules/themes/five/src/components/BusinessesListing/layouts/StarbucksBusinessesListing/index.js +2 -0
  21. package/_modules/themes/five/src/components/BusinessesListing/layouts/StarbucksBusinessesListing/styles.js +2 -2
  22. package/_modules/themes/five/src/components/Checkout/index.js +9 -5
  23. package/_modules/themes/five/src/components/Header/index.js +20 -1
  24. package/_modules/themes/five/src/components/Header/styles.js +7 -5
  25. package/_modules/themes/five/src/components/HomeHero/layouts/OriginalHomeHero/index.js +20 -5
  26. package/_modules/themes/five/src/components/OrderDetails/OrderBillSection.js +12 -12
  27. package/_modules/themes/five/src/components/OrderDetails/index.js +4 -2
  28. package/_modules/themes/five/src/components/OrdersOption/index.js +4 -2
  29. package/_modules/themes/five/src/components/PhoneAutocomplete/index.js +4 -0
  30. package/_modules/themes/five/src/components/PlaceSpot/index.js +3 -1
  31. package/_modules/themes/five/src/components/ProductForm/styles.js +1 -1
  32. package/_modules/themes/five/src/components/ProductOption/index.js +1 -1
  33. package/_modules/themes/five/src/components/ProductOptionSubOption/index.js +1 -1
  34. package/_modules/themes/five/src/components/ProductOptionSubOption/styles.js +1 -1
  35. package/_modules/themes/five/src/components/ReviewProduct/index.js +2 -0
  36. package/_modules/themes/five/src/components/ScheduleAccordion/index.js +49 -0
  37. package/_modules/themes/five/src/components/ScheduleAccordion/styles.js +23 -0
  38. package/_modules/themes/five/src/components/SearchBar/index.js +4 -2
  39. package/_modules/themes/five/src/components/SearchBar/styles.js +12 -8
  40. package/_modules/themes/five/src/components/ServiceForm/index.js +17 -8
  41. package/_modules/themes/five/src/components/UserPopover/index.js +14 -4
  42. package/_modules/themes/pwa/src/components/MomentControl/index.js +0 -3
  43. package/_modules/themes/six/src/components/BusinessController/styles.js +1 -1
  44. package/_modules/themes/six/src/components/SearchBar/index.js +4 -2
  45. package/_modules/themes/six/src/components/SearchBar/styles.js +6 -4
  46. package/package.json +2 -2
  47. package/src/components/PaymentOptions/index.js +22 -22
  48. package/src/themes/five/index.js +2 -0
  49. package/src/themes/five/src/components/BusinessBasicInformation/index.js +0 -10
  50. package/src/themes/five/src/components/BusinessInformation/index.js +7 -23
  51. package/src/themes/five/src/components/BusinessProductsListing/index.js +3 -1
  52. package/src/themes/five/src/components/BusinessesListing/layouts/OriginalBusinessesListing/index.js +2 -2
  53. package/src/themes/five/src/components/BusinessesListing/layouts/OriginalBusinessesListing/styles.js +5 -1
  54. package/src/themes/five/src/components/BusinessesListing/layouts/StarbucksBusinessesListing/index.js +2 -0
  55. package/src/themes/five/src/components/BusinessesListing/layouts/StarbucksBusinessesListing/styles.js +2 -6
  56. package/src/themes/five/src/components/Checkout/index.js +9 -5
  57. package/src/themes/five/src/components/Header/index.js +19 -3
  58. package/src/themes/five/src/components/Header/styles.js +20 -4
  59. package/src/themes/five/src/components/HomeHero/layouts/OriginalHomeHero/index.js +13 -3
  60. package/src/themes/five/src/components/OrderDetails/OrderBillSection.js +6 -6
  61. package/src/themes/five/src/components/OrderDetails/index.js +5 -2
  62. package/src/themes/five/src/components/OrdersOption/index.js +10 -9
  63. package/src/themes/five/src/components/PhoneAutocomplete/index.js +2 -0
  64. package/src/themes/five/src/components/PlaceSpot/index.js +3 -1
  65. package/src/themes/five/src/components/ProductForm/styles.js +1 -0
  66. package/src/themes/five/src/components/ProductOption/index.js +1 -1
  67. package/src/themes/five/src/components/ProductOptionSubOption/index.js +1 -1
  68. package/src/themes/five/src/components/ProductOptionSubOption/styles.js +0 -1
  69. package/src/themes/five/src/components/ReviewProduct/index.js +2 -0
  70. package/src/themes/five/src/components/ScheduleAccordion/index.js +60 -0
  71. package/src/themes/five/src/components/ScheduleAccordion/styles.js +28 -0
  72. package/src/themes/five/src/components/SearchBar/index.js +3 -1
  73. package/src/themes/five/src/components/SearchBar/styles.js +9 -1
  74. package/src/themes/five/src/components/ServiceForm/index.js +10 -4
  75. package/src/themes/five/src/components/UserPopover/index.js +12 -3
  76. package/src/themes/pwa/src/components/MomentContent/index.js +0 -1
  77. package/src/themes/pwa/src/components/MomentControl/index.js +0 -3
  78. package/src/themes/six/src/components/BusinessController/styles.js +4 -0
  79. package/src/themes/six/src/components/SearchBar/index.js +10 -2
  80. package/src/themes/six/src/components/SearchBar/styles.js +12 -1
@@ -86,6 +86,7 @@ const PhoneAutocompleteUI = (props) => {
86
86
  }
87
87
  if (!inputValue) {
88
88
  setInputValue(inputValue)
89
+ onChangeNumber(inputValue)
89
90
  }
90
91
  if ((inputValue && inputValue.length > 10) || !(/^[0-9]+$/.test(inputValue))) {
91
92
  return
@@ -95,6 +96,7 @@ const PhoneAutocompleteUI = (props) => {
95
96
  }
96
97
 
97
98
  const onChange = (option) => {
99
+ if (!option) { onChangeNumber('') }
98
100
  setOptSelected(option)
99
101
  setInputValue(option ? option?.value : '')
100
102
  const user = customersPhones.users?.find(user => user.cellphone === option?.value || user.phone === option?.value)
@@ -36,7 +36,8 @@ const PlaceSpotUI = (props) => {
36
36
  setVehicle,
37
37
  setSpotState,
38
38
  handleChangeSpot,
39
- setHasBusinessPlaces
39
+ setHasBusinessPlaces,
40
+ setPlaceSpotNumber
40
41
  } = props
41
42
 
42
43
  const el = useRef()
@@ -92,6 +93,7 @@ const PlaceSpotUI = (props) => {
92
93
  let spotNumber = parseFloat(e?.target?.value)
93
94
  spotNumber = isNaN(spotNumber) ? null : spotNumber
94
95
  setSpotNumber(spotNumber)
96
+ setPlaceSpotNumber(spotNumber)
95
97
  }
96
98
  }
97
99
 
@@ -508,6 +508,7 @@ export const Properties = styled.div`
508
508
  export const ProductDescription = styled.p`
509
509
  margin-top: 0px;
510
510
  white-space: pre-wrap;
511
+ color: #909BA9;
511
512
  `
512
513
  export const PriceContent = styled.div`
513
514
  display: flex;
@@ -22,7 +22,7 @@ const ProductOptionUI = (props) => {
22
22
  if (option.min === 1 && option.max === 1) {
23
23
  maxMin = t('REQUIRED', 'Required')
24
24
  } else if (option.min === 0 && option.max > 0) {
25
- maxMin = `${!option?.limit_suboptions_by_max ? t('MAX_PER_SUBOPTION', 'MAX PER SUBOPTION') : t('MAX', 'Max')}. ${option.max}`
25
+ maxMin = `${t('MAX', 'Max')}. ${option.max}`
26
26
  } else if (option.min > 0 && option.max === 0) {
27
27
  maxMin = `${t('MIN', 'Min')}. ${option.min})`
28
28
  }
@@ -39,7 +39,7 @@ const ProductOptionSubOptionUI = (props) => {
39
39
  setIsScrollAvailable
40
40
  } = props
41
41
 
42
- const disableIncrement = option?.limit_suboptions_by_max ? (balance === option?.max || state.quantity === suboption.max) : state.quantity === option?.max
42
+ const disableIncrement = option?.limit_suboptions_by_max ? (balance === option?.max || state.quantity === suboption.max) : state.quantity === suboption?.max || (!state.selected && balance === option?.max)
43
43
  const price = option?.with_half_option && suboption?.half_price && state.position !== 'whole' ? suboption?.half_price : suboption?.price
44
44
  const [, t] = useLanguage()
45
45
  const [{ parsePrice }] = useUtils()
@@ -147,7 +147,6 @@ export const SuboptionPrice = styled.div`
147
147
  color: ${props => props.theme.colors.darkGray};
148
148
  margin-left: 5px;
149
149
  min-width: 60px;
150
- max-width: 60px;
151
150
  ${props => props.theme?.rtl && css`
152
151
  margin-right: 5px;
153
152
  margin-left: 0px;
@@ -24,6 +24,7 @@ import { TextArea } from '../../styles/Inputs'
24
24
  import { Button } from '../../styles/Buttons'
25
25
  import { Alert } from '../Confirm'
26
26
  import { reviewCommentList } from '../../../../../utils'
27
+ import { useTheme } from 'styled-components'
27
28
 
28
29
  const SingleProductReview = (props) => {
29
30
  const {
@@ -33,6 +34,7 @@ const SingleProductReview = (props) => {
33
34
  } = props
34
35
 
35
36
  const [, t] = useLanguage()
37
+ const theme = useTheme()
36
38
  const [isLike, setIsLike] = useState(true)
37
39
  const [isExtraComment, setIsExtraComment] = useState(false)
38
40
  const [comments, setComments] = useState([])
@@ -0,0 +1,60 @@
1
+ import React, { useState } from 'react'
2
+ import { useLanguage } from 'ordering-components-external'
3
+
4
+ import {
5
+ Accordion,
6
+ AccordionSection,
7
+ ClosedSchedule,
8
+ DropdownWrapper,
9
+ HoursWrappers,
10
+ } from './styles'
11
+ import IosArrowDown from '@meronex/icons/ios/IosArrowDown'
12
+
13
+ export const ScheduleAccordion = (props) => {
14
+
15
+ const {
16
+ scheduleFormatted,
17
+ schedule,
18
+ weekIndex
19
+ } = props
20
+
21
+ const [isActive, setActiveState] = useState(false)
22
+ const [, t] = useLanguage()
23
+
24
+ const daysOfWeek = [
25
+ t('DAY7', 'Sunday'),
26
+ t('DAY1', 'Monday'),
27
+ t('DAY2', 'Tuesday'),
28
+ t('DAY3', 'Wednesday'),
29
+ t('DAY4', 'Thursday'),
30
+ t('DAY5', 'Friday'),
31
+ t('DAY6', 'Saturday'),
32
+ ]
33
+
34
+ return (
35
+ <AccordionSection>
36
+ <Accordion
37
+ onClick={() => setActiveState(!isActive)}
38
+ >
39
+ <DropdownWrapper>
40
+ <h4>{daysOfWeek[weekIndex]}</h4>
41
+ <IosArrowDown />
42
+ </DropdownWrapper>
43
+ <HoursWrappers style={{ display: isActive ? 'flex' : 'none', paddingLeft: 60 }}>
44
+ {schedule?.lapses?.map((lapse, i) => (
45
+ schedule?.enabled ?
46
+ <p key={`${i}-${scheduleFormatted(lapse.open)}`}>
47
+ {scheduleFormatted(lapse.open) +
48
+ ' - ' +
49
+ scheduleFormatted(lapse.close)}
50
+ </p>
51
+ :
52
+ <ClosedSchedule>
53
+ {t('CLOSED', 'Closed')}
54
+ </ClosedSchedule>
55
+ ))}
56
+ </HoursWrappers>
57
+ </Accordion>
58
+ </AccordionSection>
59
+ )
60
+ }
@@ -0,0 +1,28 @@
1
+ import styled from 'styled-components'
2
+
3
+ export const AccordionSection = styled.div`
4
+ background: #FFF;
5
+ `
6
+
7
+ export const Accordion = styled.div`
8
+ display: flex;
9
+ flex-direction: column;
10
+ justify-content: space-between;
11
+ `
12
+
13
+ export const DropdownWrapper = styled.div`
14
+ display: flex;
15
+ align-items: center;
16
+ gap: 10px;
17
+ `
18
+ export const HoursWrappers = styled.div`
19
+ flex-direction: column;
20
+
21
+ p {
22
+ margin: 0px 0px 10px 0px;
23
+ }
24
+ `
25
+
26
+ export const ClosedSchedule = styled.p`
27
+ color: ${props => props.theme?.colors?.danger500}
28
+ `
@@ -17,7 +17,8 @@ export const SearchBar = (props) => {
17
17
  lazyLoad,
18
18
  isCustomLayout,
19
19
  handleCustomEnter,
20
- forwardRef
20
+ forwardRef,
21
+ starbucksStyle
21
22
  } = props
22
23
  const [theme] = useTheme()
23
24
  const [, t] = useLanguage()
@@ -84,6 +85,7 @@ export const SearchBar = (props) => {
84
85
  className={!isCustomLayout && 'search-bar'}
85
86
  isCustomLayout={isCustomLayout}
86
87
  hasValue={el.current?.value}
88
+ starbucksStyle={starbucksStyle}
87
89
  >
88
90
  <Input
89
91
  ref={(ref) => {
@@ -30,9 +30,17 @@ export const BusinessSearch = styled.div`
30
30
  transition: width 0.4s ease-in-out;
31
31
  `}
32
32
 
33
+ ${({ starbucksStyle }) => starbucksStyle && css`
34
+ background-color: #F8F9FA;
35
+ border: 1px solid #DEE2E6;
36
+ font-size: 14px;
37
+ color: #000;
38
+ border-radius: 7.6px;
39
+ `}
40
+
33
41
  @media (min-width: 681px) {
34
42
  width: 100%;
35
- ${({ isCustomLayout }) => !isCustomLayout && css`
43
+ ${({ isCustomLayout, starbucksStyle }) => !isCustomLayout && !starbucksStyle && css`
36
44
  width: 50%;
37
45
  `}
38
46
  }
@@ -144,9 +144,15 @@ const ServiceFormUI = (props) => {
144
144
 
145
145
  const isBusyTime = (professional) => {
146
146
  if (professional?.busy_times?.length === 0 || !dateSelected) return false
147
- const valid = professional?.busy_times.some(item => {
148
- return moment(item?.start).valueOf() <= moment(dateSelected).valueOf() &&
149
- moment(dateSelected).valueOf() <= moment(item?.end).valueOf()
147
+ const duration = product?.duration ?? 0
148
+ const busyTimes = isCartProduct
149
+ ? professional?.busy_times.filter(item => !(item.start === productCart?.calendar_event?.start && item.end === productCart?.calendar_event?.end))
150
+ : [...professional?.busy_times]
151
+ const valid = busyTimes.some(item => {
152
+ return (moment.utc(item?.start).local().valueOf() <= moment(dateSelected).valueOf() &&
153
+ moment(dateSelected).valueOf() <= moment.utc(item?.end).local().valueOf()) ||
154
+ (moment.utc(item?.start).local().valueOf() <= moment(dateSelected).add(duration, 'minutes').valueOf() &&
155
+ moment(dateSelected).add(duration, 'minutes').valueOf() <= moment.utc(item?.end).local().valueOf())
150
156
  })
151
157
  return valid
152
158
  }
@@ -304,7 +310,7 @@ const ServiceFormUI = (props) => {
304
310
  ) : <FaUserAlt />}
305
311
  <NameWrapper>
306
312
  <p>{currentProfessional?.name} {currentProfessional?.lastname}</p>
307
- <StatusInfo available={!isBusyTime()}>
313
+ <StatusInfo available={!isBusyTime(currentProfessional)}>
308
314
  {isBusyTime(currentProfessional) ? (
309
315
  <>
310
316
  <span className='status'>{t('BUSY_ON_SELECTED_TIME', 'Busy on selected time')}</span>
@@ -1,5 +1,5 @@
1
1
  import React, { useRef, useEffect } from 'react'
2
- import { useLanguage, useSession, LogoutAction as LogoutActionController, useEvent, useCustomer, useConfig, useOrderingTheme } from 'ordering-components-external'
2
+ import { useLanguage, useSession, LogoutAction as LogoutActionController, useEvent, useCustomer, useConfig, useOrderingTheme, useOrder } from 'ordering-components-external'
3
3
  import { usePopper } from 'react-popper'
4
4
  import {
5
5
  HeaderItem,
@@ -29,13 +29,16 @@ export const UserPopover = (props) => {
29
29
  isHome,
30
30
  optionsList,
31
31
  withLogout,
32
- isCustomerMode
32
+ isCustomerMode,
33
+ handleOpenAddressModal
33
34
  } = props
34
35
  const [sessionState] = useSession()
35
36
  const [, t] = useLanguage()
36
37
  const [events] = useEvent()
37
38
  const [{ configs }] = useConfig()
38
39
  const [orderingTheme] = useOrderingTheme()
40
+ const [orderStatus] = useOrder()
41
+
39
42
  const referenceElement = useRef()
40
43
  const popperElement = useRef()
41
44
  const arrowElement = useRef()
@@ -56,6 +59,8 @@ export const UserPopover = (props) => {
56
59
  { name: 'addresses', pathname: '/profile/addresses', displayName: 'places', key: 'places', isActive: isAddressListNewPage }
57
60
  ]
58
61
 
62
+ const addressRequiredPageNames = ['business_search', 'promotions']
63
+
59
64
  const options = isCustomerMode
60
65
  ? optionsDefault.filter(option => option.name === 'profile')
61
66
  : optionsList || optionsDefault
@@ -94,7 +99,11 @@ export const UserPopover = (props) => {
94
99
  }
95
100
 
96
101
  const handleGoToPage = (page) => {
97
- events.emit('go_to_page', { page })
102
+ if (!orderStatus.options?.address?.location && addressRequiredPageNames.includes(page)) {
103
+ handleOpenAddressModal()
104
+ } else {
105
+ events.emit('go_to_page', { page })
106
+ }
98
107
  props.onClick && props.onClick()
99
108
  }
100
109
 
@@ -23,7 +23,6 @@ export const MomentContent = (props) => {
23
23
  const momentProps = {
24
24
  maxDate: currentDate
25
25
  }
26
-
27
26
  const { width } = useWindowSize()
28
27
  const momentControl = document?.getElementById('moment_control')?.getBoundingClientRect()
29
28
 
@@ -133,9 +133,6 @@ const MomentControlUI = (props) => {
133
133
  }
134
134
  }, [hoursList])
135
135
 
136
- useEffect(() => {
137
- if (isASP) handleCheckBoxChange(true)
138
- }, [isAsap])
139
136
 
140
137
  return (
141
138
  <div id='moment_control'>
@@ -4,6 +4,10 @@ import styled, { css } from 'styled-components'
4
4
  export const ContainerCard = styled.div`
5
5
  width: 100%;
6
6
  position: relative;
7
+ @media (min-width: 768px) {
8
+ padding: 7px 10px 7px 20px;
9
+ margin-bottom: 5px;
10
+ }
7
11
  `
8
12
 
9
13
  export const WrapperBusinessCard = styled.div`
@@ -2,10 +2,12 @@ import React, { useRef, useEffect } from 'react'
2
2
  import { Input } from '../../styles/Inputs'
3
3
  import { useLanguage } from 'ordering-components-external'
4
4
  import AiOutlineSearch from '@meronex/icons/ai/AiOutlineSearch'
5
+ import { Funnel } from 'react-bootstrap-icons'
5
6
  import {
6
7
  BusinessSearch,
7
8
  DeleteContent,
8
- SearchWrapper
9
+ SearchWrapper,
10
+ FunnelWrapper
9
11
  } from './styles'
10
12
  export const SearchBar = (props) => {
11
13
  const {
@@ -13,7 +15,8 @@ export const SearchBar = (props) => {
13
15
  search,
14
16
  placeholder,
15
17
  lazyLoad,
16
- isCustomLayout
18
+ isCustomLayout,
19
+ isStarbucks
17
20
  } = props
18
21
 
19
22
  const [, t] = useLanguage()
@@ -90,6 +93,11 @@ export const SearchBar = (props) => {
90
93
  >
91
94
  <AiOutlineSearch />
92
95
  </SearchWrapper>
96
+ {isStarbucks &&
97
+ <FunnelWrapper>
98
+ <Funnel />
99
+ </FunnelWrapper>
100
+ }
93
101
  </BusinessSearch>
94
102
  {props.afterComponents?.map((AfterComponent, i) => (
95
103
  <AfterComponent key={i} {...props} />))}
@@ -68,7 +68,7 @@ export const DeleteContent = styled.span`
68
68
  `}
69
69
  ${({ isClear, isHome }) => isClear && css`
70
70
  left: initial;
71
- right: 20px;
71
+ right: 40px;
72
72
  `}
73
73
  ${props => props.theme?.rtl && css`
74
74
  transform: translate(30%, 0%);
@@ -94,6 +94,17 @@ export const DeleteContent = styled.span`
94
94
 
95
95
  export const SearchWrapper = styled(DeleteContent)``
96
96
 
97
+ export const FunnelWrapper = styled.div`
98
+ svg {
99
+ position: absolute;
100
+ right: 10px !important;
101
+ color: #ADB5BD;
102
+ width: 20px;
103
+ height: 20px;
104
+ bottom: 22px;
105
+ }
106
+ `
107
+
97
108
  export const SearchIcon = styled.div`
98
109
  background-image: url(${props => props.theme?.images?.general?.searchIcon});
99
110
  background-position: right 10px center;