@licklist/design 0.67.3 → 0.67.4-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.
- package/.storybook/main.cjs +15 -12
- package/dist/auth/Login/LoginComponent.js +2 -1
- package/dist/calendar/Calendar.d.ts +1 -1
- package/dist/calendar/Calendar.d.ts.map +1 -1
- package/dist/calendar/components/CalendarButtons/CalendarButtons.d.ts.map +1 -1
- package/dist/calendar/components/CalendarButtons/CalendarButtons.js +35 -40
- package/dist/calendar/utils/index.d.ts +2 -2
- package/dist/calendar/utils/index.d.ts.map +1 -1
- package/dist/calendar/utils/index.js +20 -4
- package/dist/date-time-button/DateTimeButton.d.ts.map +1 -1
- package/dist/date-time-button/DateTimeButton.js +1 -4
- package/dist/events/edit-event-modal/component/EditEventForm/EditEventForm.d.ts +2 -1
- package/dist/events/edit-event-modal/component/EditEventForm/EditEventForm.d.ts.map +1 -1
- package/dist/events/edit-event-modal/component/EditEventForm/EditEventForm.js +4 -4
- package/dist/events/edit-event-modal/component/SelectEventProductSet/SelectEventProductSet.d.ts +2 -2
- package/dist/events/edit-event-modal/component/SelectEventProductSet/SelectEventProductSet.d.ts.map +1 -1
- package/dist/events/edit-event-modal/component/SelectEventProductSet/SelectEventProductSet.js +27 -26
- package/dist/events/edit-event-modal/component/SelectEventProductSet/component/EditEventProductSet.d.ts +2 -2
- package/dist/events/edit-event-modal/component/SelectEventProductSet/component/EditEventProductSet.d.ts.map +1 -1
- package/dist/events/edit-event-modal/component/SelectEventProductSet/component/EditEventProductSet.js +3 -3
- package/dist/events/edit-event-modal/utils/getDefaultProductSet.d.ts.map +1 -1
- package/dist/events/edit-event-modal/utils/getDefaultProductSet.js +0 -1
- package/dist/iframe/event/event-card/IframeEventCard.d.ts +1 -1
- package/dist/iframe/event/event-card/IframeEventCard.d.ts.map +1 -1
- package/dist/iframe/event/event-card/IframeEventCard.js +9 -3
- package/dist/iframe/order-process/components/CategoryProduct/components/ProductQuantityInput/ProductQuantityInput.d.ts.map +1 -1
- package/dist/iframe/order-process/components/CategoryProduct/components/ProductQuantityInput/ProductQuantityInput.js +2 -0
- package/dist/iframe/payment/order-items-table/utils/paymentSummary.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/layout/DropDown.d.ts +2 -1
- package/dist/layout/DropDown.d.ts.map +1 -1
- package/dist/layout/DropDownToggle.d.ts.map +1 -1
- package/dist/layout/DropDownToggle.js +1 -0
- package/dist/modals/confirmation/ConfirmModal.d.ts +3 -1
- package/dist/modals/confirmation/ConfirmModal.d.ts.map +1 -1
- package/dist/modals/confirmation/ConfirmModal.js +172 -8
- package/dist/product-set/card/ProductSetCard.d.ts +6 -2
- package/dist/product-set/card/ProductSetCard.d.ts.map +1 -1
- package/dist/product-set/card/ProductSetCard.js +30 -11
- package/dist/product-set/control/DateAndRecurrenceInput.d.ts +3 -2
- package/dist/product-set/control/DateAndRecurrenceInput.d.ts.map +1 -1
- package/dist/product-set/control/DateAndRecurrenceInput.js +3 -1
- package/dist/product-set/control/DateInput.d.ts.map +1 -1
- package/dist/product-set/control/DateInput.js +2 -2
- package/dist/product-set/control/ProductSetControl.d.ts +3 -3
- package/dist/product-set/control/ProductSetControl.d.ts.map +1 -1
- package/dist/product-set/control/ProductSetControl.js +4 -16
- package/dist/product-set/form/ProductCategoriesControl.d.ts.map +1 -1
- package/dist/product-set/form/ProductCategoriesControl.js +48 -2
- package/dist/product-set/form/ProductSetForm.d.ts +6 -2
- package/dist/product-set/form/ProductSetForm.d.ts.map +1 -1
- package/dist/product-set/form/ProductSetForm.js +65 -5
- package/dist/product-set/form/ProductSetNameControl.d.ts +6 -0
- package/dist/product-set/form/ProductSetNameControl.d.ts.map +1 -0
- package/dist/product-set/form/ProductSetNameControl.js +35 -0
- package/dist/product-set/form/ProductZonesControl.d.ts.map +1 -1
- package/dist/product-set/form/ProductZonesControl.js +0 -2
- package/dist/product-set/form/SelectCategoryModal.d.ts +12 -0
- package/dist/product-set/form/SelectCategoryModal.d.ts.map +1 -1
- package/dist/product-set/form/SelectCategoryModal.js +1 -1
- package/dist/product-set/form/SubProductsControl.d.ts.map +1 -1
- package/dist/product-set/form/SubProductsControl.js +0 -3
- package/dist/product-set/form/VenueMapsControl.d.ts.map +1 -1
- package/dist/product-set/form/VenueMapsControl.js +0 -3
- package/dist/product-set/form/index.d.ts +1 -0
- package/dist/product-set/form/index.d.ts.map +1 -1
- package/dist/product-set/utils/index.d.ts +7 -0
- package/dist/product-set/utils/index.d.ts.map +1 -1
- package/dist/product-set/utils/index.js +10 -1
- package/dist/provider/location-input/LocationInput.d.ts +4 -1
- package/dist/provider/location-input/LocationInput.d.ts.map +1 -1
- package/dist/provider/location-input/LocationInput.js +41 -2
- package/dist/provider/location-input/LocationInputDescription.d.ts +4 -1
- package/dist/provider/location-input/LocationInputDescription.d.ts.map +1 -1
- package/dist/provider/location-input/LocationInputDescription.js +27 -12
- package/dist/provider/location-input/index.d.ts +1 -0
- package/dist/provider/location-input/index.d.ts.map +1 -1
- package/dist/provider/provider-form/ProviderForm.d.ts +3 -1
- package/dist/provider/provider-form/ProviderForm.d.ts.map +1 -1
- package/dist/provider/provider-form/ProviderForm.js +7 -3
- package/dist/provider/venue-form/VenueForm.d.ts +3 -1
- package/dist/provider/venue-form/VenueForm.d.ts.map +1 -1
- package/dist/provider/venue-form/VenueForm.js +7 -3
- package/dist/provider/working-hours-input/WorkingHoursInputDescription.d.ts.map +1 -1
- package/dist/provider/working-hours-input/WorkingHoursInputDescription.js +4 -8
- package/dist/recurring-date-picker-input/RecurrenceIntervalAndFrequencyInput.d.ts +2 -1
- package/dist/recurring-date-picker-input/RecurrenceIntervalAndFrequencyInput.d.ts.map +1 -1
- package/dist/recurring-date-picker-input/RecurrenceIntervalAndFrequencyInput.js +7 -13
- package/dist/recurring-date-picker-input/RecurringDatePickerInput.d.ts +4 -1
- package/dist/recurring-date-picker-input/RecurringDatePickerInput.d.ts.map +1 -1
- package/dist/recurring-date-picker-input/RecurringDatePickerInput.js +7 -3
- package/dist/recurring-date-picker-input/utils.d.ts +5 -0
- package/dist/recurring-date-picker-input/utils.d.ts.map +1 -1
- package/dist/recurring-date-picker-input/utils.js +72 -3
- package/dist/sales/booking/results/components/ResultCard.d.ts.map +1 -1
- package/dist/sales/booking/results/components/ResultCard.js +4 -7
- package/dist/sales/guest-profile/previous-bookings/PreviousBookings.js +1 -1
- package/dist/sales/manual-booking/formatDays.js +3 -3
- package/dist/sales/manual-booking/select-event/SelectEvent.d.ts.map +1 -1
- package/dist/sales/manual-booking/select-event/SelectEvent.js +3 -3
- package/dist/sales/manual-booking/summary/ManualBookingSummary.d.ts.map +1 -1
- package/dist/sales/manual-booking/summary/ManualBookingSummary.js +2 -2
- package/dist/sales/notes/NotesTableRow.js +3 -4
- package/dist/setting/admin/AdminSettingForm.d.ts +2 -2
- package/dist/setting/admin/AdminSettingForm.d.ts.map +1 -1
- package/dist/snippet/snippet-template/preview/Preview.d.ts.map +1 -1
- package/dist/snippet/snippet-template/preview/Preview.js +6 -0
- package/dist/sortable-tree/SortableTreeItem.d.ts +2 -1
- package/dist/sortable-tree/SortableTreeItem.d.ts.map +1 -1
- package/dist/sortable-tree/SortableTreeItem.js +10 -4
- package/dist/styles/auth/AccessDenied.scss +1 -1
- package/dist/styles/back-button/BackButton.scss +25 -24
- package/dist/styles/back-button/_index.scss +1 -1
- package/dist/styles/company-user-form/UserForm.scss +4 -7
- package/dist/styles/company-user-form/_index.scss +1 -1
- package/dist/styles/custom-fields/CreateSortableListItem.scss +2 -1
- package/dist/styles/custom-fields/_index.scss +1 -1
- package/dist/styles/customers/Filter.scss +5 -5
- package/dist/styles/events/EditEventModal.scss +1 -3
- package/dist/styles/events/EventVenueMap.scss +7 -7
- package/dist/styles/form/Input.scss +1 -1
- package/dist/styles/header/Header.scss +1 -1
- package/dist/styles/header/elements/CompanySelector.scss +2 -2
- package/dist/styles/iframe-events/Calendar.scss +0 -1
- package/dist/styles/iframe-events/CalendarSelect.scss +1 -1
- package/dist/styles/iframe-events/CategoryStepsForm.scss +6 -7
- package/dist/styles/iframe-events/Event.scss +2 -4
- package/dist/styles/iframe-events/EventForm.scss +54 -54
- package/dist/styles/iframe-events/EventNavigationFooter.scss +1 -0
- package/dist/styles/iframe-events/TicketDescription.scss +1 -1
- package/dist/styles/iframe-external-modal/IframeExternalModal.scss +2 -2
- package/dist/styles/iframe-payments/PaymentForm.scss +1 -1
- package/dist/styles/layout/BackgroundVideoContainer.scss +2 -2
- package/dist/styles/notification/Notification.scss +1 -1
- package/dist/styles/order-items-table/OrderItemsTable.scss +1 -2
- package/dist/styles/product-set/CreateProductSetItem.scss +15 -13
- package/dist/styles/product-set/DateAndRecurrenceInput.scss +6 -8
- package/dist/styles/product-set/EditCategoryModal.scss +4 -4
- package/dist/styles/product-set/EditProductModal.scss +3 -3
- package/dist/styles/product-set/EditStepModal.scss +4 -4
- package/dist/styles/product-set/EditVenueMapSetModal.scss +6 -6
- package/dist/styles/product-set/ProductSetForm.scss +25 -2
- package/dist/styles/product-set/TutorialGifCard.scss +1 -1
- package/dist/styles/product-set/_index.scss +2 -2
- package/dist/styles/report/ReportCard.scss +1 -0
- package/dist/styles/report/_index.scss +1 -1
- package/dist/styles/resources-blocking/_index.scss +4 -0
- package/dist/styles/sales/BookingFilter.scss +2 -2
- package/dist/styles/sales/BookingResults.scss +1 -1
- package/dist/styles/sales/BookingTabs.scss +7 -5
- package/dist/styles/sales/Filters.scss +5 -4
- package/dist/styles/sales/GuestProfile.scss +170 -175
- package/dist/styles/sales/LifeTimeSales.scss +1 -1
- package/dist/styles/sales/ManualBooking.scss +4 -2
- package/dist/styles/snippet-templates/_snippetVariables.scss +63 -244
- package/dist/styles/sortable-field/SortableField.scss +16 -16
- package/dist/styles/sortable-field/_index.scss +1 -1
- package/dist/styles/sortable-tree/Item.scss +4 -4
- package/dist/styles/table/Table.scss +1 -1
- package/dist/styles/themes/bookedit/_variables.scss +10 -32
- package/dist/styles/themes/licklist/_variables.scss +1 -1
- package/dist/styles/tiptap-editor/TiptapEditor.scss +9 -10
- package/dist/styles/tiptap-editor/_index.scss +1 -1
- package/dist/styles/venue-map-sets/VenueMapSetForm.scss +5 -4
- package/dist/styles/virtualized/_index.scss +1 -1
- package/dist/styles/zones/ZoneForm.scss +1 -0
- package/dist/styles/zones/ZoneRecurrencesControl.scss +6 -8
- package/dist/typeahead/Typeahead.d.ts +5 -1
- package/dist/typeahead/Typeahead.d.ts.map +1 -1
- package/dist/typeahead/Typeahead.js +9 -2
- package/dist/zone/form/ZoneForm.d.ts +3 -2
- package/dist/zone/form/ZoneForm.d.ts.map +1 -1
- package/dist/zone/form/ZoneForm.js +4 -2
- package/dist/zone/form/components/ZoneControl.d.ts +3 -2
- package/dist/zone/form/components/ZoneControl.d.ts.map +1 -1
- package/dist/zone/form/components/ZoneControl.js +5 -2
- package/dist/zone/form/components/ZoneRecurrencesControl.d.ts +5 -4
- package/dist/zone/form/components/ZoneRecurrencesControl.d.ts.map +1 -1
- package/dist/zone/form/components/ZoneRecurrencesControl.js +5 -2
- package/dist/zone/form/utils/dates.d.ts.map +1 -1
- package/package.json +10 -10
- package/src/auth/ChangePassword/ChangePassword.stories.tsx +1 -1
- package/src/auth/Login/LoginComponent.tsx +1 -1
- package/src/auth/ResetPassword/ResetPassword.stories.tsx +1 -1
- package/src/calendar/components/CalendarButtons/CalendarButtons.tsx +31 -28
- package/src/calendar/utils/index.ts +26 -4
- package/src/date-time-button/DateTimeButton.tsx +1 -9
- package/src/events/edit-event-modal/component/EditEventForm/EditEventForm.tsx +3 -2
- package/src/events/edit-event-modal/component/SelectEventProductSet/SelectEventProductSet.tsx +35 -37
- package/src/events/edit-event-modal/component/SelectEventProductSet/component/EditEventProductSet.tsx +3 -3
- package/src/events/edit-event-modal/utils/getDefaultProductSet.ts +0 -1
- package/src/header/elements/Elements.stories.tsx +1 -1
- package/src/help/popover/Popover.stories.tsx +1 -1
- package/src/iframe/event/event-card/IframeEventCard.tsx +16 -2
- package/src/iframe/event/event-venue-map/IframeEventVenueMap.stories.tsx +3 -3
- package/src/iframe/order-process/components/CategoryProduct/components/ProductQuantityInput/ProductQuantityInput.tsx +1 -0
- package/src/iframe/payment/order-items-table/utils/paymentSummary.tsx +1 -0
- package/src/layout/DropDown.tsx +2 -1
- package/src/layout/DropDownToggle.tsx +2 -0
- package/src/modals/confirmation/ConfirmModal.tsx +19 -3
- package/src/product-set/card/ProductSetCard.stories.tsx +3 -1
- package/src/product-set/card/ProductSetCard.tsx +47 -8
- package/src/product-set/control/DateAndRecurrenceInput.tsx +6 -4
- package/src/product-set/control/DateInput.tsx +2 -1
- package/src/product-set/control/ProductSetControl.tsx +4 -15
- package/src/product-set/control/ProductSetRecurrenceControl.stories.tsx +2 -2
- package/src/product-set/form/ProductCategoriesControl.tsx +37 -1
- package/src/product-set/form/ProductSetForm.tsx +25 -3
- package/src/product-set/form/ProductSetNameControl.tsx +27 -0
- package/src/product-set/form/ProductZonesControl.tsx +4 -7
- package/src/product-set/form/SelectCategoryModal.stories.tsx +1 -1
- package/src/product-set/form/SelectCategoryModal.tsx +2 -2
- package/src/product-set/form/SubProductsControl.tsx +0 -3
- package/src/product-set/form/VenueMapsControl.tsx +0 -3
- package/src/product-set/form/index.ts +1 -0
- package/src/product-set/product/advanced-options/AdvancedOptions.tsx +5 -5
- package/src/product-set/product/booking-management/ProductBookingManagement.stories.tsx +1 -1
- package/src/product-set/product/quantity/ProductQuantity.stories.tsx +1 -1
- package/src/product-set/product-zone/ProductZoneControl.tsx +9 -9
- package/src/product-set/utils/index.ts +11 -0
- package/src/provider/location-input/LocationInput.tsx +36 -1
- package/src/provider/location-input/LocationInputDescription.tsx +23 -11
- package/src/provider/location-input/index.ts +1 -0
- package/src/provider/provider-form/ProviderForm.tsx +7 -2
- package/src/provider/venue-form/VenueForm.tsx +5 -2
- package/src/provider/working-hours-input/WorkingHoursInputDescription.tsx +4 -18
- package/src/recurring-date-picker-input/RecurrenceIntervalAndFrequencyInput.tsx +8 -22
- package/src/recurring-date-picker-input/RecurringDatePickerInput.stories.tsx +11 -4
- package/src/recurring-date-picker-input/RecurringDatePickerInput.tsx +17 -3
- package/src/recurring-date-picker-input/utils.ts +86 -1
- package/src/sales/booking/results/components/ResultCard.tsx +4 -10
- package/src/sales/guest-profile/previous-bookings/PreviousBookings.tsx +1 -1
- package/src/sales/manual-booking/formatDays.ts +3 -3
- package/src/sales/manual-booking/select-event/SelectEvent.tsx +2 -2
- package/src/sales/manual-booking/summary/ManualBookingSummary.tsx +2 -2
- package/src/sales/notes/NotesTableRow.tsx +3 -3
- package/src/setting/admin/AdminSetting.stories.tsx +1 -0
- package/src/setting/admin/AdminSettingForm.tsx +2 -2
- package/src/setting/system/SystemSetting.stories.tsx +1 -1
- package/src/snippet/snippet-template/preview/Preview.tsx +6 -0
- package/src/sortable-tree/SortableTreeItem.tsx +6 -0
- package/src/styles/auth/AccessDenied.scss +1 -1
- package/src/styles/back-button/BackButton.scss +25 -24
- package/src/styles/back-button/_index.scss +1 -1
- package/src/styles/company-user-form/UserForm.scss +4 -7
- package/src/styles/company-user-form/_index.scss +1 -1
- package/src/styles/custom-fields/CreateSortableListItem.scss +2 -1
- package/src/styles/custom-fields/_index.scss +1 -1
- package/src/styles/customers/Filter.scss +5 -5
- package/src/styles/events/EditEventModal.scss +1 -3
- package/src/styles/events/EventVenueMap.scss +7 -7
- package/src/styles/form/Input.scss +1 -1
- package/src/styles/header/Header.scss +1 -1
- package/src/styles/header/elements/CompanySelector.scss +2 -2
- package/src/styles/iframe-events/Calendar.scss +0 -1
- package/src/styles/iframe-events/CalendarSelect.scss +1 -1
- package/src/styles/iframe-events/CategoryStepsForm.scss +6 -7
- package/src/styles/iframe-events/Event.scss +2 -4
- package/src/styles/iframe-events/EventForm.scss +54 -54
- package/src/styles/iframe-events/EventNavigationFooter.scss +1 -0
- package/src/styles/iframe-events/TicketDescription.scss +1 -1
- package/src/styles/iframe-external-modal/IframeExternalModal.scss +2 -2
- package/src/styles/iframe-payments/PaymentForm.scss +1 -1
- package/src/styles/layout/BackgroundVideoContainer.scss +2 -2
- package/src/styles/notification/Notification.scss +1 -1
- package/src/styles/order-items-table/OrderItemsTable.scss +1 -2
- package/src/styles/product-set/CreateProductSetItem.scss +15 -13
- package/src/styles/product-set/DateAndRecurrenceInput.scss +6 -8
- package/src/styles/product-set/EditCategoryModal.scss +4 -4
- package/src/styles/product-set/EditProductModal.scss +3 -3
- package/src/styles/product-set/EditStepModal.scss +4 -4
- package/src/styles/product-set/EditVenueMapSetModal.scss +6 -6
- package/src/styles/product-set/ProductSetForm.scss +25 -2
- package/src/styles/product-set/TutorialGifCard.scss +1 -1
- package/src/styles/product-set/_index.scss +2 -2
- package/src/styles/report/ReportCard.scss +1 -0
- package/src/styles/report/_index.scss +1 -1
- package/src/styles/resources-blocking/_index.scss +4 -0
- package/src/styles/sales/BookingFilter.scss +2 -2
- package/src/styles/sales/BookingResults.scss +1 -1
- package/src/styles/sales/BookingTabs.scss +7 -5
- package/src/styles/sales/Filters.scss +5 -4
- package/src/styles/sales/GuestProfile.scss +170 -175
- package/src/styles/sales/LifeTimeSales.scss +1 -1
- package/src/styles/sales/ManualBooking.scss +4 -2
- package/src/styles/snippet-templates/_snippetVariables.scss +63 -244
- package/src/styles/sortable-field/SortableField.scss +16 -16
- package/src/styles/sortable-field/_index.scss +1 -1
- package/src/styles/sortable-tree/Item.scss +4 -4
- package/src/styles/table/Table.scss +1 -1
- package/src/styles/themes/bookedit/_variables.scss +10 -32
- package/src/styles/themes/licklist/_variables.scss +1 -1
- package/src/styles/tiptap-editor/TiptapEditor.scss +9 -10
- package/src/styles/tiptap-editor/_index.scss +1 -1
- package/src/styles/venue-map-sets/VenueMapSetForm.scss +5 -4
- package/src/styles/virtualized/_index.scss +1 -1
- package/src/styles/zones/ZoneForm.scss +1 -0
- package/src/styles/zones/ZoneRecurrencesControl.scss +6 -8
- package/src/tiptap-editor/TipTapEditor.stories.tsx +6 -4
- package/src/tiptap-editor/TipTapMenu/TipTapMenu.stories.tsx +5 -2
- package/src/typeahead/Typeahead.tsx +15 -1
- package/src/zone/form/ZoneForm.tsx +9 -2
- package/src/zone/form/components/ZoneControl.tsx +8 -3
- package/src/zone/form/components/ZoneRecurrencesControl.tsx +10 -5
- package/src/zone/form/utils/dates.ts +9 -10
- package/yarn.lock +202 -196
- package/dist/assets/iframe/selectArrow.svg.js +0 -17
|
@@ -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]: {
|
|
@@ -71,9 +71,6 @@ export function SubProductsControl({
|
|
|
71
71
|
images: subProducts[index]?.images as Image[],
|
|
72
72
|
};
|
|
73
73
|
// @ts-expect-error TS2345
|
|
74
|
-
// @TODO fix prod type error
|
|
75
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
76
|
-
// @ts-ignore
|
|
77
74
|
append(subProductCopy);
|
|
78
75
|
}}
|
|
79
76
|
/>
|
|
@@ -47,9 +47,6 @@ export const VenueMapsControl = ({
|
|
|
47
47
|
url={image.url}
|
|
48
48
|
name={name}
|
|
49
49
|
points={points}
|
|
50
|
-
// @TODO fix prod type error
|
|
51
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
52
|
-
// @ts-ignore
|
|
53
50
|
products={products}
|
|
54
51
|
pointProducts={pointProducts}
|
|
55
52
|
onPointProductsChange={onPointProductsChange}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
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";
|
|
@@ -98,7 +98,7 @@ export const AdvancedOptions = <T extends FormValues>({
|
|
|
98
98
|
{...register(`${fieldNamePrefix}.productGroupId` as Path<T>)}
|
|
99
99
|
isInvalid={HookFormService.isInvalid<T>(
|
|
100
100
|
`${fieldNamePrefix}.productGroupId` as Path<T>,
|
|
101
|
-
errors
|
|
101
|
+
errors,
|
|
102
102
|
)}
|
|
103
103
|
disabled={isLoading || isOverrides}
|
|
104
104
|
defaultValue=""
|
|
@@ -115,7 +115,7 @@ export const AdvancedOptions = <T extends FormValues>({
|
|
|
115
115
|
<Form.Control.Feedback type="invalid">
|
|
116
116
|
{HookFormService.getErrors<T>(
|
|
117
117
|
`${fieldNamePrefix}.productGroupId` as Path<T>,
|
|
118
|
-
errors
|
|
118
|
+
errors,
|
|
119
119
|
)}
|
|
120
120
|
</Form.Control.Feedback>
|
|
121
121
|
</Form.Group>
|
|
@@ -134,7 +134,7 @@ export const AdvancedOptions = <T extends FormValues>({
|
|
|
134
134
|
onChange={onChange}
|
|
135
135
|
isInvalid={HookFormService.isInvalid<T>(
|
|
136
136
|
`${fieldNamePrefix}.termsAndConditions` as Path<T>,
|
|
137
|
-
errors
|
|
137
|
+
errors,
|
|
138
138
|
)}
|
|
139
139
|
disabled={isLoading || isOverrides}
|
|
140
140
|
name={name}
|
|
@@ -147,7 +147,7 @@ export const AdvancedOptions = <T extends FormValues>({
|
|
|
147
147
|
<Form.Control.Feedback type="invalid">
|
|
148
148
|
{HookFormService.getErrors<T>(
|
|
149
149
|
`${fieldNamePrefix}.termsAndConditions` as Path<T>,
|
|
150
|
-
errors
|
|
150
|
+
errors,
|
|
151
151
|
)}
|
|
152
152
|
</Form.Control.Feedback>
|
|
153
153
|
</Form.Group>
|
|
@@ -42,7 +42,7 @@ export const Default: Story<ProductQuantityControlProps<{}>> = (args) => {
|
|
|
42
42
|
};
|
|
43
43
|
|
|
44
44
|
export const ConstantForm: Story<ProductQuantityConstantControlProps<{}>> = (
|
|
45
|
-
args
|
|
45
|
+
args
|
|
46
46
|
) => {
|
|
47
47
|
const form = useForm<ProductQuantityConstantControlValues>({
|
|
48
48
|
mode: "onChange",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { useContext, useEffect, useMemo } from "react";
|
|
2
2
|
import { Col, Form, Row } from "react-bootstrap";
|
|
3
3
|
import {
|
|
4
4
|
ArrayPath,
|
|
@@ -63,7 +63,7 @@ export const ProductZoneControl = <T extends FormValues>({
|
|
|
63
63
|
const disabledDuration = capacity === "0" || !capacity;
|
|
64
64
|
|
|
65
65
|
const { providerHasBookingManagement, zones = [] } = useContext(
|
|
66
|
-
ProductSetLoadingContext
|
|
66
|
+
ProductSetLoadingContext,
|
|
67
67
|
);
|
|
68
68
|
|
|
69
69
|
const currentZoneData = zones.find((zone) => zone.id === Number(zoneId));
|
|
@@ -75,10 +75,10 @@ export const ProductZoneControl = <T extends FormValues>({
|
|
|
75
75
|
!productZones.find(
|
|
76
76
|
(productZone) =>
|
|
77
77
|
Number(productZone.zoneId) === zone.id &&
|
|
78
|
-
productZone.zoneId !== zoneId
|
|
79
|
-
)
|
|
78
|
+
productZone.zoneId !== zoneId,
|
|
79
|
+
),
|
|
80
80
|
),
|
|
81
|
-
[zones, productZones, zoneId]
|
|
81
|
+
[zones, productZones, zoneId],
|
|
82
82
|
);
|
|
83
83
|
|
|
84
84
|
useEffect(() => {
|
|
@@ -89,7 +89,7 @@ export const ProductZoneControl = <T extends FormValues>({
|
|
|
89
89
|
setValue(
|
|
90
90
|
`${fieldNamePrefix}.duration` as Path<T>,
|
|
91
91
|
/* @ts-expect-error 6385 */
|
|
92
|
-
0 as UnpackNestedValue<PathValue<T, Path<T
|
|
92
|
+
0 as UnpackNestedValue<PathValue<T, Path<T>>>,
|
|
93
93
|
);
|
|
94
94
|
clearErrors(`${fieldNamePrefix}.duration` as Path<T>);
|
|
95
95
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
@@ -104,7 +104,7 @@ export const ProductZoneControl = <T extends FormValues>({
|
|
|
104
104
|
/* @ts-expect-error 6385 */
|
|
105
105
|
(value * currentZoneData?.defaultDuration) as UnpackNestedValue<
|
|
106
106
|
PathValue<T, Path<T>>
|
|
107
|
-
|
|
107
|
+
>,
|
|
108
108
|
);
|
|
109
109
|
};
|
|
110
110
|
return (
|
|
@@ -123,7 +123,7 @@ export const ProductZoneControl = <T extends FormValues>({
|
|
|
123
123
|
disabled={isOverrides}
|
|
124
124
|
isInvalid={HookFormService.isInvalid(
|
|
125
125
|
`${fieldNamePrefix}.zoneId`,
|
|
126
|
-
errors
|
|
126
|
+
errors,
|
|
127
127
|
)}
|
|
128
128
|
{...field}
|
|
129
129
|
>
|
|
@@ -147,7 +147,7 @@ export const ProductZoneControl = <T extends FormValues>({
|
|
|
147
147
|
<Form.Control.Feedback type="invalid">
|
|
148
148
|
{HookFormService.getErrors(
|
|
149
149
|
`${fieldNamePrefix}.zoneId` as Path<T>,
|
|
150
|
-
errors
|
|
150
|
+
errors,
|
|
151
151
|
)}
|
|
152
152
|
</Form.Control.Feedback>
|
|
153
153
|
</Form.Group>
|
|
@@ -3,6 +3,7 @@ import { SmsTemplate } from "@licklist/core/dist/DataMapper/Notification/SmsTemp
|
|
|
3
3
|
import { TFunction } from "react-i18next";
|
|
4
4
|
import { UseFormSetError } from "react-hook-form";
|
|
5
5
|
import { checkIfZoneCategory } from "@licklist/plugins";
|
|
6
|
+
import { ProductSet } from "@licklist/core/dist/DataMapper/Product/ProductSetDataMapper";
|
|
6
7
|
import { TemplateItem } from "../control/ProductSetControl";
|
|
7
8
|
import { ProductSetFormValues } from "../form/ProductSetForm";
|
|
8
9
|
|
|
@@ -12,6 +13,11 @@ interface CheckAvailableTimesErrors {
|
|
|
12
13
|
t: TFunction;
|
|
13
14
|
}
|
|
14
15
|
|
|
16
|
+
export interface MenuTypeheadItem {
|
|
17
|
+
id: number;
|
|
18
|
+
label: string;
|
|
19
|
+
value: number;
|
|
20
|
+
}
|
|
15
21
|
export const moveArrayElements = <T>(
|
|
16
22
|
array: T[],
|
|
17
23
|
prevIndex: number,
|
|
@@ -84,3 +90,8 @@ export const checkAvailableTimesErrors = ({
|
|
|
84
90
|
});
|
|
85
91
|
return hasError;
|
|
86
92
|
};
|
|
93
|
+
|
|
94
|
+
export const getTypeHeadItemsFromMenus = (
|
|
95
|
+
menus?: (ProductSet | ProductSetFormValues)[],
|
|
96
|
+
): MenuTypeheadItem[] =>
|
|
97
|
+
menus?.map((menu) => ({ id: menu.id, value: menu.id, label: menu.name }));
|
|
@@ -2,17 +2,21 @@ import { useId } from "@react-aria/utils";
|
|
|
2
2
|
import { Form } from "react-bootstrap";
|
|
3
3
|
import { useFormContext } from "react-hook-form";
|
|
4
4
|
import { useTranslation } from "react-i18next";
|
|
5
|
+
import { TimeZonePath, useTimeZoneApi } from "@licklist/plugins";
|
|
6
|
+
import { BlockLoader } from "src/static";
|
|
5
7
|
import CountryCodeSelect from "../../static/CountryCodeSelect";
|
|
6
8
|
import { LocationInputValues } from ".";
|
|
7
9
|
import { FormGroupControll } from "./components";
|
|
8
10
|
|
|
9
|
-
export function LocationInput() {
|
|
11
|
+
export function LocationInput({ path }: { path: TimeZonePath }) {
|
|
10
12
|
const {
|
|
11
13
|
register,
|
|
12
14
|
formState: { errors },
|
|
13
15
|
} = useFormContext<LocationInputValues>();
|
|
14
16
|
const { t } = useTranslation("Design");
|
|
15
17
|
|
|
18
|
+
const { data, isLoading } = useTimeZoneApi(path).useAll();
|
|
19
|
+
|
|
16
20
|
const countryId = useId();
|
|
17
21
|
|
|
18
22
|
return (
|
|
@@ -39,6 +43,7 @@ export function LocationInput() {
|
|
|
39
43
|
name="location.postcode"
|
|
40
44
|
label={t("locationPostcode")}
|
|
41
45
|
/>
|
|
46
|
+
|
|
42
47
|
<Form.Group controlId={countryId}>
|
|
43
48
|
<Form.Label>{t("locationCountry")}</Form.Label>
|
|
44
49
|
<CountryCodeSelect
|
|
@@ -47,6 +52,36 @@ export function LocationInput() {
|
|
|
47
52
|
error={errors?.location?.country?.message}
|
|
48
53
|
/>
|
|
49
54
|
</Form.Group>
|
|
55
|
+
|
|
56
|
+
{isLoading ? (
|
|
57
|
+
<BlockLoader />
|
|
58
|
+
) : (
|
|
59
|
+
<Form.Group controlId="timeZoneId">
|
|
60
|
+
<Form.Label>{t("locationTimeZone")}</Form.Label>
|
|
61
|
+
<Form.Control
|
|
62
|
+
{...register("timeZoneId", {
|
|
63
|
+
required: t("Validation:fieldRequired", {
|
|
64
|
+
attribute: t("locationTimeZone"),
|
|
65
|
+
}) as string,
|
|
66
|
+
})}
|
|
67
|
+
as="select"
|
|
68
|
+
custom
|
|
69
|
+
isInvalid={Boolean(errors?.timeZoneId?.message)}
|
|
70
|
+
>
|
|
71
|
+
<option key="" value="" disabled>
|
|
72
|
+
{t("chooseTimeZone")}
|
|
73
|
+
</option>
|
|
74
|
+
{data.map((zone) => (
|
|
75
|
+
<option key={zone.id} value={zone.id.toString()}>
|
|
76
|
+
{zone.name}
|
|
77
|
+
</option>
|
|
78
|
+
))}
|
|
79
|
+
</Form.Control>
|
|
80
|
+
<Form.Control.Feedback type="invalid">
|
|
81
|
+
{errors?.timeZoneId?.message}
|
|
82
|
+
</Form.Control.Feedback>
|
|
83
|
+
</Form.Group>
|
|
84
|
+
)}
|
|
50
85
|
</>
|
|
51
86
|
);
|
|
52
87
|
}
|
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
import { ReactElement } from "react";
|
|
2
2
|
import { useFormContext } from "react-hook-form";
|
|
3
3
|
import en from "react-phone-number-input/locale/en.json";
|
|
4
|
+
import { TimeZonePath, useTimeZoneApi } from "@licklist/plugins";
|
|
4
5
|
import { LocationInputValues } from ".";
|
|
5
6
|
|
|
6
|
-
|
|
7
|
+
const fieldNames = ["street", "city", "state", "postcode", "country"] as const;
|
|
8
|
+
|
|
9
|
+
export function LocationInputDescription({ path }: { path: TimeZonePath }) {
|
|
7
10
|
const { watch } = useFormContext<LocationInputValues>();
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
"state",
|
|
13
|
-
"postcode",
|
|
14
|
-
"country",
|
|
15
|
-
] as const;
|
|
11
|
+
const location = watch("location");
|
|
12
|
+
|
|
13
|
+
const { data } = useTimeZoneApi(path).useAll();
|
|
14
|
+
|
|
16
15
|
const fields = fieldNames.reduce<ReactElement[]>((acc, field) => {
|
|
17
|
-
const value =
|
|
16
|
+
const value = location?.[field];
|
|
18
17
|
if (!value) return acc;
|
|
19
18
|
|
|
20
19
|
return [
|
|
@@ -22,5 +21,18 @@ export function LocationInputDescription() {
|
|
|
22
21
|
<div key={field}>{field === "country" ? en[value] : value}</div>,
|
|
23
22
|
];
|
|
24
23
|
}, []);
|
|
25
|
-
|
|
24
|
+
|
|
25
|
+
const timeZoneId = watch("timeZoneId");
|
|
26
|
+
const timeZoneName = data?.find(
|
|
27
|
+
(timeZone) => timeZone.id === +timeZoneId,
|
|
28
|
+
)?.name;
|
|
29
|
+
|
|
30
|
+
return (
|
|
31
|
+
<div>
|
|
32
|
+
<>
|
|
33
|
+
{fields}
|
|
34
|
+
{timeZoneName && <div key="timeZone">{timeZoneName}</div>}
|
|
35
|
+
</>
|
|
36
|
+
</div>
|
|
37
|
+
);
|
|
26
38
|
}
|
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
} from "@licklist/core/dist/DataMapper/Media/ImageDataMapper";
|
|
11
11
|
import { useMultipleImages } from "@licklist/plugins/dist/hooks/Media/useMultipleImages";
|
|
12
12
|
import { HasPermissionProp } from "@licklist/plugins/dist/types/permission/Permission";
|
|
13
|
+
import { TimeZonePath } from "@licklist/plugins";
|
|
13
14
|
import { CollapsibleInputGroup } from "../../collapsible-input-group";
|
|
14
15
|
import {
|
|
15
16
|
CategoriesInput,
|
|
@@ -41,6 +42,7 @@ export interface ProviderFormProps extends HasPermissionProp {
|
|
|
41
42
|
companiesOptions?: TypeaheadOptions[];
|
|
42
43
|
onSubmit: (values: ProviderFormValues) => void;
|
|
43
44
|
intent?: "create" | "update";
|
|
45
|
+
path: TimeZonePath;
|
|
44
46
|
}
|
|
45
47
|
|
|
46
48
|
const providerImageTypes = {
|
|
@@ -56,14 +58,17 @@ export function ProviderForm({
|
|
|
56
58
|
onSubmit,
|
|
57
59
|
intent = "update",
|
|
58
60
|
hasPermission = true,
|
|
61
|
+
path,
|
|
59
62
|
}: ProviderFormProps) {
|
|
60
63
|
const form = useForm<ProviderFormValues>({ defaultValues });
|
|
64
|
+
|
|
61
65
|
const {
|
|
62
66
|
setValue,
|
|
63
67
|
handleSubmit,
|
|
64
68
|
formState: { isSubmitting, errors },
|
|
65
69
|
getValues,
|
|
66
70
|
} = form;
|
|
71
|
+
|
|
67
72
|
const { t } = useTranslation("Design");
|
|
68
73
|
const [initialImages, setInitialImages] = useState<Image[] | null>(null);
|
|
69
74
|
|
|
@@ -101,10 +106,10 @@ export function ProviderForm({
|
|
|
101
106
|
<CollapsibleInputGroup
|
|
102
107
|
eventKey="location"
|
|
103
108
|
label={t("location")}
|
|
104
|
-
description={<LocationInputDescription />}
|
|
109
|
+
description={<LocationInputDescription path={path} />}
|
|
105
110
|
error={errors?.location?.country?.message}
|
|
106
111
|
>
|
|
107
|
-
<LocationInput />
|
|
112
|
+
<LocationInput path={path} />
|
|
108
113
|
</CollapsibleInputGroup>
|
|
109
114
|
{categories && categories.length > 0 && (
|
|
110
115
|
<CollapsibleInputGroup
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
import { HasPermissionProp } from "@licklist/plugins/dist/types/permission/Permission";
|
|
12
12
|
import { useMultipleImages } from "@licklist/plugins/dist/hooks/Media/useMultipleImages";
|
|
13
13
|
import { parseServerErrorForFormValidation } from "@licklist/plugins/dist/utils/parseError";
|
|
14
|
+
import { TimeZonePath } from "@licklist/plugins";
|
|
14
15
|
import { CollapsibleInputGroup } from "../../collapsible-input-group";
|
|
15
16
|
import {
|
|
16
17
|
CategoriesInput,
|
|
@@ -50,6 +51,7 @@ export interface VenueFormProps extends HasPermissionProp {
|
|
|
50
51
|
intent?: "create" | "update";
|
|
51
52
|
isLoading?: boolean;
|
|
52
53
|
errorResponse?: unknown;
|
|
54
|
+
path: TimeZonePath;
|
|
53
55
|
}
|
|
54
56
|
|
|
55
57
|
const providerImageTypes = {
|
|
@@ -67,6 +69,7 @@ export function VenueForm({
|
|
|
67
69
|
hasPermission = true,
|
|
68
70
|
isLoading,
|
|
69
71
|
errorResponse,
|
|
72
|
+
path,
|
|
70
73
|
}: VenueFormProps) {
|
|
71
74
|
const form = useForm<VenueFormValues>({ defaultValues, mode: "onChange" });
|
|
72
75
|
const {
|
|
@@ -134,7 +137,7 @@ export function VenueForm({
|
|
|
134
137
|
<CollapsibleInputGroup
|
|
135
138
|
eventKey="location"
|
|
136
139
|
label={t("location")}
|
|
137
|
-
description={<LocationInputDescription />}
|
|
140
|
+
description={<LocationInputDescription path={path} />}
|
|
138
141
|
error={
|
|
139
142
|
errors?.location?.message ||
|
|
140
143
|
(errors?.location &&
|
|
@@ -143,7 +146,7 @@ export function VenueForm({
|
|
|
143
146
|
}))
|
|
144
147
|
}
|
|
145
148
|
>
|
|
146
|
-
<LocationInput />
|
|
149
|
+
<LocationInput path={path} />
|
|
147
150
|
</CollapsibleInputGroup>
|
|
148
151
|
<CollapsibleInputGroup
|
|
149
152
|
eventKey="workingHours"
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import { DateTime } from "luxon";
|
|
2
1
|
import { Col, Row } from "react-bootstrap";
|
|
3
2
|
import { useFormContext } from "react-hook-form";
|
|
4
3
|
import { useTranslation } from "react-i18next";
|
|
5
|
-
import { TIME_FORMAT } from "@licklist/core/dist/Config";
|
|
6
4
|
import { WorkingHoursInputValues } from ".";
|
|
7
5
|
import { useWeekdays } from "./utils";
|
|
8
6
|
|
|
@@ -24,22 +22,10 @@ export function WorkingHoursInputDescription() {
|
|
|
24
22
|
<Row key={i}>
|
|
25
23
|
<Col xs="auto">{weekdays[i]}:</Col>
|
|
26
24
|
<Col>
|
|
27
|
-
{
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
TIME_FORMAT,
|
|
32
|
-
),
|
|
33
|
-
end: DateTime.fromISO(weekday.start).toFormat(
|
|
34
|
-
TIME_FORMAT,
|
|
35
|
-
),
|
|
36
|
-
})
|
|
37
|
-
: t("timeFrom", {
|
|
38
|
-
start: DateTime.fromISO(weekday.start).toFormat(
|
|
39
|
-
TIME_FORMAT,
|
|
40
|
-
),
|
|
41
|
-
})
|
|
42
|
-
: null}
|
|
25
|
+
{t("timeInterval", {
|
|
26
|
+
start: weekday.start,
|
|
27
|
+
end: weekday.end,
|
|
28
|
+
})}
|
|
43
29
|
</Col>
|
|
44
30
|
</Row>
|
|
45
31
|
);
|
|
@@ -8,12 +8,8 @@ import {
|
|
|
8
8
|
useWatch,
|
|
9
9
|
Validate,
|
|
10
10
|
} from "react-hook-form";
|
|
11
|
-
import {
|
|
12
|
-
|
|
13
|
-
TIME_FORMAT,
|
|
14
|
-
TIME_FULL_FORMAT,
|
|
15
|
-
} from "@licklist/core/dist/Config";
|
|
16
|
-
import { fromFormat } from "@licklist/plugins/dist/utils/dateTime";
|
|
11
|
+
import { TIME_FORMAT } from "@licklist/core/dist/Config";
|
|
12
|
+
import { fromIso } from "@licklist/core/dist/Services";
|
|
17
13
|
import { RecurringDatePickerInputValues } from "./RecurringDatePickerInput";
|
|
18
14
|
|
|
19
15
|
interface RecurrenceIntervalAndFrequencyInputProps {
|
|
@@ -31,17 +27,9 @@ interface RecurrenceIntervalAndFrequencyInputProps {
|
|
|
31
27
|
RegisterOptions,
|
|
32
28
|
"max" | "min" | "validate" | "required" | "pattern"
|
|
33
29
|
>;
|
|
30
|
+
timeZone: string;
|
|
34
31
|
}
|
|
35
32
|
|
|
36
|
-
const fromTimeFormat = fromFormat(TIME_FORMAT);
|
|
37
|
-
const fromTimeFullFormat = fromFormat(TIME_FULL_FORMAT);
|
|
38
|
-
|
|
39
|
-
// default values and entered values are in different formats
|
|
40
|
-
const fromTimeFormats = (time: string) =>
|
|
41
|
-
fromTimeFormat(time).isValid
|
|
42
|
-
? fromTimeFormat(time)
|
|
43
|
-
: fromTimeFullFormat(time);
|
|
44
|
-
|
|
45
33
|
function RecurrenceIntervalAndFrequencyInput({
|
|
46
34
|
disabled = false,
|
|
47
35
|
minDate,
|
|
@@ -51,6 +39,7 @@ function RecurrenceIntervalAndFrequencyInput({
|
|
|
51
39
|
endTimeLabel,
|
|
52
40
|
startTimeRules,
|
|
53
41
|
endTimeRules,
|
|
42
|
+
timeZone,
|
|
54
43
|
}: RecurrenceIntervalAndFrequencyInputProps) {
|
|
55
44
|
const { t } = useTranslation(["Design", "Notification", "App"]);
|
|
56
45
|
|
|
@@ -66,10 +55,10 @@ function RecurrenceIntervalAndFrequencyInput({
|
|
|
66
55
|
|
|
67
56
|
const _startTime = useWatch({ control, name: "startTime" });
|
|
68
57
|
const startTime =
|
|
69
|
-
_startTime &&
|
|
58
|
+
_startTime && fromIso(_startTime, timeZone).toFormat(TIME_FORMAT);
|
|
70
59
|
|
|
71
60
|
const _endTime = useWatch({ control, name: "endTime" });
|
|
72
|
-
const endTime = _endTime &&
|
|
61
|
+
const endTime = _endTime && fromIso(_endTime, timeZone).toFormat(TIME_FORMAT);
|
|
73
62
|
|
|
74
63
|
useEffect(() => {
|
|
75
64
|
if (!startDate || !endDate) {
|
|
@@ -119,11 +108,8 @@ function RecurrenceIntervalAndFrequencyInput({
|
|
|
119
108
|
if (!startDate || !date) {
|
|
120
109
|
return true;
|
|
121
110
|
}
|
|
122
|
-
const currentStartDate =
|
|
123
|
-
|
|
124
|
-
DATE_FORMAT,
|
|
125
|
-
);
|
|
126
|
-
const currentEndDate = DateTime.fromFormat(date, DATE_FORMAT);
|
|
111
|
+
const currentStartDate = fromIso(startDate, timeZone);
|
|
112
|
+
const currentEndDate = fromIso(date, timeZone);
|
|
127
113
|
return currentEndDate.diff(currentStartDate, ["days"]).days >=
|
|
128
114
|
0
|
|
129
115
|
? true
|
|
@@ -12,9 +12,7 @@ export default {
|
|
|
12
12
|
component: RecurringDatePickerInput,
|
|
13
13
|
} as Meta;
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
export const Default: Story<DefaultRecurringDatePickerInputProps> = (args) => {
|
|
15
|
+
export const Default: Story<RecurringDatePickerInputProps> = (args) => {
|
|
18
16
|
return (
|
|
19
17
|
<Card style={{ maxWidth: "max-content" }}>
|
|
20
18
|
<Card.Body>
|
|
@@ -23,7 +21,7 @@ export const Default: Story<DefaultRecurringDatePickerInputProps> = (args) => {
|
|
|
23
21
|
</Card>
|
|
24
22
|
);
|
|
25
23
|
};
|
|
26
|
-
export const Valid: Story<
|
|
24
|
+
export const Valid: Story<RecurringDatePickerInputProps> = (args) => {
|
|
27
25
|
return (
|
|
28
26
|
<Card style={{ maxWidth: "max-content" }}>
|
|
29
27
|
<Card.Body>
|
|
@@ -34,6 +32,15 @@ export const Valid: Story<DefaultRecurringDatePickerInputProps> = (args) => {
|
|
|
34
32
|
};
|
|
35
33
|
Default.args = {
|
|
36
34
|
onChange: (data) => console.log("onSubmit", data),
|
|
35
|
+
workHours: [
|
|
36
|
+
{ start: "20:00", end: "04:00", day: 0, description: "" },
|
|
37
|
+
{ start: "20:00", end: "04:00", day: 1, description: "" },
|
|
38
|
+
{ start: "20:00", end: "04:00", day: 2, description: "" },
|
|
39
|
+
{ start: "20:00", end: "12:00", day: 3, description: "" },
|
|
40
|
+
{ start: "20:00", end: "23:00", day: 4, description: "" },
|
|
41
|
+
{ start: "08:00", end: "12:00", day: 5, description: "" },
|
|
42
|
+
{ start: "10:00", end: "16:00", day: 6, description: "" },
|
|
43
|
+
],
|
|
37
44
|
};
|
|
38
45
|
Valid.args = {
|
|
39
46
|
onChange: (data) => console.log("onSubmit", data),
|
|
@@ -2,7 +2,7 @@ import { useEffect, useMemo, PropsWithChildren } from "react";
|
|
|
2
2
|
import RRule, { Frequency, Weekday } from "rrule";
|
|
3
3
|
import { useTranslation } from "react-i18next";
|
|
4
4
|
import Button from "react-bootstrap/Button";
|
|
5
|
-
import { DateTime, Interval } from "luxon";
|
|
5
|
+
import { DateTime, Interval, WeekdayNumbers } from "luxon";
|
|
6
6
|
import { useIntl } from "react-intl";
|
|
7
7
|
import {
|
|
8
8
|
DATE_TIME_FORMAT,
|
|
@@ -12,9 +12,14 @@ import {
|
|
|
12
12
|
import { usePreviousValue } from "@licklist/plugins/dist/hooks/Value/usePreviousValue";
|
|
13
13
|
import { FormProvider, useForm } from "react-hook-form";
|
|
14
14
|
import { Form } from "react-bootstrap";
|
|
15
|
+
import { WorkHour } from "@licklist/core/dist/DataMapper/Provider/WorkHourDataMapper";
|
|
15
16
|
import RecurrenceIntervalAndFrequencyInput from "./RecurrenceIntervalAndFrequencyInput";
|
|
16
17
|
import RecurrenceWeekdaysInput from "./RecurrenceWeekdaysInput";
|
|
17
|
-
import {
|
|
18
|
+
import {
|
|
19
|
+
parseAndValidateRRule,
|
|
20
|
+
SupportedFrequency,
|
|
21
|
+
useWorkHoursValidation,
|
|
22
|
+
} from "./utils";
|
|
18
23
|
import { ConfirmModal } from "../modals";
|
|
19
24
|
import { DeleteFieldButton } from "../product-set/elements";
|
|
20
25
|
|
|
@@ -26,6 +31,8 @@ export interface RecurringDatePickerInputProps {
|
|
|
26
31
|
initialFrequency?: Frequency;
|
|
27
32
|
setInitialStartDateAfterSelect?: boolean;
|
|
28
33
|
minDate?: string;
|
|
34
|
+
workHours: WorkHour[] | undefined;
|
|
35
|
+
timeZone: string;
|
|
29
36
|
}
|
|
30
37
|
|
|
31
38
|
export interface RecurringDatePickerInputValues {
|
|
@@ -51,6 +58,8 @@ export function RecurringDatePickerInput({
|
|
|
51
58
|
setInitialStartDateAfterSelect = false,
|
|
52
59
|
children,
|
|
53
60
|
minDate,
|
|
61
|
+
workHours,
|
|
62
|
+
timeZone,
|
|
54
63
|
}: PropsWithChildren<RecurringDatePickerInputProps>) {
|
|
55
64
|
const { t } = useTranslation(["Design"]);
|
|
56
65
|
|
|
@@ -84,6 +93,8 @@ export function RecurringDatePickerInput({
|
|
|
84
93
|
byWeekDay,
|
|
85
94
|
});
|
|
86
95
|
|
|
96
|
+
const validator = useWorkHoursValidation(byWeekDay, workHours, timeZone);
|
|
97
|
+
|
|
87
98
|
const onSubmit = (nextState: RecurringDatePickerInputValues) => {
|
|
88
99
|
const end = getDateTimeObject(endDate, endTime || "23:59:59");
|
|
89
100
|
|
|
@@ -149,7 +160,7 @@ export function RecurringDatePickerInput({
|
|
|
149
160
|
// Luxon use standard ISO calendar but in that case
|
|
150
161
|
// first weekday from weekdays array start from 0 index.
|
|
151
162
|
// We need to add 1 to it to show correct data
|
|
152
|
-
const currentWeekDay = byWeekDay[0]?.weekday + 1;
|
|
163
|
+
const currentWeekDay = (byWeekDay[0]?.weekday + 1) as WeekdayNumbers;
|
|
153
164
|
|
|
154
165
|
const currentDate = DateTime.local();
|
|
155
166
|
|
|
@@ -188,6 +199,9 @@ export function RecurringDatePickerInput({
|
|
|
188
199
|
<RecurrenceIntervalAndFrequencyInput
|
|
189
200
|
disabled={disabled}
|
|
190
201
|
minDate={minDate}
|
|
202
|
+
startTimeRules={validator}
|
|
203
|
+
endTimeRules={validator}
|
|
204
|
+
timeZone={timeZone}
|
|
191
205
|
/>
|
|
192
206
|
|
|
193
207
|
{children}
|