Skip to content

Commit d5f8bb7

Browse files
author
Dennis Labordus
authored
fix(editor/subscriber): filtering on FCDAs retains the parent (openscd#1048)
Signed-off-by: Dennis Labordus <[email protected]> Signed-off-by: Dennis Labordus <[email protected]>
1 parent 0b414e1 commit d5f8bb7

File tree

8 files changed

+306
-207
lines changed

8 files changed

+306
-207
lines changed

src/editors/subscription/fcda-binding-list.ts

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import { gooseIcon, smvIcon } from '../../icons/icons.js';
2525
import { wizards } from '../../wizards/wizard-library.js';
2626

2727
import {
28+
getFcdaSubtitleValue,
2829
getFcdaTitleValue,
2930
newFcdaSelectEvent,
3031
styles,
@@ -175,18 +176,11 @@ export class FcdaBindingList extends LitElement {
175176
twoline
176177
class="subitem"
177178
@click=${() => this.onFcdaSelect(controlElement, fcdaElement)}
178-
value="${identity(controlElement)} ${identity(fcdaElement)}"
179+
value="${identity(controlElement)}
180+
${identity(fcdaElement)}"
179181
>
180182
<span>${getFcdaTitleValue(fcdaElement)}</span>
181-
<span slot="secondary">
182-
${fcdaElement.getAttribute('ldInst')}${fcdaElement.hasAttribute(
183-
'ldInst'
184-
) && fcdaElement.hasAttribute('prefix')
185-
? html`/`
186-
: nothing}${fcdaElement.getAttribute('prefix')}
187-
${fcdaElement.getAttribute('lnClass')}
188-
${fcdaElement.getAttribute('lnInst')}
189-
</span>
183+
<span slot="secondary">${getFcdaSubtitleValue(fcdaElement)}</span>
190184
<mwc-icon slot="graphic">subdirectory_arrow_right</mwc-icon>
191185
${fcdaCount !== 0 ? html`<span slot="meta">${fcdaCount}</span>` : nothing}
192186
</mwc-list-item>`;
@@ -210,9 +204,15 @@ export class FcdaBindingList extends LitElement {
210204
graphic="icon"
211205
twoline
212206
hasMeta
213-
value="${identity(controlElement)} ${fcdaElements
214-
.map(fcdaElement => identity(fcdaElement) as string)
215-
.join(' ')}"
207+
value="
208+
${identity(controlElement)}${fcdaElements
209+
.map(
210+
fcdaElement => `
211+
${getFcdaTitleValue(fcdaElement)}
212+
${getFcdaSubtitleValue(fcdaElement)}
213+
${identity(fcdaElement)}`
214+
)
215+
.join('')}"
216216
>
217217
<mwc-icon-button
218218
slot="meta"

src/editors/subscription/foundation.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,16 @@ export function getFcdaTitleValue(fcdaElement: Element): string {
9797
}${fcdaElement.getAttribute('daName')}`;
9898
}
9999

100+
export function getFcdaSubtitleValue(fcdaElement: Element): string {
101+
return `${fcdaElement.getAttribute('ldInst')} ${
102+
fcdaElement.hasAttribute('ldInst') && fcdaElement.hasAttribute('prefix')
103+
? `/`
104+
: ''
105+
} ${fcdaElement.getAttribute('prefix')} ${fcdaElement.getAttribute(
106+
'lnClass'
107+
)} ${fcdaElement.getAttribute('lnInst')}`;
108+
}
109+
100110
export function existExtRef(
101111
parentInputs: Element,
102112
fcda: Element,

test/integration/editors/GooseSubscriberDataBinding.test.ts

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
getExtrefDataBindingList,
1010
getFCDABindingList,
1111
getSelectedSubItemValue,
12+
selectFCDAItem,
1213
} from './test-support.js';
1314

1415
describe('GOOSE Subscribe Data Binding Plugin', async () => {
@@ -39,12 +40,13 @@ describe('GOOSE Subscribe Data Binding Plugin', async () => {
3940
const fcdaListElement = getFCDABindingList(element);
4041
const extRefListElement = getExtrefDataBindingList(element);
4142

42-
(<HTMLElement>(
43-
fcdaListElement.shadowRoot!.querySelector(
44-
'mwc-list-item[value="GOOSE_Publisher>>QB2_Disconnector>GOOSE1 GOOSE_Publisher>>QB2_Disconnector>GOOSE1sDataSet>QB1_Disconnector/ CSWI 1.Pos q (ST)"]'
45-
)
46-
)).click();
43+
selectFCDAItem(
44+
fcdaListElement,
45+
'GOOSE_Publisher>>QB2_Disconnector>GOOSE1',
46+
'GOOSE_Publisher>>QB2_Disconnector>GOOSE1sDataSet>QB1_Disconnector/ CSWI 1.Pos q (ST)'
47+
);
4748
await element.requestUpdate();
49+
await extRefListElement.requestUpdate();
4850

4951
expect(extRefListElement['getSubscribedLNElements']().length).to.be.equal(
5052
0
@@ -80,11 +82,11 @@ describe('GOOSE Subscribe Data Binding Plugin', async () => {
8082
const fcdaListElement = getFCDABindingList(element);
8183
const extRefListElement = getExtrefDataBindingList(element);
8284

83-
(<HTMLElement>(
84-
fcdaListElement.shadowRoot!.querySelector(
85-
'mwc-list-item[value="GOOSE_Publisher>>QB2_Disconnector>GOOSE2 GOOSE_Publisher>>QB2_Disconnector>GOOSE2sDataSet>QB2_Disconnector/ CSWI 1.Pos q (ST)"]'
86-
)
87-
)).click();
85+
selectFCDAItem(
86+
fcdaListElement,
87+
'GOOSE_Publisher>>QB2_Disconnector>GOOSE2',
88+
'GOOSE_Publisher>>QB2_Disconnector>GOOSE2sDataSet>QB2_Disconnector/ CSWI 1.Pos q (ST)'
89+
);
8890
await element.requestUpdate();
8991
await extRefListElement.requestUpdate();
9092

@@ -130,11 +132,11 @@ describe('GOOSE Subscribe Data Binding Plugin', async () => {
130132
).length
131133
).to.be.equal(1);
132134

133-
(<HTMLElement>(
134-
fcdaListElement.shadowRoot!.querySelector(
135-
'mwc-list-item[value="GOOSE_Publisher>>QB2_Disconnector>GOOSE2 GOOSE_Publisher>>QB2_Disconnector>GOOSE2sDataSet>QB2_Disconnector/ CSWI 1.Pos q (ST)"]'
136-
)
137-
)).click();
135+
selectFCDAItem(
136+
fcdaListElement,
137+
'GOOSE_Publisher>>QB2_Disconnector>GOOSE2',
138+
'GOOSE_Publisher>>QB2_Disconnector>GOOSE2sDataSet>QB2_Disconnector/ CSWI 1.Pos q (ST)'
139+
);
138140
await element.requestUpdate();
139141
await extRefListElement.requestUpdate();
140142

@@ -145,11 +147,11 @@ describe('GOOSE Subscribe Data Binding Plugin', async () => {
145147
)).click();
146148
await element.requestUpdate();
147149

148-
(<HTMLElement>(
149-
fcdaListElement.shadowRoot!.querySelector(
150-
'mwc-list-item[value="GOOSE_Publisher>>QB2_Disconnector>GOOSE2 GOOSE_Publisher>>QB2_Disconnector>GOOSE2sDataSet>QB2_Disconnector/ CSWI 1.Pos stVal (ST)"]'
151-
)
152-
)).click();
150+
selectFCDAItem(
151+
fcdaListElement,
152+
'GOOSE_Publisher>>QB2_Disconnector>GOOSE2',
153+
'GOOSE_Publisher>>QB2_Disconnector>GOOSE2sDataSet>QB2_Disconnector/ CSWI 1.Pos stVal (ST)'
154+
);
153155
await element.requestUpdate();
154156
await extRefListElement.requestUpdate();
155157

test/integration/editors/GooseSubscriberLaterBinding.test.ts

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
getExtrefLaterBindingList,
88
getFCDABindingList,
99
getSelectedSubItemValue,
10+
selectFCDAItem,
1011
} from './test-support.js';
1112

1213
describe('GOOSE Subscribe Later Binding Plugin', () => {
@@ -34,12 +35,13 @@ describe('GOOSE Subscribe Later Binding Plugin', () => {
3435
const fcdaListElement = getFCDABindingList(element);
3536
const extRefListElement = getExtrefLaterBindingList(element);
3637

37-
(<HTMLElement>(
38-
fcdaListElement.shadowRoot!.querySelector(
39-
'mwc-list-item[value="GOOSE_Publisher>>QB2_Disconnector>GOOSE1 GOOSE_Publisher>>QB2_Disconnector>GOOSE1sDataSet>QB1_Disconnector/ CSWI 1.Pos q (ST)"]'
40-
)
41-
)).click();
38+
selectFCDAItem(
39+
fcdaListElement,
40+
'GOOSE_Publisher>>QB2_Disconnector>GOOSE1',
41+
'GOOSE_Publisher>>QB2_Disconnector>GOOSE1sDataSet>QB1_Disconnector/ CSWI 1.Pos q (ST)'
42+
);
4243
await element.requestUpdate();
44+
await extRefListElement.requestUpdate();
4345

4446
expect(
4547
extRefListElement['getSubscribedExtRefElements']().length
@@ -69,11 +71,11 @@ describe('GOOSE Subscribe Later Binding Plugin', () => {
6971
const fcdaListElement = getFCDABindingList(element);
7072
const extRefListElement = getExtrefLaterBindingList(element);
7173

72-
(<HTMLElement>(
73-
fcdaListElement.shadowRoot!.querySelector(
74-
'mwc-list-item[value="GOOSE_Publisher>>QB2_Disconnector>GOOSE2 GOOSE_Publisher>>QB2_Disconnector>GOOSE2sDataSet>QB2_Disconnector/ CSWI 1.Pos q (ST)"]'
75-
)
76-
)).click();
74+
selectFCDAItem(
75+
fcdaListElement,
76+
'GOOSE_Publisher>>QB2_Disconnector>GOOSE2',
77+
'GOOSE_Publisher>>QB2_Disconnector>GOOSE2sDataSet>QB2_Disconnector/ CSWI 1.Pos q (ST)'
78+
);
7779
await element.requestUpdate();
7880
await extRefListElement.requestUpdate();
7981

test/integration/editors/SMVSubscriberDataBinding.test.ts

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
getExtrefDataBindingList,
1010
getFCDABindingList,
1111
getSelectedSubItemValue,
12+
selectFCDAItem,
1213
} from './test-support.js';
1314

1415
describe('SMV Subscribe Data Binding Plugin', async () => {
@@ -39,12 +40,13 @@ describe('SMV Subscribe Data Binding Plugin', async () => {
3940
const fcdaListElement = getFCDABindingList(element);
4041
const extRefListElement = getExtrefDataBindingList(element);
4142

42-
(<HTMLElement>(
43-
fcdaListElement.shadowRoot!.querySelector(
44-
'mwc-list-item[value="SMV_Publisher>>CurrentTransformer>fullSmv SMV_Publisher>>CurrentTransformer>fullSmvsDataSet>CurrentTransformer/L2 TCTR 1.AmpSv q (MX)"]'
45-
)
46-
)).click();
43+
selectFCDAItem(
44+
fcdaListElement,
45+
'SMV_Publisher>>CurrentTransformer>fullSmv',
46+
'SMV_Publisher>>CurrentTransformer>fullSmvsDataSet>CurrentTransformer/L2 TCTR 1.AmpSv q (MX)'
47+
);
4748
await element.requestUpdate();
49+
await extRefListElement.requestUpdate();
4850

4951
expect(extRefListElement['getSubscribedLNElements']().length).to.be.equal(
5052
1
@@ -80,11 +82,11 @@ describe('SMV Subscribe Data Binding Plugin', async () => {
8082
const fcdaListElement = getFCDABindingList(element);
8183
const extRefListElement = getExtrefDataBindingList(element);
8284

83-
(<HTMLElement>(
84-
fcdaListElement.shadowRoot!.querySelector(
85-
'mwc-list-item[value="SMV_Publisher>>CurrentTransformer>fullSmv SMV_Publisher>>CurrentTransformer>fullSmvsDataSet>CurrentTransformer/L3 TCTR 1.AmpSv instMag.i (MX)"]'
86-
)
87-
)).click();
85+
selectFCDAItem(
86+
fcdaListElement,
87+
'SMV_Publisher>>CurrentTransformer>fullSmv',
88+
'SMV_Publisher>>CurrentTransformer>fullSmvsDataSet>CurrentTransformer/L3 TCTR 1.AmpSv instMag.i (MX)'
89+
);
8890
await element.requestUpdate();
8991
await extRefListElement.requestUpdate();
9092

@@ -128,11 +130,11 @@ describe('SMV Subscribe Data Binding Plugin', async () => {
128130
).length
129131
).to.be.equal(1);
130132

131-
(<HTMLElement>(
132-
fcdaListElement.shadowRoot!.querySelector(
133-
'mwc-list-item[value="SMV_Publisher>>CurrentTransformer>fullSmv SMV_Publisher>>CurrentTransformer>fullSmvsDataSet>CurrentTransformer/L2 TCTR 1.AmpSv q (MX)"]'
134-
)
135-
)).click();
133+
selectFCDAItem(
134+
fcdaListElement,
135+
'SMV_Publisher>>CurrentTransformer>fullSmv',
136+
'SMV_Publisher>>CurrentTransformer>fullSmvsDataSet>CurrentTransformer/L2 TCTR 1.AmpSv q (MX)'
137+
);
136138
await element.requestUpdate();
137139
await extRefListElement.requestUpdate();
138140

@@ -143,11 +145,11 @@ describe('SMV Subscribe Data Binding Plugin', async () => {
143145
)).click();
144146
await element.requestUpdate();
145147

146-
(<HTMLElement>(
147-
fcdaListElement.shadowRoot!.querySelector(
148-
'mwc-list-item[value="SMV_Publisher>>CurrentTransformer>fullSmv SMV_Publisher>>CurrentTransformer>fullSmvsDataSet>CurrentTransformer/L3 TCTR 1.AmpSv instMag.i (MX)"]'
149-
)
150-
)).click();
148+
selectFCDAItem(
149+
fcdaListElement,
150+
'SMV_Publisher>>CurrentTransformer>fullSmv',
151+
'SMV_Publisher>>CurrentTransformer>fullSmvsDataSet>CurrentTransformer/L3 TCTR 1.AmpSv instMag.i (MX)'
152+
);
151153
await element.requestUpdate();
152154
await extRefListElement.requestUpdate();
153155

@@ -158,11 +160,11 @@ describe('SMV Subscribe Data Binding Plugin', async () => {
158160
)).click();
159161
await element.requestUpdate();
160162

161-
(<HTMLElement>(
162-
fcdaListElement.shadowRoot!.querySelector(
163-
'mwc-list-item[value="SMV_Publisher>>CurrentTransformer>fullSmv SMV_Publisher>>CurrentTransformer>fullSmvsDataSet>CurrentTransformer/L3 TCTR 1.AmpSv q (MX)"]'
164-
)
165-
)).click();
163+
selectFCDAItem(
164+
fcdaListElement,
165+
'SMV_Publisher>>CurrentTransformer>fullSmv',
166+
'SMV_Publisher>>CurrentTransformer>fullSmvsDataSet>CurrentTransformer/L3 TCTR 1.AmpSv q (MX)'
167+
);
166168
await element.requestUpdate();
167169
await extRefListElement.requestUpdate();
168170

test/integration/editors/SMVSubscriberLaterBinding.test.ts

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
getExtrefLaterBindingList,
99
getFCDABindingList,
1010
getSelectedSubItemValue,
11+
selectFCDAItem,
1112
} from './test-support.js';
1213

1314
describe('SMV Subscribe Later Binding plugin', () => {
@@ -35,12 +36,13 @@ describe('SMV Subscribe Later Binding plugin', () => {
3536
const fcdaListElement = getFCDABindingList(element);
3637
const extRefListElement = getExtrefLaterBindingList(element);
3738

38-
(<HTMLElement>(
39-
fcdaListElement.shadowRoot!.querySelector(
40-
'mwc-list-item[value="SMV_Publisher>>CurrentTransformer>currentOnly SMV_Publisher>>CurrentTransformer>currentOnlysDataSet>CurrentTransformer/L2 TCTR 1.AmpSv instMag.i (MX)"]'
41-
)
42-
)).click();
39+
selectFCDAItem(
40+
fcdaListElement,
41+
'SMV_Publisher>>CurrentTransformer>currentOnly',
42+
'SMV_Publisher>>CurrentTransformer>currentOnlysDataSet>CurrentTransformer/L2 TCTR 1.AmpSv instMag.i (MX)'
43+
);
4344
await element.requestUpdate();
45+
await extRefListElement.requestUpdate();
4446

4547
expect(
4648
extRefListElement['getSubscribedExtRefElements']().length
@@ -70,12 +72,13 @@ describe('SMV Subscribe Later Binding plugin', () => {
7072
const fcdaListElement = getFCDABindingList(element);
7173
const extRefListElement = getExtrefLaterBindingList(element);
7274

73-
(<HTMLElement>(
74-
fcdaListElement.shadowRoot!.querySelector(
75-
'mwc-list-item[value="SMV_Publisher>>CurrentTransformer>currentOnly SMV_Publisher>>CurrentTransformer>currentOnlysDataSet>CurrentTransformer/L1 TCTR 1.AmpSv q (MX)"]'
76-
)
77-
)).click();
75+
selectFCDAItem(
76+
fcdaListElement,
77+
'SMV_Publisher>>CurrentTransformer>currentOnly',
78+
'SMV_Publisher>>CurrentTransformer>currentOnlysDataSet>CurrentTransformer/L1 TCTR 1.AmpSv q (MX)'
79+
);
7880
await element.requestUpdate();
81+
await extRefListElement.requestUpdate();
7982

8083
expect(
8184
extRefListElement['getSubscribedExtRefElements']().length

test/integration/editors/test-support.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,19 @@ export function getFCDABindingList(
1919
);
2020
}
2121

22+
export function selectFCDAItem(
23+
listElement: FcdaBindingList,
24+
controlIdentity: string,
25+
fcdaIdentity: string
26+
): void {
27+
(<HTMLElement>Array.from(
28+
listElement.shadowRoot!.querySelectorAll('mwc-list-item[class="subitem"]')
29+
).find(listItem => {
30+
const value = listItem.getAttribute('value') ?? '';
31+
return value.includes(controlIdentity) && value.includes(fcdaIdentity);
32+
})).click();
33+
}
34+
2235
export function getExtrefDataBindingList(
2336
element: SMVSubscribeDataBindingPlugin | GooseSubscribeDataBindingPlugin
2437
): ExtRefLnBindingList {

0 commit comments

Comments
 (0)