From df96d74003b609de0d0cab219df15bfac917d940 Mon Sep 17 00:00:00 2001 From: Ryan Gossiaux Date: Tue, 14 Dec 2021 22:54:06 -0800 Subject: [PATCH] A couple fixes to Dialog Quickfix for SSR Let it take open from OpenClose context properly --- src/lib/components/dialog/Dialog.svelte | 42 ++++++++++++++----------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/src/lib/components/dialog/Dialog.svelte b/src/lib/components/dialog/Dialog.svelte index 0df213a..8ed7517 100644 --- a/src/lib/components/dialog/Dialog.svelte +++ b/src/lib/components/dialog/Dialog.svelte @@ -5,6 +5,7 @@ createEventDispatcher, tick, onDestroy, + onMount, } from "svelte"; export enum DialogStates { Open, @@ -62,27 +63,29 @@ let containers: Set = new Set(); let openClosedState: Writable | undefined = getContext("OpenClosed"); - $: open = - open === undefined && openClosedState !== undefined - ? match($openClosedState, { - [State.Open]: true, - [State.Closed]: false, - }) - : open; + $: { + open = + open === undefined && openClosedState !== undefined + ? match($openClosedState, { + [State.Open]: true, + [State.Closed]: false, + }) + : open; - // Validations - let hasOpen = open !== undefined || openClosedState !== null; + // Validations + let hasOpen = open !== undefined || openClosedState !== null; - if (!hasOpen) { - throw new Error( - `You forgot to provide an \`open\` prop to the \`Dialog\`.` - ); - } + if (!hasOpen) { + throw new Error( + `You forgot to provide an \`open\` prop to the \`Dialog\`.` + ); + } - if (typeof open !== "boolean") { - throw new Error( - `You provided an \`open\` prop to the \`Dialog\`, but the value is not a boolean. Received: ${open}` - ); + if (typeof open !== "boolean") { + throw new Error( + `You provided an \`open\` prop to the \`Dialog\`, but the value is not a boolean. Received: ${open}` + ); + } } $: dialogState = open ? DialogStates.Open : DialogStates.Closed; @@ -148,11 +151,14 @@ $api.close(); } + let mounted = false; + onMount(() => (mounted = true)); $: _cleanupScrollLock = (() => { if (_cleanupScrollLock) { _cleanupScrollLock(); } if (dialogState !== DialogStates.Open) return; + if (!mounted) return; let overflow = document.documentElement.style.overflow; let paddingRight = document.documentElement.style.paddingRight;