| import '@material/web/formfield/formfield.js'; |
| import '@material/web/switch/switch.js'; |
| import '@material/web/textfield/outlined-text-field.js'; |
| |
| import {css, html, LitElement, nothing} from 'lit'; |
| import {createRef, ref} from 'lit/directives/ref.js'; |
| |
| import {CCApi} from '../../../../common/api.js'; |
| import * as pb from '../../../proto/main_pb.js'; |
| |
| export default class WFActionReplyWithCR extends LitElement { |
| static properties = { |
| action: {type: Object}, |
| readOnly: {type: Boolean}, |
| _importerWindow: {type: Object, state: true}, |
| }; |
| |
| static styles = css` |
| .form-line { |
| display: flex; |
| flex-direction: row; |
| align-items: center; |
| margin-block: 1em; |
| gap: .5rem; |
| } |
| `; |
| |
| cannedResponseRef = createRef(); |
| subscribeRef = createRef(); |
| markAsAnswerRef = createRef(); |
| |
| constructor() { |
| super(); |
| this.action = new pb.workflows.Action.ReplyWithCRAction; |
| this._importerWindow = undefined; |
| |
| window.addEventListener('message', e => { |
| if (e.source === this._importerWindow && |
| e.data?.action === 'importCannedResponse') { |
| this._cannedResponseIdString = e.data?.cannedResponseId; |
| this._importerWindow?.close?.(); |
| } |
| }); |
| } |
| |
| render() { |
| return html` |
| <div class="form-line"> |
| <md-outlined-text-field ${ref(this.cannedResponseRef)} |
| type="number" |
| label="Canned response ID" |
| required |
| value=${this._cannedResponseIdString} |
| ?readonly=${this.readOnly} |
| @input=${this._cannedResponseIdChanged}> |
| </md-outlined-text-field> |
| ${this.readOnly ? nothing : html` |
| <md-outlined-button |
| icon="more" |
| label="Select CR" |
| @click=${this._openCRImporter}> |
| </md-outlined-button> |
| `} |
| </div> |
| <div class="form-line"> |
| <md-formfield label="Subscribe to thread"> |
| <md-switch ${ref(this.subscribeRef)} |
| ?selected=${this.subscribe} |
| ?disabled=${this.readOnly} |
| @click=${this._subscribeChanged}/> |
| </md-formfield> |
| </div> |
| <div class="form-line"> |
| <md-formfield label="Mark as answer"> |
| <md-switch ${ref(this.markAsAnswerRef)} |
| ?selected=${this.markAsAnswer} |
| ?disabled=${this.readOnly} |
| @click=${this._markAsAnswerChanged}/> |
| </md-formfield> |
| </div> |
| `; |
| } |
| |
| disconnectedCallback() { |
| super.disconnectedCallback(); |
| this._importerWindow?.close?.(); |
| } |
| |
| checkValidity() { |
| return this.cannedResponseRef.value.reportValidity(); |
| } |
| |
| _dispatchUpdateEvent() { |
| // Request an update for this component |
| this.requestUpdate(); |
| |
| // Transmit to other components that the action has changed |
| const e = new Event( |
| 'replywithcr-action-updated', {bubbles: true, composed: true}); |
| this.renderRoot.dispatchEvent(e); |
| } |
| |
| _cannedResponseIdChanged() { |
| this._cannedResponseIdString = this.cannedResponseRef.value.value; |
| } |
| |
| _subscribeChanged() { |
| this.subscribe = this.subscribeRef.value.selected; |
| } |
| |
| _markAsAnswerChanged() { |
| this.markAsAnswer = this.markAsAnswerRef.value.selected; |
| } |
| |
| _openCRImporter() { |
| if (!(this._importerWindow?.closed ?? true)) |
| this._importerWindow?.close?.(); |
| |
| this._importerWindow = window.open( |
| 'https://support.google.com/s/community/cannedresponses?TWPTImportToWorkflow&TWPTSelectedId=' + |
| encodeURIComponent(this._cannedResponseIdString), |
| '', 'popup,width=720,height=540'); |
| } |
| |
| get cannedResponseId() { |
| return this.action.getCannedResponseId() ?? 0; |
| } |
| |
| set cannedResponseId(value) { |
| this.action.setCannedResponseId(value); |
| this._dispatchUpdateEvent(); |
| } |
| |
| get _cannedResponseIdString() { |
| let id = this.cannedResponseId; |
| if (id == 0) return ''; |
| return id.toString(); |
| } |
| |
| set _cannedResponseIdString(value) { |
| this.cannedResponseId = parseInt(value); |
| } |
| |
| get subscribe() { |
| return this.action.getSubscribe(); |
| } |
| |
| set subscribe(value) { |
| this.action.setSubscribe(value); |
| this._dispatchUpdateEvent(); |
| } |
| |
| get markAsAnswer() { |
| return this.action.getMarkAsAnswer(); |
| } |
| |
| set markAsAnswer(value) { |
| this.action.setMarkAsAnswer(value); |
| this._dispatchUpdateEvent(); |
| } |
| } |
| window.customElements.define('wf-action-reply-with-cr', WFActionReplyWithCR); |