UNPKG

reon

Version:

Event library for React built to resemble React's internal Synthetic Events

1 lines 6.86 kB
"use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.trigger=exports.lazy=exports.isSyntheticEvent=exports.forward=exports["default"]=void 0;var _defineProperty2=_interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));var _classCallCheck2=_interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));var _createClass2=_interopRequireDefault(require("@babel/runtime/helpers/createClass"));var _typeof2=_interopRequireDefault(require("@babel/runtime/helpers/typeof"));var _react=_interopRequireDefault(require("react"));function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&&(symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable;})),keys.push.apply(keys,symbols);}return keys;}function _objectSpread(target){for(var i=1;i<arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};i%2?ownKeys(Object(source),!0).forEach(function(key){(0,_defineProperty2["default"])(target,key,source[key]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(target,Object.getOwnPropertyDescriptors(source)):ownKeys(Object(source)).forEach(function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key));});}return target;}var __DEFAULT_PREVENTED__=Symbol('Default prevented');var __PROPAGATION_STOPPED__=Symbol('Propagation stopped');var _isSyntheticEventCache=new Map();var nope=function nope(){return false;};var isSyntheticEvent=function isSyntheticEvent(e){if(!e||(0,_typeof2["default"])(e)!=='object')return false;if(e instanceof ReonEvent)return true;var c=e.constructor;if(_isSyntheticEventCache.has(c))return _isSyntheticEventCache.get(c);if(typeof e.persist=='function'&&typeof e.getPooled!='function'){_isSyntheticEventCache.set(c,true);return true;}var Interface=c.Interface,getPooled=c.getPooled,release=c.release,eventPool=c.eventPool,instancePool=c.instancePool;var result=Interface&&Array.isArray(eventPool||instancePool)&&typeof getPooled==='function'&&typeof release==='function'&&typeof Interface.eventPhase!=='undefined'&&typeof Interface.bubbles!=='undefined';_isSyntheticEventCache.set(c,result);return result;};exports.isSyntheticEvent=isSyntheticEvent;function executeEvent(handler,properties){if(typeof handler!='function')return{isDefaultPrevented:nope,isPropagationStopped:nope};var instance=new ReonEvent(properties);handler(instance);var prevented=instance.isDefaultPrevented();var stopped=instance.isPropagationStopped();return{isDefaultPrevented:function isDefaultPrevented(){return prevented;},isPropagationStopped:function isPropagationStopped(){return stopped;}};}function isComponentInstance(element){var _element$constructor,_element$constructor$;return!!(element!==null&&element!==void 0&&(_element$constructor=element.constructor)!==null&&_element$constructor!==void 0&&(_element$constructor$=_element$constructor.prototype)!==null&&_element$constructor$!==void 0&&_element$constructor$.isReactComponent);}function isDeprecatedArguments(element,properties){var isElement=_react["default"].isValidElement(element)||isComponentInstance(element);var isPropertiesSet=properties&&(0,_typeof2["default"])(properties)==='object';if(isPropertiesSet||isElement){console.error('Deprecated: passing reactElement to Reon methods is deprecated and will be removed in the next major version.');return true;}return false;}var ReonEvent=function(){function ReonEvent(properties){(0,_classCallCheck2["default"])(this,ReonEvent);if(isDeprecatedArguments(properties,arguments[1])){var target=properties;properties=arguments[1]||{};properties=_objectSpread(_objectSpread({},properties),{},{target:target||properties.target});}else{properties=properties||{};}if((0,_typeof2["default"])(properties)==='object')Object.defineProperties(this,Object.getOwnPropertyDescriptors(properties));}(0,_createClass2["default"])(ReonEvent,[{key:"preventDefault",value:function preventDefault(){this[__DEFAULT_PREVENTED__]=true;if(this.reonEvent)this.reonEvent.preventDefault();else if(this.reactEvent)this.reactEvent.preventDefault();else if(this.nativeEvent)this.nativeEvent.preventDefault();}},{key:"stopPropagation",value:function stopPropagation(){this[__PROPAGATION_STOPPED__]=true;if(this.reonEvent)this.reonEvent.stopPropagation();else if(this.reactEvent)this.reactEvent.stopPropagation();else if(this.nativeEvent)this.nativeEvent.stopPropagation();}},{key:"isDefaultPrevented",value:function isDefaultPrevented(){return!!this[__DEFAULT_PREVENTED__];}},{key:"isPropagationStopped",value:function isPropagationStopped(){return!!this[__PROPAGATION_STOPPED__];}}],[{key:"lazy",value:function lazy(properties){var object=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};var descriptors={};Object.keys(properties).forEach(function(key){var descriptor={configurable:true,enumerable:true};if(typeof properties[key]=='function'){descriptor.get=properties[key];}else{descriptor.writable=false;descriptor.value=properties[key];}descriptors[key]=descriptor;});return Object.defineProperties(object,descriptors);}},{key:"trigger",value:function trigger(handler,properties){if(isDeprecatedArguments(properties,arguments[2])){var target=properties;properties=arguments[2]||{};properties=_objectSpread(_objectSpread({},properties),{},{target:target||properties.target});}else{properties=properties||{};}if(false){Object.keys(properties).forEach(function(key){if(isSyntheticEvent(properties[key]))throw new Error('Please use ReonEvent.forward.');});}return executeEvent(handler,properties);}},{key:"forward",value:function forward(handler,forwardedEvent,properties){if(isDeprecatedArguments(forwardedEvent,arguments[3])){var target=forwardedEvent;forwardedEvent=properties;properties=arguments[3]||{};properties=_objectSpread(_objectSpread({},properties),{},{target:target||properties.target});}else{properties=properties||{};}var reonEvent,reactEvent,nativeEvent;if(forwardedEvent instanceof ReonEvent){reonEvent=forwardedEvent;reactEvent=forwardedEvent.reactEvent;nativeEvent=forwardedEvent.nativeEvent;}else if(forwardedEvent instanceof Event){nativeEvent=forwardedEvent;}else if(isSyntheticEvent(forwardedEvent)){reactEvent=forwardedEvent;nativeEvent=forwardedEvent.nativeEvent;}else if(false){console.error('If forwardedEvent is not an event you should be using ReonEvent.trigger.');}return executeEvent(handler,_objectSpread(_objectSpread({},properties),{},{reonEvent:reonEvent,reactEvent:reactEvent,nativeEvent:nativeEvent}));}}]);return ReonEvent;}();exports["default"]=ReonEvent;var trigger=ReonEvent.trigger;exports.trigger=trigger;var forward=ReonEvent.forward;exports.forward=forward;var lazy=ReonEvent.lazy;exports.lazy=lazy;