@tamagui/react-native-web-lite
Version:
React Native for Web
126 lines (125 loc) • 3.67 kB
JavaScript
import { AnimatedEvent } from "../AnimatedEvent.mjs";
import { AnimatedNode } from "./AnimatedNode.mjs";
import { AnimatedStyle } from "./AnimatedStyle.mjs";
import { NativeAnimatedHelper } from "../NativeAnimatedHelper.mjs";
import { invariant } from "@tamagui/react-native-web-internals";
class AnimatedProps extends AnimatedNode {
constructor(props, callback) {
super();
if (props.style) {
props = {
...props,
style: new AnimatedStyle(props.style)
};
}
this._props = props;
this._callback = callback;
this.__attach();
}
__getValue() {
const props = {};
for (const key in this._props) {
const value = this._props[key];
if (value instanceof AnimatedNode) {
if (!value.__isNative || value instanceof AnimatedStyle) {
props[key] = value.__getValue();
}
} else if (value instanceof AnimatedEvent) {
props[key] = value.__getHandler();
} else {
props[key] = value;
}
}
return props;
}
__getAnimatedValue() {
const props = {};
for (const key in this._props) {
const value = this._props[key];
if (value instanceof AnimatedNode) {
props[key] = value.__getAnimatedValue();
}
}
return props;
}
__attach() {
for (const key in this._props) {
const value = this._props[key];
if (value instanceof AnimatedNode) {
value.__addChild(this);
}
}
}
__detach() {
if (this.__isNative && this._animatedView) {
this.__disconnectAnimatedView();
}
for (const key in this._props) {
const value = this._props[key];
if (value instanceof AnimatedNode) {
value.__removeChild(this);
}
}
super.__detach();
}
update() {
this._callback();
}
__makeNative() {
if (!this.__isNative) {
this.__isNative = true;
for (const key in this._props) {
const value = this._props[key];
if (value instanceof AnimatedNode) {
value.__makeNative();
}
}
if (this._animatedView) {
this.__connectAnimatedView();
}
}
}
setNativeView(animatedView) {
if (this._animatedView === animatedView) {
return;
}
this._animatedView = animatedView;
if (this.__isNative) {
this.__connectAnimatedView();
}
}
__connectAnimatedView() {
invariant(this.__isNative, 'Expected node to be marked as "native"');
const nativeViewTag = this._animatedView;
invariant(nativeViewTag != null, "Unable to locate attached view in the native tree");
NativeAnimatedHelper.API.connectAnimatedNodeToView(this.__getNativeTag(), nativeViewTag);
}
__disconnectAnimatedView() {
invariant(this.__isNative, 'Expected node to be marked as "native"');
const nativeViewTag = this._animatedView;
invariant(nativeViewTag != null, "Unable to locate attached view in the native tree");
NativeAnimatedHelper.API.disconnectAnimatedNodeFromView(this.__getNativeTag(), nativeViewTag);
}
__restoreDefaultValues() {
if (this.__isNative) {
NativeAnimatedHelper.API.restoreDefaultValues(this.__getNativeTag());
}
}
__getNativeConfig() {
const propsConfig = {};
for (const propKey in this._props) {
const value = this._props[propKey];
if (value instanceof AnimatedNode) {
value.__makeNative();
propsConfig[propKey] = value.__getNativeTag();
}
}
return {
type: "props",
props: propsConfig
};
}
}
var AnimatedProps_default = AnimatedProps;
export { AnimatedProps, AnimatedProps_default as default };
//# sourceMappingURL=AnimatedProps.mjs.map