Fix issues with not resetting side panel content

This commit is contained in:
Andrew Kingston 2022-11-23 15:05:04 +00:00
parent d0dc9adcca
commit e92f72b0ca
2 changed files with 26 additions and 3 deletions

View File

@ -356,7 +356,7 @@
flex-direction: column; flex-direction: column;
gap: 30px; gap: 30px;
overflow-y: auto; overflow-y: auto;
transition: margin-right 260ms ease-out; transition: margin-right 130ms ease-out;
position: absolute; position: absolute;
width: 400px; width: 400px;
right: 0; right: 0;

View File

@ -1,10 +1,13 @@
<script> <script>
import { getContext } from "svelte" import { getContext, onDestroy } from "svelte"
const component = getContext("component") const component = getContext("component")
const { styleable, sidePanelStore, builderStore, dndIsDragging } = const { styleable, sidePanelStore, builderStore, dndIsDragging } =
getContext("sdk") getContext("sdk")
let renderContent = false
let contentTimeout
// Automatically show and hide the side panel when inside the builder. // Automatically show and hide the side panel when inside the builder.
// For some unknown reason, svelte reactivity breaks if we reference the // For some unknown reason, svelte reactivity breaks if we reference the
// reactive variable "open" inside the following expression, or if we define // reactive variable "open" inside the following expression, or if we define
@ -25,8 +28,22 @@
} }
} }
} }
// Derive visibility
$: open = $sidePanelStore.contentId === $component.id $: open = $sidePanelStore.contentId === $component.id
// When we hide the side panel we want to kick off a short timeout which will
// eventually hide the content. We don't do this immediately as this causes
// things like cycling through a table to constantly remount the side panel
// contents.
$: updateContentVisibility(open)
const updateContentVisibility = open => {
clearTimeout(contentTimeout)
contentTimeout = setTimeout(() => {
renderContent = open
}, 130)
}
const showInSidePanel = (el, visible) => { const showInSidePanel = (el, visible) => {
const update = visible => { const update = visible => {
const target = document.getElementById("side-panel-container") const target = document.getElementById("side-panel-container")
@ -47,6 +64,10 @@
return { update } return { update }
} }
onDestroy(() => {
clearTimeout(contentTimeout)
})
</script> </script>
<div <div
@ -55,7 +76,9 @@
class="side-panel" class="side-panel"
class:open class:open
> >
{#if renderContent}
<slot /> <slot />
{/if}
</div> </div>
<style> <style>