1- import { LitElement , nothing , html } from 'lit' ;
1+ import { LitElement , nothing , html , type PropertyValues } from 'lit' ;
22import { customElement } from 'lit/decorators/custom-element.js' ;
33import { property } from 'lit/decorators/property.js' ;
44import { query } from 'lit/decorators/query.js' ;
@@ -9,7 +9,6 @@ import { FloatingDOMController } from '@patternfly/pfe-core/controllers/floating
99import { SlotController } from '@patternfly/pfe-core/controllers/slot-controller.js' ;
1010import { bound } from '@patternfly/pfe-core/decorators/bound.js' ;
1111import { ComposedEvent , StringListConverter } from '@patternfly/pfe-core/core.js' ;
12- import { observed } from '@patternfly/pfe-core/decorators/observed.js' ;
1312import type { Placement } from '@patternfly/pfe-core/controllers/floating-dom-controller.js' ;
1413import '@patternfly/elements/pf-button/pf-button.js' ;
1514import styles from './pf-popover.css' ;
@@ -301,7 +300,6 @@ export class PfPopover extends LitElement {
301300 /**
302301 * The ID of the element to attach the popover to.
303302 */
304- @observed ( 'triggerChanged' )
305303 @property ( { reflect : true } ) trigger ?: string ;
306304
307305 @query ( '#popover' ) private _popover ! : HTMLDialogElement ;
@@ -360,7 +358,10 @@ export class PfPopover extends LitElement {
360358 < div id ="container "
361359 style ="${ styleMap ( styles ) } "
362360 class ="${ classMap ( { [ anchor ] : ! ! anchor , [ alignment ] : ! ! alignment } ) } ">
363- < slot id ="trigger " @keydown =${ this . onKeydown } @click =${ this . toggle } > </ slot >
361+ < slot id ="trigger "
362+ @slotchange ="${ this . #triggerChanged} "
363+ @keydown =${ this . onKeydown }
364+ @click =${ this . toggle } > </ slot >
364365 < dialog id ="popover " aria-labelledby ="heading " aria-describedby ="body " aria-label =${ ifDefined ( this . label ) } >
365366 < div id ="arrow "> </ div >
366367 < div id ="content " part ="content ">
@@ -389,10 +390,27 @@ export class PfPopover extends LitElement {
389390 disconnectedCallback ( ) {
390391 super . disconnectedCallback ( ) ;
391392 PfPopover . instances . delete ( this ) ;
392- this . #referenceTrigger?. removeEventListener ( 'click' , this . show ) ;
393+ this . #referenceTrigger?. removeEventListener ( 'click' , this . toggle ) ;
393394 this . #referenceTrigger?. removeEventListener ( 'keydown' , this . onKeydown ) ;
394395 }
395396
397+ #getReferenceTrigger( ) {
398+ const root = this . getRootNode ( ) as Document | ShadowRoot ;
399+ return ! this . trigger ? null : root . getElementById ( this . trigger ) ;
400+ }
401+
402+
403+ #triggerChanged( ) {
404+ const oldReferenceTrigger = this . #referenceTrigger;
405+ this . #referenceTrigger = this . #getReferenceTrigger( ) ;
406+ if ( oldReferenceTrigger !== this . #referenceTrigger) {
407+ oldReferenceTrigger ?. removeEventListener ( 'click' , this . toggle ) ;
408+ oldReferenceTrigger ?. removeEventListener ( 'keydown' , this . onKeydown ) ;
409+ this . #referenceTrigger?. addEventListener ( 'click' , this . toggle ) ;
410+ this . #referenceTrigger?. addEventListener ( 'keydown' , this . onKeydown ) ;
411+ }
412+ }
413+
396414 @bound private onKeydown ( event : KeyboardEvent ) {
397415 switch ( event . key ) {
398416 case 'Escape' :
@@ -420,15 +438,9 @@ export class PfPopover extends LitElement {
420438 * Removes event listeners from the old trigger element and attaches
421439 * them to the new trigger element.
422440 */
423- triggerChanged ( oldValue ?: string , newValue ?: string ) {
424- if ( oldValue ) {
425- this . #referenceTrigger?. removeEventListener ( 'click' , this . show ) ;
426- this . #referenceTrigger?. removeEventListener ( 'keydown' , this . onKeydown ) ;
427- }
428- if ( newValue ) {
429- this . #referenceTrigger = ( this . getRootNode ( ) as Document | ShadowRoot ) . getElementById ( newValue ) ;
430- this . #referenceTrigger?. addEventListener ( 'click' , this . show ) ;
431- this . #referenceTrigger?. addEventListener ( 'keydown' , this . onKeydown ) ;
441+ override willUpdate ( changed : PropertyValues < this> ) {
442+ if ( changed . has ( 'trigger' ) ) {
443+ this . #triggerChanged( ) ;
432444 }
433445 }
434446
0 commit comments