mirror of
https://github.com/home-assistant/frontend.git
synced 2025-08-02 14:07:55 +00:00
Add global yaml editor
This commit is contained in:
parent
14308c9057
commit
bbf8a8e3e7
@ -8,6 +8,7 @@ import {
|
|||||||
mdiOpenInNew,
|
mdiOpenInNew,
|
||||||
} from "@mdi/js";
|
} from "@mdi/js";
|
||||||
import deepFreeze from "deep-freeze";
|
import deepFreeze from "deep-freeze";
|
||||||
|
import { dump, load } from "js-yaml";
|
||||||
import {
|
import {
|
||||||
CSSResultGroup,
|
CSSResultGroup,
|
||||||
LitElement,
|
LitElement,
|
||||||
@ -23,6 +24,7 @@ import { fireEvent } from "../../../../common/dom/fire_event";
|
|||||||
import "../../../../components/ha-button";
|
import "../../../../components/ha-button";
|
||||||
import "../../../../components/ha-button-menu-new";
|
import "../../../../components/ha-button-menu-new";
|
||||||
import "../../../../components/ha-circular-progress";
|
import "../../../../components/ha-circular-progress";
|
||||||
|
import "../../../../components/ha-code-editor";
|
||||||
import "../../../../components/ha-dialog";
|
import "../../../../components/ha-dialog";
|
||||||
import "../../../../components/ha-dialog-header";
|
import "../../../../components/ha-dialog-header";
|
||||||
import "../../../../components/ha-icon-button";
|
import "../../../../components/ha-icon-button";
|
||||||
@ -82,7 +84,7 @@ export class HuiDialogEditCard
|
|||||||
@query("hui-card-editor")
|
@query("hui-card-editor")
|
||||||
private _cardEditorEl?: HuiCardElementEditor;
|
private _cardEditorEl?: HuiCardElementEditor;
|
||||||
|
|
||||||
@state() private _yamlMode = true;
|
@state() private _yamlMode = false;
|
||||||
|
|
||||||
@state() private _documentationURL?: string;
|
@state() private _documentationURL?: string;
|
||||||
|
|
||||||
@ -92,8 +94,7 @@ export class HuiDialogEditCard
|
|||||||
|
|
||||||
public async showDialog(params: EditCardDialogParams): Promise<void> {
|
public async showDialog(params: EditCardDialogParams): Promise<void> {
|
||||||
this._params = params;
|
this._params = params;
|
||||||
this._yamlMode = true;
|
this._yamlMode = false;
|
||||||
this._guiModeAvailable = true;
|
|
||||||
|
|
||||||
const containerConfig = findLovelaceContainer(
|
const containerConfig = findLovelaceContainer(
|
||||||
params.lovelaceConfig,
|
params.lovelaceConfig,
|
||||||
@ -275,6 +276,21 @@ export class HuiDialogEditCard
|
|||||||
</ha-dialog-header>
|
</ha-dialog-header>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div class="element-editor">
|
<div class="element-editor">
|
||||||
|
${this._yamlMode
|
||||||
|
? html`
|
||||||
|
<ha-code-editor
|
||||||
|
mode="yaml"
|
||||||
|
autofocus
|
||||||
|
autocomplete-entities
|
||||||
|
autocomplete-icons
|
||||||
|
.hass=${this.hass}
|
||||||
|
.value=${dump(this._cardConfig)}
|
||||||
|
@value-changed=${this._handleYAMLChanged}
|
||||||
|
@keydown=${this._ignoreKeydown}
|
||||||
|
dir="ltr"
|
||||||
|
></ha-code-editor>
|
||||||
|
`
|
||||||
|
: html`
|
||||||
<hui-card-editor
|
<hui-card-editor
|
||||||
.containerConfig=${this._containerConfig}
|
.containerConfig=${this._containerConfig}
|
||||||
.hass=${this.hass}
|
.hass=${this.hass}
|
||||||
@ -286,6 +302,7 @@ export class HuiDialogEditCard
|
|||||||
dialogInitialFocus
|
dialogInitialFocus
|
||||||
>
|
>
|
||||||
</hui-card-editor>
|
</hui-card-editor>
|
||||||
|
`}
|
||||||
</div>
|
</div>
|
||||||
<div class="element-preview">
|
<div class="element-preview">
|
||||||
${this._isInSection
|
${this._isInSection
|
||||||
@ -361,17 +378,20 @@ export class HuiDialogEditCard
|
|||||||
ev.stopPropagation();
|
ev.stopPropagation();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private _handleYAMLChanged(ev: CustomEvent) {
|
||||||
|
this._cardConfig = load(ev.detail.value) as LovelaceCardConfig;
|
||||||
|
this._dirty = true;
|
||||||
|
}
|
||||||
|
|
||||||
private _handleConfigChanged(ev: HASSDomEvent<ConfigChangedEvent>) {
|
private _handleConfigChanged(ev: HASSDomEvent<ConfigChangedEvent>) {
|
||||||
this._cardConfig = deepFreeze(ev.detail.config);
|
this._cardConfig = deepFreeze(ev.detail.config);
|
||||||
this._error = ev.detail.error;
|
this._error = ev.detail.error;
|
||||||
this._guiModeAvailable = ev.detail.guiModeAvailable;
|
|
||||||
this._dirty = true;
|
this._dirty = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private _handleGUIModeChanged(ev: HASSDomEvent<GUIModeChangedEvent>): void {
|
private _handleGUIModeChanged(ev: HASSDomEvent<GUIModeChangedEvent>): void {
|
||||||
ev.stopPropagation();
|
ev.stopPropagation();
|
||||||
this._yamlMode = ev.detail.guiMode;
|
this._yamlMode = ev.detail.guiMode;
|
||||||
this._guiModeAvailable = ev.detail.guiModeAvailable;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private _opened() {
|
private _opened() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user