Skip to content

Commit 585e4e9

Browse files
committed
fix: Use allowPreventDefault and allowStopPropagation config options for esc key (fixes #1079)
1 parent 1a53385 commit 585e4e9

File tree

3 files changed

+19
-6
lines changed

3 files changed

+19
-6
lines changed

src/VueDatePicker/components/Common/SelectionOverlay.vue

+4-3
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@
108108
109109
const props = defineProps<Props>();
110110
111-
const { defaultedAriaLabels, defaultedTextInput, defaultedConfig } = useDefaults(
111+
const { defaultedAriaLabels, defaultedTextInput, defaultedConfig, handleEventPropagation } = useDefaults(
112112
props as unknown as PickerBasePropsType,
113113
);
114114
const { hideNavigationButtons } = useCommon();
@@ -244,9 +244,10 @@
244244
emit('reset-flow');
245245
};
246246
247-
const handleEsc = () => {
247+
const handleEsc = (ev: KeyboardEvent) => {
248248
if (props.escClose) {
249249
toggle();
250+
handleEventPropagation(ev);
250251
}
251252
};
252253
@@ -298,7 +299,7 @@
298299
const onKeyDown = (ev: KeyboardEvent) => {
299300
switch (ev.key) {
300301
case EventKey.esc:
301-
return handleEsc();
302+
return handleEsc(ev);
302303
case EventKey.arrowLeft:
303304
return handleArrowKey(ev);
304305
case EventKey.arrowRight:

src/VueDatePicker/components/DatepickerMenu.vue

+5-3
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,8 @@
195195
196196
const { setMenuFocused, setShiftKey, control } = useState();
197197
const slots = useSlots();
198-
const { defaultedTextInput, defaultedInline, defaultedConfig, defaultedUI } = useDefaults(props);
198+
const { defaultedTextInput, defaultedInline, defaultedConfig, defaultedUI, handleEventPropagation } =
199+
useDefaults(props);
199200
const { isMobile } = useResponsive(defaultedConfig, props.shadow);
200201
201202
const calendarWrapperRef = ref(null);
@@ -318,9 +319,10 @@
318319
checkStopPropagation(ev, defaultedConfig.value, true);
319320
};
320321
321-
const handleEsc = (): void => {
322+
const handleEsc = (ev: KeyboardEvent): void => {
322323
if (props.escClose) {
323324
emit('close-picker');
325+
handleEventPropagation(ev);
324326
}
325327
};
326328
@@ -418,7 +420,7 @@
418420
419421
switch (ev.key) {
420422
case EventKey.esc:
421-
return handleEsc();
423+
return handleEsc(ev);
422424
case EventKey.arrowLeft:
423425
return onArrowKey(ev, ArrowDirection.left);
424426
case EventKey.arrowRight:

src/VueDatePicker/composables/defaults.ts

+10
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,15 @@ export const useDefaults = (props: AllPropsType | PickerBasePropsType) => {
101101

102102
const defaultedUI = computed(() => getDefaultUI(props.ui));
103103

104+
const handleEventPropagation = (ev: KeyboardEvent) => {
105+
if (defaultedConfig.value.allowStopPropagation) {
106+
ev.stopPropagation();
107+
}
108+
if (defaultedConfig.value.allowPreventDefault) {
109+
ev.preventDefault();
110+
}
111+
};
112+
104113
return {
105114
defaultedTransitions,
106115
defaultedMultiCalendars,
@@ -121,5 +130,6 @@ export const useDefaults = (props: AllPropsType | PickerBasePropsType) => {
121130
defaultedUI,
122131
getDefaultPattern,
123132
getDefaultStartTime,
133+
handleEventPropagation,
124134
};
125135
};

0 commit comments

Comments
 (0)