Only mount portal on open
This commit is contained in:
parent
e66f8c8ca4
commit
1acb04a467
|
@ -27,13 +27,10 @@
|
||||||
onMount(() => {
|
onMount(() => {
|
||||||
if (select) {
|
if (select) {
|
||||||
select.addEventListener("keydown", handleEnter)
|
select.addEventListener("keydown", handleEnter)
|
||||||
selectMenu.addEventListener("keydown", handleEscape)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
select.removeEventListener("keydown", handleEnter)
|
select.removeEventListener("keydown", handleEnter)
|
||||||
selectMenu.removeEventListener("keydown", handleEscape)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
})
|
})
|
||||||
|
@ -72,12 +69,11 @@
|
||||||
function toggleSelect(isOpen) {
|
function toggleSelect(isOpen) {
|
||||||
getDimensions()
|
getDimensions()
|
||||||
if (isOpen) {
|
if (isOpen) {
|
||||||
icon.style.transform = "rotate(180deg)"
|
icon.style.transform = "rotate(180deg)"
|
||||||
selectMenu.focus()
|
|
||||||
} else {
|
} else {
|
||||||
icon.style.transform = "rotate(0deg)"
|
icon.style.transform = "rotate(0deg)"
|
||||||
}
|
}
|
||||||
open = isOpen
|
open = isOpen
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -99,6 +95,10 @@
|
||||||
? options.find(o => o.value === value)
|
? options.find(o => o.value === value)
|
||||||
: {}
|
: {}
|
||||||
|
|
||||||
|
$: if(open && selectMenu) {
|
||||||
|
selectMenu.focus()
|
||||||
|
}
|
||||||
|
|
||||||
$: displayLabel =
|
$: displayLabel =
|
||||||
selectedOption && selectedOption.label ? selectedOption.label : value || ""
|
selectedOption && selectedOption.label ? selectedOption.label : value || ""
|
||||||
</script>
|
</script>
|
||||||
|
@ -112,13 +112,15 @@
|
||||||
<span>{displayLabel}</span>
|
<span>{displayLabel}</span>
|
||||||
<i bind:this={icon} class="ri-arrow-down-s-fill" />
|
<i bind:this={icon} class="ri-arrow-down-s-fill" />
|
||||||
</div>
|
</div>
|
||||||
|
{#if open}
|
||||||
<Portal>
|
<Portal>
|
||||||
<div
|
<div
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
|
class:open
|
||||||
bind:this={selectMenu}
|
bind:this={selectMenu}
|
||||||
style={menuStyle}
|
style={menuStyle}
|
||||||
class="bb-select-menu"
|
on:keydown={handleEscape}
|
||||||
class:open>
|
class="bb-select-menu">
|
||||||
<ul>
|
<ul>
|
||||||
{#if isOptionsObject}
|
{#if isOptionsObject}
|
||||||
{#each options as { value: v, label }}
|
{#each options as { value: v, label }}
|
||||||
|
@ -141,11 +143,10 @@
|
||||||
{/if}
|
{/if}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
<div on:click|self={() => toggleSelect(false)} class="overlay" />
|
||||||
</Portal>
|
</Portal>
|
||||||
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
{#if open}
|
|
||||||
<div on:click|self={() => toggleSelect(false)} class="overlay" />
|
|
||||||
{/if}
|
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.overlay {
|
.overlay {
|
||||||
|
|
Loading…
Reference in New Issue