diff --git a/src/panels/config/script/ha-script-picker.ts b/src/panels/config/script/ha-script-picker.ts
index 88f3574fad..03ff909814 100644
--- a/src/panels/config/script/ha-script-picker.ts
+++ b/src/panels/config/script/ha-script-picker.ts
@@ -1,11 +1,18 @@
import "@material/mwc-icon-button";
-import { mdiHelpCircle, mdiPlus } from "@mdi/js";
+import {
+ mdiHelpCircle,
+ mdiInformationOutline,
+ mdiPencil,
+ mdiPlay,
+ mdiPlus,
+} from "@mdi/js";
import { HassEntity } from "home-assistant-js-websocket";
import {
css,
CSSResult,
customElement,
html,
+ internalProperty,
LitElement,
property,
TemplateResult,
@@ -17,8 +24,8 @@ import { computeStateName } from "../../../common/entity/compute_state_name";
import { stateIcon } from "../../../common/entity/state_icon";
import { computeRTL } from "../../../common/util/compute_rtl";
import { DataTableColumnContainer } from "../../../components/data-table/ha-data-table";
+import "../../../components/ha-button-related-filter-menu";
import "../../../components/ha-fab";
-import "../../../components/ha-icon-button";
import "../../../components/ha-svg-icon";
import { triggerScript } from "../../../data/script";
import { showAlertDialog } from "../../../dialogs/generic/show-dialog-box";
@@ -41,15 +48,28 @@ class HaScriptPicker extends LitElement {
@property() public route!: Route;
- private _scripts = memoizeOne((scripts: HassEntity[]) => {
- return scripts.map((script) => {
- return {
- ...script,
- name: computeStateName(script),
- icon: stateIcon(script),
- };
- });
- });
+ @property() private _activeFilters?: string[];
+
+ @internalProperty() private _filteredScripts?: string[] | null;
+
+ @internalProperty() private _filterValue?;
+
+ private _scripts = memoizeOne(
+ (scripts: HassEntity[], filteredScripts?: string[] | null) => {
+ return (filteredScripts
+ ? scripts.filter((script) =>
+ filteredScripts!.includes(script.entity_id)
+ )
+ : scripts
+ ).map((script) => {
+ return {
+ ...script,
+ name: computeStateName(script),
+ icon: stateIcon(script),
+ };
+ });
+ }
+ );
private _columns = memoizeOne(
(_language): DataTableColumnContainer => {
@@ -59,14 +79,15 @@ class HaScriptPicker extends LitElement {
type: "icon-button",
template: (_toggle, script) =>
html`
- this._runScript(ev)}
- >
+ >
+
+
`,
},
icon: {
@@ -99,14 +120,15 @@ class HaScriptPicker extends LitElement {
title: "",
type: "icon-button",
template: (_info, script) => html`
-
+ >
+
+
`,
},
edit: {
@@ -114,12 +136,13 @@ class HaScriptPicker extends LitElement {
type: "icon-button",
template: (_info, script: any) => html`
-
+ >
+
+
`,
},
@@ -136,16 +159,27 @@ class HaScriptPicker extends LitElement {
.route=${this.route}
.tabs=${configSections.automation}
.columns=${this._columns(this.hass.language)}
- .data=${this._scripts(this.scripts)}
+ .data=${this._scripts(this.scripts, this._filteredScripts)}
+ .activeFilters=${this._activeFilters}
id="entity_id"
.noDataText=${this.hass.localize(
"ui.panel.config.script.picker.no_scripts"
)}
+ @clear-filter=${this._clearFilter}
hasFab
>
+
+