1 /*
2  * Copyright (c) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_form_component_bridge.h"
17 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_common_bridge.h"
18 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_utils.h"
19 
20 namespace OHOS::Ace::NG {
SetVisibility(ArkUIRuntimeCallInfo * runtimeCallInfo)21 ArkUINativeModuleValue FormComponentBridge::SetVisibility(ArkUIRuntimeCallInfo* runtimeCallInfo)
22 {
23     EcmaVM* vm = runtimeCallInfo->GetVM();
24     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
25     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
26     Local<JSValueRef> visibilityArg = runtimeCallInfo->GetCallArgRef(1);
27     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
28     int32_t visibility = visibilityArg->Int32Value(vm);
29     GetArkUINodeModifiers()->getFormComponentModifier()->setFormVisibility(nativeNode, visibility);
30     return panda::JSValueRef::Undefined(vm);
31 }
32 
ResetVisibility(ArkUIRuntimeCallInfo * runtimeCallInfo)33 ArkUINativeModuleValue FormComponentBridge::ResetVisibility(ArkUIRuntimeCallInfo* runtimeCallInfo)
34 {
35     EcmaVM* vm = runtimeCallInfo->GetVM();
36     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
37     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
38     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
39     GetArkUINodeModifiers()->getFormComponentModifier()->resetFormVisibility(nativeNode);
40     return panda::JSValueRef::Undefined(vm);
41 }
42 
AllowUpdate(ArkUIRuntimeCallInfo * runtimeCallInfo)43 ArkUINativeModuleValue FormComponentBridge::AllowUpdate(ArkUIRuntimeCallInfo* runtimeCallInfo)
44 {
45     EcmaVM* vm = runtimeCallInfo->GetVM();
46     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
47     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
48     Local<JSValueRef> allowUpdateArg = runtimeCallInfo->GetCallArgRef(1);
49     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
50     bool allowUpdate = allowUpdateArg->ToBoolean(vm)->Value();
51     GetArkUINodeModifiers()->getFormComponentModifier()->allowUpdate(nativeNode, allowUpdate);
52     return panda::JSValueRef::Undefined(vm);
53 }
54 
DisallowUpdate(ArkUIRuntimeCallInfo * runtimeCallInfo)55 ArkUINativeModuleValue FormComponentBridge::DisallowUpdate(ArkUIRuntimeCallInfo* runtimeCallInfo)
56 {
57     EcmaVM* vm = runtimeCallInfo->GetVM();
58     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
59     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
60     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
61     GetArkUINodeModifiers()->getFormComponentModifier()->disallowUpdate(nativeNode);
62     return panda::JSValueRef::Undefined(vm);
63 }
64 
SetDimension(ArkUIRuntimeCallInfo * runtimeCallInfo)65 ArkUINativeModuleValue FormComponentBridge::SetDimension(ArkUIRuntimeCallInfo* runtimeCallInfo)
66 {
67     EcmaVM* vm = runtimeCallInfo->GetVM();
68     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
69     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
70     Local<JSValueRef> dimensionArg = runtimeCallInfo->GetCallArgRef(1);
71     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
72     if (dimensionArg->IsNull() || dimensionArg->IsUndefined()) {
73         GetArkUINodeModifiers()->getFormComponentModifier()->resetDimension(nativeNode);
74     } else {
75         int32_t dimension = dimensionArg->Int32Value(vm);
76         GetArkUINodeModifiers()->getFormComponentModifier()->setDimension(nativeNode, dimension);
77     }
78     return panda::JSValueRef::Undefined(vm);
79 }
80 
ResetDimension(ArkUIRuntimeCallInfo * runtimeCallInfo)81 ArkUINativeModuleValue FormComponentBridge::ResetDimension(ArkUIRuntimeCallInfo* runtimeCallInfo)
82 {
83     EcmaVM* vm = runtimeCallInfo->GetVM();
84     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
85     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
86     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
87     GetArkUINodeModifiers()->getFormComponentModifier()->resetDimension(nativeNode);
88     return panda::JSValueRef::Undefined(vm);
89 }
90 
SetModuleName(ArkUIRuntimeCallInfo * runtimeCallInfo)91 ArkUINativeModuleValue FormComponentBridge::SetModuleName(ArkUIRuntimeCallInfo* runtimeCallInfo)
92 {
93     EcmaVM* vm = runtimeCallInfo->GetVM();
94     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
95     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
96     Local<JSValueRef> moduleNameArg = runtimeCallInfo->GetCallArgRef(1);
97     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
98     if (moduleNameArg->IsNull() || moduleNameArg->IsUndefined()) {
99         GetArkUINodeModifiers()->getFormComponentModifier()->resetModuleName(nativeNode);
100     } else {
101         std::string moduleName = moduleNameArg->ToString(vm)->ToString(vm);
102         GetArkUINodeModifiers()->getFormComponentModifier()->setModuleName(nativeNode, moduleName.c_str());
103     }
104     return panda::JSValueRef::Undefined(vm);
105 }
106 
ResetModuleName(ArkUIRuntimeCallInfo * runtimeCallInfo)107 ArkUINativeModuleValue FormComponentBridge::ResetModuleName(ArkUIRuntimeCallInfo* runtimeCallInfo)
108 {
109     EcmaVM* vm = runtimeCallInfo->GetVM();
110     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
111     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
112     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
113     GetArkUINodeModifiers()->getFormComponentModifier()->resetModuleName(nativeNode);
114     return panda::JSValueRef::Undefined(vm);
115 }
116 
SetSize(ArkUIRuntimeCallInfo * runtimeCallInfo)117 ArkUINativeModuleValue FormComponentBridge::SetSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
118 {
119     EcmaVM* vm = runtimeCallInfo->GetVM();
120     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
121     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
122     Local<JSValueRef> widthValue = runtimeCallInfo->GetCallArgRef(1);
123     Local<JSValueRef> heightValue = runtimeCallInfo->GetCallArgRef(2);
124     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
125     CommonBridge::SetSize(runtimeCallInfo);
126     CalcDimension width = 0.0_vp;
127     CalcDimension height = 0.0_vp;
128     bool hasWidth = (!widthValue->IsNull() && !widthValue->IsUndefined() &&
129         ArkTSUtils::ParseJsDimensionVp(vm, widthValue, width));
130     bool hasHeight = (!heightValue->IsNull() && !heightValue->IsUndefined() &&
131         ArkTSUtils::ParseJsDimensionVp(vm, heightValue, height));
132     if (!hasWidth && !hasHeight) {
133         GetArkUINodeModifiers()->getFormComponentModifier()->resetFormSize(nativeNode);
134     } else {
135         GetArkUINodeModifiers()->getFormComponentModifier()->setFormSize(nativeNode,
136             width.Value(), static_cast<int>(width.Unit()), height.Value(), static_cast<int>(height.Unit()));
137     }
138     return panda::JSValueRef::Undefined(vm);
139 }
140 
ResetSize(ArkUIRuntimeCallInfo * runtimeCallInfo)141 ArkUINativeModuleValue FormComponentBridge::ResetSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
142 {
143     EcmaVM* vm = runtimeCallInfo->GetVM();
144     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
145     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
146     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
147     CommonBridge::ResetSize(runtimeCallInfo);
148     GetArkUINodeModifiers()->getFormComponentModifier()->resetFormSize(nativeNode);
149     return panda::JSValueRef::Undefined(vm);
150 }
151 }