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 > + +