diff --git a/src/editors/publisher/gse-control-editor.ts b/src/editors/publisher/gse-control-editor.ts index 5fb4c27acc..00db841002 100644 --- a/src/editors/publisher/gse-control-editor.ts +++ b/src/editors/publisher/gse-control-editor.ts @@ -3,7 +3,8 @@ import { customElement, html, LitElement, - property as state, + property, + state, query, TemplateResult, } from 'lit-element'; @@ -15,6 +16,7 @@ import { Button } from '@material/mwc-button'; import { ListItem } from '@material/mwc-list/mwc-list-item'; import './data-set-element-editor.js'; +import './gse-control-element-editor.js'; import '../../filtered-list.js'; import { FilteredList } from '../../filtered-list.js'; @@ -25,11 +27,26 @@ import { styles } from './foundation.js'; @customElement('gse-control-editor') export class GseControlEditor extends LitElement { /** The document being edited as provided to plugins by [[`OpenSCD`]]. */ - @state({ attribute: false }) - doc!: XMLDocument; + @property({ attribute: false }) + set doc(newDoc: XMLDocument) { + if (this._doc === newDoc) return; + this.selectedDataSet = undefined; + this.selectedGseControl = undefined; + + this._doc = newDoc; + + this.requestUpdate(); + } + get doc(): XMLDocument { + return this._doc; + } + private _doc!: XMLDocument; + + @state() + selectedGseControl?: Element; @state() - selectedGseControl?: Element | null; + selectedDataSet?: Element | null; @query('.selectionlist') selectionList!: FilteredList; @query('mwc-button') selectGSEControlButton!: Button; @@ -37,9 +54,12 @@ export class GseControlEditor extends LitElement { private selectGSEControl(evt: Event): void { const id = ((evt.target as FilteredList).selected as ListItem).value; const gseControl = this.doc.querySelector(selector('GSEControl', id)); + if (!gseControl) return; + + this.selectedGseControl = gseControl; if (gseControl) { - this.selectedGseControl = gseControl.parentElement?.querySelector( + this.selectedDataSet = gseControl.parentElement?.querySelector( `DataSet[name="${gseControl.getAttribute('datSet')}"]` ); (evt.target as FilteredList).classList.add('hidden'); @@ -51,8 +71,12 @@ export class GseControlEditor extends LitElement { if (this.selectedGseControl !== undefined) return html`