Skip to content

Commit 5aecdc3

Browse files
committed
fix: duplicate backdrops
1 parent 5694c3c commit 5aecdc3

File tree

4 files changed

+27
-27
lines changed

4 files changed

+27
-27
lines changed

demo/src/lib/basic.ts

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,7 @@ import Basic from "./basic.svelte";
55
export const openBasic = (): ModalInstance<CustomBasicProps> => {
66
return manager.open<CustomBasicProps>({
77
component: Basic,
8-
// backdrop: {
9-
// class: "custom-backdrop-class",
10-
// attributes: {
11-
// "data-where-am-i": "backdrop",
12-
// "data-my-component-name": "basic.svelte"
13-
// }
14-
// },
8+
backdrop: true,
159
dialog: {
1610
attributes: {
1711
"data-where-am-i": "dialog",

src/lib/manager.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ export class ModalManager {
3333
const instance = new ModalInstance<P>(config);
3434

3535
instance.manager = this;
36-
36+
this.instances.set(instance.config.id, instance as ModalInstance<void>);
37+
instance.index = this.instances.size;
3738
instance.overlay = mount<any, ModalProps<P>>(Modal, {
3839
target: document.body,
3940
props: {
@@ -42,8 +43,6 @@ export class ModalManager {
4243
}
4344
});
4445

45-
this.instances.set(instance.config.id, instance as ModalInstance<void>);
46-
instance.index = this.instances.size;
4746
this.reorder();
4847

4948
return instance;
@@ -112,7 +111,6 @@ export class ModalManager {
112111

113112
// Set the last modal as top
114113
if (i === modals.length - 1) {
115-
console.log("setting last modal as top", modal.config.id, modal.index);
116114
modal.top = true;
117115
} else {
118116
modal.top = false;

src/lib/modal.svelte

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -52,29 +52,31 @@
5252
}
5353
5454
const backdrop = (
55-
v: typeof instance.config.backdrop | boolean
56-
): { class?: string; attributes?: Record<string, string> } | false => {
57-
if (typeof v === "object") {
58-
return v;
59-
} else if (typeof v === "boolean" && v) {
55+
v: typeof instance.config.backdrop
56+
): { class?: string; attributes?: Record<string, string> } | null => {
57+
console.log(typeof v, v);
58+
if (typeof v === "undefined") {
6059
return {
6160
class: "modal-backdrop",
6261
attributes: {}
6362
};
64-
} else if (v === false) {
65-
return false;
66-
} else {
63+
}
64+
if (typeof v === "boolean" && v === false) {
65+
return null;
66+
}
67+
if (v === true) {
6768
return {
6869
class: "modal-backdrop",
6970
attributes: {}
7071
};
7172
}
73+
return v as { class?: string; attributes?: Record<string, string> };
7274
};
7375
7476
const backdropConfig = backdrop(instance.config.backdrop);
7577
</script>
7678

77-
{#if backdropConfig && instance.manager.instances.size === 0}
79+
{#if backdropConfig && instance.index === 0}
7880
<div
7981
onmousedown={handleClick}
8082
id={instance.config.id}
@@ -101,10 +103,7 @@
101103
class={instance.config.dialog?.class}
102104
class:modal-content={true}
103105
{...instance.config.dialog?.attributes}>
104-
{JSON.stringify(instance.config.dialog)}
105-
<div class="dialog-wrapper">
106-
<instance.config.component {instance} />
107-
</div>
106+
<instance.config.component {instance} />
108107
</div>
109108
</div>
110109
{:else}
@@ -126,8 +125,6 @@
126125
justify-content: center;
127126
align-items: center;
128127
">
129-
<div class="dialog-wrapper">
130-
<instance.config.component {instance} />
131-
</div>
128+
<instance.config.component {instance} />
132129
</div>
133130
{/if}

src/lib/props.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,15 @@ import type { ModalInstance } from "./instance.svelte";
22

33
export type ModalProps<P = void> = {
44
instance: ModalInstance<P>;
5+
dialog?: {
6+
class?: string;
7+
attributes?: Record<string, string>;
8+
};
9+
backdrop?:
10+
| boolean
11+
| null
12+
| {
13+
class?: string;
14+
attributes?: Record<string, string>;
15+
};
516
};

0 commit comments

Comments
 (0)