@licklist/design 0.71.4 → 0.71.5-dev.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 (149) hide show
  1. package/dist/affiliate/form/AffiliateForm.d.ts.map +1 -1
  2. package/dist/auth/Login/LoginComponent.js +2 -1
  3. package/dist/events/edit-event-modal/component/SaleDeadline/SaleDeadline.d.ts +7 -1
  4. package/dist/events/edit-event-modal/component/SaleDeadline/SaleDeadline.d.ts.map +1 -1
  5. package/dist/events/edit-event-modal/component/SaleDeadline/SaleDeadline.js +10 -7
  6. package/dist/events/edit-event-modal/component/SelectEventProductSet/component/EditEventProductSet.js +3 -1
  7. package/dist/events/edit-event-modal/utils/getDefaultProductSet.js +1 -1
  8. package/dist/events/event-statistic-modal/utils/index.d.ts.map +1 -1
  9. package/dist/events/event-statistic-modal/utils/index.js +7 -1
  10. package/dist/events/event-venue-map/EventVenueMap.d.ts.map +1 -1
  11. package/dist/events/event-venue-map/EventVenueMap.js +1 -0
  12. package/dist/events/event-venue-map/hooks/useCanvasSize.d.ts.map +1 -1
  13. package/dist/events/event-venue-map/hooks/useCanvasSize.js +11 -4
  14. package/dist/iframe/order-process/components/CategoryProduct/components/NumberInput/NumberInput.d.ts.map +1 -1
  15. package/dist/iframe/order-process/components/CategoryProduct/components/NumberInput/NumberInput.js +13 -0
  16. package/dist/iframe/payment/order-items-table/utils/paymentSummary.d.ts.map +1 -1
  17. package/dist/iframe/ryft/RyftPaymentForm.js +1 -1
  18. package/dist/iframe/ryft/utils/ryft-form.d.ts.map +1 -1
  19. package/dist/iframe/ryft/utils/ryft-form.js +4 -5
  20. package/dist/layout/DropDown.d.ts +2 -1
  21. package/dist/layout/DropDown.d.ts.map +1 -1
  22. package/dist/notification/email-template/control/EmailTemplateControl.d.ts.map +1 -1
  23. package/dist/notification/email-template/control/EmailTemplateControl.js +3 -0
  24. package/dist/product-set/control/ProductSetControl.d.ts +2 -0
  25. package/dist/product-set/control/ProductSetControl.d.ts.map +1 -1
  26. package/dist/product-set/control/ProductSetControl.js +5 -0
  27. package/dist/product-set/form/ProductCategoriesControl.d.ts.map +1 -1
  28. package/dist/product-set/form/ProductCategoriesControl.js +49 -2
  29. package/dist/product-set/form/ProductSetForm.d.ts +6 -2
  30. package/dist/product-set/form/ProductSetForm.d.ts.map +1 -1
  31. package/dist/product-set/form/ProductSetForm.js +3 -2
  32. package/dist/product-set/form/ProductZonesControl.d.ts.map +1 -1
  33. package/dist/product-set/form/ProductZonesControl.js +0 -2
  34. package/dist/product-set/form/ProductsControl.js +2 -0
  35. package/dist/product-set/form/SelectCategoryModal.d.ts +12 -0
  36. package/dist/product-set/form/SelectCategoryModal.d.ts.map +1 -1
  37. package/dist/product-set/form/SelectCategoryModal.js +1 -1
  38. package/dist/product-set/form/SubProductsControl.d.ts.map +1 -1
  39. package/dist/product-set/form/SubProductsControl.js +0 -3
  40. package/dist/product-set/form/VenueMapsControl.d.ts.map +1 -1
  41. package/dist/product-set/form/VenueMapsControl.js +0 -3
  42. package/dist/product-set/product/ProductControl.d.ts.map +1 -1
  43. package/dist/product-set/product/booking-management/ProductBookingManagementControl.d.ts.map +1 -1
  44. package/dist/product-set/product/booking-management/ProductBookingManagementControl.js +6 -0
  45. package/dist/product-set/product/deposit/ProductDepositControl.d.ts.map +1 -1
  46. package/dist/product-set/product/deposit/ProductDepositControl.js +3 -0
  47. package/dist/product-set/product/duration/ProductDurationControl.d.ts.map +1 -1
  48. package/dist/product-set/product/duration/ProductDurationControl.js +6 -0
  49. package/dist/product-set/product/price/ProductPriceControl.d.ts.map +1 -1
  50. package/dist/product-set/product/price/ProductPriceControl.js +3 -0
  51. package/dist/product-set/product/quantity/ProductQuantityConstantControl.d.ts.map +1 -1
  52. package/dist/product-set/product/quantity/ProductQuantityConstantControl.js +6 -0
  53. package/dist/product-set/product/quantity/ProductQuantityControl.d.ts.map +1 -1
  54. package/dist/product-set/product/quantity/ProductQuantityControl.js +6 -0
  55. package/dist/product-set/product/quantity/ProductQuantityRechargingControl.d.ts.map +1 -1
  56. package/dist/product-set/product/quantity/ProductQuantityRechargingControl.js +4 -1
  57. package/dist/product-set/product-category/ProductCategoryControl.d.ts +1 -0
  58. package/dist/product-set/product-category/ProductCategoryControl.d.ts.map +1 -1
  59. package/dist/product-set/product-category/ProductCategoryControl.js +19 -1
  60. package/dist/recurrence-input/RecurrenceEndInput.d.ts.map +1 -1
  61. package/dist/recurrence-input/RecurrenceEndInput.js +3 -0
  62. package/dist/recurring-date-picker-input/RecurrenceEndInput.d.ts.map +1 -1
  63. package/dist/resource/form/components/CapacityControl.d.ts.map +1 -1
  64. package/dist/resource/form/components/CapacityControl.js +3 -0
  65. package/dist/resource/form/components/SortControl.d.ts.map +1 -1
  66. package/dist/resource/form/components/SortControl.js +3 -0
  67. package/dist/sales/booking/results/components/ResultCard.d.ts.map +1 -1
  68. package/dist/sales/booking/results/components/ResultCard.js +0 -2
  69. package/dist/sales/coupon/control/CouponFormControl.d.ts.map +1 -1
  70. package/dist/sales/coupon/control/CouponFormControl.js +21 -0
  71. package/dist/setting/admin/PaymentFeeForm.d.ts.map +1 -1
  72. package/dist/setting/admin/PaymentFeeForm.js +16 -1
  73. package/dist/setting/dashboard/DashboardSettingForm.d.ts.map +1 -1
  74. package/dist/setting/dashboard/DashboardSettingForm.js +4 -1
  75. package/dist/snippet/snippet-template/preview/Preview.d.ts.map +1 -1
  76. package/dist/snippet/snippet-template/preview/Preview.js +6 -0
  77. package/dist/sortable-tree/SortableTreeItem.d.ts +2 -1
  78. package/dist/sortable-tree/SortableTreeItem.d.ts.map +1 -1
  79. package/dist/sortable-tree/SortableTreeItem.js +10 -4
  80. package/dist/static/CurrencyNumberInput.d.ts.map +1 -1
  81. package/dist/static/CurrencyNumberInput.js +3 -0
  82. package/dist/static/form-number-input/FormNumberInput.d.ts.map +1 -1
  83. package/dist/static/form-number-input/FormNumberInput.js +3 -0
  84. package/dist/static/number-input/NumberInput.d.ts.map +1 -1
  85. package/dist/static/number-input/NumberInput.js +3 -0
  86. package/dist/styles/availability-indicator/AvailabilityIndicator.scss +1 -1
  87. package/dist/styles/iframe-events/Calendar.scss +1 -1
  88. package/dist/styles/iframe-external-modal/IframeExternalModal.scss +2 -2
  89. package/dist/styles/product-set/ProductSetForm.scss +22 -0
  90. package/dist/styles/ryft-payment-form/RyftPaymentForm.scss +1 -3
  91. package/dist/styles/sales/BookingResults.scss +1 -1
  92. package/dist/zone/form/components/GameDurationControl.d.ts.map +1 -1
  93. package/dist/zone/form/components/GameDurationControl.js +3 -0
  94. package/dist/zone/form/components/SortControl.d.ts.map +1 -1
  95. package/dist/zone/form/components/SortControl.js +3 -0
  96. package/package.json +8 -6
  97. package/src/affiliate/form/AffiliateForm.tsx +1 -0
  98. package/src/auth/Login/LoginComponent.tsx +1 -1
  99. package/src/events/edit-event-modal/component/SaleDeadline/SaleDeadline.tsx +42 -16
  100. package/src/events/edit-event-modal/utils/getDefaultProductSet.ts +1 -1
  101. package/src/events/event-statistic-modal/utils/index.ts +11 -1
  102. package/src/events/event-venue-map/EventVenueMap.tsx +1 -0
  103. package/src/events/event-venue-map/hooks/useCanvasSize.ts +5 -1
  104. package/src/iframe/order-process/components/CategoryProduct/components/NumberInput/NumberInput.tsx +9 -0
  105. package/src/iframe/payment/order-items-table/utils/paymentSummary.tsx +1 -0
  106. package/src/iframe/ryft/RyftPaymentForm.tsx +1 -1
  107. package/src/iframe/ryft/utils/ryft-form.ts +6 -5
  108. package/src/layout/DropDown.tsx +1 -1
  109. package/src/notification/email-template/control/EmailTemplateControl.tsx +1 -0
  110. package/src/product-set/control/ProductSetControl.tsx +5 -0
  111. package/src/product-set/form/ProductCategoriesControl.tsx +38 -1
  112. package/src/product-set/form/ProductSetForm.tsx +8 -2
  113. package/src/product-set/form/ProductZonesControl.tsx +1 -4
  114. package/src/product-set/form/SelectCategoryModal.tsx +2 -2
  115. package/src/product-set/form/SubProductsControl.tsx +0 -3
  116. package/src/product-set/form/VenueMapsControl.tsx +0 -3
  117. package/src/product-set/product/ProductControl.tsx +0 -1
  118. package/src/product-set/product/advanced-options/AdvancedOptions.tsx +1 -1
  119. package/src/product-set/product/booking-management/ProductBookingManagementControl.tsx +2 -0
  120. package/src/product-set/product/deposit/ProductDepositControl.tsx +1 -0
  121. package/src/product-set/product/duration/ProductDurationControl.tsx +2 -0
  122. package/src/product-set/product/price/ProductPriceControl.tsx +1 -0
  123. package/src/product-set/product/quantity/ProductQuantityConstantControl.tsx +2 -0
  124. package/src/product-set/product/quantity/ProductQuantityControl.tsx +2 -0
  125. package/src/product-set/product/quantity/ProductQuantityRechargingControl.tsx +1 -0
  126. package/src/product-set/product-category/ProductCategoryControl.tsx +17 -0
  127. package/src/product-set/product-zone/ProductZoneControl.tsx +1 -1
  128. package/src/recurrence-input/RecurrenceEndInput.tsx +1 -0
  129. package/src/recurring-date-picker-input/RecurrenceEndInput.tsx +1 -0
  130. package/src/resource/form/components/CapacityControl.tsx +1 -0
  131. package/src/resource/form/components/SortControl.tsx +1 -0
  132. package/src/sales/booking/results/components/ResultCard.tsx +0 -2
  133. package/src/sales/coupon/control/CouponFormControl.tsx +7 -0
  134. package/src/setting/admin/PaymentFeeForm.tsx +5 -0
  135. package/src/setting/dashboard/DashboardSettingForm.tsx +1 -0
  136. package/src/snippet/snippet-template/preview/Preview.tsx +6 -0
  137. package/src/sortable-tree/SortableTreeItem.tsx +6 -0
  138. package/src/static/CurrencyNumberInput.tsx +1 -0
  139. package/src/static/form-number-input/FormNumberInput.tsx +1 -0
  140. package/src/static/number-input/NumberInput.tsx +1 -0
  141. package/src/styles/availability-indicator/AvailabilityIndicator.scss +1 -1
  142. package/src/styles/iframe-events/Calendar.scss +1 -1
  143. package/src/styles/iframe-external-modal/IframeExternalModal.scss +2 -2
  144. package/src/styles/product-set/ProductSetForm.scss +22 -0
  145. package/src/styles/ryft-payment-form/RyftPaymentForm.scss +1 -3
  146. package/src/styles/sales/BookingResults.scss +1 -1
  147. package/src/zone/form/components/GameDurationControl.tsx +1 -0
  148. package/src/zone/form/components/SortControl.tsx +1 -0
  149. package/yarn.lock +149 -113
@@ -23,6 +23,7 @@ import { ruleForUrlWithProtocol } from '@licklist/plugins/dist/validation/Rules/
23
23
  import { WorkHour } from '@licklist/core/dist/DataMapper/Provider/WorkHourDataMapper'
24
24
  import { checkIfZoneCategory } from '@licklist/plugins'
25
25
  import { Image } from '@licklist/core/dist/DataMapper/Media/ImageDataMapper'
26
+ import { SaleDeadline } from 'src/events/edit-event-modal/component/SaleDeadline'
26
27
  import { WarningMessage } from '../../static'
27
28
  import { SelectItem } from '../../types/generic/SelectItem'
28
29
  import {
@@ -66,6 +67,7 @@ export interface ProductSetControlValues extends DateAndRecurrenceInputValues {
66
67
  productGroups?: SelectItem[]
67
68
  relyOnPeopleType?: RelyOnPeopleType | null
68
69
  fieldSetId?: number
70
+ saleDeadline?: number
69
71
  steps: Step[]
70
72
  emailTemplates?: TemplateItem[]
71
73
  smsTemplates?: TemplateItem[]
@@ -93,6 +95,7 @@ export interface ProductSetControlProps {
93
95
  workHours: WorkHour[] | undefined
94
96
  providerHasBookingManagement?: boolean
95
97
  isOverrides?: boolean
98
+ saleDeadline?: number
96
99
  isCreateNewOverrides?: boolean
97
100
  timeZone: string
98
101
  }
@@ -222,6 +225,8 @@ export function ProductSetControl({
222
225
  </>
223
226
  )}
224
227
 
228
+ <SaleDeadline disabled={false} onlyBefore />
229
+
225
230
  <div className='divider' />
226
231
 
227
232
  <TutorialGifCard isOverrides={isOverrides} />
@@ -8,6 +8,7 @@ import {
8
8
  useFormContext,
9
9
  useWatch,
10
10
  } from 'react-hook-form'
11
+ import { FaBars, FaBowlingBall, FaCalendar, FaTicketAlt } from 'react-icons/fa'
11
12
  import { useTranslation } from 'react-i18next'
12
13
  import { useSensor, MouseSensor } from '@dnd-kit/core'
13
14
  import {
@@ -25,7 +26,11 @@ import { ProductCategoryControl } from '../product-category'
25
26
  import { ProductCategory } from '../types'
26
27
  import { ProductsControl } from './ProductsControl'
27
28
  import { ProductSetFormValues, WithIsLoading } from './ProductSetForm'
28
- import { SelectCategoryModal } from './SelectCategoryModal'
29
+ import {
30
+ SelectCategoryModal,
31
+ CATEGORY_TYPES_NAMES,
32
+ CategoryConfig,
33
+ } from './SelectCategoryModal'
29
34
  import { ProductSetLoadingContext } from './context'
30
35
  import { VenueMapSetModal } from './VenueMapSetModal'
31
36
  import { moveArrayElements, sortArrayByIndex } from '../utils'
@@ -33,6 +38,29 @@ import { useSortableTreeFunctions } from '../hooks/useSortableTreeFunctions'
33
38
  // @TODO not for first release
34
39
  // import Popover from "./ProductSetFormPopover";
35
40
 
41
+ const CATEGORIES_TYPE: Partial<Record<CategoryType, CategoryConfig>> = {
42
+ [CATEGORY_TYPES_NAMES.tickets]: {
43
+ label: 'tickets',
44
+ icon: <FaTicketAlt color='#0e8ce2' size={10} />,
45
+ },
46
+ [CATEGORY_TYPES_NAMES.bookings]: {
47
+ label: 'bookings',
48
+ icon: <FaCalendar color='#0e8ce2' size={10} />,
49
+ },
50
+ [CATEGORY_TYPES_NAMES.menuItems]: {
51
+ label: 'menuItems',
52
+ icon: <FaBars color='#0e8ce2' size={10} />,
53
+ },
54
+ [CATEGORY_TYPES_NAMES.game]: {
55
+ label: 'game',
56
+ icon: <FaBowlingBall color='#0e8ce2' size={10} />,
57
+ },
58
+ [CATEGORY_TYPES_NAMES.fixedDuration]: {
59
+ label: 'fixedDuration',
60
+ icon: <FaCalendar color='#0e8ce2' size={10} />,
61
+ },
62
+ }
63
+
36
64
  interface ProductCategoriesControlProps extends WithIsLoading {
37
65
  stepIndex: number
38
66
  isOverrides?: boolean
@@ -58,6 +86,7 @@ const getCategoryDefaultValue = (
58
86
  remainderExpireAfter: undefined,
59
87
  hasBookingManagement: false,
60
88
  weight: 0,
89
+ saleDeadlineCategory: 0,
61
90
  isReusable: false,
62
91
  hasSubEvents: false,
63
92
  products: [],
@@ -228,6 +257,8 @@ export function ProductCategoriesControl({
228
257
  setIsExpanded(productCategoryId)
229
258
  }
230
259
 
260
+ const categoryType = CATEGORIES_TYPE[productCategory.type]
261
+
231
262
  return (
232
263
  <Controller
233
264
  key={`product-category-${productCategory._id}`}
@@ -272,6 +303,12 @@ export function ProductCategoriesControl({
272
303
  )}
273
304
  modalClass={ProductSetModalClasses.category}
274
305
  isNewAdded={showCategoryModal}
306
+ itemButton={
307
+ <div className='btn-outline-primary item-icon sm border border-primary rounded-sm'>
308
+ {categoryType.icon}
309
+ <span className='ml-2'>{t(categoryType.label)}</span>
310
+ </div>
311
+ }
275
312
  body={
276
313
  <ProductCategoryControl
277
314
  isLoading={isLoading}
@@ -12,7 +12,7 @@ import { isEqual } from 'lodash'
12
12
  import { ProviderBookingManagementSetting } from '@licklist/core/dist/DataMapper/Provider/ProviderBookingManagementSettingDataMapper'
13
13
  import { Zone } from '@licklist/core/dist/DataMapper/Provider/ZoneDataMapper'
14
14
  import { WorkHour } from '@licklist/core/dist/DataMapper/Provider/WorkHourDataMapper'
15
- import { transformErrorToMessage } from '@licklist/plugins'
15
+ import { transformErrorToMessage } from '@licklist/plugins/dist/utils/error'
16
16
  import { Dialog, useDialogContext } from '../../modals/dialog'
17
17
  import {
18
18
  ProductSetControl,
@@ -28,12 +28,16 @@ import { ErrorModal } from '../../iframe/order-process/components/ErrorModal'
28
28
  export interface WithIsLoading {
29
29
  isLoading: boolean
30
30
  }
31
+ export interface WithIdOptional {
32
+ id?: number
33
+ }
34
+
31
35
  export interface WithId {
32
36
  id: number
33
37
  }
34
38
  export interface ProductSetFormValues
35
39
  extends FormValues,
36
- WithId,
40
+ WithIdOptional,
37
41
  ProductSetControlValues {
38
42
  steps: Step[]
39
43
  isOverrides?: boolean
@@ -55,6 +59,7 @@ export interface ProductSetFormProps
55
59
  isCreateAction?: boolean
56
60
  isOverrides?: boolean
57
61
  workHours?: WorkHour[]
62
+ saleDeadline?: number
58
63
  isCreateNewOverrides?: boolean
59
64
  timeZone: string
60
65
  }
@@ -73,6 +78,7 @@ export function ProductSetForm({
73
78
  zones,
74
79
  isCreateAction,
75
80
  workHours,
81
+ saleDeadline,
76
82
  isOverrides,
77
83
  isCreateNewOverrides,
78
84
  timeZone,
@@ -1,7 +1,4 @@
1
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
2
- // @ts-nocheck
3
- import React, { useContext, useState } from 'react'
4
-
1
+ import { useContext, useState } from 'react'
5
2
  import {
6
3
  ArrayPath,
7
4
  Controller,
@@ -25,7 +25,7 @@ import {
25
25
  } from 'react-icons/fa'
26
26
  import { ProductSetLoadingContext } from './context'
27
27
 
28
- const CATEGORY_TYPES_NAMES = {
28
+ export const CATEGORY_TYPES_NAMES = {
29
29
  menuItems: CATEGORY_TYPE_MENU_ITEMS,
30
30
  tickets: CATEGORY_TYPE_TICKETS,
31
31
  bookings: CATEGORY_TYPE_BOOKINGS,
@@ -33,7 +33,7 @@ const CATEGORY_TYPES_NAMES = {
33
33
  fixedDuration: CATEGORY_TYPE_FIXED_DURATION,
34
34
  } as const
35
35
 
36
- type CategoryConfig = { label: string; icon: ReactElement }
36
+ export type CategoryConfig = { label: string; icon: ReactElement }
37
37
 
38
38
  const MAIN_CATEGORIES: Partial<Record<CategoryType, CategoryConfig>> = {
39
39
  [CATEGORY_TYPES_NAMES.tickets]: {
@@ -70,9 +70,6 @@ export function SubProductsControl({
70
70
  images: subProducts[index]?.images as Image[],
71
71
  }
72
72
  // @ts-expect-error TS2345
73
- // @TODO fix prod type error
74
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
75
- // @ts-ignore
76
73
  append(subProductCopy)
77
74
  }}
78
75
  />
@@ -46,9 +46,6 @@ export const VenueMapsControl = ({
46
46
  url={image.url}
47
47
  name={name}
48
48
  points={points}
49
- // @TODO fix prod type error
50
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
51
- // @ts-ignore
52
49
  products={products}
53
50
  pointProducts={pointProducts}
54
51
  onPointProductsChange={onPointProductsChange}
@@ -34,7 +34,6 @@ import {
34
34
  } from 'react-hook-form'
35
35
  import { useTranslation } from 'react-i18next'
36
36
  import { useImages } from '@licklist/plugins/dist/hooks/Media/useImages'
37
-
38
37
  import {
39
38
  Image,
40
39
  IMAGE_TYPE_IMAGE,
@@ -1,4 +1,4 @@
1
- import React, { useContext } from 'react'
1
+ import { useContext } from 'react'
2
2
  import { Col, Form } from 'react-bootstrap'
3
3
  import { Controller, Path, useFormContext } from 'react-hook-form'
4
4
  import { HookFormService } from '@licklist/plugins'
@@ -86,6 +86,7 @@ export function ProductBookingManagementControl<T extends FormValues>(
86
86
  <Form.Control
87
87
  ref={ref}
88
88
  type='number'
89
+ onWheel={(event) => event.currentTarget.blur()}
89
90
  min={0}
90
91
  step={1}
91
92
  value={value as string}
@@ -129,6 +130,7 @@ export function ProductBookingManagementControl<T extends FormValues>(
129
130
  <Form.Control
130
131
  ref={ref}
131
132
  type='number'
133
+ onWheel={(event) => event.currentTarget.blur()}
132
134
  min='0'
133
135
  step='1'
134
136
  value={value as string}
@@ -50,6 +50,7 @@ export function ProductDepositControl<T extends FormValues>(
50
50
  <Form.Control
51
51
  ref={ref}
52
52
  type='number'
53
+ onWheel={(event) => event.currentTarget.blur()}
53
54
  min={0}
54
55
  max={Number(totalPrice)}
55
56
  step='0.01'
@@ -91,6 +91,7 @@ export const ProductDurationControl = <T,>({
91
91
  <Form.Control
92
92
  type='number'
93
93
  min={0}
94
+ onWheel={(event) => event.currentTarget.blur()}
94
95
  step={1}
95
96
  value={durationHours}
96
97
  disabled={disabled}
@@ -127,6 +128,7 @@ export const ProductDurationControl = <T,>({
127
128
  type='number'
128
129
  min={0}
129
130
  step={1}
131
+ onWheel={(event) => event.currentTarget.blur()}
130
132
  disabled={disabled}
131
133
  value={durationMinutes}
132
134
  isInvalid={isInvalid}
@@ -59,6 +59,7 @@ export function ProductPriceControl<T extends FormValues>({
59
59
  ref={ref}
60
60
  type='number'
61
61
  min={0}
62
+ onWheel={(event) => event.currentTarget.blur()}
62
63
  max={999999.99}
63
64
  step='0.01'
64
65
  value={value as string}
@@ -111,6 +111,7 @@ export function ProductQuantityConstantControl<T extends FormValues>(
111
111
  type='number'
112
112
  min={0}
113
113
  step={1}
114
+ onWheel={(event) => event.currentTarget.blur()}
114
115
  value={value as string}
115
116
  isInvalid={HookFormService.isInvalid<T>(
116
117
  `${fieldNamePrefix}.totalQuantity` as Path<T>,
@@ -165,6 +166,7 @@ export function ProductQuantityConstantControl<T extends FormValues>(
165
166
  type='number'
166
167
  min={0}
167
168
  step={1}
169
+ onWheel={(event) => event.currentTarget.blur()}
168
170
  value={value as string}
169
171
  onChange={onChange}
170
172
  onFocus={onFocus}
@@ -85,6 +85,7 @@ export function ProductQuantityControl<T extends FormValues>(
85
85
  type='number'
86
86
  min={0}
87
87
  step={1}
88
+ onWheel={(event) => event.currentTarget.blur()}
88
89
  value={value as string}
89
90
  onChange={onChange}
90
91
  onFocus={onFocus}
@@ -143,6 +144,7 @@ export function ProductQuantityControl<T extends FormValues>(
143
144
  type='number'
144
145
  min={0}
145
146
  step={1}
147
+ onWheel={(event) => event.currentTarget.blur()}
146
148
  value={value && (value as string)}
147
149
  onFocus={onFocus}
148
150
  onChange={onChange}
@@ -69,6 +69,7 @@ export function ProductQuantityRechargingControl<T extends FormValues>(
69
69
  type='number'
70
70
  min={0}
71
71
  step={1}
72
+ onWheel={(event) => event.currentTarget.blur()}
72
73
  {...register(`${fieldNamePrefix}.totalQuantity` as Path<T>, {
73
74
  validate: (value) => {
74
75
  if (unlimited) return true
@@ -17,6 +17,10 @@ import { Switch, BooleanSwitch } from '../../static'
17
17
  import { ProductSetFormValues } from '../form/ProductSetForm'
18
18
  import { IsDeletableEvent, ProductCategory } from '../types'
19
19
  import { ReactComponent as IncrementIcon } from '../../assets/dashboard/increment.svg'
20
+ import {
21
+ SaleDeadline,
22
+ SALE_DEADLINE_NAME_CATEGORY,
23
+ } from '../../events/edit-event-modal/component/SaleDeadline/SaleDeadline'
20
24
 
21
25
  export interface ProductCategoryControlValues extends FormValues {
22
26
  id: number
@@ -36,6 +40,7 @@ export interface ProductCategoryControlValues extends FormValues {
36
40
  hasSubEvents?: boolean
37
41
  weight?: number
38
42
  isReusable?: boolean
43
+ saleDeadlineCategory?: number
39
44
  termsAndConditions?: string
40
45
  sort: number | null
41
46
  }
@@ -216,6 +221,7 @@ export function ProductCategoryControl({
216
221
  step={1}
217
222
  value={value === null ? '' : value}
218
223
  onChange={onChange}
224
+ onWheel={(event) => event.currentTarget.blur()}
219
225
  isInvalid={HookFormService.isInvalid<ProductSetFormValues>(
220
226
  `${fieldNamePrefix}.minSubItems` as const,
221
227
  errors,
@@ -288,6 +294,7 @@ export function ProductCategoryControl({
288
294
  name={name}
289
295
  value={value === null ? '' : value}
290
296
  onChange={onChange}
297
+ onWheel={(event) => event.currentTarget.blur()}
291
298
  isInvalid={HookFormService.isInvalid<ProductSetFormValues>(
292
299
  `${fieldNamePrefix}.maxSubItems` as const,
293
300
  errors,
@@ -348,6 +355,7 @@ export function ProductCategoryControl({
348
355
  min={0}
349
356
  step={1}
350
357
  type='number'
358
+ onWheel={(event) => event.currentTarget.blur()}
351
359
  disabled={isOverride}
352
360
  isInvalid={HookFormService.isInvalid<ProductSetFormValues>(
353
361
  `${fieldNamePrefix}.overallQuantity`,
@@ -420,6 +428,14 @@ export function ProductCategoryControl({
420
428
  </div>
421
429
  </Form.Group>
422
430
  )}
431
+
432
+ <SaleDeadline
433
+ disabled={false}
434
+ deadLineCategory={
435
+ `${fieldNamePrefix}.${SALE_DEADLINE_NAME_CATEGORY}` as const
436
+ }
437
+ onlyBefore
438
+ />
423
439
  {/*
424
440
 
425
441
 
@@ -530,6 +546,7 @@ export function ProductCategoryControl({
530
546
  step={1}
531
547
  value={value}
532
548
  onChange={onChange}
549
+ onWheel={(event) => event.currentTarget.blur()}
533
550
  isInvalid={HookFormService.isInvalid<ProductSetFormValues>(
534
551
  `${fieldNamePrefix}.remainderExpireAfter` as const,
535
552
  errors,
@@ -1,4 +1,4 @@
1
- import React, { useContext, useEffect, useMemo } from 'react'
1
+ import { useContext, useEffect, useMemo } from 'react'
2
2
  import { Col, Form, Row } from 'react-bootstrap'
3
3
  import {
4
4
  ArrayPath,
@@ -109,6 +109,7 @@ function RecurrenceEndInput({
109
109
  type='number'
110
110
  min={1}
111
111
  max={500}
112
+ onWheel={(event) => event.currentTarget.blur()}
112
113
  disabled={disabled || !count || count === 500}
113
114
  aria-label='Occurrence count'
114
115
  value={count ?? defaultOccurrences[frequency]}
@@ -91,6 +91,7 @@ function RecurrenceEndInput({
91
91
  type='number'
92
92
  min={1}
93
93
  max={500}
94
+ onWheel={(event) => event.currentTarget.blur()}
94
95
  disabled={disabled || !count || count === 500}
95
96
  aria-label='Occurrence count'
96
97
  value={count ?? defaultOccurrences[frequency]}
@@ -27,6 +27,7 @@ export const CapacityControl = ({ isLoading }: CapacityControlProps) => {
27
27
  required: true,
28
28
  min: 1,
29
29
  })}
30
+ onWheel={(event) => event.currentTarget.blur()}
30
31
  placeholder={t('Design:capacity')}
31
32
  isInvalid={Boolean(errors.capacity)}
32
33
  disabled={isLoading}
@@ -27,6 +27,7 @@ export const SortControl = ({ isLoading }: SortControlProps) => {
27
27
  required: false,
28
28
  min: 1,
29
29
  })}
30
+ onWheel={(event) => event.currentTarget.blur()}
30
31
  placeholder={t('Design:ordering')}
31
32
  isInvalid={Boolean(errors.sort)}
32
33
  disabled={isLoading}
@@ -20,8 +20,6 @@ export type ResultCardProps = {
20
20
  onCardClick?: (id: number) => void
21
21
  }
22
22
 
23
- // @TODO integrate when API will be available
24
- // activity and staff keys
25
23
  export const ResultCard = ({
26
24
  order,
27
25
  className,
@@ -179,6 +179,7 @@ export const CouponFormControl = ({
179
179
  <Form.Label>{t('Design:discount')}</Form.Label>
180
180
  <Form.Control
181
181
  type='number'
182
+ onWheel={(event) => event.currentTarget.blur()}
182
183
  isInvalid={errors.discount !== undefined}
183
184
  {...register('discount', {
184
185
  required: t('Validation:fieldRequired', {
@@ -316,6 +317,7 @@ export const CouponFormControl = ({
316
317
  <Form.Control
317
318
  {...register('totalCoupons')}
318
319
  type='number'
320
+ onWheel={(event) => event.currentTarget.blur()}
319
321
  isInvalid={errors.totalCoupons !== undefined}
320
322
  disabled={isLoading}
321
323
  />
@@ -330,6 +332,7 @@ export const CouponFormControl = ({
330
332
  <Form.Control
331
333
  type='number'
332
334
  {...register('usesPerUser')}
335
+ onWheel={(event) => event.currentTarget.blur()}
333
336
  disabled={isLoading}
334
337
  />
335
338
  </Form.Group>
@@ -342,6 +345,7 @@ export const CouponFormControl = ({
342
345
  <Form.Control
343
346
  type='number'
344
347
  {...register('useAgain')}
348
+ onWheel={(event) => event.currentTarget.blur()}
345
349
  disabled={isLoading}
346
350
  />
347
351
  <Form.Text className='text-muted'>
@@ -355,6 +359,7 @@ export const CouponFormControl = ({
355
359
  <Form.Control
356
360
  type='number'
357
361
  {...register('usesPerUserDay')}
362
+ onWheel={(event) => event.currentTarget.blur()}
358
363
  disabled={isLoading}
359
364
  />
360
365
  <Form.Text className='text-muted'>
@@ -370,6 +375,7 @@ export const CouponFormControl = ({
370
375
  <Form.Control
371
376
  type='number'
372
377
  {...register('minAmount')}
378
+ onWheel={(event) => event.currentTarget.blur()}
373
379
  disabled={isLoading}
374
380
  />
375
381
  <Form.Text className='text-muted'>
@@ -383,6 +389,7 @@ export const CouponFormControl = ({
383
389
  <Form.Control
384
390
  type='number'
385
391
  {...register('maxAmount')}
392
+ onWheel={(event) => event.currentTarget.blur()}
386
393
  disabled={isLoading}
387
394
  />
388
395
  <Form.Text className='text-muted'>
@@ -74,6 +74,7 @@ export function PaymentFeeForm({ isLoading = false }: PaymentFeeFormProps) {
74
74
  max={100}
75
75
  step='1'
76
76
  placeholder='0'
77
+ onWheel={(event) => event.currentTarget.blur()}
77
78
  {...register('feeInPercent', {
78
79
  validate: {
79
80
  moreThan: (v) => (v ? v >= 0 : true),
@@ -129,6 +130,7 @@ export function PaymentFeeForm({ isLoading = false }: PaymentFeeFormProps) {
129
130
  max={999999.99}
130
131
  step='0.01'
131
132
  placeholder='0,00'
133
+ onWheel={(event) => event.currentTarget.blur()}
132
134
  isInvalid={Boolean(errors.minFeeInPounds)}
133
135
  disabled={isLoading}
134
136
  />
@@ -174,6 +176,7 @@ export function PaymentFeeForm({ isLoading = false }: PaymentFeeFormProps) {
174
176
  max={999999.99}
175
177
  step='0.01'
176
178
  placeholder='0,00'
179
+ onWheel={(event) => event.currentTarget.blur()}
177
180
  isInvalid={Boolean(errors.maxFeeInPounds)}
178
181
  disabled={isLoading}
179
182
  />
@@ -231,6 +234,7 @@ export function PaymentFeeForm({ isLoading = false }: PaymentFeeFormProps) {
231
234
  max={100}
232
235
  step='1'
233
236
  placeholder='0'
237
+ onWheel={(event) => event.currentTarget.blur()}
234
238
  isInvalid={Boolean(errors.vatInPercent)}
235
239
  disabled={isLoading}
236
240
  />
@@ -276,6 +280,7 @@ export function PaymentFeeForm({ isLoading = false }: PaymentFeeFormProps) {
276
280
  max={999999.99}
277
281
  step='0.01'
278
282
  placeholder='0,00'
283
+ onWheel={(event) => event.currentTarget.blur()}
279
284
  isInvalid={Boolean(errors.fixedFee)}
280
285
  disabled={isLoading}
281
286
  />
@@ -178,6 +178,7 @@ export const DashboardSettingForm = ({
178
178
  <Form.Label>{t('metaPixelId')}</Form.Label>
179
179
  <Form.Control
180
180
  type='number'
181
+ onWheel={(event) => event.currentTarget.blur()}
181
182
  {...register('metaPixelId', {
182
183
  minLength: {
183
184
  value: 15,
@@ -309,6 +309,7 @@ export function Preview({
309
309
  productCategoryId: 57,
310
310
  productGroupId: null,
311
311
  availableQuantity: 980,
312
+ zoneId: null,
312
313
  name: 'Cofee',
313
314
  description: '',
314
315
  price: 15,
@@ -317,6 +318,8 @@ export function Preview({
317
318
  maxQuantity: 15,
318
319
  totalQuantity: 980,
319
320
  type: 'sale' as const,
321
+ capacity: 0,
322
+ duration: 0,
320
323
  weight: 0,
321
324
  isAvailable: true,
322
325
  isSoldOut: false,
@@ -335,6 +338,7 @@ export function Preview({
335
338
  productCategoryId: 57,
336
339
  productGroupId: null,
337
340
  availableQuantity: 980,
341
+ zoneId: null,
338
342
  name: 'Cofee 2',
339
343
  description: '',
340
344
  price: 15,
@@ -343,6 +347,8 @@ export function Preview({
343
347
  maxQuantity: 15,
344
348
  totalQuantity: 980,
345
349
  type: 'sale' as const,
350
+ capacity: 0,
351
+ duration: 0,
346
352
  weight: 0,
347
353
  isAvailable: true,
348
354
  isSoldOut: false,
@@ -33,6 +33,7 @@ export interface SortableTreeItemProps {
33
33
  body: ReactNode
34
34
  children?: ReactNode
35
35
  preItem?: ReactNode
36
+ itemButton?: ReactNode
36
37
  postItem?: ReactNode
37
38
  sortableItems?: string[]
38
39
  isExpanded?: boolean
@@ -82,6 +83,7 @@ export function SortableTreeItem({
82
83
  secondaryBadge,
83
84
  setIsExpanded,
84
85
  isOverride,
86
+ itemButton,
85
87
  }: SortableTreeItemProps) {
86
88
  const [expanded, setExpanded] = useState(isExpanded)
87
89
  const [isModalVisible, setIsModalVisible] = useState(isNewAdded)
@@ -287,9 +289,13 @@ export function SortableTreeItem({
287
289
  className={clsx(
288
290
  'sortable-tree-item-title',
289
291
  modalLabel && 'sortable-tree-product-set-element-title',
292
+ 'd-flex justify-content-between',
290
293
  )}
291
294
  >
292
295
  {title}
296
+ <div className='sortable-tree-item-subtitle'>
297
+ {itemButton}
298
+ </div>
293
299
  </span>
294
300
  {!expanded && (
295
301
  <span className='sortable-tree-item-subtitle'>
@@ -45,6 +45,7 @@ export const CurrencyNumberInput = forwardRef<
45
45
  disabled={disabled}
46
46
  value={value}
47
47
  onChange={onChange}
48
+ onWheel={(event) => event.currentTarget.blur()}
48
49
  ref={ref}
49
50
  {...props}
50
51
  />
@@ -75,6 +75,7 @@ export const FormNumberInput = ({
75
75
  type='number'
76
76
  step={step}
77
77
  disabled={disabled}
78
+ onWheel={(event) => event.currentTarget.blur()}
78
79
  isInvalid={HookFormService.isInvalid(fieldName, errors)}
79
80
  {...field}
80
81
  onChange={(event) => {
@@ -49,6 +49,7 @@ export function NumberInput({
49
49
  <div className={inputWrapperClasses}>
50
50
  <FormControl
51
51
  type='number'
52
+ onWheel={(event) => event.currentTarget.blur()}
52
53
  onChange={(e) => onChange(Number(e.target.value))}
53
54
  value={value}
54
55
  min={min}
@@ -4,7 +4,7 @@
4
4
  align-items: center;
5
5
  gap: 0.5rem;
6
6
  font-weight: 300;
7
- max-width: 100%;
7
+ width: 100%;
8
8
 
9
9
 
10
10
  .indicator-label {
@@ -74,7 +74,7 @@
74
74
  .calendar-dates-wrapper {
75
75
  .calendar-dates {
76
76
  display: grid;
77
- grid-template-columns: repeat(7, 1fr);
77
+ grid-template-columns: repeat(7, auto);
78
78
  grid-gap: 0.5rem 1rem;
79
79
  overflow-x: auto;
80
80
  }