blob: c6c9a7fd9164afe93a98ab8bc5c7e0341d93a149 [file] [log] [blame]
Adrià Vilanova Martínez54964a52022-10-26 23:53:29 +02001import '@material/mwc-dialog/mwc-dialog.js';
2import '@material/web/button/text-button.js';
Adrià Vilanova Martínez54964a52022-10-26 23:53:29 +02003import './TwptWorkflowProgress.js';
4
5import {css, html, LitElement} from 'lit';
6import {createRef, ref} from 'lit/directives/ref.js';
7
Adrià Vilanova Martínez6f62c7d2022-11-05 20:48:52 +01008import {SHARED_MD3_STYLES} from '../../../../common/styles/md3.js';
Adrià Vilanova Martínez54964a52022-10-26 23:53:29 +02009import WorkflowRunner from '../runner.js';
10
11export default class TwptWorkflowDialog extends LitElement {
12 static properties = {
13 open: {type: Boolean},
14 workflow: {type: Object},
15 _runner: {type: Object, state: true},
16 };
17
Adrià Vilanova Martínez6f62c7d2022-11-05 20:48:52 +010018 static styles = [
19 SHARED_MD3_STYLES,
20 css`
21 :host {
22 --mdc-dialog-content-ink-color: var(--mdc-theme-on-surface, #000);
23 --mdc-dialog-z-index: 200;
24 }
Adrià Vilanova Martínez54964a52022-10-26 23:53:29 +020025
Adrià Vilanova Martínez6f62c7d2022-11-05 20:48:52 +010026 .workflow-name {
27 font-weight: 500;
28 }
29 `,
30 ];
Adrià Vilanova Martínez54964a52022-10-26 23:53:29 +020031
32 progressRef = createRef();
33
34 constructor() {
35 super();
36 this.open = false;
37 }
38
39 render() {
40 return html`
41 <mwc-dialog
42 ?open=${this.open}
43 @opening=${this._openingDialog}
44 @closing=${this._closingDialog}
45 heading=${'Running ' + this.workflow?.getName?.() + '...'}>
46 <twpt-workflow-progress ${ref(this.progressRef)}
47 .workflow=${this.workflow}
48 currentThread=${this._runner?.currentThreadIndex}
49 numThreads=${this._runner?.numThreads}
50 currentAction=${this._runner?.currentActionIndex}
51 status=${this._runner?.status}>
52 </twpt-workflow-progress>
53
54 <md-text-button
55 ?disabled=${this._runner?.status !== 'finished'}
56 slot="primaryAction"
57 dialogAction="cancel"
58 label="Close">
59 </md-text-button>
60 </mwc-dialog>
61 `;
62 }
63
64 start() {
65 this._runner =
66 new WorkflowRunner(this.workflow, () => this.requestUpdate());
67 this._runner.start();
68 this.open = true;
69 }
70
71 _openingDialog() {
72 this.open = true;
73 }
74
75 _closingDialog() {
76 this.open = false;
77 }
78}
79window.customElements.define('twpt-workflow-dialog', TwptWorkflowDialog);