Skip to content

Commit 97e6202

Browse files
author
Dennis Labordus
authored
Merge pull request #48 from com-pas/load-cursor
Refactor code to show progress indicator (circle) using the event newPendingStateEvent
2 parents 7ada65c + 798d55a commit 97e6202

15 files changed

+135
-103
lines changed

src/compas-editors/CompasVersions.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
import {css, html, LitElement, property, TemplateResult} from 'lit-element';
22
import {get, translate} from 'lit-translate';
3-
4-
import {OpenSCD} from "../open-scd.js";
53
import {newWizardEvent, Wizard} from "../foundation.js";
64

7-
import {CompasSclDataService, SDS_NAMESPACE} from "../compas/CompasSclDataService.js";
5+
import {CompasSclDataService, SDS_NAMESPACE} from "../compas-services/CompasSclDataService.js";
86
import {getTypeFromDocName, updateDocumentInOpenSCD} from "../compas/foundation.js";
9-
import { styles } from './foundation.js';
7+
import {getOpenScdElement, styles} from './foundation.js';
108

119
/** An editor [[`plugin`]] for selecting the `Substation` section. */
1210
export default class CompasVersionsPlugin extends LitElement {
@@ -113,8 +111,7 @@ function openScl(docName: string, docId: string, version: string) {
113111
});
114112

115113
// Close the Restore Dialog.
116-
const openScd = <OpenSCD>document.querySelector('open-scd');
117-
openScd.dispatchEvent(newWizardEvent());
114+
getOpenScdElement().dispatchEvent(newWizardEvent());
118115

119116
return [];
120117
}

src/compas-editors/foundation.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
import {css} from "lit-element";
2+
import {OpenSCD} from "../open-scd.js";
3+
4+
export function getOpenScdElement(): OpenSCD {
5+
return <OpenSCD>document.querySelector('open-scd');
6+
}
27

38
/** Common `CSS` styles used by Compas Editors subeditors */
49
export const styles = css`

src/compas/CompasCimMappingService.ts renamed to src/compas-services/CompasCimMappingService.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {CompasSettings} from "./CompasSettingsElement.js";
1+
import {CompasSettings} from "../compas/CompasSettingsElement.js";
22

33
export const CMS_NAMESPACE = 'https://www.lfenergy.org/compas/CimMappingService/v1';
44

src/compas/CompasSclDataService.ts renamed to src/compas-services/CompasSclDataService.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import {CompasSettings} from "./CompasSettingsElement.js";
2-
import {ChangeSet} from "./CompasChangeSet.js";
1+
import {CompasSettings} from "../compas/CompasSettingsElement.js";
2+
import {ChangeSet} from "../compas/CompasChangeSet.js";
33

44
export const SDS_NAMESPACE = 'https://www.lfenergy.org/compas/SclDataService/v1';
55

src/compas/CompasSaveTo.ts

Lines changed: 79 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,17 @@ import {customElement, html, LitElement, property, TemplateResult} from "lit-ele
22
import {get, translate} from "lit-translate";
33
import {TextFieldBase} from "@material/mwc-textfield/mwc-textfield-base";
44

5-
import {newLogEvent, newWizardEvent, Wizard, WizardInput} from "../foundation.js";
6-
import {OpenSCD} from "../open-scd.js";
5+
import {newLogEvent, newPendingStateEvent, newWizardEvent, Wizard, WizardInput} from "../foundation.js";
76

87
import {CompasChangeSetRadiogroup} from "./CompasChangeSet.js";
98
import {CompasScltypeRadiogroup} from "./CompasScltypeRadiogroup.js";
10-
import {CompasSclDataService} from "./CompasSclDataService.js";
11-
import {getTypeFromDocName, stripExtensionFromName, updateDocumentInOpenSCD} from "./foundation.js";
9+
import {CompasSclDataService} from "../compas-services/CompasSclDataService.js";
10+
import {
11+
getOpenScdElement,
12+
getTypeFromDocName,
13+
stripExtensionFromName,
14+
updateDocumentInOpenSCD
15+
} from "./foundation.js";
1216

1317
import './CompasChangeSet.js';
1418
import './CompasScltypeRadiogroup.js';
@@ -42,88 +46,97 @@ export class CompasSaveTo extends LitElement {
4246
return this.getChangeSetRadiogroup().valid();
4347
}
4448

45-
render(): TemplateResult {
46-
if (!this.docId) {
47-
return html`
48-
<mwc-textfield dialogInitialFocus id="name" label="${translate('scl.name')}"
49-
value="${this.docName}" required>
50-
</mwc-textfield>
49+
private async getSclDocument(type: string, id: string): Promise<void>{
50+
await CompasSclDataService().getSclDocument(type, id)
51+
.then(response => {
52+
// Copy the SCL Result from the Response and create a new Document from it.
53+
const sclElement = response.querySelectorAll("SCL").item(0);
54+
const sclDocument = document.implementation.createDocument("", "", null);
55+
sclDocument.getRootNode().appendChild(sclElement.cloneNode(true));
5156

52-
<compas-scltype-radiogroup .value="${getTypeFromDocName(this.docName)}"></compas-scltype-radiogroup>
53-
`;
54-
}
55-
return html `
56-
<compas-changeset-radiogroup></compas-changeset-radiogroup>
57-
`;
57+
updateDocumentInOpenSCD(sclDocument);
58+
});
5859
}
59-
}
60-
61-
function getSclDocument(type: string, id: string): void {
62-
CompasSclDataService().getSclDocument(type, id)
63-
.then(response => {
64-
// Copy the SCL Result from the Response and create a new Document from it.
65-
const sclElement = response.querySelectorAll("SCL").item(0);
66-
const sclDocument = document.implementation.createDocument("", "", null);
67-
sclDocument.getRootNode().appendChild(sclElement.cloneNode(true));
68-
69-
updateDocumentInOpenSCD(sclDocument);
70-
});
71-
}
7260

73-
function addSclToCompas(wizard: Element, compasSaveTo: CompasSaveTo, doc: XMLDocument) {
74-
const name = stripExtensionFromName(compasSaveTo.getNameField().value);
75-
const docType = compasSaveTo.getSclTypeRadioGroup().getSelectedValue() ?? '';
61+
private async addSclToCompas(wizard: Element, doc: XMLDocument): Promise<void> {
62+
const name = stripExtensionFromName(this.getNameField().value);
63+
const docType = this.getSclTypeRadioGroup().getSelectedValue() ?? '';
7664

77-
CompasSclDataService().addSclDocument(docType, {sclName: name, doc: doc})
78-
.then(xmlResponse => {
79-
const id = Array.from(xmlResponse.querySelectorAll('*|Id') ?? [])[0]
65+
await CompasSclDataService().addSclDocument(docType, {sclName: name, doc: doc})
66+
.then(xmlResponse => {
67+
const id = Array.from(xmlResponse.querySelectorAll('*|Id') ?? [])[0]
8068

81-
// Retrieve the document to fetch server-side updates.
82-
getSclDocument(docType, id.textContent ?? '');
69+
// Retrieve the document to fetch server-side updates.
70+
this.getSclDocument(docType, id.textContent ?? '');
8371

84-
const openScd = <OpenSCD>document.querySelector('open-scd');
85-
openScd.dispatchEvent(
72+
const openScd = getOpenScdElement();
73+
openScd.dispatchEvent(
8674
newLogEvent({
8775
kind: 'info',
88-
title: get('compas.saveTo.addSuccess')}));
89-
90-
// Close the Save Dialog.
91-
openScd.dispatchEvent(newWizardEvent());
92-
})
93-
.catch(() => {
94-
const openScd = <OpenSCD>document.querySelector('open-scd');
95-
openScd.dispatchEvent(
76+
title: get('compas.saveTo.addSuccess')
77+
}));
78+
79+
// Close the Save Dialog.
80+
openScd.dispatchEvent(newWizardEvent());
81+
}).catch(() => {
82+
const openScd = getOpenScdElement();
83+
openScd.dispatchEvent(
9684
newLogEvent({
9785
kind: 'error',
98-
title: get('compas.saveTo.addError')}));
86+
title: get('compas.saveTo.addError')
87+
}));
9988
});
100-
}
89+
}
10190

102-
function updateSclInCompas(wizard: Element, compasSaveTo: CompasSaveTo, docId: string, docName: string, doc: XMLDocument) {
103-
const changeSet = compasSaveTo.getChangeSetRadiogroup().getSelectedValue();
104-
const docType = getTypeFromDocName(docName);
91+
private async updateSclInCompas(wizard: Element, docId: string, docName: string, doc: XMLDocument): Promise<void> {
92+
const changeSet = this.getChangeSetRadiogroup().getSelectedValue();
93+
const docType = getTypeFromDocName(docName);
10594

106-
CompasSclDataService().updateSclDocument(docType.toUpperCase(), docId, {changeSet: changeSet!, doc: doc})
107-
.then(() => {
108-
// Retrieve the document to fetch server-side updates.
109-
getSclDocument(docType, docId);
95+
await CompasSclDataService().updateSclDocument(docType.toUpperCase(), docId, {changeSet: changeSet!, doc: doc})
96+
.then(() => {
97+
// Retrieve the document to fetch server-side updates.
98+
this.getSclDocument(docType, docId);
11099

111-
const openScd = <OpenSCD>document.querySelector('open-scd');
112-
openScd.dispatchEvent(
100+
const openScd = getOpenScdElement();
101+
openScd.dispatchEvent(
113102
newLogEvent({
114103
kind: 'info',
115104
title: get('compas.saveTo.updateSuccess')}));
116105

117-
// Close the Save Dialog.
118-
openScd.dispatchEvent(newWizardEvent());
119-
})
120-
.catch(() => {
121-
const openScd = <OpenSCD>document.querySelector('open-scd');
122-
openScd.dispatchEvent(
106+
// Close the Save Dialog.
107+
openScd.dispatchEvent(newWizardEvent());
108+
}).catch(() => {
109+
const openScd = getOpenScdElement();
110+
openScd.dispatchEvent(
123111
newLogEvent({
124112
kind: 'error',
125113
title: get('compas.saveTo.updateError')}));
126-
});
114+
});
115+
}
116+
117+
async saveToCompas(wizard: Element, docId: string, docName: string, doc: XMLDocument): Promise<void> {
118+
if (!docId) {
119+
await this.addSclToCompas(wizard, doc);
120+
} else {
121+
await this.updateSclInCompas(wizard, docId, docName, doc);
122+
}
123+
}
124+
125+
render(): TemplateResult {
126+
if (!this.docId) {
127+
return html`
128+
<mwc-textfield dialogInitialFocus id="name" label="${translate('scl.name')}"
129+
value="${this.docName}" required>
130+
</mwc-textfield>
131+
132+
<compas-scltype-radiogroup .value="${getTypeFromDocName(this.docName)}"></compas-scltype-radiogroup>
133+
`;
134+
}
135+
136+
return html `
137+
<compas-changeset-radiogroup></compas-changeset-radiogroup>
138+
`;
139+
}
127140
}
128141

129142
function saveToCompas(docId: string, docName: string, doc: XMLDocument) {
@@ -133,11 +146,7 @@ function saveToCompas(docId: string, docName: string, doc: XMLDocument) {
133146
return [];
134147
}
135148

136-
if (!docId) {
137-
addSclToCompas(wizard, compasSaveTo, doc);
138-
} else {
139-
updateSclInCompas(wizard, compasSaveTo, docId, docName, doc);
140-
}
149+
getOpenScdElement().dispatchEvent(newPendingStateEvent(compasSaveTo.saveToCompas(wizard, docId, docName, doc)));
141150
return [];
142151
};
143152
}

src/compas/CompasScl.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ import {get, translate} from "lit-translate";
44
import {newPendingStateEvent, newWizardEvent, Wizard} from "../foundation.js";
55
import {SingleSelectedEvent} from "@material/mwc-list/mwc-list-foundation";
66

7-
import {CompasSclDataService, SDS_NAMESPACE} from "./CompasSclDataService.js";
7+
import {CompasSclDataService, SDS_NAMESPACE} from "../compas-services/CompasSclDataService.js";
88
import {compasSclTypeListWizardActor} from "./CompasScltypeList.js";
9-
import {updateDocumentInOpenSCD} from "./foundation.js";
9+
import {getOpenScdElement, updateDocumentInOpenSCD} from "./foundation.js";
1010

1111
@customElement('compas-scl-list')
1212
export class CompasScl extends LitElement {
@@ -28,7 +28,7 @@ export class CompasScl extends LitElement {
2828
}
2929

3030
openScl(id?: string) {
31-
this.dispatchEvent(newPendingStateEvent(this.getSclDocument(id)));
31+
getOpenScdElement().dispatchEvent(newPendingStateEvent(this.getSclDocument(id)));
3232
}
3333

3434
private async getSclDocument(id?: string): Promise<void> {

src/compas/CompasScltypeList.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import {customElement, html, LitElement, property, TemplateResult} from "lit-ele
22
import {get, translate} from "lit-translate";
33
import {SingleSelectedEvent} from "@material/mwc-list/mwc-list-foundation";
44
import {newWizardEvent, Wizard, WizardActor} from '../foundation.js';
5-
import {CompasSclDataService, SDS_NAMESPACE} from "./CompasSclDataService.js";
5+
import {CompasSclDataService, SDS_NAMESPACE} from "../compas-services/CompasSclDataService.js";
66
import {listSclsWizard} from "./CompasScl.js";
77

88
@customElement('compas-scltype-list')

src/compas/CompasScltypeRadiogroup.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import {customElement, html, LitElement, property, TemplateResult} from "lit-element";
2-
import {get, translate} from "lit-translate";
3-
import {CompasSclDataService, SDS_NAMESPACE} from "./CompasSclDataService.js";
2+
import {translate} from "lit-translate";
3+
import {CompasSclDataService, SDS_NAMESPACE} from "../compas-services/CompasSclDataService.js";
44
import {ListItemBase} from "@material/mwc-list/mwc-list-item-base";
55

66
@customElement('compas-scltype-radiogroup')

src/compas/CompasSettingsElement.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import {css, customElement, html, LitElement, property, TemplateResult} from 'li
22
import {get, translate} from 'lit-translate';
33

44
import {newWizardEvent, Wizard, WizardInput} from '../foundation.js';
5-
import {OpenSCD} from "../open-scd.js";
65
import {TextFieldBase} from "@material/mwc-textfield/mwc-textfield-base";
6+
import {getOpenScdElement} from "./foundation.js";
77

88
export type CompasSettingsRecord = {
99
sclDataServiceUrl: string;
@@ -77,7 +77,7 @@ export class CompasSettingsElement extends LitElement {
7777

7878
close(): void {
7979
// Close the Save Dialog.
80-
const openScd = <OpenSCD>document.querySelector('open-scd');
80+
const openScd = getOpenScdElement();
8181
openScd.dispatchEvent(newWizardEvent());
8282
}
8383

src/compas/foundation.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
import {newOpenDocEvent} from "../foundation.js";
21
import {get} from "lit-translate";
2+
import {newOpenDocEvent} from "../foundation.js";
3+
import {OpenSCD} from "../open-scd.js";
34

45
const FILE_EXTENSION_LENGTH = 3;
56

@@ -19,6 +20,10 @@ export function stripExtensionFromName(docName: string): string {
1920
return name
2021
}
2122

23+
export function getOpenScdElement(): OpenSCD {
24+
return <OpenSCD>document.querySelector('open-scd');
25+
}
26+
2227
export function updateDocumentInOpenSCD(doc: Document): void {
2328
const id = (doc.querySelectorAll(':root > Header') ?? []).item(0).getAttribute('id') ?? '';
2429
const version = (doc.querySelectorAll(':root > Header') ?? []).item(0).getAttribute('version') ?? '';
@@ -31,7 +36,5 @@ export function updateDocumentInOpenSCD(doc: Document): void {
3136
}
3237
docName += '-' + version + '.' + type?.toLowerCase();
3338

34-
document
35-
.querySelector('open-scd')!
36-
.dispatchEvent(newOpenDocEvent(doc, docName, {detail: {docId: id}}));
39+
getOpenScdElement().dispatchEvent(newOpenDocEvent(doc, docName, {detail: {docId: id}}));
3740
}

0 commit comments

Comments
 (0)