blob: a2b569108b0c8062fc0509c469d82ec1ed0d8c6d [file] [log] [blame]
Adrià Vilanova Martínezf276ac72022-10-13 22:16:22 +02001import '@material/mwc-dialog/mwc-dialog.js';
2import '@material/web/button/text-button.js';
3import '@material/web/button/tonal-button.js';
4import './WorkflowEditor.js';
5
6import {css, html, LitElement} from 'lit';
7import {createRef, ref} from 'lit/directives/ref.js';
8
9import * as pb from '../../proto/main_pb.js';
10
11export default class WFAddDialog extends LitElement {
12 static properties = {
13 open: {type: Boolean},
14 };
15
16 static styles = css`
17 :host {
18 --mdc-dialog-content-ink-color: var(--mdc-theme-on-surface, #000);
19 }
20 `;
21
22 workflowEditorRef = createRef();
23
24 constructor() {
25 super();
26 this.open = false;
27 }
28
29 render() {
30 return html`
31 <mwc-dialog
32 heading="New workflow"
33 ?open=${this.open}
34 @opening=${this._openingDialog}
35 @closing=${this._closingDialog}
36 @closed=${this._closedDialog}>
37 <wf-workflow-editor ${ref(this.workflowEditorRef)}>
38 </wf-workflow-editor>
39 <md-tonal-button
40 slot="primaryAction"
41 label="Add"
42 @click=${this._save}>
43 </md-tonal-button>
44 <md-text-button
45 slot="secondaryAction"
46 dialogAction="cancel"
47 label="Cancel">
48 </md-text-button>
49 </mwc-dialog>
50 `;
51 }
52
53 firstUpdated() {
54 this._resetWorkflow();
55 }
56
57 _resetWorkflow() {
58 this.workflowEditorRef.value.workflow = this._defaultWorkflow();
59 }
60
61 _getWorkflow() {
62 return this.workflowEditorRef.value.workflow;
63 }
64
65 _defaultWorkflow() {
66 let wf = new pb.workflows.Workflow();
67 let action = new pb.workflows.Action();
68 let rAction = new pb.workflows.Action.ReplyWithCRAction();
69 action.setReplyWithCrAction(rAction);
70 wf.addActions(action);
71 return wf;
72 }
73
74 _openingDialog() {
75 this.open = true;
76 }
77
78 _closingDialog() {
79 this.open = false;
80 }
81
82 _closedDialog(e) {
83 if (e.detail?.action === 'cancel') this._resetWorkflow();
84 }
85
86 _save() {
87 let success = this.workflowEditorRef.value.save();
88 if (success) {
89 this.open = false;
90 this._resetWorkflow();
91 }
92 }
93}
94window.customElements.define('wf-add-dialog', WFAddDialog);