@ -36,6 +36,7 @@ const props = withDefaults(defineProps<Props>(), {
appendToMain : false ,
closeIconPlacement : 'right' ,
drawerApi : undefined ,
submitting : false ,
zIndex : 1000 ,
} ) ;
@ -73,6 +74,7 @@ const {
placement ,
showCancelButton ,
showConfirmButton ,
submitting ,
title ,
titleTooltip ,
zIndex ,
@ -91,12 +93,12 @@ watch(
) ;
function interactOutside ( e : Event ) {
if ( ! closeOnClickModal . value ) {
if ( ! closeOnClickModal . value || submitting . value ) {
e . preventDefault ( ) ;
}
}
function escapeKeyDown ( e : KeyboardEvent ) {
if ( ! closeOnPressEscape . value ) {
if ( ! closeOnPressEscape . value || submitting . value ) {
e . preventDefault ( ) ;
}
}
@ -104,7 +106,11 @@ function escapeKeyDown(e: KeyboardEvent) {
function pointerDownOutside ( e : Event ) {
const target = e . target as HTMLElement ;
const dismissableDrawer = target ? . dataset . dismissableDrawer ;
if ( ! closeOnClickModal . value || dismissableDrawer !== id ) {
if (
submitting . value ||
! closeOnClickModal . value ||
dismissableDrawer !== id
) {
e . preventDefault ( ) ;
}
}
@ -169,6 +175,7 @@ const getAppendTo = computed(() => {
< SheetClose
v - if = "closable && closeIconPlacement === 'left'"
as - child
: disabled = "submitting"
class = "data-[state=open]:bg-secondary ml-[2px] cursor-pointer rounded-full opacity-80 transition-opacity hover:opacity-100 focus:outline-none disabled:pointer-events-none"
>
< slot name = "close-icon" >
@ -209,6 +216,7 @@ const getAppendTo = computed(() => {
< SheetClose
v - if = "closable && closeIconPlacement === 'right'"
as - child
: disabled = "submitting"
class = "data-[state=open]:bg-secondary ml-[2px] cursor-pointer rounded-full opacity-80 transition-opacity hover:opacity-100 focus:outline-none disabled:pointer-events-none"
>
< slot name = "close-icon" >
@ -233,7 +241,11 @@ const getAppendTo = computed(() => {
} )
"
>
< VbenLoading v -if = " showLoading " class = "size-full" spinning / >
< VbenLoading
v - if = "showLoading || submitting"
class = "size-full"
spinning
/ >
< slot > < / slot >
< / div >
@ -253,6 +265,7 @@ const getAppendTo = computed(() => {
: is = "components.DefaultButton || VbenButton"
v - if = "showCancelButton"
variant = "ghost"
: disabled = "submitting"
@ click = "() => drawerApi?.onCancel()"
>
< slot name = "cancelText" >
@ -263,7 +276,7 @@ const getAppendTo = computed(() => {
< component
: is = "components.PrimaryButton || VbenButton"
v - if = "showConfirmButton"
: loading = "confirmLoading "
: loading = "confirmLoading || submitting "
@ click = "() => drawerApi?.onConfirm()"
>
< slot name = "confirmText" >