forked from IjzerenHein/react-native-shared-element
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathRNSharedElementTransitionView.web.tsx
72 lines (64 loc) · 1.84 KB
/
RNSharedElementTransitionView.web.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import * as React from "react";
import { View, findNodeHandle } from "react-native";
import {
RNSharedElementTransition,
RNSharedElementNodeConfig,
RNSharedElementAnimation,
RNSharedElementResize,
RNSharedElementAlign,
} from "./web/index.web";
type PropsType = {
startNode: {
node: RNSharedElementNodeConfig | null;
ancestor: RNSharedElementNodeConfig | null;
};
endNode: {
node: RNSharedElementNodeConfig | null;
ancestor: RNSharedElementNodeConfig | null;
};
nodePosition: number | any;
animation: RNSharedElementAnimation;
resize: RNSharedElementResize;
align: RNSharedElementAlign;
//onMeasure?: (event: SharedElementOnMeasureEvent) => void;
};
type StateType = {
transition: RNSharedElementTransition;
};
export class RNSharedElementTransitionView extends React.Component<
PropsType,
StateType
> {
state = {
transition: new RNSharedElementTransition(),
};
static getDerivedStateFromProps(props: PropsType, state: StateType) {
const { startNode, endNode, animation, resize, align, nodePosition } =
props;
const { transition } = state;
transition.setNode(false, startNode.node, startNode.ancestor);
transition.setNode(true, endNode.node, endNode.ancestor);
transition.nodePosition = nodePosition;
transition.animation = animation;
transition.resize = resize;
transition.align = align;
transition.didSetProps();
return null;
}
shouldComponentUpdate() {
return false;
}
componentWillUnmount() {
this.state.transition.destroy();
}
private onSetRef = (ref: any) => {
if (!ref) return;
const element: any = ref ? findNodeHandle(ref) : null;
const { transition } = this.state;
transition.element = element;
};
render() {
// console.log("RNSharedElementTransitionView.render");
return <View ref={this.onSetRef} />;
}
}