-
Notifications
You must be signed in to change notification settings - Fork 2.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Replace paper-listbox in cast frontend #19954
Changes from 7 commits
a95e490
5a78cf6
0a9cc15
5c7df02
af722e5
63f38fa
51316a2
f17aa2e
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -1,7 +1,6 @@ | ||||||||||||||||||||||||||
import "@material/mwc-button/mwc-button"; | ||||||||||||||||||||||||||
import { ActionDetail } from "@material/mwc-list/mwc-list"; | ||||||||||||||||||||||||||
import { mdiCast, mdiCastConnected, mdiViewDashboard } from "@mdi/js"; | ||||||||||||||||||||||||||
import "@polymer/paper-item/paper-icon-item"; | ||||||||||||||||||||||||||
import "@polymer/paper-listbox/paper-listbox"; | ||||||||||||||||||||||||||
import { Auth, Connection } from "home-assistant-js-websocket"; | ||||||||||||||||||||||||||
import { CSSResultGroup, LitElement, TemplateResult, css, html } from "lit"; | ||||||||||||||||||||||||||
import { customElement, property, state } from "lit/decorators"; | ||||||||||||||||||||||||||
|
@@ -28,6 +27,7 @@ import { LovelaceViewConfig } from "../../../../src/data/lovelace/config/view"; | |||||||||||||||||||||||||
import "../../../../src/layouts/hass-loading-screen"; | ||||||||||||||||||||||||||
import { generateDefaultViewConfig } from "../../../../src/panels/lovelace/common/generate-lovelace-config"; | ||||||||||||||||||||||||||
import "./hc-layout"; | ||||||||||||||||||||||||||
import "../../../../src/components/ha-list-item"; | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
@customElement("hc-cast") | ||||||||||||||||||||||||||
class HcCast extends LitElement { | ||||||||||||||||||||||||||
|
@@ -83,37 +83,37 @@ class HcCast extends LitElement { | |||||||||||||||||||||||||
` | ||||||||||||||||||||||||||
: html` | ||||||||||||||||||||||||||
<div class="section-header">PICK A VIEW</div> | ||||||||||||||||||||||||||
<paper-listbox | ||||||||||||||||||||||||||
attr-for-selected="data-path" | ||||||||||||||||||||||||||
.selected=${this.castManager.status.lovelacePath || ""} | ||||||||||||||||||||||||||
> | ||||||||||||||||||||||||||
<mwc-list @action=${this._handlePickView} activatable> | ||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Shouldnt this use the
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. That doesn't work until you have a selectable list (list item with checkboxes): https://www.npmjs.com/package/@material/mwc-list#mwc-list-2 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ensure accessibility by handling keyboard navigation. It's important to ensure that the list can be navigated using the keyboard. Consider adding keyboard event handlers or using a component that inherently supports keyboard navigation. |
||||||||||||||||||||||||||
${( | ||||||||||||||||||||||||||
this.lovelaceViews ?? [ | ||||||||||||||||||||||||||
generateDefaultViewConfig({}, {}, {}, {}, () => ""), | ||||||||||||||||||||||||||
] | ||||||||||||||||||||||||||
).map( | ||||||||||||||||||||||||||
(view, idx) => html` | ||||||||||||||||||||||||||
<paper-icon-item | ||||||||||||||||||||||||||
@click=${this._handlePickView} | ||||||||||||||||||||||||||
data-path=${view.path || idx} | ||||||||||||||||||||||||||
(view, idx) => | ||||||||||||||||||||||||||
html`<ha-list-item | ||||||||||||||||||||||||||
graphic="avatar" | ||||||||||||||||||||||||||
.activated=${this.castManager.status?.lovelacePath === | ||||||||||||||||||||||||||
(view.path ?? idx)} | ||||||||||||||||||||||||||
.selected=${this.castManager.status?.lovelacePath === | ||||||||||||||||||||||||||
(view.path ?? idx)} | ||||||||||||||||||||||||||
> | ||||||||||||||||||||||||||
${view.title || view.path || "Unnamed view"} | ||||||||||||||||||||||||||
${view.icon | ||||||||||||||||||||||||||
? html` | ||||||||||||||||||||||||||
<ha-icon | ||||||||||||||||||||||||||
.icon=${view.icon} | ||||||||||||||||||||||||||
slot="item-icon" | ||||||||||||||||||||||||||
slot="graphic" | ||||||||||||||||||||||||||
></ha-icon> | ||||||||||||||||||||||||||
` | ||||||||||||||||||||||||||
: html`<ha-svg-icon | ||||||||||||||||||||||||||
slot="item-icon" | ||||||||||||||||||||||||||
.path=${mdiViewDashboard} | ||||||||||||||||||||||||||
></ha-svg-icon>`} | ||||||||||||||||||||||||||
${view.title || view.path || "Unnamed view"} | ||||||||||||||||||||||||||
</paper-icon-item> | ||||||||||||||||||||||||||
` | ||||||||||||||||||||||||||
)} | ||||||||||||||||||||||||||
</paper-listbox> | ||||||||||||||||||||||||||
></ha-svg-icon>`}</ha-list-item | ||||||||||||||||||||||||||
> ` | ||||||||||||||||||||||||||
)}</mwc-list | ||||||||||||||||||||||||||
> | ||||||||||||||||||||||||||
`} | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
<div class="card-actions"> | ||||||||||||||||||||||||||
${this.castManager.status | ||||||||||||||||||||||||||
? html` | ||||||||||||||||||||||||||
|
@@ -185,8 +185,8 @@ class HcCast extends LitElement { | |||||||||||||||||||||||||
this.castManager.requestSession(); | ||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
private async _handlePickView(ev: Event) { | ||||||||||||||||||||||||||
const path = (ev.currentTarget as any).getAttribute("data-path"); | ||||||||||||||||||||||||||
private async _handlePickView(ev: CustomEvent<ActionDetail>) { | ||||||||||||||||||||||||||
const path = this.lovelaceViews![ev.detail.index].path ?? ev.detail.index; | ||||||||||||||||||||||||||
await ensureConnectedCastSession(this.castManager!, this.auth!); | ||||||||||||||||||||||||||
Comment on lines
+188
to
190
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Avoid using non-null assertions as they can lead to runtime errors. - const path = this.lovelaceViews![ev.detail.index].path ?? ev.detail.index;
+ const path = this.lovelaceViews?.[ev.detail.index].path ?? ev.detail.index; Committable suggestion
Suggested change
Comment on lines
+189
to
190
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ensure that - await ensureConnectedCastSession(this.castManager!, this.auth!);
+ if (this.castManager && this.auth) {
+ await ensureConnectedCastSession(this.castManager, this.auth);
+ } Committable suggestion
Suggested change
|
||||||||||||||||||||||||||
castSendShowLovelaceView(this.castManager, this.auth.data.hassUrl, path); | ||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||
|
@@ -249,26 +249,14 @@ class HcCast extends LitElement { | |||||||||||||||||||||||||
height: 18px; | ||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
paper-listbox { | ||||||||||||||||||||||||||
padding-top: 0; | ||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
paper-listbox ha-icon, | ||||||||||||||||||||||||||
paper-listbox ha-svg-icon { | ||||||||||||||||||||||||||
ha-list-item ha-icon, | ||||||||||||||||||||||||||
ha-list-item ha-svg-icon { | ||||||||||||||||||||||||||
padding: 12px; | ||||||||||||||||||||||||||
color: var(--secondary-text-color); | ||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
paper-icon-item { | ||||||||||||||||||||||||||
cursor: pointer; | ||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
paper-icon-item[disabled] { | ||||||||||||||||||||||||||
cursor: initial; | ||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
:host([hide-icons]) paper-icon-item { | ||||||||||||||||||||||||||
--paper-item-icon-width: 0px; | ||||||||||||||||||||||||||
:host([hide-icons]) ha-icon { | ||||||||||||||||||||||||||
display: none; | ||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
.spacer { | ||||||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Consider using type-only imports for type-only used imports to optimize the build.
Committable suggestion