diff --git a/src/popover/Popover.tsx b/src/popover/Popover.tsx index ac2c03e0d..dac244f19 100644 --- a/src/popover/Popover.tsx +++ b/src/popover/Popover.tsx @@ -85,6 +85,10 @@ export default defineComponent({ type: Boolean, default: true, }, + closeOnClickOutside: { + type: Boolean, + default: true, + }, }, emits: ['select', 'touchstart', 'update:show'], @@ -158,7 +162,10 @@ export default defineComponent({ }; const onClickAway = () => { - if (!props.overlay || props.closeOnClickOverlay) { + if ( + props.closeOnClickOutside && + (!props.overlay || props.closeOnClickOverlay) + ) { updateShow(false); } }; diff --git a/src/popover/test/index.spec.tsx b/src/popover/test/index.spec.tsx index 3a9701b0b..7f41d2f19 100644 --- a/src/popover/test/index.spec.tsx +++ b/src/popover/test/index.spec.tsx @@ -175,3 +175,15 @@ test('should not close Popover when overlay is clicked and close-on-click-overla trigger(overlay, 'touchstart'); expect(wrapper.emitted('update:show')).toBeFalsy(); }); + +test('should not close Popover when outside is clicked and close-on-click-outside is false', () => { + const wrapper = mount(Popover, { + props: { + show: true, + closeOnClickOutside: false, + }, + }); + + trigger(document.body, 'touchstart'); + expect(wrapper.emitted('update:show')).toBeFalsy(); +}); diff --git a/src/utils/deep-clone.ts b/src/utils/deep-clone.ts index bc2b88e2d..f5cdff87d 100644 --- a/src/utils/deep-clone.ts +++ b/src/utils/deep-clone.ts @@ -1,6 +1,8 @@ -import {isDef} from "./base"; +import { isDef } from './base'; -export function deepClone | null | undefined>(obj: T): T { +export function deepClone | null | undefined>( + obj: T +): T { if (!isDef(obj)) { return obj; }