@licklist/design 0.58.8 → 0.58.10

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 (92) hide show
  1. package/dist/index.js +1 -1
  2. package/dist/product-set/card/ProductSetCard.d.ts +2 -1
  3. package/dist/product-set/card/ProductSetCard.d.ts.map +1 -1
  4. package/dist/product-set/card/ProductSetCard.js +1 -1
  5. package/dist/product-set/control/DateInput.d.ts +17 -0
  6. package/dist/product-set/control/DateInput.d.ts.map +1 -0
  7. package/dist/product-set/control/DateInput.js +1 -0
  8. package/dist/product-set/control/ProductSetControl.d.ts +2 -1
  9. package/dist/product-set/control/ProductSetControl.d.ts.map +1 -1
  10. package/dist/product-set/control/ProductSetControl.js +1 -1
  11. package/dist/product-set/control/ProductSetRecurrenceOverridesControl.d.ts +11 -0
  12. package/dist/product-set/control/ProductSetRecurrenceOverridesControl.d.ts.map +1 -0
  13. package/dist/product-set/control/ProductSetRecurrenceOverridesControl.js +1 -0
  14. package/dist/product-set/control/TutorialGifCard.d.ts +2 -1
  15. package/dist/product-set/control/TutorialGifCard.d.ts.map +1 -1
  16. package/dist/product-set/control/TutorialGifCard.js +1 -1
  17. package/dist/product-set/form/ProductCategoriesControl.d.ts +2 -1
  18. package/dist/product-set/form/ProductCategoriesControl.d.ts.map +1 -1
  19. package/dist/product-set/form/ProductCategoriesControl.js +1 -1
  20. package/dist/product-set/form/ProductSetForm.d.ts +3 -1
  21. package/dist/product-set/form/ProductSetForm.d.ts.map +1 -1
  22. package/dist/product-set/form/ProductSetForm.js +1 -1
  23. package/dist/product-set/form/ProductsControl.d.ts +2 -1
  24. package/dist/product-set/form/ProductsControl.d.ts.map +1 -1
  25. package/dist/product-set/form/ProductsControl.js +1 -1
  26. package/dist/product-set/form/StepsControl.d.ts +2 -1
  27. package/dist/product-set/form/StepsControl.d.ts.map +1 -1
  28. package/dist/product-set/form/StepsControl.js +1 -1
  29. package/dist/product-set/form/SubProductsControl.d.ts +2 -1
  30. package/dist/product-set/form/SubProductsControl.d.ts.map +1 -1
  31. package/dist/product-set/form/SubProductsControl.js +1 -1
  32. package/dist/product-set/hooks/useSortableTreeFunctions.d.ts +2 -1
  33. package/dist/product-set/hooks/useSortableTreeFunctions.d.ts.map +1 -1
  34. package/dist/product-set/hooks/useSortableTreeFunctions.js +1 -1
  35. package/dist/product-set/item/CreateProductSetItem.d.ts +2 -1
  36. package/dist/product-set/item/CreateProductSetItem.d.ts.map +1 -1
  37. package/dist/product-set/item/CreateProductSetItem.js +1 -1
  38. package/dist/product-set/product/ProductControl.d.ts +2 -1
  39. package/dist/product-set/product/ProductControl.d.ts.map +1 -1
  40. package/dist/product-set/product/ProductControl.js +1 -1
  41. package/dist/product-set/product/constants.d.ts +1 -0
  42. package/dist/product-set/product/constants.d.ts.map +1 -1
  43. package/dist/product-set/product/constants.js +1 -1
  44. package/dist/product-set/product/fixed-duration-fields/FixedDurationOptions.d.ts +4 -2
  45. package/dist/product-set/product/fixed-duration-fields/FixedDurationOptions.d.ts.map +1 -1
  46. package/dist/product-set/product/fixed-duration-fields/FixedDurationOptions.js +1 -1
  47. package/dist/product-set/product/quantity/ProductQuantityControl.d.ts +1 -0
  48. package/dist/product-set/product/quantity/ProductQuantityControl.d.ts.map +1 -1
  49. package/dist/product-set/product/quantity/ProductQuantityControl.js +1 -1
  50. package/dist/product-set/product-category/ProductCategoryControl.d.ts +2 -1
  51. package/dist/product-set/product-category/ProductCategoryControl.d.ts.map +1 -1
  52. package/dist/product-set/product-category/ProductCategoryControl.js +1 -1
  53. package/dist/recurring-date-picker-input/DatePickerInput.d.ts +19 -0
  54. package/dist/recurring-date-picker-input/DatePickerInput.d.ts.map +1 -0
  55. package/dist/recurring-date-picker-input/DatePickerInput.js +1 -0
  56. package/dist/recurring-date-picker-input/RecurrenceAndFrequencyInput.d.ts +15 -0
  57. package/dist/recurring-date-picker-input/RecurrenceAndFrequencyInput.d.ts.map +1 -0
  58. package/dist/recurring-date-picker-input/RecurrenceAndFrequencyInput.js +1 -0
  59. package/dist/recurring-date-picker-input/RecurringDatePickerInput.d.ts +2 -0
  60. package/dist/recurring-date-picker-input/RecurringDatePickerInput.d.ts.map +1 -1
  61. package/dist/recurring-date-picker-input/RecurringDatePickerInput.js +1 -1
  62. package/dist/sortable-list/SortableList.d.ts +2 -1
  63. package/dist/sortable-list/SortableList.d.ts.map +1 -1
  64. package/dist/sortable-list/SortableList.js +1 -1
  65. package/dist/sortable-tree/SortableTreeItem.d.ts +3 -1
  66. package/dist/sortable-tree/SortableTreeItem.d.ts.map +1 -1
  67. package/dist/sortable-tree/SortableTreeItem.js +1 -1
  68. package/dist/styles/product-set/EditVenueMapSetModal.scss +1 -1
  69. package/package.json +1 -1
  70. package/src/product-set/card/ProductSetCard.tsx +12 -1
  71. package/src/product-set/control/DateInput.tsx +318 -0
  72. package/src/product-set/control/ProductSetControl.tsx +46 -24
  73. package/src/product-set/control/ProductSetRecurrenceOverridesControl.tsx +63 -0
  74. package/src/product-set/control/TutorialGifCard.tsx +11 -3
  75. package/src/product-set/form/ProductCategoriesControl.tsx +12 -1
  76. package/src/product-set/form/ProductSetForm.tsx +5 -0
  77. package/src/product-set/form/ProductsControl.tsx +10 -0
  78. package/src/product-set/form/StepsControl.tsx +8 -2
  79. package/src/product-set/form/SubProductsControl.tsx +3 -0
  80. package/src/product-set/hooks/useSortableTreeFunctions.ts +4 -0
  81. package/src/product-set/item/CreateProductSetItem.tsx +3 -0
  82. package/src/product-set/product/ProductControl.tsx +32 -13
  83. package/src/product-set/product/constants.ts +1 -0
  84. package/src/product-set/product/fixed-duration-fields/FixedDurationOptions.tsx +10 -2
  85. package/src/product-set/product/quantity/ProductQuantityControl.tsx +4 -3
  86. package/src/product-set/product-category/ProductCategoryControl.tsx +12 -8
  87. package/src/recurring-date-picker-input/DatePickerInput.tsx +93 -0
  88. package/src/recurring-date-picker-input/RecurrenceAndFrequencyInput.tsx +137 -0
  89. package/src/recurring-date-picker-input/RecurringDatePickerInput.tsx +4 -1
  90. package/src/sortable-list/SortableList.tsx +3 -0
  91. package/src/sortable-tree/SortableTreeItem.tsx +13 -5
  92. package/src/styles/product-set/EditVenueMapSetModal.scss +1 -1
@@ -0,0 +1,137 @@
1
+ import React, { useEffect } from "react";
2
+ import { DateTime } from "luxon";
3
+ import { Col, Form, Row } from "react-bootstrap";
4
+ import { useTranslation } from "react-i18next";
5
+ import { RegisterOptions, useFormContext } from "react-hook-form";
6
+ import { RecurringDatePickerInputValues } from "./RecurringDatePickerInput";
7
+
8
+ interface RecurrenceIntervalAndFrequencyInputProps {
9
+ disabled?: boolean;
10
+ minDate?: string;
11
+ startDateLabel?: string;
12
+ startTimeLabel?: string;
13
+ endDateLabel?: string;
14
+ endTimeLabel?: string;
15
+ startTimeRules?: Pick<
16
+ RegisterOptions,
17
+ "max" | "min" | "validate" | "required" | "pattern"
18
+ >;
19
+ endTimeRules?: Pick<
20
+ RegisterOptions,
21
+ "max" | "min" | "validate" | "required" | "pattern"
22
+ >;
23
+ }
24
+
25
+ function RecurrenceAndFrequencyInput({
26
+ disabled = false,
27
+ minDate,
28
+ startDateLabel,
29
+ startTimeLabel,
30
+ endTimeLabel,
31
+ startTimeRules,
32
+ endTimeRules,
33
+ }: RecurrenceIntervalAndFrequencyInputProps) {
34
+ const { t } = useTranslation(["Design", "Notification", "App"]);
35
+
36
+ const {
37
+ getValues,
38
+ formState: { errors },
39
+ register,
40
+ trigger,
41
+ } = useFormContext<RecurringDatePickerInputValues>();
42
+
43
+ const startDate = getValues("startDate");
44
+ const startTime = getValues("startTime");
45
+ const endTime = getValues("endTime");
46
+
47
+ useEffect(() => {
48
+ if (!startTime || !endTime) {
49
+ return;
50
+ }
51
+ trigger("endTime");
52
+ // eslint-disable-next-line react-hooks/exhaustive-deps
53
+ }, [startTime]);
54
+
55
+ return (
56
+ <>
57
+ <Row>
58
+ <Col xs={12} sm={6}>
59
+ <Form.Group>
60
+ <Form.Label>{startDateLabel ?? t("Design:date")}</Form.Label>
61
+ <Form.Control
62
+ type="date"
63
+ {...register("startDate", { required: true })}
64
+ defaultValue={startDate}
65
+ className={startDate && "date-input-with-value"}
66
+ disabled={disabled}
67
+ min={minDate}
68
+ isInvalid={Boolean(errors.startDate)}
69
+ />
70
+ <Form.Control.Feedback type="invalid">
71
+ {errors.startDate?.message}
72
+ </Form.Control.Feedback>
73
+ </Form.Group>
74
+ </Col>
75
+
76
+ </Row>
77
+
78
+ <Row>
79
+ <Col xs={12} sm={6}>
80
+ <Form.Group>
81
+ <Form.Label>
82
+ {startTimeLabel ?? t("Design:availableFrom")}
83
+ </Form.Label>
84
+ <Form.Control
85
+ type="time"
86
+ {...register("startTime", { required: false, ...startTimeRules })}
87
+ placeholder="hh:mm"
88
+ defaultValue={startTime}
89
+ disabled={disabled}
90
+ isInvalid={Boolean(errors.startTime)}
91
+ />
92
+ <Form.Control.Feedback type="invalid">
93
+ {errors.startTime?.message}
94
+ </Form.Control.Feedback>
95
+ </Form.Group>
96
+ </Col>
97
+
98
+ <Col xs={12} sm={6}>
99
+ <Form.Group>
100
+ <Form.Label>{endTimeLabel ?? t("Design:availableTo")}</Form.Label>
101
+ <Form.Control
102
+ type="time"
103
+ {...register("endTime", {
104
+ required: false,
105
+ validate: (time) => {
106
+ if (!startTime || !time) {
107
+ return true;
108
+ }
109
+ const currentStartTime = DateTime.fromISO(startTime);
110
+ const currentEndTime = DateTime.fromISO(time);
111
+
112
+ return currentEndTime?.diff(currentStartTime, ["minutes"])
113
+ ?.minutes >= 0
114
+ ? true
115
+ : `${t(`Validation:fieldLaterDate`, {
116
+ attribute: t("Design:endTimeSmall"),
117
+ min: t("Design:startTimeSmall"),
118
+ })}`;
119
+ },
120
+ ...endTimeRules,
121
+ })}
122
+ placeholder="hh:mm"
123
+ defaultValue={endTime}
124
+ disabled={disabled}
125
+ isInvalid={Boolean(errors.endTime)}
126
+ />
127
+ <Form.Control.Feedback type="invalid">
128
+ {errors.endTime?.message}
129
+ </Form.Control.Feedback>
130
+ </Form.Group>
131
+ </Col>
132
+ </Row>
133
+ </>
134
+ );
135
+ }
136
+
137
+ export default RecurrenceAndFrequencyInput;
@@ -336,7 +336,10 @@ const useFormattedDuration = ({
336
336
  }, [start, end, byWeekDay, formatList, formatNumber]);
337
337
  };
338
338
 
339
- const getDateTimeObject = (date: string, time: string): DateTime | string => {
339
+ export const getDateTimeObject = (
340
+ date: string,
341
+ time: string
342
+ ): DateTime | string => {
340
343
  const dateTime = DateTime.fromFormat(`${date} ${time}`, DATE_TIME_FORMAT);
341
344
 
342
345
  if (dateTime.isValid) {
@@ -33,6 +33,7 @@ type SortableListProps<T> = {
33
33
  renderItemContent: (args: RenderItemContentArgs<T>) => ReactNode;
34
34
  setItems?: Dispatch<SetStateAction<SortableItem<T>[]>>;
35
35
  isExpandNewItem?: boolean;
36
+ isOverrides?: boolean;
36
37
  };
37
38
 
38
39
  export const SORTABLE_ID_KEY = "_sortableId";
@@ -44,6 +45,7 @@ export function SortableList<T>({
44
45
  renderItemContent,
45
46
  setItems,
46
47
  isExpandNewItem = false,
48
+ isOverrides = false,
47
49
  }: SortableListProps<T>) {
48
50
  const [sortedItems, setSortedItems] = useState(items);
49
51
 
@@ -97,6 +99,7 @@ export function SortableList<T>({
97
99
  );
98
100
 
99
101
  function handleDragEnd(event) {
102
+ if (isOverrides) return;
100
103
  const { active, over } = event;
101
104
 
102
105
  if (active.id !== over.id) {
@@ -52,6 +52,8 @@ export interface SortableTreeItemProps {
52
52
  className: string;
53
53
  };
54
54
  setIsExpanded?: () => void;
55
+ isOverride?: boolean;
56
+ isProduct?: boolean;
55
57
  }
56
58
 
57
59
  export function SortableTreeItem({
@@ -78,6 +80,8 @@ export function SortableTreeItem({
78
80
  edit,
79
81
  secondaryBadge,
80
82
  setIsExpanded,
83
+ isOverride,
84
+ isProduct = false,
81
85
  }: SortableTreeItemProps) {
82
86
  const [expanded, setExpanded] = useState(isExpanded);
83
87
  const [isModalVisible, setIsModalVisible] = useState(isNewAdded);
@@ -98,6 +102,7 @@ export function SortableTreeItem({
98
102
  transform: dragTransform,
99
103
  } = useDraggable({
100
104
  id,
105
+ disabled: isOverride,
101
106
  });
102
107
 
103
108
  const onHandleExpand = useCallback(
@@ -120,6 +125,8 @@ export function SortableTreeItem({
120
125
  [position, setIsExpanded]
121
126
  );
122
127
 
128
+ const isVisibleDeleteButton = Boolean(onDelete) && !isOverride;
129
+
123
130
  const onButtonMouseDown = useCallback((event) => {
124
131
  setPosition({ pageX: event.pageX, pageY: event.pageY });
125
132
  }, []);
@@ -145,6 +152,7 @@ export function SortableTreeItem({
145
152
  };
146
153
 
147
154
  const onEdit = (e) => {
155
+ if (isOverride && !isProduct) return;
148
156
  e.stopPropagation();
149
157
  if (edit && !isModalVisible) edit();
150
158
  setIsModalVisible(true);
@@ -340,8 +348,8 @@ export function SortableTreeItem({
340
348
  >
341
349
  {t("saveAndAdd")}
342
350
  </Button>
343
- <div className="d-flex justify-content-end mt-4 delete-btn">
344
- {Boolean(onDelete) && (
351
+ {isVisibleDeleteButton && (
352
+ <div className="d-flex justify-content-end mt-4 delete-btn">
345
353
  <ConfirmModal>
346
354
  {(confirm) => (
347
355
  <DeleteFieldButton
@@ -349,8 +357,8 @@ export function SortableTreeItem({
349
357
  />
350
358
  )}
351
359
  </ConfirmModal>
352
- )}
353
- </div>
360
+ </div>
361
+ )}
354
362
  </div>
355
363
  </Modal.Body>
356
364
  </Modal>
@@ -366,7 +374,7 @@ export function SortableTreeItem({
366
374
  items={sortableItems}
367
375
  strategy={verticalListSortingStrategy}
368
376
  >
369
- <Collapse in={expanded}>
377
+ <Collapse in={expanded}>
370
378
  <div className="ml-0">{children}</div>
371
379
  </Collapse>
372
380
  </SortableContext>
@@ -91,7 +91,7 @@
91
91
  }
92
92
 
93
93
  @include media-breakpoint-down(sm) {
94
- top: 50%;
94
+ top: 100%;
95
95
 
96
96
  .step-save-btn {
97
97
  width: 100%;