blob: 05cf839faa5faefa3cf2d03a9a3208c1799d446f [file] [log] [blame]
Adrià Vilanova Martínezca25b682022-10-24 00:11:03 +02001import './TwptConfirmDialog.js';
Adrià Vilanova Martínez54964a52022-10-26 23:53:29 +02002import './TwptWorkflowDialog.js';
3import './TwptWorkflowsMenu.js';
Adrià Vilanova Martínez96ae96f2022-10-17 23:50:36 +02004
5import {css, html, LitElement} from 'lit';
Adrià Vilanova Martínezca25b682022-10-24 00:11:03 +02006import {createRef, ref} from 'lit/directives/ref.js';
Adrià Vilanova Martínez96ae96f2022-10-17 23:50:36 +02007
8import WorkflowsStorage from '../../../../workflows/workflowsStorage.js';
9
10export default class TwptWorkflowsInject extends LitElement {
11 static properties = {
12 _workflows: {type: Object},
Adrià Vilanova Martínezca25b682022-10-24 00:11:03 +020013 _selectedWorkflowUuid: {type: String},
Adrià Vilanova Martínez96ae96f2022-10-17 23:50:36 +020014 };
15
Adrià Vilanova Martínezca25b682022-10-24 00:11:03 +020016 confirmDialogRef = createRef();
17 workflowDialogRef = createRef();
18
Adrià Vilanova Martínez96ae96f2022-10-17 23:50:36 +020019 constructor() {
20 super();
21 this._workflows = null;
Adrià Vilanova Martínezca25b682022-10-24 00:11:03 +020022 this._selectedWorkflowUuid = null;
Adrià Vilanova Martínez96ae96f2022-10-17 23:50:36 +020023 this.addEventListener('twpt-workflows-update', e => {
24 const workflows = e.detail?.workflows ?? [];
25 WorkflowsStorage.convertRawListToProtobuf(workflows);
26 this._workflows = workflows;
27 });
28 }
29
30 render() {
31 return html`
Adrià Vilanova Martínezca25b682022-10-24 00:11:03 +020032 <twpt-workflows-menu
33 .workflows=${this._workflows}
34 @select=${this._workflowSelected}>
35 </twpt-workflows-menu>
36 <twpt-confirm-dialog ${ref(this.confirmDialogRef)}
37 .workflow=${this._selectedWorkflow}
38 @confirm=${this._startWorkflow}>
39 </twpt-confirm-dialog>
40 <twpt-workflow-dialog ${ref(this.workflowDialogRef)}>
41 </twpt-workflow-dialog>
Adrià Vilanova Martínez96ae96f2022-10-17 23:50:36 +020042 `;
43 }
Adrià Vilanova Martínezca25b682022-10-24 00:11:03 +020044
45 _workflowSelected(e) {
46 const uuid = e.detail?.selectedWorkflowUuid;
47 if (!uuid) {
48 console.error('Didn\'t get a correct uuid for the selected workflow.');
49 return;
50 }
51 this._selectedWorkflowUuid = uuid;
52 this.confirmDialogRef.value.open = true;
53 }
54
55 _startWorkflow() {
Adrià Vilanova Martínez54964a52022-10-26 23:53:29 +020056 this.workflowDialogRef.value.workflow = this._selectedWorkflow.cloneMessage();
57 this.workflowDialogRef.value.start();
Adrià Vilanova Martínezca25b682022-10-24 00:11:03 +020058 }
59
60 get _selectedWorkflow() {
Adrià Vilanova Martínez6f62c7d2022-11-05 20:48:52 +010061 if (!this._workflows) return null;
62
Adrià Vilanova Martínezca25b682022-10-24 00:11:03 +020063 for (const w of this._workflows) {
Adrià Vilanova Martínez54964a52022-10-26 23:53:29 +020064 if (w.uuid == this._selectedWorkflowUuid) return w.proto;
Adrià Vilanova Martínezca25b682022-10-24 00:11:03 +020065 }
66
67 return null;
68 }
Adrià Vilanova Martínez96ae96f2022-10-17 23:50:36 +020069}
70window.customElements.define('twpt-workflows-inject', TwptWorkflowsInject);