@licklist/design 0.70.9 → 0.70.10-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 (175) 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 +4 -2
  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 +12 -11
  13. package/dist/calendar/components/CalendarWeekdays/CalendarWeekdays.js +2 -3
  14. package/dist/calendar/utils/index.d.ts +8 -2
  15. package/dist/calendar/utils/index.d.ts.map +1 -1
  16. package/dist/calendar/utils/index.js +9 -21
  17. package/dist/date-time-button/DateContent.d.ts.map +1 -1
  18. package/dist/date-time-button/DateContent.js +3 -3
  19. package/dist/date-time-button/DateTimeButton.d.ts +3 -1
  20. package/dist/date-time-button/DateTimeButton.d.ts.map +1 -1
  21. package/dist/date-time-button/DateTimeButton.js +5 -3
  22. package/dist/events/edit-event-modal/component/SelectEventProductSet/component/EditEventProductSet.js +3 -1
  23. package/dist/events/edit-event-modal/utils/getDefaultProductSet.d.ts.map +1 -1
  24. package/dist/events/edit-event-modal/utils/getDefaultProductSet.js +0 -1
  25. package/dist/events/event-venue-map/EventVenueMap.d.ts.map +1 -1
  26. package/dist/events/event-venue-map/EventVenueMap.js +1 -0
  27. package/dist/events/event-venue-map/hooks/useCanvasSize.d.ts.map +1 -1
  28. package/dist/events/event-venue-map/hooks/useCanvasSize.js +11 -4
  29. package/dist/iframe/activity-card/ActivityCard.d.ts +3 -1
  30. package/dist/iframe/activity-card/ActivityCard.d.ts.map +1 -1
  31. package/dist/iframe/activity-card/ActivityCard.js +5 -3
  32. package/dist/iframe/order-process/components/CategoryProduct/components/NumberInput/NumberInput.d.ts.map +1 -1
  33. package/dist/iframe/order-process/components/CategoryProduct/components/NumberInput/NumberInput.js +13 -0
  34. package/dist/iframe/payment/order-items-table/utils/paymentSummary.d.ts.map +1 -1
  35. package/dist/iframe/ryft/utils/ryft-form.d.ts.map +1 -1
  36. package/dist/iframe/ryft/utils/ryft-form.js +4 -5
  37. package/dist/layout/DropDown.d.ts +2 -1
  38. package/dist/layout/DropDown.d.ts.map +1 -1
  39. package/dist/notification/email-template/control/EmailTemplateControl.d.ts.map +1 -1
  40. package/dist/notification/email-template/control/EmailTemplateControl.js +3 -0
  41. package/dist/product-set/form/ProductCategoriesControl.d.ts.map +1 -1
  42. package/dist/product-set/form/ProductCategoriesControl.js +48 -2
  43. package/dist/product-set/form/ProductSetForm.d.ts +4 -1
  44. package/dist/product-set/form/ProductSetForm.d.ts.map +1 -1
  45. package/dist/product-set/form/ProductSetForm.js +1 -1
  46. package/dist/product-set/form/ProductZonesControl.d.ts.map +1 -1
  47. package/dist/product-set/form/ProductZonesControl.js +0 -2
  48. package/dist/product-set/form/ProductsControl.js +1 -0
  49. package/dist/product-set/form/SelectCategoryModal.d.ts +12 -0
  50. package/dist/product-set/form/SelectCategoryModal.d.ts.map +1 -1
  51. package/dist/product-set/form/SelectCategoryModal.js +1 -1
  52. package/dist/product-set/form/SubProductsControl.d.ts.map +1 -1
  53. package/dist/product-set/form/SubProductsControl.js +0 -3
  54. package/dist/product-set/form/VenueMapSetModal.d.ts.map +1 -1
  55. package/dist/product-set/form/VenueMapSetModal.js +7 -7
  56. package/dist/product-set/form/VenueMapsControl.d.ts.map +1 -1
  57. package/dist/product-set/form/VenueMapsControl.js +0 -3
  58. package/dist/product-set/product/ProductControl.d.ts.map +1 -1
  59. package/dist/product-set/product/advanced-options/AdvancedOptions.js +1 -0
  60. package/dist/product-set/product/booking-management/ProductBookingManagementControl.d.ts.map +1 -1
  61. package/dist/product-set/product/booking-management/ProductBookingManagementControl.js +6 -0
  62. package/dist/product-set/product/deposit/ProductDepositControl.d.ts.map +1 -1
  63. package/dist/product-set/product/deposit/ProductDepositControl.js +3 -0
  64. package/dist/product-set/product/duration/ProductDurationControl.d.ts.map +1 -1
  65. package/dist/product-set/product/duration/ProductDurationControl.js +6 -0
  66. package/dist/product-set/product/price/ProductPriceControl.d.ts.map +1 -1
  67. package/dist/product-set/product/price/ProductPriceControl.js +3 -0
  68. package/dist/product-set/product/quantity/ProductQuantityConstantControl.d.ts.map +1 -1
  69. package/dist/product-set/product/quantity/ProductQuantityConstantControl.js +6 -0
  70. package/dist/product-set/product/quantity/ProductQuantityControl.d.ts.map +1 -1
  71. package/dist/product-set/product/quantity/ProductQuantityControl.js +6 -0
  72. package/dist/product-set/product/quantity/ProductQuantityRechargingControl.d.ts.map +1 -1
  73. package/dist/product-set/product/quantity/ProductQuantityRechargingControl.js +4 -1
  74. package/dist/product-set/product-category/ProductCategoryControl.d.ts.map +1 -1
  75. package/dist/product-set/product-category/ProductCategoryControl.js +12 -0
  76. package/dist/recurrence-input/RecurrenceEndInput.d.ts.map +1 -1
  77. package/dist/recurrence-input/RecurrenceEndInput.js +3 -0
  78. package/dist/recurring-date-picker-input/RecurrenceEndInput.d.ts.map +1 -1
  79. package/dist/resource/form/components/CapacityControl.d.ts.map +1 -1
  80. package/dist/resource/form/components/CapacityControl.js +3 -0
  81. package/dist/resource/form/components/SortControl.d.ts.map +1 -1
  82. package/dist/resource/form/components/SortControl.js +3 -0
  83. package/dist/sales/booking/results/components/ResultCard.d.ts.map +1 -1
  84. package/dist/sales/booking/results/components/ResultCard.js +0 -2
  85. package/dist/sales/coupon/control/CouponFormControl.d.ts.map +1 -1
  86. package/dist/sales/coupon/control/CouponFormControl.js +21 -0
  87. package/dist/setting/admin/PaymentFeeForm.d.ts.map +1 -1
  88. package/dist/setting/admin/PaymentFeeForm.js +16 -1
  89. package/dist/setting/dashboard/DashboardSettingForm.d.ts.map +1 -1
  90. package/dist/setting/dashboard/DashboardSettingForm.js +4 -1
  91. package/dist/snippet/snippet-template/preview/Preview.d.ts.map +1 -1
  92. package/dist/snippet/snippet-template/preview/Preview.js +8 -0
  93. package/dist/sortable-tree/SortableTreeItem.d.ts +2 -1
  94. package/dist/sortable-tree/SortableTreeItem.d.ts.map +1 -1
  95. package/dist/sortable-tree/SortableTreeItem.js +10 -4
  96. package/dist/static/CurrencyNumberInput.d.ts.map +1 -1
  97. package/dist/static/CurrencyNumberInput.js +3 -0
  98. package/dist/static/form-number-input/FormNumberInput.d.ts.map +1 -1
  99. package/dist/static/form-number-input/FormNumberInput.js +3 -0
  100. package/dist/static/number-input/NumberInput.d.ts.map +1 -1
  101. package/dist/static/number-input/NumberInput.js +3 -0
  102. package/dist/styles/availability-indicator/AvailabilityIndicator.scss +9 -0
  103. package/dist/styles/date-time-button/DateTimeButton.scss +2 -1
  104. package/dist/styles/iframe-events/Calendar.scss +9 -12
  105. package/dist/styles/iframe-external-modal/IframeExternalModal.scss +2 -2
  106. package/dist/styles/iframe-page/PageBody.scss +1 -0
  107. package/dist/styles/product-set/ProductSetForm.scss +22 -0
  108. package/dist/styles/ryft-payment-form/RyftPaymentForm.scss +1 -3
  109. package/dist/styles/sales/BookingResults.scss +1 -1
  110. package/dist/zone/form/components/GameDurationControl.d.ts.map +1 -1
  111. package/dist/zone/form/components/GameDurationControl.js +3 -0
  112. package/dist/zone/form/components/SortControl.d.ts.map +1 -1
  113. package/dist/zone/form/components/SortControl.js +3 -0
  114. package/package.json +8 -6
  115. package/src/affiliate/form/AffiliateForm.tsx +1 -0
  116. package/src/assets/iframe/available.svg +4 -4
  117. package/src/auth/Login/LoginComponent.tsx +1 -1
  118. package/src/availability-indicator/AvailabilityIndicator.tsx +92 -17
  119. package/src/calendar/Calendar.tsx +2 -0
  120. package/src/calendar/components/CalendarDates/CalendarDates.tsx +5 -1
  121. package/src/calendar/components/CalendarWeekdays/CalendarWeekdays.tsx +2 -2
  122. package/src/calendar/utils/index.ts +17 -26
  123. package/src/date-time-button/DateContent.tsx +3 -3
  124. package/src/date-time-button/DateTimeButton.tsx +7 -3
  125. package/src/events/edit-event-modal/utils/getDefaultProductSet.ts +0 -1
  126. package/src/events/event-venue-map/EventVenueMap.tsx +1 -0
  127. package/src/events/event-venue-map/hooks/useCanvasSize.ts +5 -1
  128. package/src/iframe/activity-card/ActivityCard.tsx +15 -2
  129. package/src/iframe/order-process/components/CategoryProduct/components/NumberInput/NumberInput.tsx +9 -0
  130. package/src/iframe/payment/order-items-table/utils/paymentSummary.tsx +1 -0
  131. package/src/iframe/ryft/utils/ryft-form.ts +6 -5
  132. package/src/layout/DropDown.tsx +1 -1
  133. package/src/notification/email-template/control/EmailTemplateControl.tsx +1 -0
  134. package/src/product-set/form/ProductCategoriesControl.tsx +37 -1
  135. package/src/product-set/form/ProductSetForm.tsx +6 -2
  136. package/src/product-set/form/ProductZonesControl.tsx +1 -4
  137. package/src/product-set/form/SelectCategoryModal.tsx +2 -2
  138. package/src/product-set/form/SubProductsControl.tsx +0 -3
  139. package/src/product-set/form/VenueMapSetModal.tsx +8 -9
  140. package/src/product-set/form/VenueMapsControl.tsx +0 -3
  141. package/src/product-set/product/ProductControl.tsx +0 -1
  142. package/src/product-set/product/advanced-options/AdvancedOptions.tsx +1 -1
  143. package/src/product-set/product/booking-management/ProductBookingManagementControl.tsx +2 -0
  144. package/src/product-set/product/deposit/ProductDepositControl.tsx +1 -0
  145. package/src/product-set/product/duration/ProductDurationControl.tsx +2 -0
  146. package/src/product-set/product/price/ProductPriceControl.tsx +1 -0
  147. package/src/product-set/product/quantity/ProductQuantityConstantControl.tsx +2 -0
  148. package/src/product-set/product/quantity/ProductQuantityControl.tsx +2 -0
  149. package/src/product-set/product/quantity/ProductQuantityRechargingControl.tsx +1 -0
  150. package/src/product-set/product-category/ProductCategoryControl.tsx +4 -0
  151. package/src/product-set/product-zone/ProductZoneControl.tsx +1 -1
  152. package/src/recurrence-input/RecurrenceEndInput.tsx +1 -0
  153. package/src/recurring-date-picker-input/RecurrenceEndInput.tsx +1 -0
  154. package/src/resource/form/components/CapacityControl.tsx +1 -0
  155. package/src/resource/form/components/SortControl.tsx +1 -0
  156. package/src/sales/booking/results/components/ResultCard.tsx +0 -2
  157. package/src/sales/coupon/control/CouponFormControl.tsx +7 -0
  158. package/src/setting/admin/PaymentFeeForm.tsx +5 -0
  159. package/src/setting/dashboard/DashboardSettingForm.tsx +1 -0
  160. package/src/snippet/snippet-template/preview/Preview.tsx +6 -0
  161. package/src/sortable-tree/SortableTreeItem.tsx +6 -0
  162. package/src/static/CurrencyNumberInput.tsx +1 -0
  163. package/src/static/form-number-input/FormNumberInput.tsx +1 -0
  164. package/src/static/number-input/NumberInput.tsx +1 -0
  165. package/src/styles/availability-indicator/AvailabilityIndicator.scss +9 -0
  166. package/src/styles/date-time-button/DateTimeButton.scss +2 -1
  167. package/src/styles/iframe-events/Calendar.scss +9 -12
  168. package/src/styles/iframe-external-modal/IframeExternalModal.scss +2 -2
  169. package/src/styles/iframe-page/PageBody.scss +1 -0
  170. package/src/styles/product-set/ProductSetForm.scss +22 -0
  171. package/src/styles/ryft-payment-form/RyftPaymentForm.scss +1 -3
  172. package/src/styles/sales/BookingResults.scss +1 -1
  173. package/src/zone/form/components/GameDurationControl.tsx +1 -0
  174. package/src/zone/form/components/SortControl.tsx +1 -0
  175. package/yarn.lock +51 -38
@@ -15,10 +15,12 @@
15
15
  height: 2.5rem;
16
16
  border-width: 2px;
17
17
  padding: 2px;
18
+
18
19
  label,
19
20
  .btn-switch-indicator {
20
21
  border-radius: 0.375rem !important;
21
22
  }
23
+
22
24
  label {
23
25
  height: 2rem;
24
26
  }
@@ -34,6 +36,7 @@
34
36
  margin-top: 1.5rem;
35
37
  margin-bottom: 1.5rem;
36
38
  }
39
+
37
40
  @include media-breakpoint-down(sm) {
38
41
  padding: 1.5rem 1rem;
39
42
  margin-top: 0.5rem;
@@ -59,10 +62,21 @@
59
62
  background-color: #ffdbdb;
60
63
  color: #d52902;
61
64
  }
65
+
62
66
  .category-badge {
63
67
  background-color: #e8f4f6;
64
68
  color: #1a93aa;
65
69
  }
70
+
71
+ .item-icon {
72
+ display: flex;
73
+ justify-items: center;
74
+ align-items: center;
75
+ font-size: 0.65rem;
76
+ padding: 0.2rem;
77
+ margin-right: 1rem;
78
+ }
79
+
66
80
  .product-badge {
67
81
  background-color: #e9f5ea;
68
82
  color: #269b36;
@@ -75,10 +89,12 @@
75
89
 
76
90
  .product-set-mobile-modal {
77
91
  margin: 0;
92
+
78
93
  .modal-content {
79
94
  border-radius: 1rem 1rem 0 0;
80
95
  border-width: 0;
81
96
  margin: 0;
97
+
82
98
  .modal-body {
83
99
  padding: 1rem 0;
84
100
  }
@@ -100,18 +116,22 @@
100
116
  font-weight: 600;
101
117
  font-size: 0.625rem;
102
118
  }
119
+
103
120
  .product-set-subtitle-dot {
104
121
  margin-right: 0.375rem;
105
122
  width: 0.375rem;
106
123
  height: 0.375rem;
107
124
  border-radius: 3px;
108
125
  }
126
+
109
127
  .product-set-subtitle-category-dot {
110
128
  background-color: #269b36;
111
129
  }
130
+
112
131
  .product-set-subtitle-step-dot {
113
132
  background-color: #1a93aa;
114
133
  }
134
+
115
135
  .product-set-subtitle-product-dot {
116
136
  background-color: #269b36;
117
137
  }
@@ -156,6 +176,7 @@
156
176
  justify-self: flex-end;
157
177
  align-items: flex-end;
158
178
  }
179
+
159
180
  .small-badge {
160
181
  font-size: 0.5rem;
161
182
  height: 1rem;
@@ -163,6 +184,7 @@
163
184
  padding: 0 0.2rem;
164
185
  margin-bottom: 0.2rem;
165
186
  }
187
+
166
188
  .product-set-save-btn-wrapper {
167
189
  padding-left: 0 !important;
168
190
  display: flex;
@@ -102,7 +102,6 @@
102
102
  }
103
103
 
104
104
  .ryft-payment-form {
105
-
106
105
  .form-disable-box {
107
106
  display: none;
108
107
  position: absolute;
@@ -184,7 +183,6 @@
184
183
  }
185
184
 
186
185
  @include media-breakpoint-up(md) {
187
-
188
186
  .ryft-payment-form,
189
187
  .form-disable-box {
190
188
  height: 50%;
@@ -213,4 +211,4 @@
213
211
  .divider {
214
212
  display: none !important;
215
213
  }
216
- }
214
+ }
@@ -5,7 +5,7 @@
5
5
  flex-wrap: wrap;
6
6
 
7
7
  .result-card {
8
- height: 14.25rem;
8
+ height: 14rem;
9
9
  border: 1px solid $gray-400;
10
10
  max-width: calc(50% - 0.75rem);
11
11
  flex: 0 0 calc(50% - 0.75rem);
@@ -1 +1 @@
1
- {"version":3,"file":"GameDurationControl.d.ts","sourceRoot":"","sources":["../../../../src/zone/form/components/GameDurationControl.tsx"],"names":[],"mappings":"AAOA,KAAK,wBAAwB,GAAG;IAC9B,SAAS,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,mBAAmB,mBAE7B,wBAAwB,4CA+B1B,CAAA"}
1
+ {"version":3,"file":"GameDurationControl.d.ts","sourceRoot":"","sources":["../../../../src/zone/form/components/GameDurationControl.tsx"],"names":[],"mappings":"AAOA,KAAK,wBAAwB,GAAG;IAC9B,SAAS,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,mBAAmB,mBAE7B,wBAAwB,4CAgC1B,CAAA"}
@@ -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.9",
3
+ "version": "0.70.10-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.31.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: 'availableSingleSpace' }
50
+ : { label: 'availableMultipleSpaces', 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
- resources: ZoneResourcesAvailability
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(() => {
@@ -39,8 +41,9 @@ export const CalendarDates = ({
39
41
 
40
42
  return (
41
43
  <div className='calendar-dates-wrapper'>
42
- <CalendarWeekdays />
43
44
  <div className='calendar-dates'>
45
+ <CalendarWeekdays />
46
+
44
47
  {fillCalendarDates.map((date: DateTime | null) => {
45
48
  if (date === null) return <div />
46
49
 
@@ -56,6 +59,7 @@ export const CalendarDates = ({
56
59
  onSelect={() => setSelectedDate(date)}
57
60
  price={fromPrice}
58
61
  variant={Variant.month}
62
+ availabilityFormat={availabilityFormat}
59
63
  {...props}
60
64
  />
61
65
  )
@@ -14,12 +14,12 @@ export const CalendarWeekdays = () => {
14
14
  const { t } = useTranslation('Design')
15
15
 
16
16
  return (
17
- <div className='calendar-weekdays'>
17
+ <>
18
18
  {WEEKDAYS.map(({ key }) => (
19
19
  <div key={key} className='calendar-weekday'>
20
20
  {t(key)}
21
21
  </div>
22
22
  ))}
23
- </div>
23
+ </>
24
24
  )
25
25
  }
@@ -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
  }
@@ -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 ||
@@ -43,7 +46,7 @@ export const DateTimeButton = ({
43
46
  const isPast = variant === Variant.time ? isPastTime(date) : isPastDate(date)
44
47
 
45
48
  const isDisabled = _isDisabled || isSoldOut || isPast
46
-
49
+ const isUnavailable = _isDisabled || isPast
47
50
  return (
48
51
  <button
49
52
  type='button'
@@ -67,10 +70,11 @@ export const DateTimeButton = ({
67
70
  variant={variant}
68
71
  />
69
72
  {price && !isDisabled && <div className='price'>{price}</div>}
70
- {showResources && resources && (
73
+ {showResources && (resources || isUnavailable) && (
71
74
  <AvailabilityIndicator
75
+ availabilityFormat={availabilityFormat}
72
76
  resources={resources}
73
- isUnavailable={_isDisabled || isPast}
77
+ isUnavailable={isUnavailable}
74
78
  isSoldOut={isSoldOut}
75
79
  />
76
80
  )}
@@ -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,
@@ -49,6 +49,7 @@ export const EventVenueMap = forwardRef<VenueMapRef, EventVenueMapProps>(
49
49
  },
50
50
  ref,
51
51
  ) => {
52
+ // TODO fix often updating of canvasSizes, which leads to flashing poingts
52
53
  const canvasSizes = useCanvasSize({ width, height })
53
54
 
54
55
  return (
@@ -10,13 +10,17 @@ export const useCanvasSize = ({
10
10
  width: componentWidth,
11
11
  height: componentHeight,
12
12
  }: CanvasSizeProps) => {
13
+ // TODO Fix often updating of width and height
13
14
  const { width, height } = useWindowDimensions()
14
15
 
16
+ // eslint-disable-next-line react-hooks/exhaustive-deps
17
+ const memoizedDimensions = useMemo(() => ({ width, height }), [width])
18
+
15
19
  const memoedComponentParameters = useMemo(() => {
16
20
  if (!componentWidth && !componentHeight) return null
17
21
 
18
22
  return { width: componentWidth, height: componentHeight }
19
23
  }, [componentWidth, componentHeight])
20
24
 
21
- return memoedComponentParameters || { width, height }
25
+ return memoedComponentParameters || memoizedDimensions
22
26
  }
@@ -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' />