Reputation: 1323
The library flowbite-svelte
has component Popover
with open
property. The property changing by click on button. In order to control external event listener (no in example) I need to know current value of open
property. How to get it?
I tried to use open=
and bind:open=
, but buth undefined
when button clicked.
<script>
import { onMount } from 'svelte'
import { Popover } from 'flowbite-svelte'
let popover
let isOpen
onMount(() => {
popover.$on('show', () => {
console.log(popover.open) // undefined
console.log(isOpen) // undefined
})
})
</script>
<button>Click</button>
<Popover
<!-- open={isOpen} or bind:open={isOpen} -->
bind:this={popover}
trigger="click">
Some content
</Popover>
Upvotes: 0
Views: 200
Reputation: 89
Use the 'open' property of Popover.
Here are the full list of properties for Popover including inherited ones:
interface $$Props extends ComponentProps<Popper> {
title?: string;
defaultClass?: string;
}
interface $$Props extends ComponentProps<Frame> {
activeContent?: boolean;
arrow?: boolean;
offset?: number;
placement?: Placement;
trigger?: 'hover' | 'click' | 'focus';
triggeredBy?: string;
reference?: string;
strategy?: 'absolute' | 'fixed';
open?: boolean;
yOnly?: boolean;
}
See Popover interface and popper interface for the above.
Upvotes: 0
Reputation: 1323
I found solution via debugging. When show
event occurs, callback has this
with popover instance. Inside this.$$.ctx
stored values by index from this.$$.props
.
<script>
import { onMount } from 'svelte'
import { Popover } from 'flowbite-svelte'
let popover
onMount(() => {
popover.$on('show', onPopoverOpenChanged)
})
function onPopoverOpenChanged() {
let indexPropOpen = this.$$.props.open
let isOpen = this.$$.ctx[indexPropOpen]
if (isOpen) {
} else {
}
}
</script>
<button>Click</button>
<Popover
bind:this={popover}
trigger="click">
Some content
</Popover>
Upvotes: 1
Reputation: 185280
There is no property for that, and there also is only a show
event, no event for closing.
That being the case, there currently is no proper way of getting the state. You could maybe query the DOM, but this functionality should be part of the component.
Maybe open an issue if there is none already.
Upvotes: 1