/* eslint import/no-unresolved: ["off"] */ /* eslint import/extensions: ["off"] */ import Utils from '../utils/utils'; import Mixins from '../utils/mixins'; import F7Input from './input'; import F7Link from './link'; /* phenome-dts-imports import { Messagebar as MessagebarNamespace } from 'framework7/components/messagebar/messagebar'; */ /* phenome-dts-instance f7Messagebar: MessagebarNamespace.Messagebar */ export default { name: 'f7-messagebar', props: { id: [String, Number], className: String, // phenome-react-line style: Object, // phenome-react-line sheetVisible: Boolean, attachmentsVisible: Boolean, top: Boolean, resizable: { type: Boolean, default: true, }, bottomOffset: { type: Number, default: 0, }, topOffset: { type: Number, default: 0, }, maxHeight: Number, resizePage: { type: Boolean, default: true, }, sendLink: String, value: [String, Number, Array], disabled: Boolean, readonly: Boolean, textareaId: [Number, String], name: String, placeholder: { type: String, default: 'Message', }, init: { type: Boolean, default: true, }, ...Mixins.colorProps, }, componentDidCreate() { this.onChange = this.onChange.bind(this); this.onInput = this.onInput.bind(this); this.onFocus = this.onFocus.bind(this); this.onBlur = this.onBlur.bind(this); this.onClick = this.onClick.bind(this); this.onDeleteAttachment = this.onDeleteAttachment.bind(this); this.onClickAttachment = this.onClickAttachment.bind(this); this.onResizePage = this.onResizePage.bind(this); }, render() { const self = this; const { placeholder, disabled, name, readonly, resizable, value, sendLink, id, style, } = self.props; const { default: slotsDefault, 'before-inner': slotsBeforeInner, 'after-inner': slotsAfterInner, 'send-link': slotsSendLink, 'inner-start': slotsInnerStart, 'inner-end': slotsInnerEnd, 'before-area': slotsBeforeArea, 'after-area': slotsAfterArea, } = self.slots; const innerEndEls = []; let messagebarAttachmentsEl; let messagebarSheetEl; if (slotsDefault) { slotsDefault.forEach((child) => { if (typeof child === 'undefined') return; let tag; tag = child.tag; // phenome-vue-line tag = child.type && (child.type.displayName || child.type.name); // phenome-react-line if (tag && (tag.indexOf('messagebar-attachments') >= 0 || tag === 'F7MessagebarAttachments' || tag === 'f7-messagebar-attachments')) { messagebarAttachmentsEl = child; } else if (tag && (tag.indexOf('messagebar-sheet') >= 0 || tag === 'F7MessagebarSheet' || tag === 'f7-messagebar-sheet')) { messagebarSheetEl = child; } else { innerEndEls.push(child); } }); } return (
{slotsBeforeInner}
{slotsInnerStart}
{slotsBeforeArea} {messagebarAttachmentsEl} {slotsAfterArea}
{((sendLink && sendLink.length > 0) || slotsSendLink) && ( {slotsSendLink || sendLink} )} {slotsInnerEnd} {innerEndEls}
{slotsAfterInner} {messagebarSheetEl}
); }, computed: { classes() { const self = this; const props = self.props; const { className, attachmentsVisible, sheetVisible, } = props; return Utils.classNames( className, 'toolbar', 'messagebar', { 'messagebar-attachments-visible': attachmentsVisible, 'messagebar-sheet-visible': sheetVisible, }, Mixins.colorClasses(props), ); }, }, watch: { 'props.sheetVisible': function watchSheetVisible() { const self = this; if (!self.props.resizable || !self.f7Messagebar) return; self.updateSheetVisible = true; }, 'props.attachmentsVisible': function watchAttachmentsVisible() { const self = this; if (!self.props.resizable || !self.f7Messagebar) return; self.updateAttachmentsVisible = true; }, }, componentDidMount() { const self = this; const { init, top, resizePage, bottomOffset, topOffset, maxHeight, } = self.props; if (!init) return; const el = self.refs.el; if (!el) return; el.addEventListener('messagebar:attachmentdelete', self.onDeleteAttachment); el.addEventListener('messagebar:attachmentclick', self.onClickAttachment); el.addEventListener('messagebar:resizepage', self.onResizePage); const params = Utils.noUndefinedProps({ el, top, resizePage, bottomOffset, topOffset, maxHeight, }); self.$f7ready(() => { self.f7Messagebar = self.$f7.messagebar.create(params); }); }, componentDidUpdate() { const self = this; if (!self.f7Messagebar) return; const { sheetVisible, attachmentsVisible } = self.props; if (self.updateSheetVisible) { self.updateSheetVisible = false; self.f7Messagebar.sheetVisible = sheetVisible; self.f7Messagebar.resizePage(); } if (self.updateAttachmentsVisible) { self.updateAttachmentsVisible = false; self.f7Messagebar.attachmentsVisible = attachmentsVisible; self.f7Messagebar.resizePage(); } }, componentWillUnmount() { const self = this; if (self.f7Messagebar && self.f7Messagebar.destroy) self.f7Messagebar.destroy(); const el = self.refs.el; if (!el) return; el.removeEventListener('messagebar:attachmentdelete', self.onDeleteAttachment); el.removeEventListener('messagebar:attachmentclick', self.onClickAttachment); el.removeEventListener('messagebar:resizepage', self.onResizePage); }, methods: { clear(...args) { if (!this.f7Messagebar) return undefined; return this.f7Messagebar.clear(...args); }, getValue(...args) { if (!this.f7Messagebar) return undefined; return this.f7Messagebar.getValue(...args); }, setValue(...args) { if (!this.f7Messagebar) return undefined; return this.f7Messagebar.setValue(...args); }, setPlaceholder(...args) { if (!this.f7Messagebar) return undefined; return this.f7Messagebar.setPlaceholder(...args); }, resize(...args) { if (!this.f7Messagebar) return undefined; return this.f7Messagebar.resizePage(...args); }, focus(...args) { if (!this.f7Messagebar) return undefined; return this.f7Messagebar.focus(...args); }, blur(...args) { if (!this.f7Messagebar) return undefined; return this.f7Messagebar.blur(...args); }, attachmentsShow(...args) { if (!this.f7Messagebar) return undefined; return this.f7Messagebar.attachmentsShow(...args); }, attachmentsHide(...args) { if (!this.f7Messagebar) return undefined; return this.f7Messagebar.attachmentsHide(...args); }, attachmentsToggle(...args) { if (!this.f7Messagebar) return undefined; return this.f7Messagebar.attachmentsToggle(...args); }, sheetShow(...args) { if (!this.f7Messagebar) return undefined; return this.f7Messagebar.sheetShow(...args); }, sheetHide(...args) { if (!this.f7Messagebar) return undefined; return this.f7Messagebar.sheetHide(...args); }, sheetToggle(...args) { if (!this.f7Messagebar) return undefined; return this.f7Messagebar.sheetToggle(...args); }, onChange(event) { this.dispatchEvent('change', event); }, onInput(event) { this.dispatchEvent('input', event); }, onFocus(event) { this.dispatchEvent('focus', event); }, onBlur(event) { this.dispatchEvent('blur', event); }, onClick(event) { const self = this; let value; if (process.env.COMPILER === 'vue') { value = self.refs.area.$refs.inputEl.value; } if (process.env.COMPILER === 'react') { value = self.refs.area.refs.inputEl.value; } const clear = self.f7Messagebar ? () => { self.f7Messagebar.clear(); } : () => {}; this.dispatchEvent('submit', value, clear); this.dispatchEvent('send', value, clear); this.dispatchEvent('click', event); }, onDeleteAttachment(event) { this.dispatchEvent('messagebar:attachmentdelete messagebarAttachmentDelete', event); }, onClickAttachment(event) { this.dispatchEvent('messagebar:attachmentclick messagebarAttachmentClick', event); }, onResizePage(event) { this.dispatchEvent('messagebar:resizepage messagebarResizePage', event); }, }, };