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