From c3a96828611f6ee5d9ec8bc65ab72f31468d5c3d Mon Sep 17 00:00:00 2001
From: karwosts <32912880+karwosts@users.noreply.github.com>
Date: Mon, 16 Oct 2023 05:02:34 -0700
Subject: [PATCH] An alias editor and overflow menu for choose options (#18183)
---
.../types/ha-automation-action-choose.ts | 197 +++++++++++++++---
src/translations/en.json | 3 +
2 files changed, 172 insertions(+), 28 deletions(-)
diff --git a/src/panels/config/automation/action/types/ha-automation-action-choose.ts b/src/panels/config/automation/action/types/ha-automation-action-choose.ts
index ebea8d09f9..514376bf46 100644
--- a/src/panels/config/automation/action/types/ha-automation-action-choose.ts
+++ b/src/panels/config/automation/action/types/ha-automation-action-choose.ts
@@ -1,19 +1,41 @@
import { consume } from "@lit-labs/context";
import type { SortableEvent } from "sortablejs";
-import { mdiDelete, mdiPlus, mdiArrowUp, mdiArrowDown, mdiDrag } from "@mdi/js";
+import {
+ mdiDotsVertical,
+ mdiRenameBox,
+ mdiSort,
+ mdiContentDuplicate,
+ mdiDelete,
+ mdiPlus,
+ mdiArrowUp,
+ mdiArrowDown,
+ mdiDrag,
+} from "@mdi/js";
+import deepClone from "deep-clone-simple";
import { CSSResultGroup, LitElement, PropertyValues, css, html } from "lit";
import { customElement, property, state } from "lit/decorators";
import { repeat } from "lit/directives/repeat";
+import type { ActionDetail } from "@material/mwc-list";
import {
loadSortable,
SortableInstance,
} from "../../../../../resources/sortable.ondemand";
import { ensureArray } from "../../../../../common/array/ensure-array";
import { fireEvent } from "../../../../../common/dom/fire_event";
+import { capitalizeFirstLetter } from "../../../../../common/string/capitalize-first-letter";
import "../../../../../components/ha-button";
import "../../../../../components/ha-icon-button";
+import "../../../../../components/ha-button-menu";
import { Condition } from "../../../../../data/automation";
-import { Action, ChooseAction } from "../../../../../data/script";
+import {
+ Action,
+ ChooseAction,
+ ChooseActionChoice,
+} from "../../../../../data/script";
+import {
+ showConfirmationDialog,
+ showPromptDialog,
+} from "../../../../../dialogs/generic/show-dialog-box";
import { haStyle } from "../../../../../resources/styles";
import { HomeAssistant } from "../../../../../types";
import { ActionElement } from "../ha-automation-action-row";
@@ -22,6 +44,8 @@ import { fullEntitiesContext } from "../../../../../data/context";
import { EntityRegistryEntry } from "../../../../../data/entity_registry";
import { sortableStyles } from "../../../../../resources/ha-sortable-style";
+const preventDefault = (ev) => ev.preventDefault();
+
@customElement("ha-automation-action-choose")
export class HaChooseAction extends LitElement implements ActionElement {
@property({ attribute: false }) public hass!: HomeAssistant;
@@ -53,13 +77,7 @@ export class HaChooseAction extends LitElement implements ActionElement {
this._expandedStates[ev.target!.index] = ev.detail.expanded;
}
- private _getDescription(option, idx: number) {
- if (option.alias) {
- return option.alias;
- }
- if (this._expandedStates[idx]) {
- return "";
- }
+ private _getDescription(option) {
const conditions = ensureArray(option.conditions);
if (!conditions || conditions.length === 0) {
return this.hass.localize(
@@ -103,7 +121,10 @@ export class HaChooseAction extends LitElement implements ActionElement {
"number",
idx + 1
)}:
- ${this._getDescription(option, idx)}
+ ${option.alias ||
+ (this._expandedStates[idx]
+ ? ""
+ : this._getDescription(option))}
${this.reOrderMode
? html`
@@ -133,16 +154,71 @@ export class HaChooseAction extends LitElement implements ActionElement {
`
: html`
-