| import '@material/web/icon/icon.js'; |
| import '@material/web/switch/switch.js'; |
| import '@material/web/textfield/outlined-text-field.js'; |
| import '../../../../common/components/FormField.js'; |
| |
| import {css, html, LitElement, nothing} from 'lit'; |
| import {createRef, ref} from 'lit/directives/ref.js'; |
| |
| import {SHARED_MD3_STYLES} from '../../../../common/styles/md3.js'; |
| import * as pb from '../../../proto/main_pb.js'; |
| import { FORM_STYLES } from './common.js'; |
| |
| export default class WFActionReplyWithCR extends LitElement { |
| static properties = { |
| action: {type: Object}, |
| readOnly: {type: Boolean}, |
| _importerWindow: {type: Object, state: true}, |
| }; |
| |
| static styles = [ |
| SHARED_MD3_STYLES, |
| FORM_STYLES, |
| css` |
| .select-cr-btn { |
| --md-outlined-button-icon-size: 24px; |
| } |
| `, |
| ]; |
| |
| 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 |
| class="select-cr-btn" |
| @click=${this._openCRImporter}> |
| <md-icon slot="icon" filled>more</md-icon> |
| Select CR |
| </md-outlined-button> |
| `} |
| </div> |
| <div class="form-line"> |
| <twpt-form-field> |
| <md-switch ${ref(this.subscribeRef)} |
| ?selected=${this.subscribe} |
| ?disabled=${this.readOnly} |
| @change=${this._subscribeChanged}/> |
| </md-switch> |
| <span slot="label"> |
| Subscribe to thread |
| </span> |
| </twpt-form-field> |
| </div> |
| <div class="form-line"> |
| <twpt-form-field> |
| <md-switch ${ref(this.markAsAnswerRef)} |
| ?selected=${this.markAsAnswer} |
| ?disabled=${this.readOnly} |
| @change=${this._markAsAnswerChanged}/> |
| </md-switch> |
| <span slot="label"> |
| Mark as answer |
| </span> |
| </twpt-form-field> |
| </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); |