@@ -3,10 +3,20 @@ import DefaultSwal, {
3
3
type SweetAlertResult ,
4
4
} from "sweetalert2/dist/sweetalert2.js" ;
5
5
6
- import type { iPluginOptions , tSwal } from "@open-xamu-co/ui-common-types" ;
6
+ import type { iPluginOptions , tSwal , tSwalOptions } from "@open-xamu-co/ui-common-types" ;
7
7
8
8
import useI18n from "./i18n.js" ;
9
9
10
+ function getTarget ( possibleTarget ?: tSwalOptions [ "target" ] ) : string | HTMLElement {
11
+ if ( possibleTarget instanceof Event ) {
12
+ const dialog = ( possibleTarget ?. target as HTMLElement ) ?. closest ( "dialog" ) ;
13
+
14
+ if ( dialog ) return dialog ;
15
+ }
16
+
17
+ return "body" ;
18
+ }
19
+
10
20
/**
11
21
* Swal composable
12
22
*
@@ -18,63 +28,83 @@ import useI18n from "./i18n.js";
18
28
export default function useSwal ( options : iPluginOptions = { } , overrides : SweetAlertOptions = { } ) {
19
29
const { t } = useI18n ( options ) ;
20
30
const { swal } = options ;
21
- const swalDefaults : SweetAlertOptions = {
22
- timer : 1700 ,
23
- showConfirmButton : false ,
24
- heightAuto : false ,
25
- reverseButtons : true ,
26
- buttonsStyling : false ,
27
- cancelButtonText : t ( "swal.cancel" ) ,
28
- allowOutsideClick : ( ) => ! Swal . isLoading ( ) ,
29
- allowEscapeKey : ( ) => ! Swal . isLoading ( ) ,
30
- customClass : {
31
- confirmButton : "bttn" ,
32
- cancelButton : "bttnToggle" ,
33
- denyButton : "link" ,
31
+
32
+ const swalDefaults : SweetAlertOptions = Object . assign (
33
+ {
34
+ timer : 1700 ,
35
+ showConfirmButton : false ,
36
+ heightAuto : false ,
37
+ reverseButtons : true ,
38
+ buttonsStyling : false ,
39
+ cancelButtonText : t ( "swal.cancel" ) ,
40
+ allowOutsideClick : ( ) => ! Swal . isLoading ( ) ,
41
+ allowEscapeKey : ( ) => ! Swal . isLoading ( ) ,
42
+ customClass : {
43
+ confirmButton : "bttn" ,
44
+ cancelButton : "bttnToggle" ,
45
+ denyButton : "link" ,
46
+ } ,
34
47
} ,
35
- } ;
36
- const swalDefaultsOverrides : SweetAlertOptions = Object . assign (
37
- { } ,
38
- swalDefaults ,
39
48
swal ?. overrides ,
40
49
overrides
41
50
) ;
42
- const Swal = < tSwal > DefaultSwal . mixin ( swalDefaultsOverrides ) ;
43
- const swalFirePreventDefaults : SweetAlertOptions = {
44
- icon : "warning" ,
45
- timer : undefined ,
46
- showCancelButton : true ,
47
- showConfirmButton : true ,
48
- confirmButtonText : t ( "swal.continue" ) ,
49
- allowOutsideClick : ( ) => ! Swal . isLoading ( ) ,
50
- allowEscapeKey : ( ) => ! Swal . isLoading ( ) ,
51
- customClass : {
52
- confirmButton : [ "bttn" , "--tm-danger-light" ] ,
53
- cancelButton : "bttnToggle" ,
54
- denyButton : "link" ,
51
+ const swalPreventDefaults : SweetAlertOptions = Object . assign (
52
+ { } ,
53
+ swalDefaults ,
54
+ {
55
+ icon : "warning" ,
56
+ timer : undefined ,
57
+ showCancelButton : true ,
58
+ showConfirmButton : true ,
59
+ confirmButtonText : t ( "swal.continue" ) ,
60
+ allowOutsideClick : ( ) => ! Swal . isLoading ( ) ,
61
+ allowEscapeKey : ( ) => ! Swal . isLoading ( ) ,
62
+ customClass : {
63
+ confirmButton : [ "bttn" , "--tm-danger-light" ] ,
64
+ cancelButton : "bttnToggle" ,
65
+ denyButton : "link" ,
66
+ } ,
55
67
} ,
68
+ swal ?. preventOverrides
69
+ ) ;
70
+ const swalLoaderDefaults : SweetAlertOptions = Object . assign (
71
+ { } ,
72
+ swalDefaults ,
73
+ {
74
+ title : t ( "loading" ) ,
75
+ text : t ( "swal.dont_close_window" ) ,
76
+ timer : undefined ,
77
+ willOpen : ( ) => Swal . showLoading ( ) ,
78
+ allowOutsideClick : ( ) => ! Swal . isLoading ( ) ,
79
+ allowEscapeKey : ( ) => ! Swal . isLoading ( ) ,
80
+ } ,
81
+ swal ?. loaderOverrides
82
+ ) ;
83
+
84
+ const Swal = < tSwal > DefaultSwal . mixin ( { } ) ;
85
+
86
+ Swal . fire = function < T > ( swalOverrides : tSwalOptions = { } ) {
87
+ const overrides : SweetAlertOptions = Object . assign ( { } , swalDefaults , swalOverrides ) ;
88
+
89
+ overrides . target = getTarget ( overrides . target ) ;
90
+
91
+ return < Promise < SweetAlertResult < Awaited < T > > > > DefaultSwal . fire ( overrides ) ;
56
92
} ;
57
- const swalFireLoaderDefaults : SweetAlertOptions = {
58
- title : t ( "loading" ) ,
59
- text : t ( "swal.dont_close_window" ) ,
60
- timer : undefined ,
61
- willOpen : ( ) => Swal . showLoading ( ) ,
62
- allowOutsideClick : ( ) => ! Swal . isLoading ( ) ,
63
- allowEscapeKey : ( ) => ! Swal . isLoading ( ) ,
64
- } ;
65
- const swalFirePreventOverrides = { ...swalFirePreventDefaults , ...swal ?. preventOverrides } ;
66
- const swalFireLoaderOverrides = { ...swalFireLoaderDefaults , ...swal ?. loaderOverrides } ;
67
93
68
- Swal . firePrevent = function < T > ( firePreventOverrides : SweetAlertOptions = { } ) {
69
- const overrides = Object . assign ( { } , swalFirePreventOverrides , firePreventOverrides ) ;
94
+ Swal . firePrevent = function < T > ( swalPreventOverrides : tSwalOptions = { } ) {
95
+ const overrides = Object . assign ( { } , swalPreventDefaults , swalPreventOverrides ) ;
70
96
71
- return < Promise < SweetAlertResult < Awaited < T > > > > Swal . fire ( overrides ) ;
97
+ overrides . target = getTarget ( overrides . target ) ;
98
+
99
+ return < Promise < SweetAlertResult < Awaited < T > > > > DefaultSwal . fire ( overrides ) ;
72
100
} ;
73
101
74
- Swal . fireLoader = function < T > ( fireLoaderOverrides : SweetAlertOptions = { } ) {
75
- const overrides = Object . assign ( { } , swalFireLoaderOverrides , fireLoaderOverrides ) ;
102
+ Swal . fireLoader = function < T > ( swalLoaderOverrides : tSwalOptions = { } ) {
103
+ const overrides = Object . assign ( { } , swalLoaderDefaults , swalLoaderOverrides ) ;
104
+
105
+ overrides . target = getTarget ( overrides . target ) ;
76
106
77
- return < Promise < SweetAlertResult < Awaited < T > > > > Swal . fire ( overrides ) ;
107
+ return < Promise < SweetAlertResult < Awaited < T > > > > DefaultSwal . fire ( overrides ) ;
78
108
} ;
79
109
80
110
return Swal ;
0 commit comments