Add custom panel example (#631)

Co-authored-by: Joakim Sørensen <joasoe@gmail.com>
This commit is contained in:
Paulus Schoutsen 2020-09-01 13:58:24 +02:00 committed by GitHub
parent 3a68bdf691
commit 9846041f25
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -8,7 +8,74 @@ Besides components registering panels, users can also register panels using the
## Introduction
Panels are defined as custom elements. You can use any framework that you want, as long as you wrap it up as a custom element. To quickly get started with a panel, we've created a [React custom panel starter kit](https://github.com/home-assistant/custom-panel-starter-kit-react).
Panels are defined as custom elements. You can use any framework that you want, as long as you wrap it up as a custom element. To quickly get started with a panel, create a new file `<config>/www/example-panel.js` with this content
```js
import "https://unpkg.com/wired-card@2.1.0/lib/wired-card.js?module";
import {
LitElement,
html,
css,
} from "https://unpkg.com/lit-element@2.4.0/lit-element.js?module";
class ExamplePanel extends LitElement {
static get properties() {
return {
hass: { type: Object },
narrow: { type: Boolean },
route: { type: Object },
panel: { type: Object },
};
}
render() {
return html`
<wired-card elevation="2">
<p>There are ${Object.keys(this.hass.states).length} entities.</p>
<p>The screen is${this.narrow ? "" : " not"} narrow.</p>
Configured panel config
<pre>${JSON.stringify(this.panel.config, undefined, 2)}</pre>
Current route
<pre>${JSON.stringify(this.route, undefined, 2)}</pre>
</wired-card>
`;
}
static get styles() {
return css`
:host {
background-color: #fafafa;
padding: 16px;
display: block;
}
wired-card {
background-color: white;
padding: 16px;
display: block;
font-size: 18px;
max-width: 600px;
margin: 0 auto;
}
`;
}
}
customElements.define("example-panel", ExamplePanel);
```
Then add to your `configuration.yaml`:
```yaml
panel_custom:
- name: example-panel
# url_path needs to be unique for each panel_custom config
url_path: redirect-server-controls
sidebar_title: Example Panel
sidebar_icon: mdi:server
module_url: /local/example-panel.js
config:
# Data you want to make available to panel
hello: world
```
## API reference