@@ -63,24 +63,31 @@ import { Modal } from 'flowbite';
6363const modalEl = ref (null );
6464const modal: Ref <Modal | null > = ref (null );
6565
66- const props = defineProps ({
67- header: {
68- type: String ,
69- default: ' ' ,
70- },
71- headerCloseButton: {
72- type: Boolean ,
73- default: true ,
74- },
75- buttons: {
76- type: Array ,
77- default : () => [{ label: ' Close' , onclick : (dialog ) => dialog .hide (), type: ' ' }],
78- },
79- clickToCloseOutside: {
80- type: Boolean ,
81- default: true ,
82- },
83- });
66+ interface DialogButton {
67+ label: string
68+ onclick: (dialog : any ) => void
69+ type? : string
70+ }
71+
72+ interface DialogProps {
73+ header? : string
74+ headerCloseButton? : boolean
75+ buttons? : DialogButton []
76+ clickToCloseOutside? : boolean
77+ beforeCloseFunction? : (() => void | Promise <void >) | null
78+ beforeOpenFunction? : (() => void | Promise <void >) | null
79+ }
80+
81+ const props = withDefaults (defineProps <DialogProps >(), {
82+ header: ' ' ,
83+ headerCloseButton: true ,
84+ buttons : () => [
85+ { label: ' Close' , onclick : (dialog : any ) => dialog .hide (), type: ' ' },
86+ ],
87+ clickToCloseOutside: true ,
88+ beforeCloseFunction: null ,
89+ beforeOpenFunction: null ,
90+ })
8491
8592onMounted (async () => {
8693 // await one tick when all is mounted
@@ -89,7 +96,17 @@ onMounted(async () => {
8996 modalEl .value ,
9097 {
9198 backdrop: props .clickToCloseOutside ? ' dynamic' : ' static' ,
92- },
99+ onHide : async () => {
100+ if (props .beforeCloseFunction ) {
101+ await props .beforeCloseFunction ();
102+ }
103+ },
104+ onShow : async () => {
105+ if (props .beforeOpenFunction ) {
106+ await props .beforeOpenFunction ();
107+ }
108+ },
109+ }
93110 );
94111})
95112
0 commit comments