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