import { tag, WeElement, h, extractClass, render } from 'omi' import * as css from './index.scss' import { MDCDialog } from '@material/dialog' import '../button' //@ts-ignore import '../theme.ts' interface Props { show?: boolean, scrollable?: boolean, title?: string, cancelButton?: object, confirmButton?: object } interface Data { } @tag('m-dialog') class Dialog extends WeElement{ static css = css static confirm: any static alert: any static propTypes = { show: Boolean, scrollable: Boolean, title: String, cancelButton: Object, confirmButton: Object } dialog: MDCDialog updated() { this.props.show ? this.dialog.open() : this.dialog.close() } installed() { this.dialog = new MDCDialog(this.shadowRoot.querySelector('.mdc-dialog')) this.props.show ? this.dialog.open() : this.dialog.close() this.dialog.listen('MDCDialog:opening', (e) => { this.fire('opening', e) }) this.dialog.listen('MDCDialog:opened', (e) => { this.fire('opened', e) }) this.dialog.listen('MDCDialog:closing', (e) => { this.fire('closing', e) }) this.dialog.listen('MDCDialog:closed', (e) => { this.fire('closed', e) }) } onScrim = (e) => {this.fire('scrim', e)} onCancel = (e) => {this.fire('cancel', e)} onConfirm = (e) => {this.fire('confirm', e)} render(props) { return (
{props.title &&

{props.title}

}
{/* solve the problem that the content focus is empty */}
{(props.cancelButton || props.confirmButton) &&
{props.cancelButton && {props.cancelButton.text}} {props.confirmButton && {props.confirmButton.text}}
}
) } } let dom Dialog.confirm = function (options) { if (dom) { document.body.removeChild(dom) } dom = render(onConfirm(options.cancel)} onConfirm={_=>onConfirm(options.confirm)} show={true} >

{options.msg}

, 'body') } function onConfirm(callback){ callback && callback() if (dom) { document.body.removeChild(dom) dom = null } } Dialog.alert = function (options) { if (dom) { document.body.removeChild(dom) } dom = render(onConfirm(options.confirm)} show={true} >

{options.msg}

, 'body') } export default Dialog