Skip to content

Commit e95dfc5

Browse files
feat(editors/publisher): add sampled-value-control-element-editor (openscd#920)
* feat(editors/publisher): add read only sampled-value-control-element-editor * refactor(editors/publisher): review comments
1 parent 92e7390 commit e95dfc5

10 files changed

+780
-7
lines changed

src/editors/publisher/data-set-editor.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,21 @@ import { styles } from './foundation.js';
2626
export class DataSetEditor extends LitElement {
2727
/** The document being edited as provided to plugins by [[`OpenSCD`]]. */
2828
@property({ attribute: false })
29-
doc!: XMLDocument;
29+
set doc(newDoc: XMLDocument) {
30+
if (this._doc === newDoc) return;
31+
32+
this.selectedDataSet = undefined;
33+
if (this.selectionList && this.selectionList.selected)
34+
(this.selectionList.selected as ListItem).selected = false;
35+
36+
this._doc = newDoc;
37+
38+
this.requestUpdate();
39+
}
40+
get doc(): XMLDocument {
41+
return this._doc;
42+
}
43+
private _doc!: XMLDocument;
3044

3145
@state()
3246
selectedDataSet?: Element;

src/editors/publisher/gse-control-editor.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ export class GseControlEditor extends LitElement {
3333

3434
this.selectedDataSet = undefined;
3535
this.selectedGseControl = undefined;
36+
if (this.selectionList && this.selectionList.selected)
37+
(this.selectionList.selected as ListItem).selected = false;
3638

3739
this._doc = newDoc;
3840

src/editors/publisher/report-control-editor.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ export class ReportControlEditor extends LitElement {
3333

3434
this.selectedDataSet = undefined;
3535
this.selectedReportControl = undefined;
36+
if (this.selectionList && this.selectionList.selected)
37+
(this.selectionList.selected as ListItem).selected = false;
3638

3739
this._doc = newDoc;
3840

src/editors/publisher/sampled-value-control-editor.ts

Lines changed: 52 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import { ListItem } from '@material/mwc-list/mwc-list-item';
1717

1818
import './data-set-element-editor.js';
1919
import '../../filtered-list.js';
20+
import './sampled-value-control-element-editor.js';
2021
import { FilteredList } from '../../filtered-list.js';
2122

2223
import { compareNames, identity, selector } from '../../foundation.js';
@@ -27,10 +28,27 @@ import { styles } from './foundation.js';
2728
export class SampledValueControlEditor extends LitElement {
2829
/** The document being edited as provided to plugins by [[`OpenSCD`]]. */
2930
@property({ attribute: false })
30-
doc!: XMLDocument;
31+
set doc(newDoc: XMLDocument) {
32+
if (this._doc === newDoc) return;
3133

34+
this.selectedDataSet = undefined;
35+
this.selectedSampledValueControl = undefined;
36+
if (this.selectionList && this.selectionList.selected)
37+
(this.selectionList.selected as ListItem).selected = false;
38+
39+
this._doc = newDoc;
40+
41+
this.requestUpdate();
42+
}
43+
get doc(): XMLDocument {
44+
return this._doc;
45+
}
46+
private _doc!: XMLDocument;
47+
48+
@state()
49+
selectedSampledValueControl?: Element;
3250
@state()
33-
selectedSampledValueControl?: Element | null;
51+
selectedDataSet?: Element | null;
3452

3553
@query('.selectionlist') selectionList!: FilteredList;
3654
@query('mwc-button') selectSampledValueControlButton!: Button;
@@ -40,12 +58,15 @@ export class SampledValueControlEditor extends LitElement {
4058
const smvControl = this.doc.querySelector(
4159
selector('SampledValueControl', id)
4260
);
61+
if (!smvControl) return;
62+
63+
this.selectedSampledValueControl = smvControl;
4364

4465
if (smvControl) {
45-
this.selectedSampledValueControl =
66+
this.selectedDataSet =
4667
smvControl.parentElement?.querySelector(
4768
`DataSet[name="${smvControl.getAttribute('datSet')}"]`
48-
);
69+
) ?? null;
4970
(evt.target as FilteredList).classList.add('hidden');
5071
this.selectSampledValueControlButton.classList.remove('hidden');
5172
}
@@ -55,8 +76,12 @@ export class SampledValueControlEditor extends LitElement {
5576
if (this.selectedSampledValueControl !== undefined)
5677
return html`<div class="elementeditorcontainer">
5778
<data-set-element-editor
58-
.element=${this.selectedSampledValueControl}
79+
.element=${this.selectedDataSet!}
5980
></data-set-element-editor>
81+
<sampled-value-control-element-editor
82+
.doc=${this.doc}
83+
.element=${this.selectedSampledValueControl}
84+
></sampled-value-control-element-editor>
6085
</div>`;
6186

6287
return html``;
@@ -126,8 +151,29 @@ export class SampledValueControlEditor extends LitElement {
126151
static styles = css`
127152
${styles}
128153
154+
.elementeditorcontainer {
155+
flex: 65%;
156+
margin: 4px 8px 4px 4px;
157+
background-color: var(--mdc-theme-surface);
158+
overflow-y: scroll;
159+
display: grid;
160+
grid-gap: 12px;
161+
padding: 8px 12px 16px;
162+
grid-template-columns: repeat(3, 1fr);
163+
}
164+
129165
data-set-element-editor {
130-
flex: auto;
166+
grid-column: 1 / 2;
167+
}
168+
169+
sampled-value-control-element-editor {
170+
grid-column: 2 / 4;
171+
}
172+
173+
@media (max-width: 950px) {
174+
.elementeditorcontainer {
175+
display: block;
176+
}
131177
}
132178
`;
133179
}

0 commit comments

Comments
 (0)