| 
									
										
										
										
											2018-06-30 14:52:41 +08:00
										 |  |  | import Vue from 'vue' | 
					
						
							|  |  |  | import ActionSheet from './action-sheet' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const noop = function() {} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // all active instances
 | 
					
						
							|  |  |  | const instances = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Dynamically create a ActionSheet | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @param {Object} param | 
					
						
							|  |  |  |  * @return {ActionSheet} | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | ActionSheet.create = function({ | 
					
						
							|  |  |  |   value = true, | 
					
						
							|  |  |  |   title = '', | 
					
						
							|  |  |  |   options = [], | 
					
						
							|  |  |  |   defaultIndex = -1, | 
					
						
							|  |  |  |   invalidIndex = -1, | 
					
						
							|  |  |  |   cancelText = '取消', | 
					
						
							|  |  |  |   maxHeight = 400, | 
					
						
							|  |  |  |   onShow = noop, | 
					
						
							|  |  |  |   onHide = noop, | 
					
						
							|  |  |  |   onSelected = noop, | 
					
						
							| 
									
										
										
										
											2018-12-12 20:47:15 +08:00
										 |  |  |   onCancel = noop, | 
					
						
							| 
									
										
										
										
											2018-06-30 14:52:41 +08:00
										 |  |  | }) { | 
					
						
							| 
									
										
										
										
											2018-12-10 15:43:15 +08:00
										 |  |  |   const ActionSheetCtor = Vue.extend(ActionSheet) | 
					
						
							| 
									
										
										
										
											2018-06-30 14:52:41 +08:00
										 |  |  |   const vm = new ActionSheetCtor({ | 
					
						
							|  |  |  |     propsData: { | 
					
						
							|  |  |  |       value, | 
					
						
							|  |  |  |       title, | 
					
						
							|  |  |  |       options, | 
					
						
							|  |  |  |       defaultIndex, | 
					
						
							|  |  |  |       invalidIndex, | 
					
						
							|  |  |  |       cancelText, | 
					
						
							|  |  |  |       maxHeight, | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |   }).$mount() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   instances.push(vm) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* istanbul ignore else */ | 
					
						
							|  |  |  |   if (value) { | 
					
						
							|  |  |  |     document.body.appendChild(vm.$el) | 
					
						
							|  |  |  |     vm.value = true | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   vm.$watch( | 
					
						
							|  |  |  |     'value', | 
					
						
							|  |  |  |     /* istanbul ignore next */ val => { | 
					
						
							|  |  |  |       if (val) { | 
					
						
							|  |  |  |         document.body.appendChild(vm.$el) | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |   ) | 
					
						
							|  |  |  |   vm.$on( | 
					
						
							|  |  |  |     'input', | 
					
						
							|  |  |  |     /* istanbul ignore next */ val => { | 
					
						
							|  |  |  |       if (val) { | 
					
						
							|  |  |  |         vm.value = true | 
					
						
							|  |  |  |       } else { | 
					
						
							|  |  |  |         vm.value = false | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |   ) | 
					
						
							|  |  |  |   vm.$on( | 
					
						
							|  |  |  |     'show', | 
					
						
							|  |  |  |     /* istanbul ignore next */ () => { | 
					
						
							|  |  |  |       if (typeof onShow === 'function') { | 
					
						
							|  |  |  |         onShow.call(null) | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |   ) | 
					
						
							|  |  |  |   vm.$on( | 
					
						
							|  |  |  |     'hide', | 
					
						
							|  |  |  |     /* istanbul ignore next */ () => { | 
					
						
							|  |  |  |       const parent = vm.$el.parentNode | 
					
						
							|  |  |  |       if (parent) { | 
					
						
							|  |  |  |         parent.removeChild(vm.$el) | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       if (typeof onHide === 'function') { | 
					
						
							|  |  |  |         onHide.call(null) | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |   ) | 
					
						
							|  |  |  |   vm.$on( | 
					
						
							|  |  |  |     'selected', | 
					
						
							|  |  |  |     /* istanbul ignore next */ item => { | 
					
						
							|  |  |  |       if (typeof onSelected === 'function') { | 
					
						
							|  |  |  |         onSelected.call(null, item) | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |   ) | 
					
						
							| 
									
										
										
										
											2018-12-12 20:47:15 +08:00
										 |  |  |   vm.$on( | 
					
						
							|  |  |  |     'cancel', | 
					
						
							|  |  |  |     /* istanbul ignore next */ item => { | 
					
						
							|  |  |  |       if (typeof onCancel === 'function') { | 
					
						
							|  |  |  |         onCancel.call(null, item) | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |   ) | 
					
						
							| 
									
										
										
										
											2018-06-30 14:52:41 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-12 20:47:15 +08:00
										 |  |  |   /* istanbul ignore next */ | 
					
						
							| 
									
										
										
										
											2018-06-30 14:52:41 +08:00
										 |  |  |   vm.$on('hook:beforeDestroy', () => { | 
					
						
							|  |  |  |     const parent = vm.$el.parentNode | 
					
						
							|  |  |  |     const index = instances.indexOf(vm) | 
					
						
							|  |  |  |     if (index) { | 
					
						
							|  |  |  |       instances.splice(index, 1) | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     if (parent) { | 
					
						
							|  |  |  |       parent.removeChild(vm.$el) | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return vm | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Close all actived global ActionSheets | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @static | 
					
						
							|  |  |  |  * @return void | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | ActionSheet.closeAll = () => { | 
					
						
							|  |  |  |   instances.forEach(instance => { | 
					
						
							|  |  |  |     instance.value = false | 
					
						
							|  |  |  |   }) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Close and destroy all actived global ActionSheets | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @static | 
					
						
							|  |  |  |  * @return void | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | ActionSheet.destroyAll = () => { | 
					
						
							|  |  |  |   instances.forEach(instance => { | 
					
						
							|  |  |  |     instance.value = false | 
					
						
							|  |  |  |     instance.$on('hide', () => { | 
					
						
							|  |  |  |       instance.$destroy() | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  |   }) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export default ActionSheet |