Skip to content

Commit 7bbf1c1

Browse files
Refactor da bda wizards use menu actions (openscd#630)
* refactor(wizards/da): remove mwc-button from wizard content * refactor(wizards/bda): remove mwc-button from wizard content * fix: merge issue
1 parent d6a8b00 commit 7bbf1c1

File tree

6 files changed

+90
-65
lines changed

6 files changed

+90
-65
lines changed

src/wizards/bda.ts

Lines changed: 15 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import { html } from 'lit-html';
2-
import { get, translate } from 'lit-translate';
1+
import { get } from 'lit-translate';
32

43
import '@material/mwc-button';
54

@@ -9,14 +8,19 @@ import {
98
EditorAction,
109
getValue,
1110
isPublic,
12-
newActionEvent,
13-
newWizardEvent,
1411
Wizard,
1512
WizardActor,
1613
WizardInput,
14+
WizardMenuActor,
1715
} from '../foundation.js';
1816
import { getValAction, wizardContent } from './abstractda.js';
1917

18+
function remove(element: Element): WizardMenuActor {
19+
return (): EditorAction[] => {
20+
return [{ old: { parent: element.parentElement!, element } }];
21+
};
22+
}
23+
2024
export function updateBDaAction(element: Element): WizardActor {
2125
return (inputs: WizardInput[]): EditorAction[] => {
2226
const name = getValue(inputs.find(i => i.label === 'name')!)!;
@@ -80,24 +84,6 @@ export function updateBDaAction(element: Element): WizardActor {
8084
export function editBDAWizard(element: Element): Wizard {
8185
const doc = element.ownerDocument;
8286
const type = element.getAttribute('type');
83-
const deleteButton = html`<mwc-button
84-
icon="delete"
85-
trailingIcon
86-
label="${translate('remove')}"
87-
@click=${(e: MouseEvent) => {
88-
e.target!.dispatchEvent(newWizardEvent());
89-
e.target!.dispatchEvent(
90-
newActionEvent({
91-
old: {
92-
parent: element.parentElement!,
93-
element: element,
94-
reference: element.nextSibling,
95-
},
96-
})
97-
);
98-
}}
99-
fullwidth
100-
></mwc-button>`;
10187
const name = element.getAttribute('name');
10288
const desc = element.getAttribute('desc');
10389
const bType = element.getAttribute('bType') ?? '';
@@ -121,8 +107,14 @@ export function editBDAWizard(element: Element): Wizard {
121107
label: get('save'),
122108
action: updateBDaAction(element),
123109
},
110+
menuActions: [
111+
{
112+
icon: 'delete',
113+
label: get('remove'),
114+
action: remove(element),
115+
},
116+
],
124117
content: [
125-
deleteButton,
126118
...wizardContent(
127119
name,
128120
desc,

src/wizards/da.ts

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,20 @@ import {
1212
EditorAction,
1313
getValue,
1414
isPublic,
15-
newActionEvent,
16-
newWizardEvent,
1715
Wizard,
1816
WizardActor,
1917
WizardInput,
18+
WizardMenuActor,
2019
} from '../foundation.js';
2120
import { getValAction, wizardContent } from './abstractda.js';
2221
import { functionalConstraintEnum } from './foundation/enums.js';
2322

23+
function remove(element: Element): WizardMenuActor {
24+
return (): EditorAction[] => {
25+
return [{ old: { parent: element.parentElement!, element } }];
26+
};
27+
}
28+
2429
export function renderDa(
2530
fc: string,
2631
dchg: string | null,
@@ -149,25 +154,6 @@ export function editDAWizard(element: Element): Wizard {
149154
const qchg = element.getAttribute('qchg');
150155
const dupd = element.getAttribute('dupd');
151156

152-
const deleteButton = html`<mwc-button
153-
icon="delete"
154-
trailingIcon
155-
label="${translate('remove')}"
156-
@click=${(e: MouseEvent) => {
157-
e.target!.dispatchEvent(newWizardEvent());
158-
e.target!.dispatchEvent(
159-
newActionEvent({
160-
old: {
161-
parent: element.parentElement!,
162-
element: element,
163-
reference: element.nextSibling,
164-
},
165-
})
166-
);
167-
}}
168-
fullwidth
169-
></mwc-button>`;
170-
171157
const types = Array.from(doc.querySelectorAll('DAType, EnumType'))
172158
.filter(isPublic)
173159
.filter(type => type.getAttribute('id'));
@@ -183,8 +169,14 @@ export function editDAWizard(element: Element): Wizard {
183169
label: get('save'),
184170
action: updateDaAction(element),
185171
},
172+
menuActions: [
173+
{
174+
icon: 'delete',
175+
label: get('remove'),
176+
action: remove(element),
177+
},
178+
],
186179
content: [
187-
deleteButton,
188180
...wizardContent(
189181
name,
190182
desc,

test/integration/wizards/__snapshots__/bda-wizarding-editing.test.snap.js

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,31 @@ snapshots["BDA wizarding editing integration defines a editBDaWizard to edit an
77
heading="[bda.wizard.title.edit]"
88
open=""
99
>
10-
<div id="wizard-content">
11-
<mwc-button
12-
fullwidth=""
13-
icon="delete"
14-
label="[remove]"
15-
trailingicon=""
10+
<nav>
11+
<mwc-icon-button icon="more_vert">
12+
</mwc-icon-button>
13+
<mwc-menu
14+
class="actions-menu"
15+
corner="BOTTOM_RIGHT"
16+
menucorner="END"
1617
>
17-
</mwc-button>
18+
<mwc-list-item
19+
aria-disabled="false"
20+
graphic="icon"
21+
mwc-list-item=""
22+
role="menuitem"
23+
tabindex="0"
24+
>
25+
<span>
26+
[remove]
27+
</span>
28+
<mwc-icon slot="graphic">
29+
delete
30+
</mwc-icon>
31+
</mwc-list-item>
32+
</mwc-menu>
33+
</nav>
34+
<div id="wizard-content">
1835
<wizard-textfield
1936
dialoginitialfocus=""
2037
helper="[scl.name]"

test/integration/wizards/__snapshots__/da-wizarding-editing.test.snap.js

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,31 @@ snapshots["DA wizarding editing integration defines a editDaWizard to edit an ex
77
heading="[da.wizard.title.edit]"
88
open=""
99
>
10-
<div id="wizard-content">
11-
<mwc-button
12-
fullwidth=""
13-
icon="delete"
14-
label="[remove]"
15-
trailingicon=""
10+
<nav>
11+
<mwc-icon-button icon="more_vert">
12+
</mwc-icon-button>
13+
<mwc-menu
14+
class="actions-menu"
15+
corner="BOTTOM_RIGHT"
16+
menucorner="END"
1617
>
17-
</mwc-button>
18+
<mwc-list-item
19+
aria-disabled="false"
20+
graphic="icon"
21+
mwc-list-item=""
22+
role="menuitem"
23+
tabindex="0"
24+
>
25+
<span>
26+
[remove]
27+
</span>
28+
<mwc-icon slot="graphic">
29+
delete
30+
</mwc-icon>
31+
</mwc-list-item>
32+
</mwc-menu>
33+
</nav>
34+
<div id="wizard-content">
1835
<wizard-textfield
1936
dialoginitialfocus=""
2037
helper="[scl.name]"

test/integration/wizards/bda-wizarding-editing.test.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import '../../mock-wizard-editor.js';
44
import { MockWizardEditor } from '../../mock-wizard-editor.js';
55

66
import { ListItem } from '@material/mwc-list/mwc-list-item';
7+
import { ListItemBase } from '@material/mwc-list/mwc-list-item-base';
78

89
import { FilteredList } from '../../../src/filtered-list.js';
910
import { WizardSelect } from '../../../src/wizard-select.js';
@@ -66,13 +67,18 @@ describe('BDA wizarding editing integration', () => {
6667
)
6768
);
6869
deleteButton = <HTMLElement>(
69-
parent.wizardUI.dialog?.querySelector('mwc-button[icon="delete"]')
70+
Array.from(
71+
parent.wizardUI.dialog!.querySelectorAll<ListItemBase>(
72+
'mwc-menu > mwc-list-item'
73+
)
74+
).find(item => item.innerHTML.includes('[remove]'))
7075
);
7176
});
7277

7378
it('looks like the latest snapshot', async () => {
7479
await expect(parent.wizardUI.dialog).to.equalSnapshot();
7580
});
81+
7682
it('edits BDA element', async () => {
7783
expect(
7884
doc.querySelector(
@@ -94,6 +100,7 @@ describe('BDA wizarding editing integration', () => {
94100
)
95101
).to.exist;
96102
});
103+
97104
it('deletes the BDA element on delete button click', async () => {
98105
expect(
99106
doc.querySelector(

test/integration/wizards/da-wizarding-editing.test.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,11 @@ describe('DA wizarding editing integration', () => {
6767
)
6868
);
6969
deleteButton = <HTMLElement>(
70-
parent.wizardUI.dialog?.querySelector('mwc-button[icon="delete"]')
70+
Array.from(
71+
parent.wizardUI.dialog!.querySelectorAll<ListItemBase>(
72+
'mwc-menu > mwc-list-item'
73+
)
74+
).find(item => item.innerHTML.includes('[remove]'))
7175
);
7276
});
7377

@@ -133,7 +137,6 @@ describe('DA wizarding editing integration', () => {
133137
let descField: WizardTextField;
134138
let sAddrField: WizardTextField;
135139
let bTypeSelect: WizardSelect;
136-
let typeSelect: WizardSelect;
137140
let valKindSelect: WizardSelect;
138141
let valImportSelect: WizardCheckbox;
139142
let fcSelect: WizardSelect;
@@ -169,9 +172,6 @@ describe('DA wizarding editing integration', () => {
169172
bTypeSelect = <WizardSelect>(
170173
parent.wizardUI.dialog?.querySelector('wizard-select[label="bType"]')
171174
);
172-
typeSelect = <WizardSelect>(
173-
parent.wizardUI.dialog?.querySelector('wizard-select[label="type"]')
174-
);
175175
valKindSelect = <WizardSelect>(
176176
parent.wizardUI.dialog?.querySelector('wizard-select[label="valKind"]')
177177
);

0 commit comments

Comments
 (0)