/**
* @component Alert
* @description
*
* ## 对话框 / Alert对话框组件
*
* 对话框作为和用户交互的弹出层组件, 向用户提供操作选择或操作列表, 让使用者作出决定。 这里的对话框可以是: Alert/Confirm/Radios/Checkboxes/Input等.
*
* 这里需要注意的是, Select组件使用的就是Radio/Checkboxes这两模式的封装, 但是单选多选两者只能选一个模式出现. 另外, 对于Input类文本输入, 可以混合使用,
* 比如url,email,text等,如果确认表单过多, 请单独开一页或者用modal组件处理.
*
*
* ### 关于buttons属性的说明
* - role属性: cancel只在ios下有用, 他会将标记cancel的button做特殊处理, 比如点击背景关闭则触发cancel的handler
* - cssClass属性: 这个属性用于自定义button的样式, 同理, 外层的cssClass用来定义整个弹层的样式
* - handler属性: 默认是关闭当前的组件, 可以通过`Alert.dismiss()`返回的Promise做后续处理, 他表示整个动画完毕
*
* ### 关于inputs属性的说明
* - inputs属性内type的属性的填值能改变弹出层的展现形式, 比如: input/checkbox/radio等三种形式.
* - 上述的三种形式一次只能选择一种, 这个是规定定死的.
* - 关于input的type类型: text/tel/number/email -> 对应的其余属性可以是: type/name/placeholder/value.
* - 关于input的type类型: checkbox/radio -> 对应的其余属性可以是: type/value/label/checked/disabled.
* - 以上如果混用是达不到效果的, 这个是Alert组件的使用约定.
*
*
* ### 使用注意
*
* - 建议在关闭弹出层动画后在处理关闭事项, 比如跳转/再次弹出提示等
* - 弹层组件全部对路由跳转相应, 比如路由切换则弹层自动关闭, 这个可以通过`dismissOnPageChange`设置
* - button超过三个则纵向排列
* - 更详细的示例请看demo
*
*
* @demo #/alert
* @usage
*
* import { Alert } from 'vimo'
*
* // Alert
* Alert.present({
* title: 'Alert',
* message: '收到这个通知的人希望你今天能搞定这个alert组件',
* cssClass: 'alertCssOuterMain ',
* enableBackdropDismiss: true,
* buttons: [
* {
* text: '确定',
* handler: (value) => {
* Alert.dismiss().then((data) => {
* console.debug('button3 click dismiss ')
* console.debug(data)
* });
* }
* }
* ]
* });
*
* // Input
* input () {
* Alert.present({
* title: '登录iTunes Store',
* // subTitle: '收到这个通知的人希望你今天能搞定这个alert组件',
* message: '请输入您Apple ID"apple@icloud.com"的密码',
* cssClass: 'alertCssOuterMain ',
* enableBackdropDismiss: true,
* inputs: [
* {
* type: 'password',
* name: 'password',
* placeholder: '密码',
* value: '',
* },
* ],
* buttons: [
* {
* text: '取消',
* role: 'cancel',
* handler: () => {}
* },
* {
* text: '确定',
* role: '',
* handler: (value) => {
* Alert.present({
* title: '请确认',
* // subTitle: '收到这个通知的人希望你今天能搞定这个alert组件',
* message: '您输入的信息:' + JSON.stringify(value),
* cssClass: '',
* enableBackdropDismiss: true,
* buttons: [
* {
* text: '确定',
* role: 'cancel',
* handler: (value) => {
* Alert.dismiss().then(function (msg) {
* console.log('alert input2 dismiss promise')
* })
* }
* }
* ]
* }).then(function () {
* console.log('alert input2 present promise')
* })
* }
* }
* ]
* }).then(function () {
* console.log('alert input1 present promise')
* });
* }
*
*/
/**
* @function present
* @description
* 开启组件, 当开启动画过度完毕时触发 `Promise` 的 `resolve` 。
*
* @param {object} options - 传入参数
* @param {String} [options.title] - 标题
* @param {string} [options.subTitle] - 副标题
* @param {string} [options.message] - 消息文本
* @param {string} [options.cssClass] - 自定义样式
* @param {Boolean} [options.enableBackdropDismiss=true] - 允许点击backdrop关闭组件
* @param {Boolean} [options.dismissOnPageChange=true] - 路由切换关闭组件
* @param {string} [options.mode=ios] - 样式模式
* @param {string} [options.isH5=false] - 强制使用H5组件(区别使用Hybrid提供的Alert方法)
*
* @param {Array} [options.buttons] - button数组,包含全部role
* @param {Array} options.buttons.text - button显示文本
* @param {Array} options.buttons.icon - button显示的icon的name, 具体参考Icon组件
* @param {Array} options.buttons.role - 可以是cancel(关闭)/destructive(警告/删除)/null
* @param {Array} options.buttons.handler - 默认是关闭组件
* @param {Array} options.buttons.cssClass - 自定义样式
*
* @param {Array} [options.inputs] - 如果alert中有input等form
* @param {Array} options.inputs.type - input的类型, 比如: text, tel, number, etc.
* @param {Array} options.inputs.name - 名称
* @param {Array} options.inputs.placeholder - 占位名称
* @param {Array} options.inputs.value - 值
* @param {Array} options.inputs.label - 标签名
* @param {Array} options.inputs.checked - 是否选中
* @param {Array} options.inputs.id - id编号
*
* @return {Promise}
* */
/**
* @function dismiss
* @description
* 手动关闭组件, 当开启动画过度完毕时触发 `Promise` 的 `resolve` 。
* @return {Promise}
* */
import AlertComponent from './alert.vue'
import GeneratePopUpInstance from '../../util/GeneratePopUpInstance.js'
class AlertInstance extends GeneratePopUpInstance {
isPresentHandled (options) {
return !options.isH5 &&
window.VM &&
window.VM.platform &&
window.VM.platform.alert &&
window.VM.platform.alert(options)
}
}
export default new AlertInstance(AlertComponent, 'alertPortal')