UNPKG

@tamagui/react-native-web-lite

Version:
125 lines (124 loc) 6.39 kB
import AnimatedValue from "./nodes/AnimatedValue.native.js"; import NativeAnimatedHelper from "./NativeAnimatedHelper.native.js"; import { invariant } from "@tamagui/react-native-web-internals"; import { shouldUseNativeDriver } from "./NativeAnimatedHelper.native.js"; function _class_call_check(instance, Constructor) { if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function"); } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || !1, descriptor.configurable = !0, "value" in descriptor && (descriptor.writable = !0), Object.defineProperty(target, descriptor.key, descriptor); } } function _create_class(Constructor, protoProps, staticProps) { return protoProps && _defineProperties(Constructor.prototype, protoProps), staticProps && _defineProperties(Constructor, staticProps), Constructor; } function _define_property(obj, key, value) { return key in obj ? Object.defineProperty(obj, key, { value, enumerable: !0, configurable: !0, writable: !0 }) : obj[key] = value, obj; } var __DEV__ = process.env.NODE_ENV !== "production"; function attachNativeEvent(viewRef, eventName, argMapping) { var eventMappings = [], traverse = function (value, path) { if (value instanceof AnimatedValue) value.__makeNative(), eventMappings.push({ nativeEventPath: path, animatedValueTag: value.__getNativeTag() });else if (typeof value == "object") for (var key in value) traverse(value[key], path.concat(key)); }; return invariant(argMapping[0] && argMapping[0].nativeEvent, "Native driven events only support animated values contained inside `nativeEvent`."), traverse(argMapping[0].nativeEvent, []), viewRef != null && eventMappings.forEach(function (mapping) { NativeAnimatedHelper.API.addAnimatedEventToView(viewRef, eventName, mapping); }), { detach() { viewRef != null && eventMappings.forEach(function (mapping) { NativeAnimatedHelper.API.removeAnimatedEventFromView(viewRef, eventName, mapping.animatedValueTag); }); } }; } function validateMapping(argMapping, args) { var validate = function (recMapping, recEvt, key) { if (recMapping instanceof AnimatedValue) { invariant(typeof recEvt == "number", "Bad mapping of event key " + key + ", should be number but got " + typeof recEvt); return; } if (typeof recEvt == "number") { invariant(recMapping instanceof AnimatedValue, "Bad mapping of type " + typeof recMapping + " for key " + key + ", event value must map to AnimatedValue"); return; } invariant(typeof recMapping == "object", "Bad mapping of type " + typeof recMapping + " for key " + key), invariant(typeof recEvt == "object", "Bad event of type " + typeof recEvt + " for key " + key); for (var mappingKey in recMapping) validate(recMapping[mappingKey], recEvt[mappingKey], mappingKey); }; invariant(args.length >= argMapping.length, "Event has less arguments than mapping"), argMapping.forEach(function (mapping, idx) { validate(mapping, args[idx], "arg" + idx); }); } var AnimatedEvent = /* @__PURE__ */function () { function AnimatedEvent2(argMapping, config) { _class_call_check(this, AnimatedEvent2), _define_property(this, "_argMapping", void 0), _define_property(this, "_listeners", []), _define_property(this, "_attachedEvent", void 0), _define_property(this, "__isNative", void 0), this._argMapping = argMapping, config == null && (console.warn("Animated.event now requires a second argument for options"), config = { useNativeDriver: !1 }), config.listener && this.__addListener(config.listener), this._callListeners = this._callListeners.bind(this), this._attachedEvent = null, this.__isNative = shouldUseNativeDriver(config); } return _create_class(AnimatedEvent2, [{ key: "__addListener", value: function (callback) { this._listeners.push(callback); } }, { key: "__removeListener", value: function (callback) { this._listeners = this._listeners.filter(function (listener) { return listener !== callback; }); } }, { key: "__attach", value: function (viewRef, eventName) { invariant(this.__isNative, "Only native driven events need to be attached."), this._attachedEvent = attachNativeEvent(viewRef, eventName, this._argMapping); } }, { key: "__detach", value: function (viewTag, eventName) { invariant(this.__isNative, "Only native driven events need to be detached."), this._attachedEvent && this._attachedEvent.detach(); } }, { key: "__getHandler", value: function () { var _this = this; if (this.__isNative) if (__DEV__) { var _this1 = this, validatedMapping = !1; return function () { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) args[_key] = arguments[_key]; validatedMapping || (validateMapping(_this1._argMapping, args), validatedMapping = !0), _this1._callListeners(...args); }; } else return this._callListeners; var validatedMapping1 = !1; return function () { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) args[_key] = arguments[_key]; __DEV__ && !validatedMapping1 && (validateMapping(_this._argMapping, args), validatedMapping1 = !0); var traverse = function (recMapping, recEvt, key) { if (recMapping instanceof AnimatedValue) typeof recEvt == "number" && recMapping.setValue(recEvt);else if (typeof recMapping == "object") for (var mappingKey in recMapping) traverse(recMapping[mappingKey], recEvt[mappingKey], mappingKey); }; _this._argMapping.forEach(function (mapping, idx) { traverse(mapping, args[idx], "arg" + idx); }), _this._callListeners(...args); }; } }, { key: "_callListeners", value: function () { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) args[_key] = arguments[_key]; this._listeners.forEach(function (listener) { return listener(...args); }); } }]), AnimatedEvent2; }(); export { AnimatedEvent, attachNativeEvent }; //# sourceMappingURL=AnimatedEvent.native.js.map