diff --git a/src/data/automation.ts b/src/data/automation.ts index 6ff6eca45f..3bb0dfff66 100644 --- a/src/data/automation.ts +++ b/src/data/automation.ts @@ -387,7 +387,7 @@ export const testCondition = ( variables, }); -export type Clipboard = { +export type AutomationClipboard = { trigger?: Trigger; condition?: Condition; action?: Action; diff --git a/src/panels/config/automation/action/ha-automation-action-row.ts b/src/panels/config/automation/action/ha-automation-action-row.ts index 242fd3173f..b601f9906e 100644 --- a/src/panels/config/automation/action/ha-automation-action-row.ts +++ b/src/panels/config/automation/action/ha-automation-action-row.ts @@ -3,9 +3,9 @@ import "@material/mwc-list/mwc-list-item"; import { mdiAlertCircleCheck, mdiCheck, - mdiContentDuplicate, mdiContentCopy, mdiContentCut, + mdiContentDuplicate, mdiDelete, mdiDotsVertical, mdiPlay, @@ -14,17 +14,19 @@ import { mdiSort, mdiStopCircleOutline, } from "@mdi/js"; +import deepClone from "deep-clone-simple"; import { UnsubscribeFunc } from "home-assistant-js-websocket"; import { - css, CSSResultGroup, - html, LitElement, - nothing, PropertyValues, + css, + html, + nothing, } from "lit"; import { customElement, property, query, state } from "lit/decorators"; import { classMap } from "lit/directives/class-map"; +import { storage } from "../../../../common/decorators/storage"; import { dynamicElement } from "../../../../common/dom/dynamic-element-directive"; import { fireEvent } from "../../../../common/dom/fire_event"; import { capitalizeFirstLetter } from "../../../../common/string/capitalize-first-letter"; @@ -36,12 +38,12 @@ import "../../../../components/ha-expansion-panel"; import "../../../../components/ha-icon-button"; import type { HaYamlEditor } from "../../../../components/ha-yaml-editor"; import { ACTION_TYPES, YAML_ONLY_ACTION_TYPES } from "../../../../data/action"; +import { AutomationClipboard } from "../../../../data/automation"; import { validateConfig } from "../../../../data/config"; import { EntityRegistryEntry, subscribeEntityRegistry, } from "../../../../data/entity_registry"; -import { Clipboard } from "../../../../data/automation"; import { Action, NonConditionAction, @@ -127,7 +129,13 @@ export default class HaAutomationActionRow extends LitElement { @property({ type: Boolean }) public reOrderMode = false; - @property() public clipboard?: Clipboard; + @storage({ + key: "automationClipboard", + state: false, + subscribe: true, + storage: "sessionStorage", + }) + public _clipboard?: AutomationClipboard; @state() private _entityReg: EntityRegistryEntry[] = []; @@ -396,7 +404,6 @@ export default class HaAutomationActionRow extends LitElement { narrow: this.narrow, reOrderMode: this.reOrderMode, disabled: this.disabled, - clipboard: this.clipboard, })} `} @@ -431,10 +438,10 @@ export default class HaAutomationActionRow extends LitElement { fireEvent(this, "duplicate"); break; case 4: - fireEvent(this, "set-clipboard", { action: this.action }); + this._setClipboard(); break; case 5: - fireEvent(this, "set-clipboard", { action: this.action }); + this._setClipboard(); fireEvent(this, "value-changed", { value: null }); break; case 6: @@ -454,6 +461,13 @@ export default class HaAutomationActionRow extends LitElement { } } + private _setClipboard() { + this._clipboard = { + ...this._clipboard, + action: deepClone(this.action), + }; + } + private _onDisable() { const enabled = !(this.action.enabled ?? true); const value = { ...this.action, enabled }; diff --git a/src/panels/config/automation/action/ha-automation-action.ts b/src/panels/config/automation/action/ha-automation-action.ts index 91a6df75ae..dd9d2ad909 100644 --- a/src/panels/config/automation/action/ha-automation-action.ts +++ b/src/panels/config/automation/action/ha-automation-action.ts @@ -29,7 +29,7 @@ import type { HaSelect } from "../../../../components/ha-select"; import "../../../../components/ha-svg-icon"; import { ACTION_TYPES } from "../../../../data/action"; import { Action } from "../../../../data/script"; -import { Clipboard } from "../../../../data/automation"; +import { AutomationClipboard } from "../../../../data/automation"; import { sortableStyles } from "../../../../resources/ha-sortable-style"; import { loadSortable, @@ -52,6 +52,7 @@ import "./types/ha-automation-action-service"; import "./types/ha-automation-action-stop"; import "./types/ha-automation-action-wait_for_trigger"; import "./types/ha-automation-action-wait_template"; +import { storage } from "../../../../common/decorators/storage"; const PASTE_VALUE = "__paste__"; @@ -69,7 +70,13 @@ export default class HaAutomationAction extends LitElement { @property({ type: Boolean }) public reOrderMode = false; - @property() public clipboard?: Clipboard; + @storage({ + key: "automationClipboard", + state: true, + subscribe: true, + storage: "sessionStorage", + }) + public _clipboard?: AutomationClipboard; private _focusLastActionOnChange = false; @@ -113,7 +120,6 @@ export default class HaAutomationAction extends LitElement { @duplicate=${this._duplicateAction} @value-changed=${this._actionChanged} @re-order=${this._enterReOrderMode} - .clipboard=${this.clipboard} .hass=${this.hass} > ${this.reOrderMode @@ -162,14 +168,14 @@ export default class HaAutomationAction extends LitElement { > - ${this.clipboard?.action + ${this._clipboard?.action ? html` ${this.hass.localize( "ui.panel.config.automation.editor.actions.paste" )} (${this.hass.localize( `ui.panel.config.automation.editor.actions.type.${getType( - this.clipboard.action + this._clipboard.action )}.label` )})

${this.hass.localize( @@ -80,7 +77,6 @@ export class HaChooseAction extends LitElement implements ActionElement { .hass=${this.hass} .idx=${idx} @value-changed=${this._actionChanged} - .clipboard=${this.clipboard} > ` @@ -109,7 +105,6 @@ export class HaChooseAction extends LitElement implements ActionElement { .disabled=${this.disabled} @value-changed=${this._defaultChanged} .hass=${this.hass} - .clipboard=${this.clipboard} > ` : html` @@ -114,7 +109,6 @@ export class HaRepeatAction extends LitElement implements ActionElement { .reOrderMode=${this.reOrderMode} .disabled=${this.disabled} @value-changed=${this._actionChanged} - .clipboard=${this.clipboard} .hass=${this.hass} > `; diff --git a/src/panels/config/automation/action/types/ha-automation-action-wait_for_trigger.ts b/src/panels/config/automation/action/types/ha-automation-action-wait_for_trigger.ts index d5c21b5989..b6bd373831 100644 --- a/src/panels/config/automation/action/types/ha-automation-action-wait_for_trigger.ts +++ b/src/panels/config/automation/action/types/ha-automation-action-wait_for_trigger.ts @@ -1,17 +1,16 @@ -import "../../../../../components/ha-textfield"; import { css, CSSResultGroup, html, LitElement } from "lit"; import { customElement, property } from "lit/decorators"; +import { ensureArray } from "../../../../../common/array/ensure-array"; +import { createDurationData } from "../../../../../common/datetime/create_duration_data"; import { fireEvent } from "../../../../../common/dom/fire_event"; +import { TimeChangedEvent } from "../../../../../components/ha-base-time-input"; +import "../../../../../components/ha-duration-input"; import "../../../../../components/ha-formfield"; +import "../../../../../components/ha-textfield"; import { WaitForTriggerAction } from "../../../../../data/script"; -import type { Clipboard } from "../../../../../data/automation"; import { HomeAssistant } from "../../../../../types"; import "../../trigger/ha-automation-trigger"; import { ActionElement, handleChangeEvent } from "../ha-automation-action-row"; -import "../../../../../components/ha-duration-input"; -import { createDurationData } from "../../../../../common/datetime/create_duration_data"; -import { TimeChangedEvent } from "../../../../../components/ha-base-time-input"; -import { ensureArray } from "../../../../../common/array/ensure-array"; @customElement("ha-automation-action-wait_for_trigger") export class HaWaitForTriggerAction @@ -26,8 +25,6 @@ export class HaWaitForTriggerAction @property({ type: Boolean }) public reOrderMode = false; - @property() public clipboard?: Clipboard; - public static get defaultConfig() { return { wait_for_trigger: [] }; } @@ -65,7 +62,6 @@ export class HaWaitForTriggerAction .name=${"wait_for_trigger"} .reOrderMode=${this.reOrderMode} @value-changed=${this._valueChanged} - .clipboard=${this.clipboard} > `; } diff --git a/src/panels/config/automation/condition/ha-automation-condition-editor.ts b/src/panels/config/automation/condition/ha-automation-condition-editor.ts index 2adf0512aa..eb4558569e 100644 --- a/src/panels/config/automation/condition/ha-automation-condition-editor.ts +++ b/src/panels/config/automation/condition/ha-automation-condition-editor.ts @@ -4,7 +4,7 @@ import memoizeOne from "memoize-one"; import { dynamicElement } from "../../../../common/dom/dynamic-element-directive"; import { fireEvent } from "../../../../common/dom/fire_event"; import "../../../../components/ha-yaml-editor"; -import type { Condition, Clipboard } from "../../../../data/automation"; +import type { Condition } from "../../../../data/automation"; import { expandConditionWithShorthand } from "../../../../data/automation"; import { haStyle } from "../../../../resources/styles"; import type { HomeAssistant } from "../../../../types"; @@ -32,8 +32,6 @@ export default class HaAutomationConditionEditor extends LitElement { @property({ type: Boolean }) public reOrderMode = false; - @property() public clipboard?: Clipboard; - private _processedCondition = memoizeOne((condition) => expandConditionWithShorthand(condition) ); @@ -72,7 +70,6 @@ export default class HaAutomationConditionEditor extends LitElement { condition: condition, reOrderMode: this.reOrderMode, disabled: this.disabled, - clipboard: this.clipboard, } )} diff --git a/src/panels/config/automation/condition/ha-automation-condition-row.ts b/src/panels/config/automation/condition/ha-automation-condition-row.ts index 8f6cd63441..7e8bb4e270 100644 --- a/src/panels/config/automation/condition/ha-automation-condition-row.ts +++ b/src/panels/config/automation/condition/ha-automation-condition-row.ts @@ -3,9 +3,9 @@ import { ActionDetail } from "@material/mwc-list/mwc-list-foundation"; import "@material/mwc-list/mwc-list-item"; import { mdiCheck, - mdiContentDuplicate, mdiContentCopy, mdiContentCut, + mdiContentDuplicate, mdiDelete, mdiDotsVertical, mdiFlask, @@ -14,9 +14,11 @@ import { mdiSort, mdiStopCircleOutline, } from "@mdi/js"; -import { css, CSSResultGroup, html, LitElement, nothing } from "lit"; +import deepClone from "deep-clone-simple"; +import { CSSResultGroup, LitElement, css, html, nothing } from "lit"; import { customElement, property, state } from "lit/decorators"; import { classMap } from "lit/directives/class-map"; +import { storage } from "../../../../common/decorators/storage"; import { fireEvent } from "../../../../common/dom/fire_event"; import { capitalizeFirstLetter } from "../../../../common/string/capitalize-first-letter"; import { handleStructError } from "../../../../common/structs/handle-errors"; @@ -24,8 +26,8 @@ import "../../../../components/ha-button-menu"; import "../../../../components/ha-card"; import "../../../../components/ha-expansion-panel"; import "../../../../components/ha-icon-button"; +import type { AutomationClipboard } from "../../../../data/automation"; import { Condition, testCondition } from "../../../../data/automation"; -import type { Clipboard } from "../../../../data/automation"; import { describeCondition } from "../../../../data/automation_i18n"; import { CONDITION_TYPES } from "../../../../data/condition"; import { validateConfig } from "../../../../data/config"; @@ -83,7 +85,13 @@ export default class HaAutomationConditionRow extends LitElement { @property({ type: Boolean }) public disabled = false; - @property() public clipboard?: Clipboard; + @storage({ + key: "automationClipboard", + state: false, + subscribe: true, + storage: "sessionStorage", + }) + public _clipboard?: AutomationClipboard; @state() private _yamlMode = false; @@ -290,7 +298,6 @@ export default class HaAutomationConditionRow extends LitElement { .hass=${this.hass} .condition=${this.condition} .reOrderMode=${this.reOrderMode} - .clipboard=${this.clipboard} > @@ -343,10 +350,10 @@ export default class HaAutomationConditionRow extends LitElement { fireEvent(this, "duplicate"); break; case 4: - fireEvent(this, "set-clipboard", { condition: this.condition }); + this._setClipboard(); break; case 5: - fireEvent(this, "set-clipboard", { condition: this.condition }); + this._setClipboard(); fireEvent(this, "value-changed", { value: null }); break; case 6: @@ -366,6 +373,13 @@ export default class HaAutomationConditionRow extends LitElement { } } + private _setClipboard() { + this._clipboard = { + ...this._clipboard, + condition: deepClone(this.condition), + }; + } + private _onDisable() { const enabled = !(this.condition.enabled ?? true); const value = { ...this.condition, enabled }; diff --git a/src/panels/config/automation/condition/ha-automation-condition.ts b/src/panels/config/automation/condition/ha-automation-condition.ts index 3b64474463..8ee6552bae 100644 --- a/src/panels/config/automation/condition/ha-automation-condition.ts +++ b/src/panels/config/automation/condition/ha-automation-condition.ts @@ -3,9 +3,9 @@ import type { ActionDetail } from "@material/mwc-list"; import { mdiArrowDown, mdiArrowUp, + mdiContentPaste, mdiDrag, mdiPlus, - mdiContentPaste, } from "@mdi/js"; import deepClone from "deep-clone-simple"; import { @@ -13,8 +13,8 @@ import { CSSResultGroup, html, LitElement, - PropertyValues, nothing, + PropertyValues, } from "lit"; import { customElement, property } from "lit/decorators"; import { repeat } from "lit/directives/repeat"; @@ -24,7 +24,10 @@ import { fireEvent } from "../../../../common/dom/fire_event"; import "../../../../components/ha-button"; import "../../../../components/ha-button-menu"; import "../../../../components/ha-svg-icon"; -import type { Condition, Clipboard } from "../../../../data/automation"; +import type { + AutomationClipboard, + Condition, +} from "../../../../data/automation"; import type { HomeAssistant } from "../../../../types"; import "./ha-automation-condition-row"; import type HaAutomationConditionRow from "./ha-automation-condition-row"; @@ -49,6 +52,7 @@ import "./types/ha-automation-condition-template"; import "./types/ha-automation-condition-time"; import "./types/ha-automation-condition-trigger"; import "./types/ha-automation-condition-zone"; +import { storage } from "../../../../common/decorators/storage"; const PASTE_VALUE = "__paste__"; @@ -64,7 +68,13 @@ export default class HaAutomationCondition extends LitElement { @property({ type: Boolean }) public reOrderMode = false; - @property() public clipboard?: Clipboard; + @storage({ + key: "automationClipboard", + state: true, + subscribe: true, + storage: "sessionStorage", + }) + public _clipboard?: AutomationClipboard; private _focusLastConditionOnChange = false; @@ -157,7 +167,6 @@ export default class HaAutomationCondition extends LitElement { @move-condition=${this._move} @value-changed=${this._conditionChanged} @re-order=${this._enterReOrderMode} - .clipboard=${this.clipboard} .hass=${this.hass} > ${this.reOrderMode @@ -206,13 +215,13 @@ export default class HaAutomationCondition extends LitElement { > - ${this.clipboard?.condition + ${this._clipboard?.condition ? html` ${this.hass.localize( "ui.panel.config.automation.editor.conditions.paste" )} (${this.hass.localize( - `ui.panel.config.automation.editor.conditions.type.${this.clipboard.condition.condition}.label` + `ui.panel.config.automation.editor.conditions.type.${this._clipboard.condition.condition}.label` )}) ` @@ -281,7 +290,9 @@ export default class HaAutomationCondition extends LitElement { let conditions: Condition[]; if (value === PASTE_VALUE) { - conditions = this.conditions.concat(deepClone(this.clipboard!.condition)); + conditions = this.conditions.concat( + deepClone(this._clipboard!.condition) + ); } else { const condition = value as Condition["condition"]; diff --git a/src/panels/config/automation/condition/types/ha-automation-condition-logical.ts b/src/panels/config/automation/condition/types/ha-automation-condition-logical.ts index 527e2b7234..a7aa3fb9a6 100644 --- a/src/panels/config/automation/condition/types/ha-automation-condition-logical.ts +++ b/src/panels/config/automation/condition/types/ha-automation-condition-logical.ts @@ -1,10 +1,7 @@ import { html, LitElement } from "lit"; import { customElement, property } from "lit/decorators"; import { fireEvent } from "../../../../../common/dom/fire_event"; -import type { - LogicalCondition, - Clipboard, -} from "../../../../../data/automation"; +import type { LogicalCondition } from "../../../../../data/automation"; import type { HomeAssistant } from "../../../../../types"; import "../ha-automation-condition"; import type { ConditionElement } from "../ha-automation-condition-row"; @@ -19,8 +16,6 @@ export class HaLogicalCondition extends LitElement implements ConditionElement { @property({ type: Boolean }) public reOrderMode = false; - @property() public clipboard?: Clipboard; - public static get defaultConfig() { return { conditions: [], @@ -35,7 +30,6 @@ export class HaLogicalCondition extends LitElement implements ConditionElement { @value-changed=${this._valueChanged} .hass=${this.hass} .disabled=${this.disabled} - .clipboard=${this.clipboard} .reOrderMode=${this.reOrderMode} > `; diff --git a/src/panels/config/automation/ha-automation-editor.ts b/src/panels/config/automation/ha-automation-editor.ts index 3aa074c345..ecc97fb23d 100644 --- a/src/panels/config/automation/ha-automation-editor.ts +++ b/src/panels/config/automation/ha-automation-editor.ts @@ -16,12 +16,12 @@ import { } from "@mdi/js"; import { UnsubscribeFunc } from "home-assistant-js-websocket"; import { - css, CSSResultGroup, - html, LitElement, PropertyValues, TemplateResult, + css, + html, } from "lit"; import { property, query, state } from "lit/decorators"; import { classMap } from "lit/directives/class-map"; @@ -46,10 +46,7 @@ import { saveAutomationConfig, showAutomationEditor, triggerAutomationActions, - Trigger, - Condition, } from "../../../data/automation"; -import { Action } from "../../../data/script"; import { fetchEntityRegistry } from "../../../data/entity_registry"; import { showAlertDialog, @@ -79,11 +76,6 @@ declare global { "ui-mode-not-available": Error; duplicate: undefined; "re-order": undefined; - "set-clipboard": { - trigger?: Trigger; - condition?: Condition; - action?: Action; - }; } } diff --git a/src/panels/config/automation/manual-automation-editor.ts b/src/panels/config/automation/manual-automation-editor.ts index c8cf4fa69b..e0417269b6 100644 --- a/src/panels/config/automation/manual-automation-editor.ts +++ b/src/panels/config/automation/manual-automation-editor.ts @@ -3,7 +3,6 @@ import { mdiHelpCircle } from "@mdi/js"; import { HassEntity } from "home-assistant-js-websocket"; import { css, CSSResultGroup, html, LitElement } from "lit"; import { customElement, property } from "lit/decorators"; -import deepClone from "deep-clone-simple"; import { fireEvent } from "../../../common/dom/fire_event"; import "../../../components/ha-card"; import "../../../components/ha-icon-button"; @@ -11,7 +10,6 @@ import { Condition, ManualAutomationConfig, Trigger, - Clipboard, } from "../../../data/automation"; import { Action } from "../../../data/script"; import { haStyle } from "../../../resources/styles"; @@ -20,7 +18,6 @@ import { documentationUrl } from "../../../util/documentation-url"; import "./action/ha-automation-action"; import "./condition/ha-automation-condition"; import "./trigger/ha-automation-trigger"; -import { storage } from "../../../common/decorators/storage"; @customElement("manual-automation-editor") export class HaManualAutomationEditor extends LitElement { @@ -36,14 +33,6 @@ export class HaManualAutomationEditor extends LitElement { @property({ attribute: false }) public stateObj?: HassEntity; - @storage({ - key: "automationClipboard", - state: true, - subscribe: false, - storage: "sessionStorage", - }) - private _clipboard: Clipboard = {}; - protected render() { return html` ${this.disabled @@ -102,8 +91,6 @@ export class HaManualAutomationEditor extends LitElement { @value-changed=${this._triggerChanged} .hass=${this.hass} .disabled=${this.disabled} - @set-clipboard=${this._setClipboard} - .clipboard=${this._clipboard} >
@@ -133,8 +120,6 @@ export class HaManualAutomationEditor extends LitElement { @value-changed=${this._conditionChanged} .hass=${this.hass} .disabled=${this.disabled} - @set-clipboard=${this._setClipboard} - .clipboard=${this._clipboard} >
@@ -167,8 +152,6 @@ export class HaManualAutomationEditor extends LitElement { .hass=${this.hass} .narrow=${this.narrow} .disabled=${this.disabled} - @set-clipboard=${this._setClipboard} - .clipboard=${this._clipboard} > `; } @@ -180,11 +163,6 @@ export class HaManualAutomationEditor extends LitElement { }); } - private _setClipboard(ev: CustomEvent): void { - ev.stopPropagation(); - this._clipboard = { ...this._clipboard, ...deepClone(ev.detail) }; - } - private _conditionChanged(ev: CustomEvent): void { ev.stopPropagation(); fireEvent(this, "value-changed", { diff --git a/src/panels/config/automation/trigger/ha-automation-trigger-row.ts b/src/panels/config/automation/trigger/ha-automation-trigger-row.ts index fc8ce54e79..4719bc4074 100644 --- a/src/panels/config/automation/trigger/ha-automation-trigger-row.ts +++ b/src/panels/config/automation/trigger/ha-automation-trigger-row.ts @@ -3,9 +3,9 @@ import { ActionDetail } from "@material/mwc-list/mwc-list-foundation"; import "@material/mwc-list/mwc-list-item"; import { mdiCheck, - mdiContentDuplicate, mdiContentCopy, mdiContentCut, + mdiContentDuplicate, mdiDelete, mdiDotsVertical, mdiIdentifier, @@ -15,9 +15,10 @@ import { mdiStopCircleOutline, } from "@mdi/js"; import type { UnsubscribeFunc } from "home-assistant-js-websocket"; -import { css, CSSResultGroup, html, LitElement, PropertyValues } from "lit"; +import { CSSResultGroup, LitElement, PropertyValues, css, html } from "lit"; import { customElement, property, query, state } from "lit/decorators"; import { classMap } from "lit/directives/class-map"; +import { storage } from "../../../../common/decorators/storage"; import { dynamicElement } from "../../../../common/dom/dynamic-element-directive"; import { fireEvent } from "../../../../common/dom/fire_event"; import { capitalizeFirstLetter } from "../../../../common/string/capitalize-first-letter"; @@ -30,7 +31,8 @@ import "../../../../components/ha-expansion-panel"; import "../../../../components/ha-icon-button"; import "../../../../components/ha-textfield"; import { HaYamlEditor } from "../../../../components/ha-yaml-editor"; -import { subscribeTrigger, Trigger } from "../../../../data/automation"; +import type { AutomationClipboard } from "../../../../data/automation"; +import { Trigger, subscribeTrigger } from "../../../../data/automation"; import { describeTrigger } from "../../../../data/automation_i18n"; import { validateConfig } from "../../../../data/config"; import { fullEntitiesContext } from "../../../../data/context"; @@ -110,6 +112,14 @@ export default class HaAutomationTriggerRow extends LitElement { @query("ha-yaml-editor") private _yamlEditor?: HaYamlEditor; + @storage({ + key: "automationClipboard", + state: false, + subscribe: true, + storage: "sessionStorage", + }) + public _clipboard?: AutomationClipboard; + @state() @consume({ context: fullEntitiesContext, subscribe: true }) _entityReg!: EntityRegistryEntry[]; @@ -469,10 +479,10 @@ export default class HaAutomationTriggerRow extends LitElement { fireEvent(this, "duplicate"); break; case 4: - fireEvent(this, "set-clipboard", { trigger: this.trigger }); + this._setClipboard(); break; case 5: - fireEvent(this, "set-clipboard", { trigger: this.trigger }); + this._setClipboard(); fireEvent(this, "value-changed", { value: null }); break; case 6: @@ -492,6 +502,13 @@ export default class HaAutomationTriggerRow extends LitElement { } } + private _setClipboard() { + this._clipboard = { + ...this._clipboard, + trigger: this.trigger, + }; + } + private _onDelete() { showConfirmationDialog(this, { title: this.hass.localize( diff --git a/src/panels/config/automation/trigger/ha-automation-trigger.ts b/src/panels/config/automation/trigger/ha-automation-trigger.ts index d30e42ba98..fbe0539f8d 100644 --- a/src/panels/config/automation/trigger/ha-automation-trigger.ts +++ b/src/panels/config/automation/trigger/ha-automation-trigger.ts @@ -27,7 +27,7 @@ import "../../../../components/ha-button-menu"; import "../../../../components/ha-button"; import type { HaSelect } from "../../../../components/ha-select"; import "../../../../components/ha-svg-icon"; -import { Trigger, Clipboard } from "../../../../data/automation"; +import { Trigger, AutomationClipboard } from "../../../../data/automation"; import { TRIGGER_TYPES } from "../../../../data/trigger"; import { sortableStyles } from "../../../../resources/ha-sortable-style"; import { SortableInstance } from "../../../../resources/sortable"; @@ -51,6 +51,7 @@ import "./types/ha-automation-trigger-time"; import "./types/ha-automation-trigger-time_pattern"; import "./types/ha-automation-trigger-webhook"; import "./types/ha-automation-trigger-zone"; +import { storage } from "../../../../common/decorators/storage"; const PASTE_VALUE = "__paste__"; @@ -66,7 +67,13 @@ export default class HaAutomationTrigger extends LitElement { @property({ type: Boolean }) public reOrderMode = false; - @property() public clipboard?: Clipboard; + @storage({ + key: "automationClipboard", + state: true, + subscribe: true, + storage: "sessionStorage", + }) + public _clipboard?: AutomationClipboard; private _focusLastTriggerOnChange = false; @@ -155,13 +162,13 @@ export default class HaAutomationTrigger extends LitElement { > - ${this.clipboard?.trigger + ${this._clipboard?.trigger ? html` ${this.hass.localize( "ui.panel.config.automation.editor.triggers.paste" )} (${this.hass.localize( - `ui.panel.config.automation.editor.triggers.type.${this.clipboard.trigger.platform}.label` + `ui.panel.config.automation.editor.triggers.type.${this._clipboard.trigger.platform}.label` )}) `; } @@ -83,11 +70,6 @@ export class HaManualScriptEditor extends LitElement { }); } - private _setClipboard(ev: CustomEvent): void { - ev.stopPropagation(); - this._clipboard = { ...this._clipboard, ...deepClone(ev.detail) }; - } - private _duplicate() { fireEvent(this, "duplicate"); }