Skip to content

Commit a5ce813

Browse files
author
Rob Tjalma
authored
feat(plugins/SampledValues): Switch publisher and subscriber in SV subscription editor
1 parent 2d98615 commit a5ce813

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+2445
-2208
lines changed

public/js/plugins.js

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,15 @@ export const officialPlugins = [
2121
kind: 'editor',
2222
},
2323
{
24-
name: 'Subscription',
25-
src: '/src/editors/Subscription.js',
24+
name: 'Subscriber (GOOSE)',
25+
src: '/src/editors/GooseControlSubscription.js',
2626
icon: 'link',
2727
default: true,
2828
kind: 'editor',
2929
},
3030
{
31-
name: 'Sampled Values Subscriber',
32-
src: '/src/editors/SampledValues.js',
31+
name: 'Subscriber (SMV)',
32+
src: '/src/editors/SampledValuesSubscription.js',
3333
icon: 'link',
3434
default: true,
3535
kind: 'editor',
@@ -62,7 +62,7 @@ export const officialPlugins = [
6262
default: true,
6363
kind: 'menu',
6464
requireDoc: false,
65-
position: 'top'
65+
position: 'top',
6666
},
6767
{
6868
name: 'New project',
@@ -71,7 +71,7 @@ export const officialPlugins = [
7171
default: true,
7272
kind: 'menu',
7373
requireDoc: false,
74-
position: 'top'
74+
position: 'top',
7575
},
7676
{
7777
name: 'Save project',
@@ -80,7 +80,7 @@ export const officialPlugins = [
8080
default: true,
8181
kind: 'menu',
8282
requireDoc: true,
83-
position: 'top'
83+
position: 'top',
8484
},
8585
{
8686
name: 'Validate Schema',
@@ -94,7 +94,7 @@ export const officialPlugins = [
9494
src: '/src/validators/ValidateTemplates.js',
9595
icon: 'rule_folder',
9696
default: true,
97-
kind: 'validator'
97+
kind: 'validator',
9898
},
9999
{
100100
name: 'Import IEDs',
@@ -103,31 +103,31 @@ export const officialPlugins = [
103103
default: true,
104104
kind: 'menu',
105105
requireDoc: true,
106-
position: 'middle'
106+
position: 'middle',
107107
},
108108
{
109109
name: 'Subscriber Update',
110110
src: '/src/menu/SubscriberInfo.js',
111111
default: true,
112112
kind: 'menu',
113113
requireDoc: true,
114-
position: 'middle'
114+
position: 'middle',
115115
},
116116
{
117117
name: 'Update desc (ABB)',
118118
src: '/src/menu/UpdateDescriptionABB.js',
119119
default: false,
120120
kind: 'menu',
121121
requireDoc: true,
122-
position: 'middle'
122+
position: 'middle',
123123
},
124124
{
125125
name: 'Update desc (SEL)',
126126
src: '/src/menu/UpdateDescriptionSEL.js',
127127
default: false,
128128
kind: 'menu',
129129
requireDoc: true,
130-
position: 'middle'
130+
position: 'middle',
131131
},
132132
{
133133
name: 'Merge Project',
@@ -136,7 +136,7 @@ export const officialPlugins = [
136136
default: true,
137137
kind: 'menu',
138138
requireDoc: true,
139-
position: 'middle'
139+
position: 'middle',
140140
},
141141
{
142142
name: 'Update Substation',
@@ -145,7 +145,7 @@ export const officialPlugins = [
145145
default: true,
146146
kind: 'menu',
147147
requireDoc: true,
148-
position: 'middle'
148+
position: 'middle',
149149
},
150150
{
151151
name: 'Cleanup',
@@ -161,6 +161,6 @@ export const officialPlugins = [
161161
default: true,
162162
kind: 'menu',
163163
requireDoc: false,
164-
position: 'bottom'
164+
position: 'bottom',
165165
},
166166
];

src/editors/Subscription.ts renamed to src/editors/GooseControlSubscription.ts

Lines changed: 40 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,36 @@
1-
import { LitElement, html, TemplateResult, property, css, query } from 'lit-element';
1+
import {
2+
LitElement,
3+
html,
4+
TemplateResult,
5+
property,
6+
css,
7+
query,
8+
} from 'lit-element';
9+
import { translate } from 'lit-translate';
210

3-
import '@material/mwc-fab';
411
import '@material/mwc-radio';
512
import '@material/mwc-formfield';
13+
import { RadioListItem } from '@material/mwc-list/mwc-radio-list-item';
614

7-
import './subscription/subscriber-list.js';
8-
import './subscription/goose-publisher-list.js';
9-
import './subscription/goose-subscriber-list.js';
10-
import { translate } from 'lit-translate';
15+
import './subscription/goose/subscriber-list.js';
16+
import './subscription/goose/goose-list.js';
17+
import './subscription/ied-list.js';
1118
import { newViewEvent, View, ViewEvent } from './subscription/foundation.js';
12-
import { RadioListItem } from '@material/mwc-list/mwc-radio-list-item';
1319

1420
/** Defining view outside the class, which makes it persistent. */
15-
let view: View = View.GOOSE_PUBLISHER;
21+
let view: View = View.PUBLISHER;
1622

17-
/** An editor [[`plugin`]] for subscribing IEDs to GOOSE messages using the ABB subscription method. */
18-
export default class SubscriptionABBPlugin extends LitElement {
23+
/** An editor [[`plugin`]] for subscribing IEDs to GOOSE messages. */
24+
export default class GooseControlSubscriptionPlugin extends LitElement {
1925
/** The document being edited as provided to plugins by [[`OpenSCD`]]. */
2026
@property()
2127
doc!: XMLDocument;
2228

23-
@query('#byGooseRadio')
24-
byGooseRadio!: RadioListItem;
29+
@query('#goosePublisherView')
30+
goosePublisherView!: RadioListItem;
2531

26-
@query('#byIedRadio')
27-
byIedRadio!: RadioListItem;
32+
@query('#gooseSubscriberView')
33+
gooseSubscriberView!: RadioListItem;
2834

2935
@query('div[class="container"]')
3036
listDiv!: Element;
@@ -38,38 +44,43 @@ export default class SubscriptionABBPlugin extends LitElement {
3844
}
3945

4046
firstUpdated(): void {
41-
view == View.GOOSE_PUBLISHER
42-
? this.byGooseRadio.setAttribute('checked', '')
43-
: this.byIedRadio.setAttribute('checked', '')
47+
view == View.PUBLISHER
48+
? this.goosePublisherView.setAttribute('checked', '')
49+
: this.gooseSubscriberView.setAttribute('checked', '');
4450
}
4551

4652
render(): TemplateResult {
4753
return html`<div>
48-
<mwc-formfield label="${translate('subscription.view.publisherView')}">
54+
<mwc-formfield
55+
label="${translate('subscription.goose.view.publisherView')}"
56+
>
4957
<mwc-radio
50-
id="byGooseRadio"
58+
id="goosePublisherView"
5159
name="view"
5260
value="goose"
53-
@checked=${() => this.listDiv.dispatchEvent(newViewEvent(View.GOOSE_PUBLISHER))}
61+
@click=${() =>
62+
this.listDiv.dispatchEvent(newViewEvent(View.PUBLISHER))}
5463
></mwc-radio>
5564
</mwc-formfield>
56-
<mwc-formfield label="${translate('subscription.view.subscriberView')}">
65+
<mwc-formfield
66+
label="${translate('subscription.goose.view.subscriberView')}"
67+
>
5768
<mwc-radio
58-
id="byIedRadio"
69+
id="gooseSubscriberView"
5970
name="view"
6071
value="ied"
61-
@checked=${() => this.listDiv.dispatchEvent(newViewEvent(View.GOOSE_SUBSCRIBER))}
72+
@click=${() =>
73+
this.listDiv.dispatchEvent(newViewEvent(View.SUBSCRIBER))}
6274
></mwc-radio>
6375
</mwc-formfield>
6476
<div class="container">
65-
${view == View.GOOSE_PUBLISHER
66-
? html`<goose-publisher-list class="row" .doc=${this.doc}></goose-publisher-list>`
67-
: html`<goose-subscriber-list class="row" .doc=${this.doc}></goose-subscriber-list>`
68-
}
69-
<subscriber-list
77+
${view == View.PUBLISHER
78+
? html`<goose-list class="row" .doc=${this.doc}></goose-list>`
79+
: html`<ied-list class="row" .doc=${this.doc}></ied-list>`}
80+
<subscriber-list-goose
7081
class="row"
7182
.doc=${this.doc}
72-
></subscriber-list>
83+
></subscriber-list-goose>
7384
</div>
7485
</div>`;
7586
}

src/editors/SampledValues.ts

Lines changed: 0 additions & 49 deletions
This file was deleted.
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
import {
2+
LitElement,
3+
html,
4+
TemplateResult,
5+
property,
6+
css,
7+
query,
8+
} from 'lit-element';
9+
import { translate } from 'lit-translate';
10+
11+
import { RadioListItem } from '@material/mwc-list/mwc-radio-list-item.js';
12+
13+
import './subscription/sampledvalues/subscriber-list.js';
14+
import './subscription/sampledvalues/smv-list.js';
15+
import './subscription/ied-list.js';
16+
import { newViewEvent, View, ViewEvent } from './subscription/foundation.js';
17+
18+
/** Defining view outside the class, which makes it persistent. */
19+
let view: View = View.PUBLISHER;
20+
21+
/** An editor [[`plugin`]] for subscribing IEDs to Sampled Values. */
22+
export default class SampledValuesSubscriberPlugin extends LitElement {
23+
/** The document being edited as provided to plugins by [[`OpenSCD`]]. */
24+
@property()
25+
doc!: XMLDocument;
26+
27+
@query('#smvPublisherView')
28+
smvPublisherView!: RadioListItem;
29+
30+
@query('#smvSubscriberView')
31+
smvSubscriberView!: RadioListItem;
32+
33+
@query('div[class="container"]')
34+
listDiv!: Element;
35+
36+
constructor() {
37+
super();
38+
this.addEventListener('view', (evt: ViewEvent) => {
39+
view = evt.detail.view;
40+
this.requestUpdate();
41+
});
42+
}
43+
44+
firstUpdated(): void {
45+
view == View.PUBLISHER
46+
? this.smvPublisherView.setAttribute('checked', '')
47+
: this.smvSubscriberView.setAttribute('checked', '');
48+
}
49+
50+
render(): TemplateResult {
51+
return html`<div>
52+
<mwc-formfield
53+
label="${translate('subscription.smv.view.publisherView')}"
54+
>
55+
<mwc-radio
56+
id="smvPublisherView"
57+
name="view"
58+
value="smv"
59+
@click=${() =>
60+
this.listDiv.dispatchEvent(newViewEvent(View.PUBLISHER))}
61+
></mwc-radio>
62+
</mwc-formfield>
63+
<mwc-formfield
64+
label="${translate('subscription.smv.view.subscriberView')}"
65+
>
66+
<mwc-radio
67+
id="smvSubscriberView"
68+
name="view"
69+
value="ied"
70+
@click=${() =>
71+
this.listDiv.dispatchEvent(newViewEvent(View.SUBSCRIBER))}
72+
></mwc-radio>
73+
</mwc-formfield>
74+
<div class="container">
75+
${view == View.PUBLISHER
76+
? html`<smv-list class="row" .doc=${this.doc}></smv-list>`
77+
: html`<ied-list class="row" .doc=${this.doc}></ied-list>`}
78+
<subscriber-list-smv class="row" .doc=${this.doc}></subscriber-list-smv>
79+
</div>
80+
</div>`;
81+
}
82+
83+
static styles = css`
84+
:host {
85+
width: 100vw;
86+
}
87+
88+
.container {
89+
display: flex;
90+
padding: 8px 6px 16px;
91+
height: 86vh;
92+
}
93+
94+
.row {
95+
flex: 50%;
96+
margin: 0px 6px 0px;
97+
min-width: 300px;
98+
height: 100%;
99+
overflow-y: scroll;
100+
}
101+
`;
102+
}

0 commit comments

Comments
 (0)