1*ab11e3c9SKudo Chien #include "MutableValueSetterProxy.h"
2*ab11e3c9SKudo Chien #include <jsi/jsi.h>
3*ab11e3c9SKudo Chien #include "MutableValue.h"
4*ab11e3c9SKudo Chien #include "SharedParent.h"
5*ab11e3c9SKudo Chien
6*ab11e3c9SKudo Chien using namespace facebook;
7*ab11e3c9SKudo Chien
8*ab11e3c9SKudo Chien namespace reanimated {
9*ab11e3c9SKudo Chien
set(jsi::Runtime & rt,const jsi::PropNameID & name,const jsi::Value & newValue)10*ab11e3c9SKudo Chien void MutableValueSetterProxy::set(
11*ab11e3c9SKudo Chien jsi::Runtime &rt,
12*ab11e3c9SKudo Chien const jsi::PropNameID &name,
13*ab11e3c9SKudo Chien const jsi::Value &newValue) {
14*ab11e3c9SKudo Chien auto propName = name.utf8(rt);
15*ab11e3c9SKudo Chien if (propName == "_value") {
16*ab11e3c9SKudo Chien mutableValue->setValue(rt, newValue);
17*ab11e3c9SKudo Chien } else if (propName == "_animation") {
18*ab11e3c9SKudo Chien // TODO: assert to allow animation to be set from UI only
19*ab11e3c9SKudo Chien if (mutableValue->animation.expired()) {
20*ab11e3c9SKudo Chien mutableValue->animation = mutableValue->getWeakRef(rt);
21*ab11e3c9SKudo Chien }
22*ab11e3c9SKudo Chien *mutableValue->animation.lock() = jsi::Value(rt, newValue);
23*ab11e3c9SKudo Chien } else if (propName == "value") {
24*ab11e3c9SKudo Chien // you call `this.value` inside of value setter, we should throw
25*ab11e3c9SKudo Chien }
26*ab11e3c9SKudo Chien }
27*ab11e3c9SKudo Chien
get(jsi::Runtime & rt,const jsi::PropNameID & name)28*ab11e3c9SKudo Chien jsi::Value MutableValueSetterProxy::get(
29*ab11e3c9SKudo Chien jsi::Runtime &rt,
30*ab11e3c9SKudo Chien const jsi::PropNameID &name) {
31*ab11e3c9SKudo Chien auto propName = name.utf8(rt);
32*ab11e3c9SKudo Chien
33*ab11e3c9SKudo Chien if (propName == "value") {
34*ab11e3c9SKudo Chien return mutableValue->getValue(rt);
35*ab11e3c9SKudo Chien } else if (propName == "_value") {
36*ab11e3c9SKudo Chien return mutableValue->getValue(rt);
37*ab11e3c9SKudo Chien } else if (propName == "_animation") {
38*ab11e3c9SKudo Chien if (mutableValue->animation.expired()) {
39*ab11e3c9SKudo Chien mutableValue->animation = mutableValue->getWeakRef(rt);
40*ab11e3c9SKudo Chien }
41*ab11e3c9SKudo Chien return jsi::Value(rt, *mutableValue->animation.lock());
42*ab11e3c9SKudo Chien }
43*ab11e3c9SKudo Chien
44*ab11e3c9SKudo Chien return jsi::Value::undefined();
45*ab11e3c9SKudo Chien }
46*ab11e3c9SKudo Chien
47*ab11e3c9SKudo Chien } // namespace reanimated
48