@licklist/design 0.66.1-dev.3 → 0.66.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 (104) hide show
  1. package/dist/date-time-button/DateTimeButton.js +1 -1
  2. package/dist/events/edit-event-modal/component/SelectEventProductSet/SelectEventProductSet.d.ts.map +1 -1
  3. package/dist/events/edit-event-modal/component/SelectEventProductSet/SelectEventProductSet.js +1 -1
  4. package/dist/events/edit-event-modal/component/SelectEventProductSet/component/EditEventProductSet.d.ts.map +1 -1
  5. package/dist/events/edit-event-modal/component/SelectEventProductSet/component/EditEventProductSet.js +1 -1
  6. package/dist/iframe/page/components/PageBody/PageBody.d.ts +1 -1
  7. package/dist/iframe/page/components/PageBody/components/LeftBlock/LeftBlock.d.ts +1 -2
  8. package/dist/iframe/page/components/PageBody/components/LeftBlock/LeftBlock.d.ts.map +1 -1
  9. package/dist/iframe/page/components/PageBody/components/LeftBlock/LeftBlock.js +1 -1
  10. package/dist/iframe/payment/order-items-table/utils/paymentSummary.d.ts.map +1 -1
  11. package/dist/product-set/control/DateAndRecurrenceInput.d.ts +1 -1
  12. package/dist/product-set/control/DateAndRecurrenceInput.d.ts.map +1 -1
  13. package/dist/product-set/control/DateAndRecurrenceInput.js +1 -1
  14. package/dist/product-set/control/DateInput.js +1 -1
  15. package/dist/product-set/control/ProductSetControl.d.ts +2 -3
  16. package/dist/product-set/control/ProductSetControl.d.ts.map +1 -1
  17. package/dist/product-set/control/ProductSetControl.js +1 -1
  18. package/dist/product-set/form/ProductCategoriesControl.d.ts +1 -3
  19. package/dist/product-set/form/ProductCategoriesControl.d.ts.map +1 -1
  20. package/dist/product-set/form/ProductCategoriesControl.js +1 -1
  21. package/dist/product-set/form/ProductSetForm.d.ts +2 -6
  22. package/dist/product-set/form/ProductSetForm.d.ts.map +1 -1
  23. package/dist/product-set/form/ProductSetForm.js +1 -1
  24. package/dist/product-set/form/ProductsControl.d.ts +1 -3
  25. package/dist/product-set/form/ProductsControl.d.ts.map +1 -1
  26. package/dist/product-set/form/ProductsControl.js +1 -1
  27. package/dist/product-set/form/StepsControl.d.ts +1 -3
  28. package/dist/product-set/form/StepsControl.d.ts.map +1 -1
  29. package/dist/product-set/form/StepsControl.js +1 -1
  30. package/dist/product-set/hooks/useSortableTreeFunctions.d.ts.map +1 -1
  31. package/dist/product-set/hooks/useSortableTreeFunctions.js +1 -1
  32. package/dist/product-set/product/ProductControl.d.ts +0 -1
  33. package/dist/product-set/product/ProductControl.d.ts.map +1 -1
  34. package/dist/product-set/product/ProductControl.js +1 -1
  35. package/dist/product-set/step/StepControl.d.ts +1 -2
  36. package/dist/product-set/step/StepControl.d.ts.map +1 -1
  37. package/dist/product-set/step/StepControl.js +1 -1
  38. package/dist/provider/working-hours-input/WorkingHoursInputDescription.d.ts.map +1 -1
  39. package/dist/provider/working-hours-input/WorkingHoursInputDescription.js +1 -1
  40. package/dist/recurring-date-picker-input/RecurrenceIntervalAndFrequencyInput.d.ts.map +1 -1
  41. package/dist/recurring-date-picker-input/RecurrenceIntervalAndFrequencyInput.js +1 -1
  42. package/dist/recurring-date-picker-input/RecurringDatePickerInput.d.ts +1 -3
  43. package/dist/recurring-date-picker-input/RecurringDatePickerInput.d.ts.map +1 -1
  44. package/dist/recurring-date-picker-input/RecurringDatePickerInput.js +1 -1
  45. package/dist/recurring-date-picker-input/utils.d.ts +0 -5
  46. package/dist/recurring-date-picker-input/utils.d.ts.map +1 -1
  47. package/dist/recurring-date-picker-input/utils.js +1 -1
  48. package/dist/report/ReportRunnerModal/ReportRunnerModal.d.ts +1 -1
  49. package/dist/report/ReportRunnerModal/ReportRunnerModal.d.ts.map +1 -1
  50. package/dist/report/ReportRunnerModal/ReportRunnerModal.js +1 -1
  51. package/dist/sales/booking/results/components/ResultCard.d.ts.map +1 -1
  52. package/dist/setting/admin/AdminSettingForm.d.ts +2 -2
  53. package/dist/setting/admin/AdminSettingForm.d.ts.map +1 -1
  54. package/dist/sortable-tree/SortableTreeItem.d.ts +2 -1
  55. package/dist/sortable-tree/SortableTreeItem.d.ts.map +1 -1
  56. package/dist/sortable-tree/SortableTreeItem.js +1 -1
  57. package/dist/styles/iframe-page/Page.scss +10 -1
  58. package/dist/styles/sales/BookingResults.scss +1 -1
  59. package/dist/styles/zones/ZoneForm.scss +1 -2
  60. package/dist/zone/form/ZoneForm.d.ts +2 -2
  61. package/dist/zone/form/ZoneForm.d.ts.map +1 -1
  62. package/dist/zone/form/ZoneForm.js +1 -1
  63. package/dist/zone/form/components/ZoneControl.d.ts +2 -2
  64. package/dist/zone/form/components/ZoneControl.d.ts.map +1 -1
  65. package/dist/zone/form/components/ZoneControl.js +1 -1
  66. package/dist/zone/form/components/ZoneRecurrencesControl.d.ts +4 -4
  67. package/dist/zone/form/components/ZoneRecurrencesControl.d.ts.map +1 -1
  68. package/dist/zone/form/components/ZoneRecurrencesControl.js +1 -1
  69. package/dist/zone/form/utils/dates.d.ts.map +1 -1
  70. package/package.json +6 -5
  71. package/src/date-time-button/DateTimeButton.stories.tsx +1 -2
  72. package/src/date-time-button/DateTimeButton.tsx +5 -7
  73. package/src/events/edit-event-modal/component/SelectEventProductSet/SelectEventProductSet.tsx +9 -14
  74. package/src/events/edit-event-modal/component/SelectEventProductSet/component/EditEventProductSet.tsx +0 -2
  75. package/src/iframe/page/components/PageBody/components/LeftBlock/LeftBlock.tsx +2 -8
  76. package/src/iframe/payment/order-items-table/utils/paymentSummary.tsx +0 -1
  77. package/src/product-set/control/DateAndRecurrenceInput.tsx +4 -3
  78. package/src/product-set/control/DateInput.tsx +2 -2
  79. package/src/product-set/control/ProductSetControl.tsx +5 -17
  80. package/src/product-set/form/ProductCategoriesControl.tsx +4 -16
  81. package/src/product-set/form/ProductSetForm.tsx +2 -13
  82. package/src/product-set/form/ProductsControl.tsx +77 -93
  83. package/src/product-set/form/StepsControl.tsx +7 -15
  84. package/src/product-set/hooks/useSortableTreeFunctions.ts +1 -0
  85. package/src/product-set/product/ProductControl.tsx +5 -8
  86. package/src/product-set/step/StepControl.tsx +3 -4
  87. package/src/provider/working-hours-input/WorkingHoursInputDescription.tsx +18 -4
  88. package/src/recurring-date-picker-input/RecurrenceIntervalAndFrequencyInput.tsx +21 -50
  89. package/src/recurring-date-picker-input/RecurringDatePickerInput.stories.tsx +7 -13
  90. package/src/recurring-date-picker-input/RecurringDatePickerInput.tsx +1 -12
  91. package/src/recurring-date-picker-input/utils.ts +1 -90
  92. package/src/report/ReportRunnerModal/ReportRunnerModal.tsx +14 -24
  93. package/src/sales/booking/results/components/ResultCard.tsx +3 -0
  94. package/src/setting/admin/AdminSettingForm.tsx +2 -2
  95. package/src/sortable-tree/SortableTreeItem.tsx +3 -0
  96. package/src/static/switch/BooleanSwitch.tsx +1 -1
  97. package/src/styles/iframe-page/Page.scss +10 -1
  98. package/src/styles/sales/BookingResults.scss +1 -1
  99. package/src/styles/zones/ZoneForm.scss +1 -2
  100. package/src/zone/form/ZoneForm.tsx +2 -3
  101. package/src/zone/form/components/ZoneControl.tsx +3 -3
  102. package/src/zone/form/components/ZoneRecurrencesControl.tsx +5 -7
  103. package/src/zone/form/utils/dates.ts +10 -9
  104. package/src/report/ReportRunnerModal/ReportRunnerModal.stories.tsx +0 -307
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@licklist/design",
3
- "version": "0.66.1-dev.3",
3
+ "version": "0.66.1",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+ssh://git@bitbucket.org/artelogicsoft/licklist_design.git"
@@ -50,9 +50,9 @@
50
50
  "@fortawesome/free-brands-svg-icons": "5.15.2",
51
51
  "@fortawesome/free-solid-svg-icons": "5.15.2",
52
52
  "@fortawesome/react-fontawesome": "0.1.9",
53
- "@licklist/core": ">=0.28.0-dev.0 < 0.28.0",
53
+ "@licklist/core": "^0.25.3",
54
54
  "@licklist/eslint-config": "0.4.5",
55
- "@licklist/plugins": ">=0.30.0-dev.1 < 0.30.0",
55
+ "@licklist/plugins": "^0.27.2",
56
56
  "@mdx-js/react": "1.6.22",
57
57
  "@popperjs/core": "2.11.8",
58
58
  "@react-aria/utils": "3.9.0",
@@ -116,6 +116,7 @@
116
116
  "emojibase": "6.1.0",
117
117
  "emojibase-data": "7.0.1",
118
118
  "emojibase-regex": "6.0.1",
119
+ "enzyme": "3.11.0",
119
120
  "eslint": "7.32.0",
120
121
  "eslint-config-airbnb": "18.2.1",
121
122
  "eslint-config-prettier": "8.3.0",
@@ -176,8 +177,7 @@
176
177
  },
177
178
  "resolutions": {
178
179
  "@types/react": "17.0.2",
179
- "@types/react-dom": "17.0.2",
180
- "cheerio": "0.22.0"
180
+ "@types/react-dom": "17.0.2"
181
181
  },
182
182
  "lint-staged": {
183
183
  "*.{ts,tsx}": [
@@ -188,6 +188,7 @@
188
188
  "devDependencies": {
189
189
  "@types/react": "17.0.2",
190
190
  "@types/react-dom": "17.0.2",
191
+ "@wojtekmaj/enzyme-adapter-react-17": "^0.8.0",
191
192
  "identity-obj-proxy": "^3.0.0"
192
193
  },
193
194
  "volta": {
@@ -8,7 +8,7 @@ export default {
8
8
  component: DateTimeButton,
9
9
  } as Meta;
10
10
 
11
- const date = DateTime.now().plus({ hour: 1 });
11
+ const date = DateTime.now();
12
12
 
13
13
  export const Default: Story<DateTimeButtonProps> = (args) => {
14
14
  return <DateTimeButton {...args} />;
@@ -19,7 +19,6 @@ Default.args = {
19
19
  isSelected: false,
20
20
  isDisabled: false,
21
21
  onSelect: () => null,
22
- shouldCalculateResources: false,
23
22
  };
24
23
 
25
24
  export const Selected: Story<DateTimeButtonProps> = (args) => {
@@ -46,7 +46,7 @@ export const DateTimeButton = ({
46
46
 
47
47
  const isTimeVariant = variant === Variant.time;
48
48
 
49
- const isPast = variant === Variant.time ? isPastTime(date) : isPastDate(date);
49
+ const isTimeInPast = isTimeVariant && isDateInPast(date);
50
50
 
51
51
  const noResources =
52
52
  shouldCalculateResources &&
@@ -55,7 +55,7 @@ export const DateTimeButton = ({
55
55
  !has(resources, "bookedResources") ||
56
56
  !has(resources, "totalResources"));
57
57
 
58
- const isDisabled = _isDisabled || isSoldOut || isPast || noResources;
58
+ const isDisabled = _isDisabled || isSoldOut || isTimeInPast || noResources;
59
59
 
60
60
  return (
61
61
  <button
@@ -85,7 +85,7 @@ export const DateTimeButton = ({
85
85
  {showResources && resources && (
86
86
  <AvailabilityIndicator
87
87
  resources={resources}
88
- isUnavailable={_isDisabled || isPast}
88
+ isUnavailable={_isDisabled || isTimeInPast}
89
89
  isSoldOut={isSoldOut}
90
90
  />
91
91
  )}
@@ -93,7 +93,5 @@ export const DateTimeButton = ({
93
93
  );
94
94
  };
95
95
 
96
- const isPastTime = (date: DateTime): boolean => DateTime.now() > date;
97
-
98
- const isPastDate = (date: DateTime): boolean =>
99
- DateTime.now() > date.set({ hour: 23, minute: 59, second: 59 });
96
+ const isDateInPast = (date: DateTime): boolean =>
97
+ date.toUTC() <= DateTime.now().toUTC();
@@ -40,10 +40,6 @@ export const SelectEventProductSet = ({
40
40
  const productSetId = watch("productSetId");
41
41
  const editedProductSet = watch("editedProductSet");
42
42
 
43
- const selectedProductSet = productSets.find(
44
- (productSet) => productSet.id === productSetId
45
- )?.parentMenuId;
46
-
47
43
  const onEditProductSet = useCallback(
48
44
  () => {
49
45
  setEditProductSetId(String(productSetId));
@@ -88,9 +84,6 @@ export const SelectEventProductSet = ({
88
84
  setValue("productSetId", value);
89
85
  };
90
86
 
91
- const showOverrideProductSet =
92
- !showEditProductSet && productSetId && !selectedProductSet;
93
-
94
87
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
95
88
  const onSubmit = (value: EditEventFormValues["editedProductSet"]) => {
96
89
  setShowEditProductSet(false);
@@ -166,7 +159,7 @@ export const SelectEventProductSet = ({
166
159
  {t("addNewProductSet")}
167
160
  </Button>
168
161
  )}
169
- {showOverrideProductSet && (
162
+ {!showEditProductSet && productSetId && (
170
163
  <Button
171
164
  variant=""
172
165
  className="btn product-set-button "
@@ -206,12 +199,14 @@ export const SelectEventProductSet = ({
206
199
  </Form.Group>
207
200
  </div>
208
201
  {showEditProductSet && productSetId && (
209
- <EditEventProductSet
210
- onSubmit={onSubmit}
211
- defaultValues={
212
- productSetId === editedProductSet?.id && editedProductSet
213
- }
214
- />
202
+ <>
203
+ <EditEventProductSet
204
+ onSubmit={onSubmit}
205
+ defaultValues={
206
+ productSetId === editedProductSet?.id && editedProductSet
207
+ }
208
+ />
209
+ </>
215
210
  )}
216
211
  </>
217
212
  );
@@ -124,8 +124,6 @@ export const EditEventProductSet = ({
124
124
  companyName={selectedCompany?.title}
125
125
  fee={feeInPercent}
126
126
  isEventEditProductSet
127
- isOverrides
128
- workHours={undefined}
129
127
  />
130
128
  <Button
131
129
  disabled={isLoading}
@@ -9,7 +9,6 @@ export type LeftBlockProps = PropsWithChildren<
9
9
  pageTitle?: ReactNode;
10
10
  component?: ReactNode;
11
11
  childrenClassName?: string;
12
- hasScroll?: boolean;
13
12
  } & HTMLAttributes<HTMLDivElement>
14
13
  >;
15
14
 
@@ -18,7 +17,6 @@ export const LeftBlock = ({
18
17
  children,
19
18
  className,
20
19
  component,
21
- hasScroll = true,
22
20
  childrenClassName,
23
21
  ...props
24
22
  }: LeftBlockProps) => {
@@ -43,14 +41,10 @@ export const LeftBlock = ({
43
41
  </div>
44
42
  <div
45
43
  className={clsx("left-block-container", childrenClassName)}
46
- style={hasScroll ? leftBlockStyles : undefined}
44
+ style={leftBlockStyles}
47
45
  id={PAGE_LEFT_BLOCK_CONTAINER_ID}
48
46
  >
49
- <PageContextProvider
50
- leftBlockContainerSizes={
51
- hasScroll ? leftBlockContainerSizes : undefined
52
- }
53
- >
47
+ <PageContextProvider leftBlockContainerSizes={leftBlockContainerSizes}>
54
48
  {children}
55
49
  </PageContextProvider>
56
50
  </div>
@@ -63,7 +63,6 @@ const processedPaymentSummary = ({
63
63
  const total = calculateTotalPrice(order, externalPaymentDetail);
64
64
 
65
65
  const totalDiscount = calculateTotalDiscount(order.payments);
66
-
67
66
  let summaryItems: SummaryItem[] = [
68
67
  {
69
68
  translateKey: AMOUNT_TOTAL,
@@ -28,13 +28,15 @@ import {
28
28
  AvailableTimesControlRef,
29
29
  } from "../../zone/form/components/AvailableTimesControl";
30
30
 
31
+ // eslint-disable-next-line max-len
32
+
31
33
  export interface DateAndRecurrenceInputValues {
32
34
  menuRecurrences?: Partial<ProductSetRecurrence>[];
33
35
  }
34
36
 
35
37
  interface DateAndRecurrenceInputProps {
36
38
  isEventEditProductSet?: boolean;
37
- workHours: WorkHour[] | undefined;
39
+ workHours?: WorkHour[];
38
40
  providerHasBookingManagement: boolean;
39
41
  isLoading?: boolean;
40
42
  }
@@ -88,7 +90,7 @@ export const DateAndRecurrenceInput = ({
88
90
  clearEditState();
89
91
  });
90
92
 
91
- const popoverId = useId();
93
+ const popoverId = useId()!;
92
94
 
93
95
  const { t } = useTranslation("Design");
94
96
 
@@ -226,7 +228,6 @@ export const DateAndRecurrenceInput = ({
226
228
  defaultValues={editState.values}
227
229
  onChange={handleRecurringDateChange}
228
230
  onDelete={handleDelete}
229
- workHours={workHours}
230
231
  >
231
232
  {providerHasBookingManagement && (
232
233
  <AvailableTimesControl
@@ -5,7 +5,7 @@ import { Form, OverlayTrigger, Popover } from "react-bootstrap";
5
5
  import { useFieldArray, useFormContext } from "react-hook-form";
6
6
  import { useTranslation } from "react-i18next";
7
7
  import { useClickAway } from "react-use";
8
- import { UTC_TIMEZONE, TIME_FORMAT } from "@licklist/core/dist/Config/Date";
8
+ import { TIMEZONE, TIME_FORMAT } from "@licklist/core/dist/Config/Date";
9
9
  import { ProductSetRecurrence } from "@licklist/core/dist/DataMapper/Product/ProductSetRecurrenceDataMapper";
10
10
  import { DateTime } from "luxon";
11
11
  import RRule, { Frequency } from "rrule";
@@ -136,7 +136,7 @@ export const DateInput = ({
136
136
  until: (start as DateTime).toJSDate(),
137
137
  byweekday: [],
138
138
  freq: Frequency.DAILY,
139
- tzid: UTC_TIMEZONE,
139
+ tzid: TIMEZONE,
140
140
  interval: 1,
141
141
  }).replace("RRULE:", "");
142
142
 
@@ -85,10 +85,9 @@ export interface ProductSetControlProps {
85
85
  fieldSets?: FieldSet[];
86
86
  showEmailTemplate?: boolean;
87
87
  showSmsTemplate?: boolean;
88
- workHours: WorkHour[] | undefined;
88
+ workHours?: WorkHour[];
89
89
  providerHasBookingManagement?: boolean;
90
90
  isOverrides?: boolean;
91
- isCreateNewOverrides?: boolean;
92
91
  }
93
92
 
94
93
  export function ProductSetControl({
@@ -105,7 +104,6 @@ export function ProductSetControl({
105
104
  workHours,
106
105
  providerHasBookingManagement = false,
107
106
  isOverrides = false,
108
- isCreateNewOverrides = false,
109
107
  }: ProductSetControlProps) {
110
108
  const { t } = useTranslation(["Design", "Validation", "Notification"]);
111
109
  const {
@@ -125,11 +123,6 @@ export function ProductSetControl({
125
123
 
126
124
  const showSmsTemplateSelector = showSmsTemplate && !isOverrides;
127
125
  const showEmailTemplateSelector = showEmailTemplate && !isOverrides;
128
- const showDateSelector = !isEventEditProductSet && isOverrides;
129
-
130
- const isZoneAdded = steps?.some(({ productCategories }) =>
131
- productCategories?.some(({ zoneId }) => zoneId)
132
- );
133
126
 
134
127
  return (
135
128
  <Row
@@ -172,9 +165,9 @@ export function ProductSetControl({
172
165
  </Form.Control.Feedback>
173
166
  </Form.Group>
174
167
 
175
- {showDateSelector ? (
168
+ {isOverrides ? (
176
169
  <DateInput
177
- workHours={isZoneAdded ? workHours : undefined}
170
+ workHours={workHours}
178
171
  isLoading={isLoading}
179
172
  providerHasBookingManagement={providerHasBookingManagement}
180
173
  />
@@ -183,7 +176,7 @@ export function ProductSetControl({
183
176
  {isCreateAction && (
184
177
  <DateAndRecurrenceInput
185
178
  isEventEditProductSet={isEventEditProductSet}
186
- workHours={isZoneAdded ? workHours : undefined}
179
+ workHours={workHours}
187
180
  isLoading={isLoading}
188
181
  providerHasBookingManagement={providerHasBookingManagement}
189
182
  />
@@ -195,12 +188,7 @@ export function ProductSetControl({
195
188
 
196
189
  <TutorialGifCard isOverrides={isOverrides} />
197
190
 
198
- <StepsControl
199
- isLoading={isLoading}
200
- isEventEditProductSet={isEventEditProductSet}
201
- isOverrides={isOverrides}
202
- isCreateNewOverrides={isCreateNewOverrides}
203
- />
191
+ <StepsControl isLoading={isLoading} isOverrides={isOverrides} />
204
192
  </Col>
205
193
  <Col md={6} sm={12}>
206
194
  <div className="second-column">
@@ -36,8 +36,6 @@ import { useSortableTreeFunctions } from "../hooks/useSortableTreeFunctions";
36
36
  interface ProductCategoriesControlProps extends WithIsLoading {
37
37
  stepIndex: number;
38
38
  isOverrides?: boolean;
39
- isEventEditProductSet?: boolean;
40
- isCreateNewOverrides?: boolean;
41
39
  }
42
40
 
43
41
  const getCategoryDefaultValue = (
@@ -69,8 +67,6 @@ export function ProductCategoriesControl({
69
67
  isLoading,
70
68
  stepIndex,
71
69
  isOverrides,
72
- isEventEditProductSet,
73
- isCreateNewOverrides,
74
70
  }: ProductCategoriesControlProps) {
75
71
  const { t } = useTranslation("Design");
76
72
  const {
@@ -218,12 +214,6 @@ export function ProductCategoriesControl({
218
214
  ? String(productCategory.id)
219
215
  : productCategory.uniqueId;
220
216
 
221
- const isOverridesCategory = productCategory.products?.some(
222
- (product) =>
223
- isEventEditProductSet ? !!product.id : !!product.originalProductId
224
- );
225
- const isNewOverridesCategory =
226
- isCreateNewOverrides && !!productCategory.id;
227
217
  const onSetIsExpanded = () => {
228
218
  setIsExpanded(productCategoryId);
229
219
  };
@@ -279,10 +269,7 @@ export function ProductCategoriesControl({
279
269
  categoryName={value}
280
270
  stepIndex={stepIndex}
281
271
  productCategoryIndex={index}
282
- isOverride={
283
- isNewOverridesCategory ||
284
- (isOverrides && isOverridesCategory)
285
- }
272
+ isOverride={isOverrides}
286
273
  />
287
274
  }
288
275
  isOverride={isOverrides}
@@ -309,8 +296,6 @@ export function ProductCategoriesControl({
309
296
  productCategoryIndex={index}
310
297
  categoryType={productCategory.type}
311
298
  isOverrides={isOverrides}
312
- isEventEditProductSet={isEventEditProductSet}
313
- isCreateNewOverrides={isCreateNewOverrides}
314
299
  />
315
300
  </SortableTree.Item>
316
301
  )}
@@ -320,7 +305,9 @@ export function ProductCategoriesControl({
320
305
  </SortableTree>
321
306
  <CreateProductSetItem
322
307
  title={t("addCategory")}
308
+ isOverride={isOverrides}
323
309
  onClick={() => {
310
+ if (isOverrides) return;
324
311
  setIsSelectCategoryVisible(true);
325
312
  }}
326
313
  />
@@ -329,6 +316,7 @@ export function ProductCategoriesControl({
329
316
  isVisible={isSelectCategoryVisible}
330
317
  onHide={() => setIsSelectCategoryVisible(false)}
331
318
  onCategorySelect={(categoryType) => {
319
+ if (isOverrides) return;
332
320
  append(getCategoryDefaultValue(categoryType, fields.length));
333
321
  setShowCategoryModal(true);
334
322
  if (
@@ -26,16 +26,12 @@ import { checkAvailableTimesErrors, getFilteredTemplates } from "../utils";
26
26
  export interface WithIsLoading {
27
27
  isLoading: boolean;
28
28
  }
29
- export interface WithIdOptional {
30
- id?: number;
31
- }
32
-
33
29
  export interface WithId {
34
30
  id: number;
35
31
  }
36
32
  export interface ProductSetFormValues
37
33
  extends FormValues,
38
- WithIdOptional,
34
+ WithId,
39
35
  ProductSetControlValues {
40
36
  steps: Step[];
41
37
  isOverrides?: boolean;
@@ -57,7 +53,6 @@ export interface ProductSetFormProps
57
53
  isCreateAction?: boolean;
58
54
  isOverrides?: boolean;
59
55
  workHours?: WorkHour[];
60
- isCreateNewOverrides?: boolean;
61
56
  }
62
57
 
63
58
  export function ProductSetForm({
@@ -75,7 +70,6 @@ export function ProductSetForm({
75
70
  isCreateAction,
76
71
  workHours,
77
72
  isOverrides,
78
- isCreateNewOverrides,
79
73
  ...shared
80
74
  }: ProductSetFormProps) {
81
75
  const { t } = useTranslation("Design");
@@ -121,11 +115,7 @@ export function ProductSetForm({
121
115
  }, [serverErrors, setError]);
122
116
 
123
117
  useEffect(() => {
124
- window.history.pushState(
125
- null,
126
- "",
127
- window.location.pathname + window.location.search
128
- );
118
+ window.history.pushState(null, "", window.location.pathname);
129
119
  window.addEventListener("beforeunload", onBeforeUnload);
130
120
  window.addEventListener("popstate", onPopState);
131
121
 
@@ -176,7 +166,6 @@ export function ProductSetForm({
176
166
  workHours={workHours}
177
167
  providerHasBookingManagement={providerHasBookingManagement}
178
168
  isOverrides={isOverrides}
179
- isCreateNewOverrides={isCreateNewOverrides}
180
169
  />
181
170
  <Row>
182
171
  <Col md={6} sm={12} />
@@ -35,8 +35,6 @@ interface ProductsControlProps extends WithIsLoading {
35
35
  categoryType: CategoryType;
36
36
  zones?: Zone[];
37
37
  isOverrides?: boolean;
38
- isEventEditProductSet?: boolean;
39
- isCreateNewOverrides?: boolean;
40
38
  }
41
39
 
42
40
  const getDefaultProductValue = (sort: number): Product => ({
@@ -59,7 +57,6 @@ const getDefaultProductValue = (sort: number): Product => ({
59
57
  quantitySelector: 1,
60
58
  hasSpecialNotes: false,
61
59
  weight: 0,
62
- originalProductId: null,
63
60
  type: DEFAULT_PRODUCT_TYPE,
64
61
  tierId: Number(uniqueId()),
65
62
  zoneId: null,
@@ -82,8 +79,6 @@ export function ProductsControl({
82
79
  categoryType,
83
80
  zones,
84
81
  isOverrides,
85
- isEventEditProductSet,
86
- isCreateNewOverrides,
87
82
  }: ProductsControlProps) {
88
83
  const { t } = useTranslation("Design");
89
84
  const form = useFormContext<ProductSetFormValues>();
@@ -208,101 +203,90 @@ export function ProductsControl({
208
203
  onDragEnd={handleDragEnd}
209
204
  sensors={[mouseSensor]}
210
205
  >
211
- {fields.map((product, index) => {
212
- const isOverridesProductSet = isEventEditProductSet
213
- ? !!product.id
214
- : isOverrides && !!product.originalProductId;
215
-
216
- const isNewProductOverrides = isCreateNewOverrides && !!product.id;
217
-
218
- return (
219
- <Controller
220
- key={product._id}
221
- control={control}
222
- name={`${productControlFieldName}.${index}.name` as const}
223
- rules={{
224
- required: t("Validation:fieldRequired", {
225
- attribute: t("name"),
226
- }) as string,
227
- }}
228
- render={({ field: { value, onChange } }) => (
229
- <SortableTree.Item
230
- key={`product-${product._id}`}
231
- id={String(product._id)}
232
- isExpanded={isFirstProductAdded}
233
- isInvalid={!!categoryProductErrors}
234
- title={value}
235
- isOverride={isOverrides}
236
- badge={
237
- <Badge className="product-badge">{t("product")}</Badge>
238
- }
239
- isIconInHeader={false}
240
- cancelChanges={() => cancelChanges(index)}
241
- edit={() => edit(index)}
242
- secondaryBadge={getBadgeConfig(categoryType, t(categoryType))}
243
- subTitle={
244
- <div className="product-set-badges-container">
245
- <div className="product-set-subtitle-dot product-set-subtitle-product-dot" />
246
- <span>
247
- {`£${prices[index]} ${t("each")} - ${t("qty")}:${
248
- !isUnlimitedQuantities[index]
249
- ? ` ${quantities[index]}`
250
- : t(" unlimited")
251
- } ${
252
- !isUnlimitedQuantities[index]
253
- ? ` - ${t("possibleRevenue")} £${
254
- prices[index] * quantities[index]
255
- }`
256
- : ""
257
- } `}
258
- </span>
259
- </div>
260
- }
261
- modalLabel={t("addNewProduct")}
262
- modalClass={ProductSetModalClasses.product}
263
- isNewAdded={showProductModal}
264
- body={
265
- <ProductControl<ProductSetFormValues>
266
- isLoading={isLoading}
267
- quantityType={quantityType}
268
- allowDeposits={allowDeposits}
269
- hasBookingManagement={false}
270
- fieldNamePrefix={
271
- `${productControlFieldName}.${index}` as const
272
- }
273
- productName={value}
274
- onProductNameChange={onChange}
275
- hasTicket={hasTicket}
276
- categoryType={categoryType}
277
- zoneDuration={catergoryZone?.defaultDuration}
278
- isOverrides={
279
- isNewProductOverrides || isOverridesProductSet
280
- }
281
- />
282
- }
283
- onDelete={() => onProductRemove(index)}
284
- validate={() =>
285
- trigger(`${productControlFieldName}.${index}`)
286
- }
287
- saveValidField={saveValidField}
288
- // preItem={<Popover className="d-none d-sm-block" />}
289
- >
290
- <SubProductsControl
206
+ {fields.map((product, index) => (
207
+ <Controller
208
+ key={product._id}
209
+ control={control}
210
+ name={`${productControlFieldName}.${index}.name` as const}
211
+ rules={{
212
+ required: t("Validation:fieldRequired", {
213
+ attribute: t("name"),
214
+ }) as string,
215
+ }}
216
+ render={({ field: { value, onChange } }) => (
217
+ <SortableTree.Item
218
+ key={`product-${product._id}`}
219
+ id={String(product._id)}
220
+ isExpanded={isFirstProductAdded}
221
+ isInvalid={!!categoryProductErrors}
222
+ title={value}
223
+ isOverride={isOverrides}
224
+ badge={<Badge className="product-badge">{t("product")}</Badge>}
225
+ isIconInHeader={false}
226
+ cancelChanges={() => cancelChanges(index)}
227
+ edit={() => edit(index)}
228
+ isProduct
229
+ secondaryBadge={getBadgeConfig(categoryType, t(categoryType))}
230
+ subTitle={
231
+ <div className="product-set-badges-container">
232
+ <div className="product-set-subtitle-dot product-set-subtitle-product-dot" />
233
+ <span>
234
+ {`£${prices[index]} ${t("each")} - ${t("qty")}:${
235
+ !isUnlimitedQuantities[index]
236
+ ? ` ${quantities[index]}`
237
+ : t(" unlimited")
238
+ } ${
239
+ !isUnlimitedQuantities[index]
240
+ ? ` - ${t("possibleRevenue")} £${
241
+ prices[index] * quantities[index]
242
+ }`
243
+ : ""
244
+ } `}
245
+ </span>
246
+ </div>
247
+ }
248
+ modalLabel={t("addNewProduct")}
249
+ modalClass={ProductSetModalClasses.product}
250
+ isNewAdded={showProductModal}
251
+ body={
252
+ <ProductControl<ProductSetFormValues>
291
253
  isLoading={isLoading}
292
254
  quantityType={quantityType}
293
- stepIndex={stepIndex}
294
- productCategoryIndex={productCategoryIndex}
295
- productIndex={index}
255
+ allowDeposits={allowDeposits}
256
+ hasBookingManagement={false}
257
+ fieldNamePrefix={
258
+ `${productControlFieldName}.${index}` as const
259
+ }
260
+ productName={value}
261
+ onProductNameChange={onChange}
262
+ hasTicket={hasTicket}
263
+ categoryType={categoryType}
264
+ zoneDuration={catergoryZone?.defaultDuration}
265
+ isOverrides={isOverrides}
296
266
  />
297
- </SortableTree.Item>
298
- )}
299
- />
300
- );
301
- })}
267
+ }
268
+ onDelete={() => onProductRemove(index)}
269
+ validate={() => trigger(`${productControlFieldName}.${index}`)}
270
+ saveValidField={saveValidField}
271
+ // preItem={<Popover className="d-none d-sm-block" />}
272
+ >
273
+ <SubProductsControl
274
+ isLoading={isLoading}
275
+ quantityType={quantityType}
276
+ stepIndex={stepIndex}
277
+ productCategoryIndex={productCategoryIndex}
278
+ productIndex={index}
279
+ />
280
+ </SortableTree.Item>
281
+ )}
282
+ />
283
+ ))}
302
284
  </SortableTree>
303
285
  <CreateProductSetItem
304
286
  title={t("addProduct")}
287
+ isOverride={isOverrides}
305
288
  onClick={() => {
289
+ if (isOverrides) return;
306
290
  append(getDefaultProductValue(fields.length));
307
291
  setShowProductModal(true);
308
292