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