@licklist/design 0.70.4 → 0.70.5-dev.0

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 (165) hide show
  1. package/dist/affiliate/form/AffiliateForm.d.ts.map +1 -1
  2. package/dist/assets/iframe/available.svg +4 -4
  3. package/dist/assets/iframe/available.svg.js +16 -18
  4. package/dist/auth/Login/LoginComponent.js +2 -1
  5. package/dist/availability-indicator/AvailabilityIndicator.d.ts +3 -1
  6. package/dist/availability-indicator/AvailabilityIndicator.d.ts.map +1 -1
  7. package/dist/availability-indicator/AvailabilityIndicator.js +112 -18
  8. package/dist/calendar/Calendar.d.ts +2 -0
  9. package/dist/calendar/Calendar.d.ts.map +1 -1
  10. package/dist/calendar/components/CalendarDates/CalendarDates.d.ts +2 -2
  11. package/dist/calendar/components/CalendarDates/CalendarDates.d.ts.map +1 -1
  12. package/dist/calendar/components/CalendarDates/CalendarDates.js +3 -2
  13. package/dist/calendar/utils/index.d.ts +8 -2
  14. package/dist/calendar/utils/index.d.ts.map +1 -1
  15. package/dist/calendar/utils/index.js +9 -21
  16. package/dist/custom-fields/field-set/components/CustomFieldSet/CustomFieldSet.d.ts.map +1 -1
  17. package/dist/custom-fields/field-set/components/CustomFieldSet/CustomFieldSet.js +14 -0
  18. package/dist/date-time-button/DateContent.d.ts.map +1 -1
  19. package/dist/date-time-button/DateContent.js +3 -3
  20. package/dist/date-time-button/DateTimeButton.d.ts +3 -1
  21. package/dist/date-time-button/DateTimeButton.d.ts.map +1 -1
  22. package/dist/date-time-button/DateTimeButton.js +2 -1
  23. package/dist/events/edit-event-modal/component/SelectEventProductSet/component/EditEventProductSet.js +2 -1
  24. package/dist/events/edit-event-modal/utils/getDefaultProductSet.d.ts.map +1 -1
  25. package/dist/events/edit-event-modal/utils/getDefaultProductSet.js +0 -1
  26. package/dist/iframe/activity-card/ActivityCard.d.ts +3 -1
  27. package/dist/iframe/activity-card/ActivityCard.d.ts.map +1 -1
  28. package/dist/iframe/activity-card/ActivityCard.js +5 -3
  29. package/dist/iframe/order-process/components/CategoryProduct/components/NumberInput/NumberInput.d.ts.map +1 -1
  30. package/dist/iframe/order-process/components/CategoryProduct/components/NumberInput/NumberInput.js +13 -0
  31. package/dist/iframe/payment/order-items-table/utils/paymentSummary.d.ts.map +1 -1
  32. package/dist/iframe/ryft/RyftPaymentForm.d.ts.map +1 -1
  33. package/dist/iframe/ryft/RyftPaymentForm.js +25 -12
  34. package/dist/iframe/ryft/utils/ryft-form.d.ts.map +1 -1
  35. package/dist/iframe/ryft/utils/ryft-form.js +4 -5
  36. package/dist/layout/DropDown.d.ts +2 -1
  37. package/dist/layout/DropDown.d.ts.map +1 -1
  38. package/dist/notification/email-template/control/EmailTemplateControl.d.ts.map +1 -1
  39. package/dist/notification/email-template/control/EmailTemplateControl.js +3 -0
  40. package/dist/product-set/form/ProductCategoriesControl.d.ts.map +1 -1
  41. package/dist/product-set/form/ProductCategoriesControl.js +48 -2
  42. package/dist/product-set/form/ProductSetForm.d.ts +4 -1
  43. package/dist/product-set/form/ProductSetForm.d.ts.map +1 -1
  44. package/dist/product-set/form/ProductSetForm.js +1 -1
  45. package/dist/product-set/form/ProductZonesControl.d.ts.map +1 -1
  46. package/dist/product-set/form/ProductZonesControl.js +0 -2
  47. package/dist/product-set/form/ProductsControl.js +1 -0
  48. package/dist/product-set/form/SelectCategoryModal.d.ts +12 -0
  49. package/dist/product-set/form/SelectCategoryModal.d.ts.map +1 -1
  50. package/dist/product-set/form/SelectCategoryModal.js +1 -1
  51. package/dist/product-set/form/SubProductsControl.d.ts.map +1 -1
  52. package/dist/product-set/form/SubProductsControl.js +0 -3
  53. package/dist/product-set/form/VenueMapsControl.d.ts.map +1 -1
  54. package/dist/product-set/form/VenueMapsControl.js +0 -3
  55. package/dist/product-set/product/ProductControl.d.ts.map +1 -1
  56. package/dist/product-set/product/booking-management/ProductBookingManagementControl.d.ts.map +1 -1
  57. package/dist/product-set/product/booking-management/ProductBookingManagementControl.js +6 -0
  58. package/dist/product-set/product/deposit/ProductDepositControl.d.ts.map +1 -1
  59. package/dist/product-set/product/deposit/ProductDepositControl.js +3 -0
  60. package/dist/product-set/product/duration/ProductDurationControl.d.ts.map +1 -1
  61. package/dist/product-set/product/duration/ProductDurationControl.js +6 -0
  62. package/dist/product-set/product/price/ProductPriceControl.d.ts.map +1 -1
  63. package/dist/product-set/product/price/ProductPriceControl.js +3 -0
  64. package/dist/product-set/product/quantity/ProductQuantityConstantControl.d.ts.map +1 -1
  65. package/dist/product-set/product/quantity/ProductQuantityConstantControl.js +6 -0
  66. package/dist/product-set/product/quantity/ProductQuantityControl.d.ts.map +1 -1
  67. package/dist/product-set/product/quantity/ProductQuantityControl.js +6 -0
  68. package/dist/product-set/product/quantity/ProductQuantityRechargingControl.d.ts.map +1 -1
  69. package/dist/product-set/product/quantity/ProductQuantityRechargingControl.js +4 -1
  70. package/dist/product-set/product-category/ProductCategoryControl.d.ts.map +1 -1
  71. package/dist/product-set/product-category/ProductCategoryControl.js +12 -0
  72. package/dist/recurrence-input/RecurrenceEndInput.d.ts.map +1 -1
  73. package/dist/recurrence-input/RecurrenceEndInput.js +3 -0
  74. package/dist/recurring-date-picker-input/RecurrenceEndInput.d.ts.map +1 -1
  75. package/dist/resource/form/components/CapacityControl.d.ts.map +1 -1
  76. package/dist/resource/form/components/CapacityControl.js +3 -0
  77. package/dist/resource/form/components/SortControl.d.ts.map +1 -1
  78. package/dist/resource/form/components/SortControl.js +3 -0
  79. package/dist/sales/booking/results/components/ResultCard.d.ts.map +1 -1
  80. package/dist/sales/booking/results/components/ResultCard.js +0 -2
  81. package/dist/sales/coupon/control/CouponFormControl.d.ts.map +1 -1
  82. package/dist/sales/coupon/control/CouponFormControl.js +21 -0
  83. package/dist/setting/admin/PaymentFeeForm.d.ts.map +1 -1
  84. package/dist/setting/admin/PaymentFeeForm.js +16 -1
  85. package/dist/setting/dashboard/DashboardSettingForm.d.ts.map +1 -1
  86. package/dist/setting/dashboard/DashboardSettingForm.js +4 -1
  87. package/dist/snippet/snippet-template/preview/Preview.d.ts.map +1 -1
  88. package/dist/snippet/snippet-template/preview/Preview.js +7 -0
  89. package/dist/sortable-tree/SortableTreeItem.d.ts +2 -1
  90. package/dist/sortable-tree/SortableTreeItem.d.ts.map +1 -1
  91. package/dist/sortable-tree/SortableTreeItem.js +10 -4
  92. package/dist/static/CurrencyNumberInput.d.ts.map +1 -1
  93. package/dist/static/CurrencyNumberInput.js +3 -0
  94. package/dist/static/form-number-input/FormNumberInput.d.ts.map +1 -1
  95. package/dist/static/form-number-input/FormNumberInput.js +3 -0
  96. package/dist/static/number-input/NumberInput.d.ts.map +1 -1
  97. package/dist/static/number-input/NumberInput.js +3 -0
  98. package/dist/styles/availability-indicator/AvailabilityIndicator.scss +9 -0
  99. package/dist/styles/date-time-button/DateTimeButton.scss +1 -1
  100. package/dist/styles/iframe-external-modal/IframeExternalModal.scss +2 -2
  101. package/dist/styles/product-set/ProductSetForm.scss +22 -0
  102. package/dist/styles/ryft-payment-form/RyftPaymentForm.scss +1 -3
  103. package/dist/styles/sales/BookingResults.scss +1 -1
  104. package/dist/zone/form/components/GameDurationControl.d.ts.map +1 -1
  105. package/dist/zone/form/components/GameDurationControl.js +3 -0
  106. package/dist/zone/form/components/SortControl.d.ts.map +1 -1
  107. package/dist/zone/form/components/SortControl.js +3 -0
  108. package/package.json +8 -6
  109. package/src/affiliate/form/AffiliateForm.tsx +1 -0
  110. package/src/assets/iframe/available.svg +4 -4
  111. package/src/auth/Login/LoginComponent.tsx +1 -1
  112. package/src/availability-indicator/AvailabilityIndicator.tsx +91 -16
  113. package/src/calendar/Calendar.tsx +2 -0
  114. package/src/calendar/components/CalendarDates/CalendarDates.tsx +3 -0
  115. package/src/calendar/utils/index.ts +17 -26
  116. package/src/custom-fields/field-set/components/CustomFieldSet/CustomFieldSet.tsx +16 -1
  117. package/src/date-time-button/DateContent.tsx +3 -3
  118. package/src/date-time-button/DateTimeButton.tsx +4 -0
  119. package/src/events/edit-event-modal/utils/getDefaultProductSet.ts +0 -1
  120. package/src/iframe/activity-card/ActivityCard.tsx +15 -2
  121. package/src/iframe/order-process/components/CategoryProduct/components/NumberInput/NumberInput.tsx +9 -0
  122. package/src/iframe/payment/order-items-table/utils/paymentSummary.tsx +1 -0
  123. package/src/iframe/ryft/RyftPaymentForm.tsx +14 -3
  124. package/src/iframe/ryft/utils/ryft-form.ts +6 -5
  125. package/src/layout/DropDown.tsx +1 -1
  126. package/src/notification/email-template/control/EmailTemplateControl.tsx +1 -0
  127. package/src/product-set/form/ProductCategoriesControl.tsx +37 -1
  128. package/src/product-set/form/ProductSetForm.tsx +6 -2
  129. package/src/product-set/form/ProductZonesControl.tsx +1 -4
  130. package/src/product-set/form/SelectCategoryModal.tsx +2 -2
  131. package/src/product-set/form/SubProductsControl.tsx +0 -3
  132. package/src/product-set/form/VenueMapsControl.tsx +0 -3
  133. package/src/product-set/product/ProductControl.tsx +0 -1
  134. package/src/product-set/product/advanced-options/AdvancedOptions.tsx +1 -1
  135. package/src/product-set/product/booking-management/ProductBookingManagementControl.tsx +2 -0
  136. package/src/product-set/product/deposit/ProductDepositControl.tsx +1 -0
  137. package/src/product-set/product/duration/ProductDurationControl.tsx +2 -0
  138. package/src/product-set/product/price/ProductPriceControl.tsx +1 -0
  139. package/src/product-set/product/quantity/ProductQuantityConstantControl.tsx +2 -0
  140. package/src/product-set/product/quantity/ProductQuantityControl.tsx +2 -0
  141. package/src/product-set/product/quantity/ProductQuantityRechargingControl.tsx +1 -0
  142. package/src/product-set/product-category/ProductCategoryControl.tsx +4 -0
  143. package/src/product-set/product-zone/ProductZoneControl.tsx +1 -1
  144. package/src/recurrence-input/RecurrenceEndInput.tsx +1 -0
  145. package/src/recurring-date-picker-input/RecurrenceEndInput.tsx +1 -0
  146. package/src/resource/form/components/CapacityControl.tsx +1 -0
  147. package/src/resource/form/components/SortControl.tsx +1 -0
  148. package/src/sales/booking/results/components/ResultCard.tsx +0 -2
  149. package/src/sales/coupon/control/CouponFormControl.tsx +7 -0
  150. package/src/setting/admin/PaymentFeeForm.tsx +5 -0
  151. package/src/setting/dashboard/DashboardSettingForm.tsx +1 -0
  152. package/src/snippet/snippet-template/preview/Preview.tsx +6 -0
  153. package/src/sortable-tree/SortableTreeItem.tsx +6 -0
  154. package/src/static/CurrencyNumberInput.tsx +1 -0
  155. package/src/static/form-number-input/FormNumberInput.tsx +1 -0
  156. package/src/static/number-input/NumberInput.tsx +1 -0
  157. package/src/styles/availability-indicator/AvailabilityIndicator.scss +9 -0
  158. package/src/styles/date-time-button/DateTimeButton.scss +1 -1
  159. package/src/styles/iframe-external-modal/IframeExternalModal.scss +2 -2
  160. package/src/styles/product-set/ProductSetForm.scss +22 -0
  161. package/src/styles/ryft-payment-form/RyftPaymentForm.scss +1 -3
  162. package/src/styles/sales/BookingResults.scss +1 -1
  163. package/src/zone/form/components/GameDurationControl.tsx +1 -0
  164. package/src/zone/form/components/SortControl.tsx +1 -0
  165. package/yarn.lock +125 -109
@@ -77,6 +77,9 @@ var GameDurationControl = function(param) {
77
77
  required: false,
78
78
  min: 1
79
79
  })), {
80
+ onWheel: function(event) {
81
+ return event.currentTarget.blur();
82
+ },
80
83
  placeholder: t('Design:duration'),
81
84
  isInvalid: Boolean(errors.defaultDuration),
82
85
  disabled: isLoading
@@ -1 +1 @@
1
- {"version":3,"file":"SortControl.d.ts","sourceRoot":"","sources":["../../../../src/zone/form/components/SortControl.tsx"],"names":[],"mappings":"AAOA,KAAK,gBAAgB,GAAG;IACtB,SAAS,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,WAAW,kBAAmB,gBAAgB,4CAmC1D,CAAA"}
1
+ {"version":3,"file":"SortControl.d.ts","sourceRoot":"","sources":["../../../../src/zone/form/components/SortControl.tsx"],"names":[],"mappings":"AAOA,KAAK,gBAAgB,GAAG;IACtB,SAAS,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,WAAW,kBAAmB,gBAAgB,4CAoC1D,CAAA"}
@@ -77,6 +77,9 @@ var SortControl = function(param) {
77
77
  required: false,
78
78
  min: 1
79
79
  })), {
80
+ onWheel: function(event) {
81
+ return event.currentTarget.blur();
82
+ },
80
83
  placeholder: t('Design:ordering'),
81
84
  isInvalid: Boolean(errors.sort),
82
85
  disabled: isLoading
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@licklist/design",
3
- "version": "0.70.4",
3
+ "version": "0.70.5-dev.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+ssh://git@bitbucket.org/artelogicsoft/licklist_design.git"
@@ -42,9 +42,9 @@
42
42
  ]
43
43
  },
44
44
  "peerDependencies": {
45
- "@licklist/core": "0.30.3",
45
+ "@licklist/core": "0.31.1-dev.4",
46
46
  "@licklist/eslint-config": "0.5.6",
47
- "@licklist/plugins": "0.33.6",
47
+ "@licklist/plugins": "0.34.0-dev.4",
48
48
  "lodash": "4.17.21",
49
49
  "luxon": "3.5.0",
50
50
  "react": "17.0.2",
@@ -61,9 +61,9 @@
61
61
  "@dnd-kit/utilities": "2.0.0",
62
62
  "@fortawesome/fontawesome-svg-core": "1.2.34",
63
63
  "@fortawesome/free-solid-svg-icons": "5.15.2",
64
- "@licklist/core": "0.30.3",
64
+ "@licklist/core": "0.31.1-dev.4",
65
65
  "@licklist/eslint-config": "0.5.6",
66
- "@licklist/plugins": "0.33.6",
66
+ "@licklist/plugins": "0.34.0-dev.4",
67
67
  "@mantine/core": "6.0.22",
68
68
  "@mantine/hooks": "6.0.22",
69
69
  "@mdx-js/react": "1.6.22",
@@ -202,8 +202,10 @@
202
202
  "yarn tsc"
203
203
  ]
204
204
  },
205
+ "packageManager": "yarn@4.4.0",
205
206
  "volta": {
206
207
  "node": "20.9.0",
207
208
  "yarn": "4.4.0"
208
- }
209
+ },
210
+ "stableVersion": "0.69.1-dev.3"
209
211
  }
@@ -76,6 +76,7 @@ export const AffiliateForm = ({
76
76
  const copyToClipboard = () =>
77
77
  // eslint-disable-next-line consistent-return
78
78
  window.navigator.clipboard.writeText(formValues.link)
79
+
79
80
  return (
80
81
  <FormProvider {...form}>
81
82
  <Form onSubmit={form.handleSubmit(handleSubmit)}>
@@ -1,5 +1,5 @@
1
- <svg width="7" height="11" viewBox="0 0 7 11" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <rect x="0.943939" y="1.03658" width="5.25188" height="3.04878" rx="1.5" fill="#4CF973" stroke="white"/>
3
- <rect x="0.943939" y="4.10976" width="5.25188" height="3.04878" rx="1.5" fill="#4CF973" stroke="white"/>
4
- <rect x="0.943939" y="7.18292" width="5.25188" height="3.04878" rx="1.5" fill="#4CF973" stroke="white"/>
1
+ <svg viewBox="auto" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <rect x="14%" y="0" width="63%" height="29%" rx="15%" fill="#4CF973" stroke="white"/>
3
+ <rect x="14%" y="33%" width="63%" height="29%" rx="15%" fill="#4CF973" stroke="white"/>
4
+ <rect x="14%" y="66%" width="63%" height="29%" rx="15%" fill="#4CF973" stroke="white"/>
5
5
  </svg>
@@ -44,7 +44,7 @@ const LoginComponent = ({
44
44
  const handleError = (error: any) => {
45
45
  notification.danger({
46
46
  title: 'Error',
47
- message: error.message,
47
+ message: error?.response?.data?.message || error.message,
48
48
  })
49
49
  }
50
50
 
@@ -1,9 +1,15 @@
1
1
  import { FunctionComponent, SVGProps } from 'react'
2
2
  import { useTranslation } from 'react-i18next'
3
3
  import { ZoneResourcesAvailability } from '@licklist/core/dist/DataMapper/Order/ZoneResourcesAvailabilityDataMapper'
4
+ import {
5
+ AVAILABILITY_FORMAT_NUMBER,
6
+ AvailabilityFormat,
7
+ } from '@licklist/core/dist/DataMapper/Provider/SnippetDataMapper'
8
+ import { useWindowDimensions } from '@licklist/plugins'
4
9
  import { ReactComponent as AvailableIcon } from '../assets/iframe/available.svg'
5
10
  import { ReactComponent as LimitedIcon } from '../assets/iframe/limited.svg'
6
11
  import { ReactComponent as SoldOutIcon } from '../assets/iframe/soldOut.svg'
12
+ import { TAB_WIDTH } from '../iframe/page/components/PageBody/constants'
7
13
 
8
14
  const LOTS_OF_SPACE_LIMIT = 0.2
9
15
  const LIMITED_LIMIT = 0.8
@@ -13,38 +19,94 @@ type Config = {
13
19
  Icon: FunctionComponent<SVGProps<SVGSVGElement>>
14
20
  }
15
21
 
16
- const getIconsAndLabels = ({
22
+ type GetIconsAndLabelsWithArgumentResult = Config & {
23
+ argument?: number
24
+ }
25
+
26
+ interface GetIconsAndLabels extends ZoneResourcesAvailability {
27
+ availabilityFormat?: AvailabilityFormat | null
28
+ }
29
+ interface GetAppropreateLabelFormat extends GetIconsAndLabels {
30
+ label?: string
31
+ }
32
+
33
+ const getLabelsWithArgument = ({
17
34
  bookedResources,
18
35
  totalResources,
19
- }: ZoneResourcesAvailability): Config => {
20
- if (bookedResources === totalResources) {
21
- return { label: 'soldOut', Icon: SoldOutIcon }
36
+ availabilityFormat,
37
+ label,
38
+ }: GetAppropreateLabelFormat): {
39
+ label: string
40
+ argument?: number
41
+ } => {
42
+ const availableResources = totalResources - bookedResources
43
+
44
+ if (availabilityFormat !== AVAILABILITY_FORMAT_NUMBER) {
45
+ return { label }
22
46
  }
23
47
 
48
+ return availableResources === 1
49
+ ? { label: 'availableSingleResource' }
50
+ : { label: 'availableMultipleResources', argument: availableResources }
51
+ }
52
+
53
+ const getIconsAndLabelsWithArgument = ({
54
+ bookedResources,
55
+ totalResources,
56
+ availabilityFormat,
57
+ }: GetIconsAndLabels): GetIconsAndLabelsWithArgumentResult => {
24
58
  // lots of space if less than 80% booked
25
59
  if (bookedResources / totalResources <= LOTS_OF_SPACE_LIMIT) {
26
- return { label: 'lotsOfSpace', Icon: AvailableIcon }
60
+ return {
61
+ ...getLabelsWithArgument({
62
+ bookedResources,
63
+ totalResources,
64
+ availabilityFormat,
65
+ label: 'lotsOfSpace',
66
+ }),
67
+ Icon: AvailableIcon,
68
+ }
27
69
  }
28
70
 
29
71
  if (bookedResources / totalResources >= LIMITED_LIMIT) {
30
- return { label: 'limited', Icon: LimitedIcon }
72
+ return {
73
+ ...getLabelsWithArgument({
74
+ bookedResources,
75
+ totalResources,
76
+ availabilityFormat,
77
+ label: 'limited',
78
+ }),
79
+ Icon: LimitedIcon,
80
+ }
31
81
  }
32
82
 
33
- return { label: 'available', Icon: AvailableIcon }
83
+ return {
84
+ ...getLabelsWithArgument({
85
+ bookedResources,
86
+ totalResources,
87
+ availabilityFormat,
88
+ label: 'available',
89
+ }),
90
+ Icon: AvailableIcon,
91
+ }
34
92
  }
35
93
 
36
94
  type AvailabilityIndicatorProps = {
37
95
  resources: ZoneResourcesAvailability
38
96
  isUnavailable?: boolean
39
97
  isSoldOut?: boolean
98
+ availabilityFormat?: AvailabilityFormat | null
40
99
  }
41
100
 
42
101
  export const AvailabilityIndicator = ({
43
102
  resources,
44
103
  isUnavailable,
45
- isSoldOut,
104
+ isSoldOut: _isSoldOut,
105
+ availabilityFormat,
46
106
  }: AvailabilityIndicatorProps) => {
47
107
  const { t } = useTranslation('Design')
108
+ const isSoldOut =
109
+ _isSoldOut || resources.bookedResources === resources.totalResources
48
110
 
49
111
  if (isUnavailable) {
50
112
  return <Indicator Icon={SoldOutIcon} label={t('notAvailable')} />
@@ -54,14 +116,27 @@ export const AvailabilityIndicator = ({
54
116
  return <Indicator Icon={SoldOutIcon} label={t('soldOut')} />
55
117
  }
56
118
 
57
- const { Icon, label } = getIconsAndLabels(resources)
119
+ const { Icon, label, argument } = getIconsAndLabelsWithArgument({
120
+ ...resources,
121
+ availabilityFormat,
122
+ })
58
123
 
59
- return <Indicator Icon={Icon} label={t(label)} />
124
+ return (
125
+ <Indicator
126
+ Icon={Icon}
127
+ label={t(label, argument ? { argument } : undefined)}
128
+ />
129
+ )
60
130
  }
61
131
 
62
- const Indicator = ({ Icon, label }: Config) => (
63
- <div className='availability-indicator'>
64
- <Icon />
65
- <div>{label}</div>
66
- </div>
67
- )
132
+ const Indicator = ({ Icon, label }: Config) => {
133
+ const { width } = useWindowDimensions()
134
+ const iconSizes =
135
+ width > TAB_WIDTH ? { height: 15, width: 11 } : { height: 11, width: 7 }
136
+ return (
137
+ <div className='availability-indicator'>
138
+ <Icon height={iconSizes.height} width={iconSizes.width} viewBox='auto' />
139
+ <div className='indicator-label'>{label}</div>
140
+ </div>
141
+ )
142
+ }
@@ -1,5 +1,6 @@
1
1
  import { Dispatch, ReactElement, SetStateAction } from 'react'
2
2
  import { DateTime } from 'luxon'
3
+ import { AvailabilityFormat } from '@licklist/core/dist/DataMapper/Provider/SnippetDataMapper'
3
4
  import { DateTimeButtonProps } from 'src/date-time-button'
4
5
  import { CalendarButtons } from './components/CalendarButtons'
5
6
  import { CalendarDates } from './components/CalendarDates'
@@ -21,6 +22,7 @@ export type CalendarProps = {
21
22
  fromPrice?: string | ReactElement | null
22
23
  isLoading?: boolean
23
24
  initialDate?: DateTime
25
+ availabilityFormat?: AvailabilityFormat | null
24
26
  getDateTimeButtonProps: (
25
27
  date: DateTime,
26
28
  ) => Pick<DateTimeButtonProps, 'resources' | 'showResources' | 'isDisabled'>
@@ -11,6 +11,7 @@ export type CalendarDatesProps = Pick<
11
11
  | 'setSelectedDate'
12
12
  | 'fromPrice'
13
13
  | 'getDateTimeButtonProps'
14
+ | 'availabilityFormat'
14
15
  >
15
16
 
16
17
  export const CalendarDates = ({
@@ -18,6 +19,7 @@ export const CalendarDates = ({
18
19
  selectedDate,
19
20
  setSelectedDate,
20
21
  fromPrice,
22
+ availabilityFormat,
21
23
  getDateTimeButtonProps,
22
24
  }: CalendarDatesProps) => {
23
25
  const fillCalendarDates = useMemo(() => {
@@ -56,6 +58,7 @@ export const CalendarDates = ({
56
58
  onSelect={() => setSelectedDate(date)}
57
59
  price={fromPrice}
58
60
  variant={Variant.month}
61
+ availabilityFormat={availabilityFormat}
59
62
  {...props}
60
63
  />
61
64
  )
@@ -1,40 +1,31 @@
1
+ import { TimeZone } from '@licklist/core/dist/DataMapper/Common/TimeZoneDataMapper'
1
2
  import { DateTime, Interval } from 'luxon'
2
3
 
3
- export const getMonthCalendarDates = (
4
- initialDate: DateTime,
5
- timeZone?: string,
6
- ): DateTime[] => {
4
+ type Builder = (args: {
5
+ initialDate?: DateTime
6
+ timeZone: TimeZone['name']
7
+ }) => DateTime[]
8
+
9
+ export const getMonthCalendarDates: Builder = ({
10
+ initialDate: _initialDate,
11
+ timeZone,
12
+ }): DateTime[] => {
13
+ const initialDate = _initialDate || DateTime.now().setZone(timeZone)
14
+
7
15
  const startOfMonth = initialDate.startOf('month')
8
16
  const endOfMonth = initialDate.endOf('month')
9
17
 
10
- const dateTimes = Interval.fromDateTimes(startOfMonth, endOfMonth)
18
+ return Interval.fromDateTimes(startOfMonth, endOfMonth)
11
19
  .splitBy({ day: 1 })
12
20
  .map((d) => d.start)
13
-
14
- if (timeZone) {
15
- return dateTimes.map((date) =>
16
- date.setZone(timeZone, { keepLocalTime: true }),
17
- )
18
- }
19
-
20
- return dateTimes
21
21
  }
22
22
 
23
- export const getWeekCalendarDates = (
24
- initialDate: DateTime,
25
- timeZone?: string,
26
- ): DateTime[] => {
23
+ export const getWeekCalendarDates: Builder = ({ timeZone }): DateTime[] => {
24
+ const initialDate = DateTime.now().setZone(timeZone)
25
+
27
26
  const lastDay = initialDate.plus({ days: 7 })
28
27
 
29
- const dateTimes = Interval.fromDateTimes(initialDate, lastDay)
28
+ return Interval.fromDateTimes(initialDate, lastDay)
30
29
  .splitBy({ day: 1 })
31
30
  .map((d) => d.start)
32
-
33
- if (timeZone) {
34
- return dateTimes.map((date) =>
35
- date.setZone(timeZone, { keepLocalTime: true }),
36
- )
37
- }
38
-
39
- return dateTimes
40
31
  }
@@ -17,6 +17,7 @@ import { HasPermissionProp } from '@licklist/plugins/dist/types/permission/Permi
17
17
  import FormErrorService from '@licklist/plugins/dist/services/Form/FormErrorService'
18
18
  import { ServerError } from '@licklist/plugins/dist/hooks/Api/useHttpQuery'
19
19
  import HookFormService from '@licklist/plugins/dist/services/Form/HookFormService'
20
+ import useNotification from '@licklist/plugins/dist/context/app/hooks/useNotification'
20
21
 
21
22
  import {
22
23
  CreateSortableListItem,
@@ -84,7 +85,7 @@ export const CustomFieldSet = ({
84
85
  useEffect(() => {
85
86
  FormErrorService.handleServerErrors(serverErrors, setError)
86
87
  }, [serverErrors, setError])
87
-
88
+ const notification = useNotification()
88
89
  const { fields, append, remove } = useFieldArray({
89
90
  control,
90
91
  name: CUSTOM_FIELDS,
@@ -97,6 +98,13 @@ export const CustomFieldSet = ({
97
98
 
98
99
  if (!response) return
99
100
 
101
+ notification.success({
102
+ title: t('App:success'),
103
+ message: t('Notification:createSuccessfully', {
104
+ argument: t('customField'),
105
+ }),
106
+ })
107
+
100
108
  setFieldSets((prevFieldSets) => {
101
109
  const nextFieldSets = [...prevFieldSets]
102
110
 
@@ -115,6 +123,13 @@ export const CustomFieldSet = ({
115
123
  const removeFieldSet = async () => {
116
124
  if (fieldSet.id !== null) {
117
125
  await onFieldSetDelete(fieldSet)
126
+
127
+ notification.success({
128
+ title: t('App:success'),
129
+ message: t('Notification:theRemovedSuccessfully', {
130
+ argument: t('customField'),
131
+ }),
132
+ })
118
133
  }
119
134
 
120
135
  setFieldSets(
@@ -6,9 +6,9 @@ import {
6
6
  } from '@licklist/core/dist/Config'
7
7
  import { getDayWithOrdinal } from '@licklist/plugins/dist/utils/formatDate'
8
8
  import clsx from 'clsx'
9
- import { isToday, isTomorrow } from 'date-fns'
10
9
  import { DateTime } from 'luxon'
11
10
  import { useTranslation } from 'react-i18next'
11
+ import { isToday, isTomorrow } from '@licklist/plugins/dist'
12
12
  import { DateTimeButtonProps, Variant } from './DateTimeButton'
13
13
 
14
14
  type DateContentProps = Pick<
@@ -55,9 +55,9 @@ export const DateContent = ({
55
55
  }
56
56
 
57
57
  const getDate = (date: DateTime): string => {
58
- if (isToday(date.toJSDate())) return 'today'
58
+ if (isToday(date)) return 'today'
59
59
 
60
- if (isTomorrow(date.toJSDate())) return 'tomorrow'
60
+ if (isTomorrow(date)) return 'tomorrow'
61
61
 
62
62
  return date.toFormat(DAY_OF_WEEK)
63
63
  }
@@ -2,6 +2,7 @@ import { ReactElement } from 'react'
2
2
  import clsx from 'clsx'
3
3
  import { DateTime } from 'luxon'
4
4
  import { ZoneResourcesAvailability } from '@licklist/core/dist/DataMapper/Order/ZoneResourcesAvailabilityDataMapper'
5
+ import { AvailabilityFormat } from '@licklist/core/dist/DataMapper/Provider/SnippetDataMapper'
5
6
  import { AvailabilityIndicator } from '../availability-indicator'
6
7
  import { DateContent } from './DateContent'
7
8
 
@@ -21,6 +22,7 @@ export type DateTimeButtonProps = {
21
22
  resources?: ZoneResourcesAvailability | null
22
23
  showResources?: boolean
23
24
  variant: Variant
25
+ availabilityFormat?: AvailabilityFormat | null
24
26
  }
25
27
 
26
28
  export const DateTimeButton = ({
@@ -33,6 +35,7 @@ export const DateTimeButton = ({
33
35
  resources,
34
36
  showResources,
35
37
  variant = Variant.week,
38
+ availabilityFormat,
36
39
  }: DateTimeButtonProps) => {
37
40
  const isSoldOut =
38
41
  _isSoldOut ||
@@ -69,6 +72,7 @@ export const DateTimeButton = ({
69
72
  {price && !isDisabled && <div className='price'>{price}</div>}
70
73
  {showResources && resources && (
71
74
  <AvailabilityIndicator
75
+ availabilityFormat={availabilityFormat}
72
76
  resources={resources}
73
77
  isUnavailable={_isDisabled || isPast}
74
78
  isSoldOut={isSoldOut}
@@ -39,7 +39,6 @@ export const getDefaultValues = (
39
39
  ...product,
40
40
  subProducts: subProducts?.map(({ ...subProducts }) => ({
41
41
  ...subProducts,
42
- originalProductId: null,
43
42
  productCategoryId: undefined,
44
43
  })),
45
44
  productCategoryId: undefined,
@@ -2,6 +2,7 @@ import { ReactNode } from 'react'
2
2
  import clsx from 'clsx'
3
3
  import { Image } from '@licklist/core/dist/DataMapper/Media/ImageDataMapper'
4
4
  import { ZoneResourcesAvailability } from '@licklist/core/dist/DataMapper/Order/ZoneResourcesAvailabilityDataMapper'
5
+ import { AvailabilityFormat } from '@licklist/core/dist/DataMapper/Provider/SnippetDataMapper'
5
6
  import { AvailabilityIndicator } from '../../availability-indicator'
6
7
 
7
8
  export const LAYOUT_GRID = 'grid'
@@ -18,6 +19,7 @@ export type ActivityCardProps = {
18
19
  availableTimes?: string | null
19
20
  image?: Image | null
20
21
  resources?: ZoneResourcesAvailability
22
+ availabilityFormat?: AvailabilityFormat | null
21
23
  }
22
24
 
23
25
  export const ActivityCard = ({
@@ -30,6 +32,7 @@ export const ActivityCard = ({
30
32
  onSelect,
31
33
  isSelected,
32
34
  layout = LAYOUT_GRID,
35
+ availabilityFormat,
33
36
  resources,
34
37
  }: ActivityCardProps) => {
35
38
  if (layout === LAYOUT_GRID) {
@@ -50,7 +53,12 @@ export const ActivityCard = ({
50
53
  {description && (
51
54
  <div className='mt-2 activity-card-description'>{description}</div>
52
55
  )}
53
- {resources && <AvailabilityIndicator resources={resources} />}
56
+ {resources && (
57
+ <AvailabilityIndicator
58
+ resources={resources}
59
+ availabilityFormat={availabilityFormat}
60
+ />
61
+ )}
54
62
  </div>
55
63
  </button>
56
64
  )
@@ -76,7 +84,12 @@ export const ActivityCard = ({
76
84
  {description && (
77
85
  <div className='mt-2 activity-card-description'>{description}</div>
78
86
  )}
79
- {resources && <AvailabilityIndicator resources={resources} />}
87
+ {resources && (
88
+ <AvailabilityIndicator
89
+ resources={resources}
90
+ availabilityFormat={availabilityFormat}
91
+ />
92
+ )}
80
93
  </div>
81
94
 
82
95
  <hr className='list-activity-card-hr' />
@@ -89,6 +89,7 @@ export const NumberInput = forwardRef<HTMLInputElement, NumberInputProps>(
89
89
  <FormControl
90
90
  type='number'
91
91
  onChange={(e) => handleChangeValue(Number(e.target.value))}
92
+ onWheel={(event) => event.currentTarget.blur()}
92
93
  value={value}
93
94
  min={0}
94
95
  max={max}
@@ -101,6 +102,14 @@ export const NumberInput = forwardRef<HTMLInputElement, NumberInputProps>(
101
102
  <button
102
103
  type='button'
103
104
  onClick={handleArrowUpClick}
105
+ onWheel={(event) => event.currentTarget.blur()}
106
+ onFocus={(event) =>
107
+ event.target.addEventListener(
108
+ 'wheel',
109
+ (event) => event.preventDefault(),
110
+ { passive: false },
111
+ )
112
+ }
104
113
  className={`payment-number-input__btn-up ${
105
114
  plusButtonGreyedOut && 'disabled-number-input-button'
106
115
  }`}
@@ -61,6 +61,7 @@ const processedPaymentSummary = ({
61
61
  const total = calculateTotalPrice(order, externalPaymentDetail)
62
62
 
63
63
  const totalDiscount = calculateTotalDiscount(order.payments)
64
+
64
65
  let summaryItems: SummaryItem[] = [
65
66
  {
66
67
  translateKey: AMOUNT_TOTAL,
@@ -33,6 +33,11 @@ export const ryftErrorMap: Record<string, string> = {
33
33
 
34
34
  export type RyftPaymentFormValues = Record<string, never>
35
35
 
36
+ interface GoogleAndApplePayResponse {
37
+ paymentSession: AttemptPaymentResponse
38
+ eventName: string
39
+ }
40
+
36
41
  export interface RyftPaymentFormProps {
37
42
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
38
43
  accountId: any
@@ -89,10 +94,10 @@ export const RyftPaymentForm = ({
89
94
  setReferrerBeforePayment()
90
95
  }
91
96
 
92
- const handleSubmit = async () => {
97
+ const handleSubmit = async (_paymentSession?: AttemptPaymentResponse) => {
93
98
  setIsBtnDisabled(true)
94
99
  try {
95
- const paymentSession = await onSubmit()
100
+ const paymentSession = _paymentSession || (await onSubmit())
96
101
 
97
102
  if (!paymentSession) {
98
103
  setRyftError('unknown_error')
@@ -164,6 +169,12 @@ export const RyftPaymentForm = ({
164
169
  addEventHandler('cardValidationChanged', (e: MessageEvent['data']) => {
165
170
  setIsValid(e.isValid)
166
171
  })
172
+ addEventHandler(
173
+ 'walletPaymentSessionResult',
174
+ (e: MessageEvent<GoogleAndApplePayResponse>['data']) => {
175
+ handleSubmit(e.paymentSession)
176
+ },
177
+ )
167
178
 
168
179
  setRyftInitFailure(false)
169
180
  },
@@ -218,7 +229,7 @@ export const RyftPaymentForm = ({
218
229
  ref={formRef}
219
230
  id='ryft-pay-form'
220
231
  noValidate
221
- onSubmit={methods.handleSubmit(handleSubmit)}
232
+ onSubmit={methods.handleSubmit(() => handleSubmit())}
222
233
  className='ryft-payment-form'
223
234
  >
224
235
  <div className='form-disable-box' id='form-disable-box' />
@@ -61,20 +61,22 @@ export const injectComponentsInRyftForm = ({
61
61
  divider.id = 'mobile-pay-divider'
62
62
  container.id = 'mobile-pay-divider-container'
63
63
  container.append(dividerText, divider)
64
- const payIframe = document.getElementById("ryft-pay-iframe");
64
+ const payIframe = document.getElementById('ryft-pay-iframe')
65
65
  if (payIframe) {
66
66
  const formBox = document.getElementById('form-disable-box')
67
67
  if (formBox) {
68
- formBox.style.display = isDisableButton ? "block" : "none"
68
+ formBox.style.display = isDisableButton ? 'block' : 'none'
69
69
  }
70
70
 
71
71
  const googleButton = document.getElementById(
72
72
  'gpay-button-online-api-id',
73
73
  ) as HTMLButtonElement
74
- const appleButton =document.getElementById("ryft-pay-apple-pay-button") as HTMLButtonElement
74
+ const appleButton = document.getElementById(
75
+ 'ryft-pay-apple-pay-button',
76
+ ) as HTMLButtonElement
75
77
  if (googleButton) {
76
78
  googleButton.disabled = isDisableButton
77
- googleButton.style.opacity = isDisableButton ? '1' : '0.6'
79
+ googleButton.style.opacity = !isDisableButton ? '1' : '0.6'
78
80
  }
79
81
  if (appleButton) {
80
82
  appleButton.disabled = isDisableButton
@@ -86,7 +88,6 @@ export const injectComponentsInRyftForm = ({
86
88
  const applePayButton = document.createElement('button')
87
89
  applePayButton.id = 'apple-pay'
88
90
  applePayButton.type = 'button'
89
- applePayButton.style.opacity = !isDisableButton ? '1' : '0.6'
90
91
  applePayButton.className = 'bg-dark btn btn-primary apple-pay-button'
91
92
  applePayButton.textContent = t('Events:payWithApple')
92
93
  applePayButton.onclick = onApplePayButtonClick
@@ -1,4 +1,4 @@
1
- import { forwardRef } from 'react'
1
+ import React, { forwardRef } from 'react'
2
2
 
3
3
  interface Props {
4
4
  children?: React.ReactNode | React.ReactNode[]
@@ -434,6 +434,7 @@ export const EmailTemplateControl = forwardRef(
434
434
  `templateOptionValues.${option?.id}.value`,
435
435
  )}
436
436
  type='number'
437
+ onWheel={(event) => event.currentTarget.blur()}
437
438
  placeholder={t(`Design:${option.name}`)}
438
439
  id={option.name + option.id}
439
440
  defaultValue={option.selectedValue || ''}