@tamagui/react-native-web-lite
Version:
React Native for Web
123 lines (109 loc) • 2.88 kB
JavaScript
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
* @format
*/
import { AnimatedNode } from './AnimatedNode'
import { AnimatedWithChildren } from './AnimatedWithChildren'
import { NativeAnimatedHelper } from '../NativeAnimatedHelper'
class AnimatedTransform extends AnimatedWithChildren {
_transforms
constructor(transforms) {
super()
this._transforms = transforms
}
__makeNative() {
this._transforms.forEach((transform) => {
for (const key in transform) {
const value = transform[key]
if (value instanceof AnimatedNode) {
value.__makeNative()
}
}
})
super.__makeNative()
}
__getValue() {
return this._transforms.map((transform) => {
const result = {}
for (const key in transform) {
const value = transform[key]
if (value instanceof AnimatedNode) {
result[key] = value.__getValue()
} else {
result[key] = value
}
}
return result
})
}
__getAnimatedValue() {
return this._transforms.map((transform) => {
const result = {}
for (const key in transform) {
const value = transform[key]
if (value instanceof AnimatedNode) {
result[key] = value.__getAnimatedValue()
} else {
// All transform components needed to recompose matrix
result[key] = value
}
}
return result
})
}
__attach() {
this._transforms.forEach((transform) => {
for (const key in transform) {
const value = transform[key]
if (value instanceof AnimatedNode) {
value.__addChild(this)
}
}
})
}
__detach() {
this._transforms.forEach((transform) => {
for (const key in transform) {
const value = transform[key]
if (value instanceof AnimatedNode) {
value.__removeChild(this)
}
}
})
super.__detach()
}
__getNativeConfig() {
const transConfigs = []
this._transforms.forEach((transform) => {
for (const key in transform) {
const value = transform[key]
if (value instanceof AnimatedNode) {
transConfigs.push({
type: 'animated',
property: key,
nodeTag: value.__getNativeTag(),
})
} else {
transConfigs.push({
type: 'static',
property: key,
value: NativeAnimatedHelper.transformDataType(value),
})
}
}
})
NativeAnimatedHelper.validateTransform(transConfigs)
return {
type: 'transform',
transforms: transConfigs,
}
}
}
export { AnimatedTransform }
export default AnimatedTransform