@@ -241,31 +241,7 @@ export class VacuumCard extends LitElement {
241241 return nothing ;
242242 }
243243
244- const selected = sources . indexOf ( source ) ;
245-
246- return html `
247- < div class ="tip ">
248- < ha-button-menu @click ="${ ( e : Event ) => e . stopPropagation ( ) } ">
249- < div slot ="trigger ">
250- < ha-icon icon ="mdi:fan "> </ ha-icon >
251- < span class ="icon-title ">
252- ${ localize ( `source.${ source . toLowerCase ( ) } ` ) || source }
253- </ span >
254- </ div >
255- ${ sources . map (
256- ( item , index ) => html `
257- < mwc-list-item
258- ?activated =${ selected === index }
259- value =${ item }
260- @click=${ this . handleSpeed }
261- >
262- ${ localize ( `source.${ item . toLowerCase ( ) } ` ) || item }
263- </ mwc-list-item >
264- ` ,
265- ) }
266- </ ha-button-menu >
267- </ div >
268- ` ;
244+ return this . renderDropDown ( source , sources , 'mdi:fan' , this . handleSpeed ) ;
269245 }
270246
271247 private renderWaterLevel ( ) : Template {
@@ -275,24 +251,38 @@ export class VacuumCard extends LitElement {
275251 return nothing ;
276252 }
277253
278- const selected = entity . attributes . options . indexOf ( entity . state ) ;
254+ return this . renderDropDown (
255+ entity . state ,
256+ entity . attributes . options ,
257+ 'mdi:water' ,
258+ this . handleSelect ,
259+ ) ;
260+ }
261+
262+ private renderDropDown (
263+ selectedObject : string ,
264+ objects : any ,
265+ icon : string ,
266+ onSelected : Function ,
267+ ) : Template {
268+ const selected = objects . indexOf ( selectedObject ) ;
279269
280270 return html `
281271 < div class ="tip ">
282272 < ha-button-menu @click ="${ ( e : Event ) => e . stopPropagation ( ) } ">
283273 < div slot ="trigger ">
284- < ha-icon icon ="mdi:water "> </ ha-icon >
274+ < ha-icon icon ="${ icon } "> </ ha-icon >
285275 < span class ="icon-title ">
286- ${ localize ( `source.${ entity . state . toLowerCase ( ) } ` ) ||
287- entity . state }
276+ ${ localize ( `source.${ selectedObject . toLowerCase ( ) } ` ) ||
277+ selectedObject }
288278 </ span >
289279 </ div >
290- ${ entity . attributes . options . map (
280+ ${ objects . map (
291281 ( item : string , index : number ) => html `
292282 < mwc-list-item
293283 ?activated =${ selected === index }
294284 value =${ item }
295- @click=${ this . handleSelect }
285+ @click=${ onSelected }
296286 >
297287 ${ localize ( `source.${ item . toLowerCase ( ) } ` ) || item }
298288 </ mwc-list-item >
0 commit comments