@@ -2,7 +2,7 @@ import type { ComponentInterface } from '@stencil/core';
22import  {  Component ,  Element ,  Host ,  Prop ,  Method ,  State ,  Watch ,  forceUpdate ,  h  }  from  '@stencil/core' ; 
33import  type  {  ButtonInterface  }  from  '@utils/element-interface' ; 
44import  type  {  Attributes  }  from  '@utils/helpers' ; 
5- import  {  addEventListener ,  removeEventListener ,  inheritAttributes ,   getNextSiblingOfType  }  from  '@utils/helpers' ; 
5+ import  {  addEventListener ,  removeEventListener ,  inheritAttributes  }  from  '@utils/helpers' ; 
66import  {  hostContext  }  from  '@utils/theme' ; 
77
88import  {  getIonMode  }  from  '../../global/ionic-global' ; 
@@ -65,58 +65,40 @@ export class SegmentButton implements ComponentInterface, ButtonInterface {
6565    this . updateState ( ) ; 
6666  } 
6767
68-   private  waitForSegmentContent ( ionSegment : HTMLIonSegmentElement  |  null ,  contentId : string ) : Promise < HTMLElement >  { 
69-     return  new  Promise ( ( resolve ,  reject )  =>  { 
70-       let  timeoutId : NodeJS . Timeout  |  undefined  =  undefined ; 
71-       let  animationFrameId : number ; 
72- 
73-       const  check  =  ( )  =>  { 
74-         if  ( ! ionSegment )  { 
75-           reject ( new  Error ( `Segment not found when looking for Segment Content` ) ) ; 
76-           return ; 
77-         } 
78- 
79-         const  segmentView  =  getNextSiblingOfType < HTMLIonSegmentViewElement > ( ionSegment ) ;  // Skip the text nodes 
80-         const  segmentContent  =  segmentView ?. querySelector ( 
81-           `ion-segment-content[id="${ contentId }  "]` 
82-         )  as  HTMLIonSegmentContentElement  |  null ; 
83-         if  ( segmentContent  &&  timeoutId )  { 
84-           clearTimeout ( timeoutId ) ;  // Clear the timeout if the segmentContent is found 
85-           cancelAnimationFrame ( animationFrameId ) ; 
86-           resolve ( segmentContent ) ; 
87-         }  else  { 
88-           animationFrameId  =  requestAnimationFrame ( check ) ;  // Keep checking on the next animation frame 
89-         } 
90-       } ; 
91- 
92-       check ( ) ; 
93- 
94-       // Set a timeout to reject the promise 
95-       timeoutId  =  setTimeout ( ( )  =>  { 
96-         cancelAnimationFrame ( animationFrameId ) ; 
97-         reject ( new  Error ( `Unable to find Segment Content with id="${ contentId }   within 1000 ms` ) ) ; 
98-       } ,  1000 ) ; 
99-     } ) ; 
100-   } 
101- 
102-   async  connectedCallback ( )  { 
68+   connectedCallback ( )  { 
10369    const  segmentEl  =  ( this . segmentEl  =  this . el . closest ( 'ion-segment' ) ) ; 
10470    if  ( segmentEl )  { 
10571      this . updateState ( ) ; 
10672      addEventListener ( segmentEl ,  'ionSelect' ,  this . updateState ) ; 
10773      addEventListener ( segmentEl ,  'ionStyle' ,  this . updateStyle ) ; 
10874    } 
75+   } 
76+ 
77+ 
78+ 
79+   disconnectedCallback ( )  { 
80+     const  segmentEl  =  this . segmentEl ; 
81+     if  ( segmentEl )  { 
82+       removeEventListener ( segmentEl ,  'ionSelect' ,  this . updateState ) ; 
83+       removeEventListener ( segmentEl ,  'ionStyle' ,  this . updateStyle ) ; 
84+       this . segmentEl  =  null ; 
85+     } 
86+   } 
87+ 
88+   componentWillLoad ( )  { 
89+     this . inheritedAttributes  =  { 
90+       ...inheritAttributes ( this . el ,  [ 'aria-label' ] ) , 
91+     } ; 
10992
11093    // Return if there is no contentId defined 
11194    if  ( ! this . contentId )  return ; 
11295
113-     let  segmentContent ; 
114-     try  { 
115-       // Attempt to find the Segment Content by its contentId 
116-       segmentContent  =  await  this . waitForSegmentContent ( segmentEl ,  this . contentId ) ; 
117-     }  catch  ( error )  { 
118-       // If no associated Segment Content exists, log an error and return 
119-       console . error ( 'Segment Button: ' ,  ( error  as  Error ) . message ) ; 
96+     // Attempt to find the Segment Content by its contentId 
97+     const  segmentContent  =  document . getElementById ( this . contentId )  as  HTMLIonSegmentContentElement  |  null ; 
98+ 
99+     // If no associated Segment Content exists, log an error and return 
100+     if  ( ! segmentContent )  { 
101+       console . error ( `Segment Button: Unable to find Segment Content with id="${ this . contentId }  ".` ) ; 
120102      return ; 
121103    } 
122104
@@ -133,21 +115,6 @@ export class SegmentButton implements ComponentInterface, ButtonInterface {
133115    } 
134116  } 
135117
136-   disconnectedCallback ( )  { 
137-     const  segmentEl  =  this . segmentEl ; 
138-     if  ( segmentEl )  { 
139-       removeEventListener ( segmentEl ,  'ionSelect' ,  this . updateState ) ; 
140-       removeEventListener ( segmentEl ,  'ionStyle' ,  this . updateStyle ) ; 
141-       this . segmentEl  =  null ; 
142-     } 
143-   } 
144- 
145-   componentWillLoad ( )  { 
146-     this . inheritedAttributes  =  { 
147-       ...inheritAttributes ( this . el ,  [ 'aria-label' ] ) , 
148-     } ; 
149-   } 
150- 
151118  private  get  hasLabel ( )  { 
152119    return  ! ! this . el . querySelector ( 'ion-label' ) ; 
153120  } 
0 commit comments