@licklist/design 0.72.6 → 0.72.7
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/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 +22 -4
- package/dist/events/edit-event-modal/utils/checkIfEventBooked.d.ts +5 -0
- package/dist/events/edit-event-modal/utils/checkIfEventBooked.d.ts.map +1 -0
- package/dist/events/edit-event-modal/utils/checkIfEventBooked.js +27 -0
- package/dist/events/edit-recurrent-event-modal/EditRecurrentEventModal.d.ts +6 -1
- package/dist/events/edit-recurrent-event-modal/EditRecurrentEventModal.d.ts.map +1 -1
- package/dist/events/edit-recurrent-event-modal/EditRecurrentEventModal.js +13 -4
- package/package.json +1 -1
- package/src/events/edit-event-modal/component/EditEventForm/EditEventForm.tsx +33 -2
- package/src/events/edit-event-modal/utils/checkIfEventBooked.ts +44 -0
- package/src/events/edit-recurrent-event-modal/EditRecurrentEventModal.tsx +37 -9
- package/yarn.lock +6 -6
|
@@ -38,6 +38,7 @@ export interface EditEventFormProps extends HasPermissionProp {
|
|
|
38
38
|
overrideNameError?: string;
|
|
39
39
|
disabledRecurrent?: boolean;
|
|
40
40
|
isCopyCreate?: boolean;
|
|
41
|
+
isBooked?: boolean;
|
|
41
42
|
}
|
|
42
|
-
export declare const EditEventForm: ({ disabled, categories, title, hasPermission, defaultEventValues, serverErrors, onSaveEvent, productSets, createProductSet, setEditProductSetId, isExternalPaymentLinkEnabled, timeZone, eventProductSet, overrideNameError, disabledRecurrent, isCopyCreate, }: EditEventFormProps) => import("react/jsx-runtime").JSX.Element;
|
|
43
|
+
export declare const EditEventForm: ({ disabled, categories, title, hasPermission, defaultEventValues, serverErrors, onSaveEvent, productSets, createProductSet, setEditProductSetId, isExternalPaymentLinkEnabled, timeZone, eventProductSet, overrideNameError, disabledRecurrent, isCopyCreate, isBooked, }: EditEventFormProps) => import("react/jsx-runtime").JSX.Element;
|
|
43
44
|
//# sourceMappingURL=EditEventForm.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditEventForm.d.ts","sourceRoot":"","sources":["../../../../../src/events/edit-event-modal/component/EditEventForm/EditEventForm.tsx"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,EACN,MAAM,sDAAsD,CAAA;AAO7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oDAAoD,CAAA;AAGtF,OAAO,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAA;AAG3E,OAAO,EAAE,UAAU,EAAE,MAAM,6DAA6D,CAAA;
|
|
1
|
+
{"version":3,"file":"EditEventForm.d.ts","sourceRoot":"","sources":["../../../../../src/events/edit-event-modal/component/EditEventForm/EditEventForm.tsx"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,EACN,MAAM,sDAAsD,CAAA;AAO7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oDAAoD,CAAA;AAGtF,OAAO,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAA;AAG3E,OAAO,EAAE,UAAU,EAAE,MAAM,6DAA6D,CAAA;AAExF,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAS5D,OAAO,EAAiB,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAGxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAA;AAKlF,MAAM,WAAW,mBAAoB,SAAQ,mBAAmB;IAC9D,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAA;IACzB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAA;IACtB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,gBAAgB,CAAC,EAAE,oBAAoB,CAAA;CACxC;AAED,MAAM,WAAW,kBAAmB,SAAQ,iBAAiB;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,EAAE,aAAa,EAAE,CAAA;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,kBAAkB,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAA;IACjD,YAAY,CAAC,EAAE,WAAW,CAAA;IAC1B,WAAW,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAA;IAClD,WAAW,CAAC,EAAE,UAAU,EAAE,GAAG,IAAI,CAAA;IACjC,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,gBAAgB,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAA;IACtD,mBAAmB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAC5C,4BAA4B,CAAC,EAAE,OAAO,CAAA;IACtC,QAAQ,EAAE,MAAM,CAAA;IAChB,eAAe,CAAC,EAAE,UAAU,CAAA;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAOD,eAAO,MAAM,aAAa,8QAkBvB,kBAAkB,4CAiYpB,CAAA"}
|
|
@@ -11,6 +11,9 @@ import { useMultipleImages } from '@licklist/plugins/dist/hooks/Media/useMultipl
|
|
|
11
11
|
import FormErrorService from '@licklist/plugins/dist/services/Form/FormErrorService';
|
|
12
12
|
import { scrollToError } from '@licklist/plugins/dist/utils/ScrollUtils';
|
|
13
13
|
import { getFirstErrorKey } from '@licklist/plugins/dist/utils/FormValues';
|
|
14
|
+
import { ConfirmModal } from '../../../../modals/confirmation/ConfirmModal.js';
|
|
15
|
+
import { Dialog } from '../../../../modals/dialog/Dialog.js';
|
|
16
|
+
import { useDialogContext } from '../../../../modals/dialog/DialogContext.js';
|
|
14
17
|
import { SaleDeadline } from '../SaleDeadline/SaleDeadline.js';
|
|
15
18
|
import { CategoriesInput } from '../../../../provider/categories-input/CategoriesInput.js';
|
|
16
19
|
import { CategoriesInputDescription } from '../../../../provider/categories-input/CategoriesInputDescription.js';
|
|
@@ -33,9 +36,8 @@ import { TipTapEditor } from '../../../../tiptap-editor/TipTapEditor.js';
|
|
|
33
36
|
import { FileUpload } from '../../../../file-upload/FileUpload.js';
|
|
34
37
|
import { IntervalInput } from '../../IntervalInput.js';
|
|
35
38
|
import { SelectEventProductSet } from '../SelectEventProductSet/SelectEventProductSet.js';
|
|
36
|
-
import { Dialog } from '../../../../modals/dialog/Dialog.js';
|
|
37
|
-
import { useDialogContext } from '../../../../modals/dialog/DialogContext.js';
|
|
38
39
|
import { isUrlValid } from '../../utils/isUrlValid.js';
|
|
40
|
+
import { toSimpleDateTime } from '../../utils/checkIfEventBooked.js';
|
|
39
41
|
|
|
40
42
|
/* eslint-disable react-hooks/exhaustive-deps */ function _array_like_to_array(arr, len) {
|
|
41
43
|
if (len == null || len > arr.length) len = arr.length;
|
|
@@ -140,7 +142,7 @@ var eventImageTypes = {
|
|
|
140
142
|
uploadCover: IMAGE_TYPE_MAP[IMAGE_TYPE_COVER]
|
|
141
143
|
};
|
|
142
144
|
var EditEventForm = function(param) {
|
|
143
|
-
var _param_disabled = param.disabled, disabled = _param_disabled === void 0 ? false : _param_disabled, categories = param.categories, title = param.title, _param_hasPermission = param.hasPermission, hasPermission = _param_hasPermission === void 0 ? true : _param_hasPermission, defaultEventValues = param.defaultEventValues, serverErrors = param.serverErrors, onSaveEvent = param.onSaveEvent, productSets = param.productSets, createProductSet = param.createProductSet, setEditProductSetId = param.setEditProductSetId, isExternalPaymentLinkEnabled = param.isExternalPaymentLinkEnabled, timeZone = param.timeZone, eventProductSet = param.eventProductSet, overrideNameError = param.overrideNameError, _param_disabledRecurrent = param.disabledRecurrent, disabledRecurrent = _param_disabledRecurrent === void 0 ? false : _param_disabledRecurrent, _param_isCopyCreate = param.isCopyCreate, isCopyCreate = _param_isCopyCreate === void 0 ? false : _param_isCopyCreate;
|
|
145
|
+
var _param_disabled = param.disabled, disabled = _param_disabled === void 0 ? false : _param_disabled, categories = param.categories, title = param.title, _param_hasPermission = param.hasPermission, hasPermission = _param_hasPermission === void 0 ? true : _param_hasPermission, defaultEventValues = param.defaultEventValues, serverErrors = param.serverErrors, onSaveEvent = param.onSaveEvent, productSets = param.productSets, createProductSet = param.createProductSet, setEditProductSetId = param.setEditProductSetId, isExternalPaymentLinkEnabled = param.isExternalPaymentLinkEnabled, timeZone = param.timeZone, eventProductSet = param.eventProductSet, overrideNameError = param.overrideNameError, _param_disabledRecurrent = param.disabledRecurrent, disabledRecurrent = _param_disabledRecurrent === void 0 ? false : _param_disabledRecurrent, _param_isCopyCreate = param.isCopyCreate, isCopyCreate = _param_isCopyCreate === void 0 ? false : _param_isCopyCreate, _param_isBooked = param.isBooked, isBooked = _param_isBooked === void 0 ? false : _param_isBooked;
|
|
144
146
|
var _defaultEventValues_rrule, _defaultEventValues_rrule1, _errors_name, _errors_externalPaymentLink, _errors_integrationUrl;
|
|
145
147
|
var t = useTranslation([
|
|
146
148
|
'Design',
|
|
@@ -221,6 +223,8 @@ var EditEventForm = function(param) {
|
|
|
221
223
|
rrule
|
|
222
224
|
]);
|
|
223
225
|
var isChanged = !isEqual(watchedValues, sanitizeDefaultValues(defaultEventValues));
|
|
226
|
+
var isChangedTime = (watchedValues === null || watchedValues === void 0 ? void 0 : watchedValues.start) !== toSimpleDateTime((defaultEventValues === null || defaultEventValues === void 0 ? void 0 : defaultEventValues.startAt) || '') || (watchedValues === null || watchedValues === void 0 ? void 0 : watchedValues.end) !== toSimpleDateTime((defaultEventValues === null || defaultEventValues === void 0 ? void 0 : defaultEventValues.endAt) || '');
|
|
227
|
+
var isSinglEventWithBooked = !rrule && isBooked && isChangedTime;
|
|
224
228
|
return /*#__PURE__*/ jsxs(Fragment, {
|
|
225
229
|
children: [
|
|
226
230
|
/*#__PURE__*/ jsx(Dialog, {
|
|
@@ -484,7 +488,21 @@ var EditEventForm = function(param) {
|
|
|
484
488
|
eventProductSet: eventProductSet,
|
|
485
489
|
overrideNameError: overrideNameError
|
|
486
490
|
}),
|
|
487
|
-
|
|
491
|
+
isSinglEventWithBooked && /*#__PURE__*/ jsx(ConfirmModal, {
|
|
492
|
+
content: t('App:confirmChangeEventDate'),
|
|
493
|
+
children: function(confirm) {
|
|
494
|
+
return /*#__PURE__*/ jsx(Button, {
|
|
495
|
+
disabled: disabled || formState.isSubmitting || !isChanged || isImagesLoading || isCoverImagesLoading,
|
|
496
|
+
className: "save-event",
|
|
497
|
+
type: "button",
|
|
498
|
+
onClick: function() {
|
|
499
|
+
return confirm(handleSubmit(onSaveEvent, onErrorSubmit));
|
|
500
|
+
},
|
|
501
|
+
children: formState.isSubmitting ? "".concat(t('saveAndAdd'), "...") : t('saveAndAdd')
|
|
502
|
+
});
|
|
503
|
+
}
|
|
504
|
+
}),
|
|
505
|
+
hasPermission && !showEditProductSet && !isSinglEventWithBooked && /*#__PURE__*/ jsx(Button, {
|
|
488
506
|
disabled: disabled || formState.isSubmitting || !isChanged || isImagesLoading || isCoverImagesLoading,
|
|
489
507
|
className: "save-event",
|
|
490
508
|
type: "submit",
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { EventWithMetadata } from '@licklist/plugins';
|
|
2
|
+
import { RecurrentEventMode } from 'src/events/edit-recurrent-event-modal';
|
|
3
|
+
export declare const checkIfEventIsBooked: (event?: EventWithMetadata, date?: string, activityMode?: RecurrentEventMode) => boolean;
|
|
4
|
+
export declare const toSimpleDateTime: (dateTime: string) => string;
|
|
5
|
+
//# sourceMappingURL=checkIfEventBooked.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkIfEventBooked.d.ts","sourceRoot":"","sources":["../../../../src/events/edit-event-modal/utils/checkIfEventBooked.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAErD,OAAO,EAGL,kBAAkB,EACnB,MAAM,uCAAuC,CAAA;AAE9C,eAAO,MAAM,oBAAoB,WACvB,iBAAiB,SAClB,MAAM,iBACE,kBAAkB,YAsBlC,CAAA;AAGD,eAAO,MAAM,gBAAgB,aAAc,MAAM,WAM7C,CAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { DATE_FORMAT, DATE_TIME_FULL_FORMAT } from '@licklist/core/dist/Config';
|
|
2
|
+
import { DateTime } from 'luxon';
|
|
3
|
+
import { MODE_ALL_EVENTS, MODE_THIS_AND_FOLLOWING_EVENTS } from '../../edit-recurrent-event-modal/EditRecurrentEventModal.js';
|
|
4
|
+
|
|
5
|
+
var checkIfEventIsBooked = function(event, date, activityMode) {
|
|
6
|
+
var _event_eventStatistic, _Object_keys;
|
|
7
|
+
if (!event || !date) return false;
|
|
8
|
+
var productCategorySummary = event === null || event === void 0 ? void 0 : (_event_eventStatistic = event.eventStatistic) === null || _event_eventStatistic === void 0 ? void 0 : _event_eventStatistic.productCategorySummary;
|
|
9
|
+
if (!productCategorySummary) return false;
|
|
10
|
+
var summaryFormattedDate = DateTime.fromISO(date).toUTC().toFormat(DATE_FORMAT);
|
|
11
|
+
var summaryDays = (_Object_keys = Object.keys(productCategorySummary)) === null || _Object_keys === void 0 ? void 0 : _Object_keys.map(function(date) {
|
|
12
|
+
return DateTime.fromFormat(date, DATE_TIME_FULL_FORMAT).toFormat(DATE_FORMAT);
|
|
13
|
+
});
|
|
14
|
+
if (activityMode && (activityMode === MODE_ALL_EVENTS || activityMode === MODE_THIS_AND_FOLLOWING_EVENTS)) {
|
|
15
|
+
return !!summaryDays.length;
|
|
16
|
+
}
|
|
17
|
+
return summaryDays.includes(summaryFormattedDate);
|
|
18
|
+
};
|
|
19
|
+
var toSimpleDateTime = function(dateTime) {
|
|
20
|
+
return dateTime && DateTime.fromISO(dateTime).toISO({
|
|
21
|
+
includeOffset: false,
|
|
22
|
+
suppressMilliseconds: true,
|
|
23
|
+
suppressSeconds: true
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export { checkIfEventIsBooked, toSimpleDateTime };
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { EventWithMetadata } from '@licklist/plugins';
|
|
1
2
|
export declare const MODE_THIS_EVENT = "thisEvent";
|
|
2
3
|
export declare const MODE_THIS_AND_FOLLOWING_EVENTS = "thisAndFollowingEvents";
|
|
3
4
|
export declare const MODE_ALL_EVENTS = "allEvents";
|
|
@@ -22,7 +23,11 @@ export type EditRecurrentEventModalProps = {
|
|
|
22
23
|
title: string;
|
|
23
24
|
onSubmit: (values: EditRecurrentEventModalValues) => void;
|
|
24
25
|
isDateWasChanged?: boolean;
|
|
26
|
+
isChangeDateOrTime?: boolean;
|
|
27
|
+
event?: EventWithMetadata;
|
|
28
|
+
date?: string;
|
|
29
|
+
isRemoveModal?: boolean;
|
|
25
30
|
};
|
|
26
|
-
export declare const EditRecurrentEventModal: ({ disabled, isOpen, onHide, title, onSubmit, isDateWasChanged }: EditRecurrentEventModalProps) => import("react/jsx-runtime").JSX.Element;
|
|
31
|
+
export declare const EditRecurrentEventModal: ({ disabled, isOpen, onHide, title, onSubmit, isDateWasChanged, isChangeDateOrTime, event, date, isRemoveModal, }: EditRecurrentEventModalProps) => import("react/jsx-runtime").JSX.Element;
|
|
27
32
|
export {};
|
|
28
33
|
//# sourceMappingURL=EditRecurrentEventModal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditRecurrentEventModal.d.ts","sourceRoot":"","sources":["../../../src/events/edit-recurrent-event-modal/EditRecurrentEventModal.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"EditRecurrentEventModal.d.ts","sourceRoot":"","sources":["../../../src/events/edit-recurrent-event-modal/EditRecurrentEventModal.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAGrD,eAAO,MAAM,eAAe,cAAc,CAAA;AAC1C,eAAO,MAAM,8BAA8B,2BAA2B,CAAA;AACtE,eAAO,MAAM,eAAe,cAAc,CAAA;AAE1C,QAAA,MAAM,KAAK,+DAID,CAAA;AAEV,eAAO,MAAM,2BAA2B,cAAkB,CAAA;AAE1D,eAAO,MAAM,yBAAyB;;;;CAIrC,CAAA;AAED,eAAO,MAAM,gCAAgC;;CAE5C,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,CAAA;AAEvD,MAAM,MAAM,6BAA6B,GAAG;IAC1C,IAAI,EAAE,kBAAkB,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,4BAA4B,GAAG;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,CAAC,MAAM,EAAE,6BAA6B,KAAK,IAAI,CAAA;IACzD,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,KAAK,CAAC,EAAE,iBAAiB,CAAA;IACzB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB,CAAA;AAED,eAAO,MAAM,uBAAuB,qHAWjC,4BAA4B,4CAoG9B,CAAA"}
|
|
@@ -3,6 +3,7 @@ import { Modal, Form, Button } from 'react-bootstrap';
|
|
|
3
3
|
import { useTranslation } from 'react-i18next';
|
|
4
4
|
import { useForm, Controller } from 'react-hook-form';
|
|
5
5
|
import { FaTimes } from 'react-icons/fa';
|
|
6
|
+
import { checkIfEventIsBooked } from '../edit-event-modal/utils/checkIfEventBooked.js';
|
|
6
7
|
|
|
7
8
|
function _define_property(obj, key, value) {
|
|
8
9
|
if (key in obj) {
|
|
@@ -25,14 +26,17 @@ var _obj;
|
|
|
25
26
|
var RECURRENT_MODE_TYPES_LIST = (_obj = {}, _define_property(_obj, MODE_THIS_EVENT, 1), _define_property(_obj, MODE_THIS_AND_FOLLOWING_EVENTS, 2), _define_property(_obj, MODE_ALL_EVENTS, 3), _obj);
|
|
26
27
|
var RECURRENT_MODE_TYPES_WITHOUT_ALL = _define_property({}, MODE_THIS_EVENT, 1);
|
|
27
28
|
var EditRecurrentEventModal = function(param) {
|
|
28
|
-
var disabled = param.disabled, isOpen = param.isOpen, onHide = param.onHide, title = param.title, onSubmit = param.onSubmit, _param_isDateWasChanged = param.isDateWasChanged, isDateWasChanged = _param_isDateWasChanged === void 0 ? false : _param_isDateWasChanged;
|
|
29
|
+
var disabled = param.disabled, isOpen = param.isOpen, onHide = param.onHide, title = param.title, onSubmit = param.onSubmit, _param_isDateWasChanged = param.isDateWasChanged, isDateWasChanged = _param_isDateWasChanged === void 0 ? false : _param_isDateWasChanged, _param_isChangeDateOrTime = param.isChangeDateOrTime, isChangeDateOrTime = _param_isChangeDateOrTime === void 0 ? false : _param_isChangeDateOrTime, event = param.event, date = param.date, _param_isRemoveModal = param.isRemoveModal, isRemoveModal = _param_isRemoveModal === void 0 ? false : _param_isRemoveModal;
|
|
29
30
|
var t = useTranslation('Design').t;
|
|
30
31
|
var _useForm = useForm({
|
|
31
32
|
defaultValues: {
|
|
32
33
|
mode: DEFAULT_RECURRENT_MODE_TYPE
|
|
33
34
|
}
|
|
34
|
-
}), control = _useForm.control, handleSubmit = _useForm.handleSubmit;
|
|
35
|
+
}), control = _useForm.control, watch = _useForm.watch, handleSubmit = _useForm.handleSubmit;
|
|
36
|
+
var activityMode = watch('mode');
|
|
37
|
+
var isBooked = checkIfEventIsBooked(event, date, activityMode);
|
|
35
38
|
var recurrentListMode = isDateWasChanged ? RECURRENT_MODE_TYPES_WITHOUT_ALL : RECURRENT_MODE_TYPES_LIST;
|
|
39
|
+
var confirmDescription = isChangeDateOrTime && isBooked || isBooked && isRemoveModal;
|
|
36
40
|
return /*#__PURE__*/ jsx(Modal, {
|
|
37
41
|
show: isOpen,
|
|
38
42
|
onHide: onHide,
|
|
@@ -61,6 +65,11 @@ var EditRecurrentEventModal = function(param) {
|
|
|
61
65
|
})
|
|
62
66
|
]
|
|
63
67
|
}),
|
|
68
|
+
confirmDescription && /*#__PURE__*/ jsx(Modal.Dialog, {
|
|
69
|
+
className: "pl-4",
|
|
70
|
+
contentClassName: "border-0",
|
|
71
|
+
children: t(isRemoveModal ? 'App:confirmRemoveEventWithBooking' : 'App:confirmChangeEventDate')
|
|
72
|
+
}),
|
|
64
73
|
/*#__PURE__*/ jsx(Modal.Body, {
|
|
65
74
|
className: "p-0 ml-4",
|
|
66
75
|
children: /*#__PURE__*/ jsx(Form.Group, {
|
|
@@ -106,14 +115,14 @@ var EditRecurrentEventModal = function(param) {
|
|
|
106
115
|
onClick: onHide,
|
|
107
116
|
className: "text-decoration-none",
|
|
108
117
|
disabled: disabled,
|
|
109
|
-
children: t('cancel')
|
|
118
|
+
children: t(confirmDescription ? 'App:cancelChangeDate' : 'cancel')
|
|
110
119
|
}),
|
|
111
120
|
/*#__PURE__*/ jsx(Button, {
|
|
112
121
|
variant: "success",
|
|
113
122
|
type: "submit",
|
|
114
123
|
className: "text-decoration-none",
|
|
115
124
|
disabled: disabled,
|
|
116
|
-
children: t('
|
|
125
|
+
children: t(confirmDescription ? 'App:saveChangeDate' : 'OK')
|
|
117
126
|
})
|
|
118
127
|
]
|
|
119
128
|
})
|
package/package.json
CHANGED
|
@@ -19,6 +19,7 @@ import { ServerError } from '@licklist/plugins/dist/hooks/Api/useHttpQuery'
|
|
|
19
19
|
import { scrollToError } from '@licklist/plugins/dist/utils/ScrollUtils'
|
|
20
20
|
import { getFirstErrorKey } from '@licklist/plugins/dist/utils/FormValues'
|
|
21
21
|
import { ProductSet } from '@licklist/core/dist/DataMapper/Product/ProductSetDataMapper'
|
|
22
|
+
import { ConfirmModal } from 'src/modals'
|
|
22
23
|
import { CategoryGroup } from '../../../../types/categories'
|
|
23
24
|
import { SaleDeadline } from '../SaleDeadline/SaleDeadline'
|
|
24
25
|
import {
|
|
@@ -33,6 +34,8 @@ import { SelectEventProductSet } from '../SelectEventProductSet'
|
|
|
33
34
|
import { Dialog, useDialogContext } from '../../../../modals/dialog'
|
|
34
35
|
import { ProductSetFormValues } from '../../../../product-set/form/ProductSetForm'
|
|
35
36
|
import { isUrlValid } from '../../utils/isUrlValid'
|
|
37
|
+
import { toSimpleDateTime } from '../../utils/checkIfEventBooked'
|
|
38
|
+
|
|
36
39
|
|
|
37
40
|
export interface EditEventFormValues extends IntervalInputValues {
|
|
38
41
|
name: string
|
|
@@ -68,6 +71,7 @@ export interface EditEventFormProps extends HasPermissionProp {
|
|
|
68
71
|
overrideNameError?: string
|
|
69
72
|
disabledRecurrent?: boolean
|
|
70
73
|
isCopyCreate?: boolean
|
|
74
|
+
isBooked?: boolean
|
|
71
75
|
}
|
|
72
76
|
|
|
73
77
|
const eventImageTypes = {
|
|
@@ -92,6 +96,7 @@ export const EditEventForm = ({
|
|
|
92
96
|
overrideNameError,
|
|
93
97
|
disabledRecurrent = false,
|
|
94
98
|
isCopyCreate = false,
|
|
99
|
+
isBooked = false,
|
|
95
100
|
}: EditEventFormProps) => {
|
|
96
101
|
const { t } = useTranslation(['Design', 'Validation'])
|
|
97
102
|
|
|
@@ -195,8 +200,11 @@ export const EditEventForm = ({
|
|
|
195
200
|
rrule && setValue('rrule', rrule?.concat(`;EXDATE=${defaultExDate}`))
|
|
196
201
|
}, [defaultExDate, rrule])
|
|
197
202
|
|
|
198
|
-
|
|
199
203
|
const isChanged = !isEqual(watchedValues, sanitizeDefaultValues(defaultEventValues));
|
|
204
|
+
const isChangedTime =
|
|
205
|
+
watchedValues?.start !== toSimpleDateTime(defaultEventValues?.startAt || '') ||
|
|
206
|
+
watchedValues?.end !== toSimpleDateTime(defaultEventValues?.endAt || '')
|
|
207
|
+
const isSinglEventWithBooked = !rrule && isBooked && isChangedTime
|
|
200
208
|
|
|
201
209
|
return (
|
|
202
210
|
<>
|
|
@@ -432,7 +440,28 @@ export const EditEventForm = ({
|
|
|
432
440
|
overrideNameError={overrideNameError}
|
|
433
441
|
/>
|
|
434
442
|
|
|
435
|
-
{
|
|
443
|
+
{isSinglEventWithBooked && (
|
|
444
|
+
<ConfirmModal content={t('App:confirmChangeEventDate')}>
|
|
445
|
+
{(confirm) => (
|
|
446
|
+
<Button
|
|
447
|
+
disabled={
|
|
448
|
+
disabled ||
|
|
449
|
+
formState.isSubmitting ||
|
|
450
|
+
!isChanged ||
|
|
451
|
+
isImagesLoading ||
|
|
452
|
+
isCoverImagesLoading
|
|
453
|
+
}
|
|
454
|
+
className='save-event'
|
|
455
|
+
type='button'
|
|
456
|
+
onClick={() => confirm(handleSubmit(onSaveEvent, onErrorSubmit))}
|
|
457
|
+
>
|
|
458
|
+
{formState.isSubmitting ? `${t('saveAndAdd')}...` : t('saveAndAdd')}
|
|
459
|
+
</Button>
|
|
460
|
+
)}
|
|
461
|
+
</ConfirmModal>
|
|
462
|
+
)}
|
|
463
|
+
|
|
464
|
+
{hasPermission && !showEditProductSet && !isSinglEventWithBooked && (
|
|
436
465
|
<Button
|
|
437
466
|
disabled={
|
|
438
467
|
disabled ||
|
|
@@ -490,3 +519,5 @@ const sanitizeDefaultValues = (
|
|
|
490
519
|
recurrenceEndAt: values?.recurrenceEndAt ?? undefined,
|
|
491
520
|
}
|
|
492
521
|
}
|
|
522
|
+
|
|
523
|
+
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { DATE_FORMAT, DATE_TIME_FULL_FORMAT } from '@licklist/core/dist/Config'
|
|
2
|
+
import { EventWithMetadata } from '@licklist/plugins'
|
|
3
|
+
import { DateTime } from 'luxon'
|
|
4
|
+
import {
|
|
5
|
+
MODE_ALL_EVENTS,
|
|
6
|
+
MODE_THIS_AND_FOLLOWING_EVENTS,
|
|
7
|
+
RecurrentEventMode,
|
|
8
|
+
} from 'src/events/edit-recurrent-event-modal'
|
|
9
|
+
|
|
10
|
+
export const checkIfEventIsBooked = (
|
|
11
|
+
event?: EventWithMetadata,
|
|
12
|
+
date?: string,
|
|
13
|
+
activityMode?: RecurrentEventMode,
|
|
14
|
+
) => {
|
|
15
|
+
if (!event || !date) return false
|
|
16
|
+
const productCategorySummary = event?.eventStatistic?.productCategorySummary
|
|
17
|
+
|
|
18
|
+
if (!productCategorySummary) return false
|
|
19
|
+
const summaryFormattedDate = DateTime.fromISO(date)
|
|
20
|
+
.toUTC()
|
|
21
|
+
.toFormat(DATE_FORMAT)
|
|
22
|
+
|
|
23
|
+
const summaryDays = Object.keys(productCategorySummary)?.map((date) =>
|
|
24
|
+
DateTime.fromFormat(date, DATE_TIME_FULL_FORMAT).toFormat(DATE_FORMAT),
|
|
25
|
+
)
|
|
26
|
+
if (
|
|
27
|
+
activityMode &&
|
|
28
|
+
(activityMode === MODE_ALL_EVENTS ||
|
|
29
|
+
activityMode === MODE_THIS_AND_FOLLOWING_EVENTS)
|
|
30
|
+
) {
|
|
31
|
+
return !!summaryDays.length
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return summaryDays.includes(summaryFormattedDate)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
export const toSimpleDateTime = (dateTime: string) =>
|
|
39
|
+
dateTime &&
|
|
40
|
+
DateTime.fromISO(dateTime).toISO({
|
|
41
|
+
includeOffset: false,
|
|
42
|
+
suppressMilliseconds: true,
|
|
43
|
+
suppressSeconds: true,
|
|
44
|
+
})
|
|
@@ -2,6 +2,8 @@ import { Form, Modal, Button } from 'react-bootstrap'
|
|
|
2
2
|
import { useTranslation } from 'react-i18next'
|
|
3
3
|
import { Controller, useForm } from 'react-hook-form'
|
|
4
4
|
import { FaTimes } from 'react-icons/fa'
|
|
5
|
+
import { EventWithMetadata } from '@licklist/plugins'
|
|
6
|
+
import { checkIfEventIsBooked } from '../edit-event-modal/utils/checkIfEventBooked'
|
|
5
7
|
|
|
6
8
|
export const MODE_THIS_EVENT = 'thisEvent'
|
|
7
9
|
export const MODE_THIS_AND_FOLLOWING_EVENTS = 'thisAndFollowingEvents'
|
|
@@ -38,6 +40,10 @@ export type EditRecurrentEventModalProps = {
|
|
|
38
40
|
title: string
|
|
39
41
|
onSubmit: (values: EditRecurrentEventModalValues) => void
|
|
40
42
|
isDateWasChanged?: boolean
|
|
43
|
+
isChangeDateOrTime?: boolean
|
|
44
|
+
event?: EventWithMetadata
|
|
45
|
+
date?: string
|
|
46
|
+
isRemoveModal?: boolean
|
|
41
47
|
}
|
|
42
48
|
|
|
43
49
|
export const EditRecurrentEventModal = ({
|
|
@@ -46,17 +52,30 @@ export const EditRecurrentEventModal = ({
|
|
|
46
52
|
onHide,
|
|
47
53
|
title,
|
|
48
54
|
onSubmit,
|
|
49
|
-
isDateWasChanged = false
|
|
55
|
+
isDateWasChanged = false,
|
|
56
|
+
isChangeDateOrTime = false,
|
|
57
|
+
event,
|
|
58
|
+
date,
|
|
59
|
+
isRemoveModal = false,
|
|
50
60
|
}: EditRecurrentEventModalProps) => {
|
|
51
61
|
const { t } = useTranslation('Design')
|
|
52
62
|
|
|
53
|
-
const { control, handleSubmit } =
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
63
|
+
const { control, watch, handleSubmit } =
|
|
64
|
+
useForm<EditRecurrentEventModalValues>({
|
|
65
|
+
defaultValues: {
|
|
66
|
+
mode: DEFAULT_RECURRENT_MODE_TYPE,
|
|
67
|
+
},
|
|
68
|
+
})
|
|
58
69
|
|
|
59
|
-
const
|
|
70
|
+
const activityMode = watch('mode')
|
|
71
|
+
|
|
72
|
+
const isBooked = checkIfEventIsBooked(event, date, activityMode)
|
|
73
|
+
const recurrentListMode = isDateWasChanged
|
|
74
|
+
? RECURRENT_MODE_TYPES_WITHOUT_ALL
|
|
75
|
+
: RECURRENT_MODE_TYPES_LIST
|
|
76
|
+
|
|
77
|
+
const confirmDescription =
|
|
78
|
+
(isChangeDateOrTime && isBooked) || (isBooked && isRemoveModal)
|
|
60
79
|
|
|
61
80
|
return (
|
|
62
81
|
<Modal
|
|
@@ -78,6 +97,15 @@ export const EditRecurrentEventModal = ({
|
|
|
78
97
|
<FaTimes size={16} />
|
|
79
98
|
</Button>
|
|
80
99
|
</Modal.Header>
|
|
100
|
+
{confirmDescription && (
|
|
101
|
+
<Modal.Dialog className='pl-4' contentClassName='border-0'>
|
|
102
|
+
{t(
|
|
103
|
+
isRemoveModal
|
|
104
|
+
? 'App:confirmRemoveEventWithBooking'
|
|
105
|
+
: 'App:confirmChangeEventDate',
|
|
106
|
+
)}
|
|
107
|
+
</Modal.Dialog>
|
|
108
|
+
)}
|
|
81
109
|
<Modal.Body className='p-0 ml-4'>
|
|
82
110
|
<Form.Group className='m-0'>
|
|
83
111
|
<Controller
|
|
@@ -115,7 +143,7 @@ export const EditRecurrentEventModal = ({
|
|
|
115
143
|
className='text-decoration-none'
|
|
116
144
|
disabled={disabled}
|
|
117
145
|
>
|
|
118
|
-
{t('cancel')}
|
|
146
|
+
{t(confirmDescription ? 'App:cancelChangeDate' : 'cancel')}
|
|
119
147
|
</Button>
|
|
120
148
|
<Button
|
|
121
149
|
variant='success'
|
|
@@ -123,7 +151,7 @@ export const EditRecurrentEventModal = ({
|
|
|
123
151
|
className='text-decoration-none'
|
|
124
152
|
disabled={disabled}
|
|
125
153
|
>
|
|
126
|
-
{t('
|
|
154
|
+
{t(confirmDescription ? 'App:saveChangeDate' : 'OK')}
|
|
127
155
|
</Button>
|
|
128
156
|
</Modal.Footer>
|
|
129
157
|
</Form>
|
package/yarn.lock
CHANGED
|
@@ -8072,9 +8072,9 @@ __metadata:
|
|
|
8072
8072
|
linkType: hard
|
|
8073
8073
|
|
|
8074
8074
|
"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001109, caniuse-lite@npm:^1.0.30001125, caniuse-lite@npm:^1.0.30001646, caniuse-lite@npm:^1.0.30001688":
|
|
8075
|
-
version: 1.0.
|
|
8076
|
-
resolution: "caniuse-lite@npm:1.0.
|
|
8077
|
-
checksum: 10c0/
|
|
8075
|
+
version: 1.0.30001704
|
|
8076
|
+
resolution: "caniuse-lite@npm:1.0.30001704"
|
|
8077
|
+
checksum: 10c0/4efa0ece51ef58e7ce7e7c8cd7b50372bcb910581a47397be5c086c046c3cd436d123b734351fb20f638c322b339198edf89b5b632ff59bdd171c74ff7f4efcf
|
|
8078
8078
|
languageName: node
|
|
8079
8079
|
linkType: hard
|
|
8080
8080
|
|
|
@@ -9861,9 +9861,9 @@ __metadata:
|
|
|
9861
9861
|
linkType: hard
|
|
9862
9862
|
|
|
9863
9863
|
"electron-to-chromium@npm:^1.3.564, electron-to-chromium@npm:^1.5.73":
|
|
9864
|
-
version: 1.5.
|
|
9865
|
-
resolution: "electron-to-chromium@npm:1.5.
|
|
9866
|
-
checksum: 10c0/
|
|
9864
|
+
version: 1.5.116
|
|
9865
|
+
resolution: "electron-to-chromium@npm:1.5.116"
|
|
9866
|
+
checksum: 10c0/27f117cd18b17b6a7c4ddf82db5f5093c0eaa37bab27798f544648bf6408ef7d7c938251b50210eb1fa98d1bcf0a65b4302f926a147896f8a3dea3c0fc9a45f6
|
|
9867
9867
|
languageName: node
|
|
9868
9868
|
linkType: hard
|
|
9869
9869
|
|