• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_checkboxgroup_bridge.h"
17 #include "frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_utils.h"
18 
19 namespace OHOS::Ace::NG {
20 namespace {
21 constexpr int NUM_0 = 0;
22 constexpr int NUM_1 = 1;
23 constexpr int NUM_2 = 2;
24 constexpr int NUM_3 = 3;
25 constexpr int PARAM_ARR_LENGTH_1 = 1;
26 constexpr float DEFAULT_SIZE_VALUE = -1.0f;
27 } // namespace
SetCheckboxGroupSelectedColor(ArkUIRuntimeCallInfo * runtimeCallInfo)28 ArkUINativeModuleValue CheckboxGroupBridge::SetCheckboxGroupSelectedColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
29 {
30     EcmaVM* vm = runtimeCallInfo->GetVM();
31     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
32     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
33     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
34     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
35     Color color;
36     RefPtr<ResourceObject> colorResObj;
37     auto nodeInfo = ArkTSUtils::MakeNativeNodeInfo(nativeNode);
38     if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color, colorResObj, nodeInfo)) {
39         GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupSelectedColor(nativeNode);
40     } else {
41         auto colorRawPtr = AceType::RawPtr(colorResObj);
42         GetArkUINodeModifiers()->getCheckboxGroupModifier()->setCheckboxGroupSelectedColorPtr(
43             nativeNode, color.GetValue(), colorRawPtr);
44     }
45 
46     return panda::JSValueRef::Undefined(vm);
47 }
ResetCheckboxGroupSelectedColor(ArkUIRuntimeCallInfo * runtimeCallInfo)48 ArkUINativeModuleValue CheckboxGroupBridge::ResetCheckboxGroupSelectedColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
49 {
50     EcmaVM* vm = runtimeCallInfo->GetVM();
51     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
52     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
53     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
54 
55     GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupSelectedColor(nativeNode);
56     return panda::JSValueRef::Undefined(vm);
57 }
SetCheckboxGroupUnSelectedColor(ArkUIRuntimeCallInfo * runtimeCallInfo)58 ArkUINativeModuleValue CheckboxGroupBridge::SetCheckboxGroupUnSelectedColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
59 {
60     EcmaVM* vm = runtimeCallInfo->GetVM();
61     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
62     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
63     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
64     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
65     Color color;
66     RefPtr<ResourceObject> colorResObj;
67     auto nodeInfo = ArkTSUtils::MakeNativeNodeInfo(nativeNode);
68     if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color, colorResObj, nodeInfo)) {
69         GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupUnSelectedColor(nativeNode);
70     } else {
71         auto colorRawPtr = AceType::RawPtr(colorResObj);
72         GetArkUINodeModifiers()->getCheckboxGroupModifier()->setCheckboxGroupUnSelectedColorPtr(
73             nativeNode, color.GetValue(), colorRawPtr);
74     }
75     return panda::JSValueRef::Undefined(vm);
76 }
ResetCheckboxGroupUnSelectedColor(ArkUIRuntimeCallInfo * runtimeCallInfo)77 ArkUINativeModuleValue CheckboxGroupBridge::ResetCheckboxGroupUnSelectedColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
78 {
79     EcmaVM* vm = runtimeCallInfo->GetVM();
80     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
81     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
82     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
83 
84     GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupUnSelectedColor(nativeNode);
85     return panda::JSValueRef::Undefined(vm);
86 }
SetCheckboxGroupSelectAll(ArkUIRuntimeCallInfo * runtimeCallInfo)87 ArkUINativeModuleValue CheckboxGroupBridge::SetCheckboxGroupSelectAll(ArkUIRuntimeCallInfo* runtimeCallInfo)
88 {
89     EcmaVM* vm = runtimeCallInfo->GetVM();
90     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
91     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
92     Local<JSValueRef> selectAllArg = runtimeCallInfo->GetCallArgRef(1);
93     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
94     if (selectAllArg->IsNull() || selectAllArg->IsUndefined()) {
95         GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupSelectAll(nativeNode);
96     } else {
97         bool selectAll = selectAllArg->ToBoolean(vm)->Value();
98         GetArkUINodeModifiers()->getCheckboxGroupModifier()->setCheckboxGroupSelectAll(nativeNode, selectAll);
99     }
100 
101     return panda::JSValueRef::Undefined(vm);
102 }
ResetCheckboxGroupSelectAll(ArkUIRuntimeCallInfo * runtimeCallInfo)103 ArkUINativeModuleValue CheckboxGroupBridge::ResetCheckboxGroupSelectAll(ArkUIRuntimeCallInfo* runtimeCallInfo)
104 {
105     EcmaVM* vm = runtimeCallInfo->GetVM();
106     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
107     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
108     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
109 
110     GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupSelectAll(nativeNode);
111     return panda::JSValueRef::Undefined(vm);
112 }
SetCheckboxGroupWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)113 ArkUINativeModuleValue CheckboxGroupBridge::SetCheckboxGroupWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
114 {
115     EcmaVM* vm = runtimeCallInfo->GetVM();
116     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
117     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
118     Local<JSValueRef> widthArg = runtimeCallInfo->GetCallArgRef(1);
119     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
120     CalcDimension width;
121     if (!ArkTSUtils::ParseJsDimensionVpNG(vm, widthArg, width)) {
122         GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupWidth(nativeNode);
123         return panda::JSValueRef::Undefined(vm);
124     }
125     if (LessNotEqual(width.Value(), 0.0)) {
126         width.SetValue(0.0);
127     }
128     std::string widthCalc = width.CalcValue();
129     GetArkUINodeModifiers()->getCheckboxGroupModifier()->setCheckboxGroupWidth(
130         nativeNode, width.Value(), static_cast<int32_t>(width.Unit()), widthCalc.c_str());
131     return panda::JSValueRef::Undefined(vm);
132 }
ResetCheckboxGroupWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)133 ArkUINativeModuleValue CheckboxGroupBridge::ResetCheckboxGroupWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
134 {
135     EcmaVM* vm = runtimeCallInfo->GetVM();
136     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
137     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
138     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
139     GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupWidth(nativeNode);
140     return panda::JSValueRef::Undefined(vm);
141 }
SetCheckboxGroupHeight(ArkUIRuntimeCallInfo * runtimeCallInfo)142 ArkUINativeModuleValue CheckboxGroupBridge::SetCheckboxGroupHeight(ArkUIRuntimeCallInfo* runtimeCallInfo)
143 {
144     EcmaVM* vm = runtimeCallInfo->GetVM();
145     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
146     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
147     Local<JSValueRef> heightArg = runtimeCallInfo->GetCallArgRef(1);
148     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
149     CalcDimension height;
150     if (!ArkTSUtils::ParseJsDimensionVpNG(vm, heightArg, height)) {
151         GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupHeight(nativeNode);
152         return panda::JSValueRef::Undefined(vm);
153     }
154     if (LessNotEqual(height.Value(), 0.0)) {
155         height.SetValue(0.0);
156     }
157     std::string heightCalc = height.CalcValue();
158     GetArkUINodeModifiers()->getCheckboxGroupModifier()->setCheckboxGroupHeight(
159         nativeNode, height.Value(), static_cast<int32_t>(height.Unit()), heightCalc.c_str());
160     return panda::JSValueRef::Undefined(vm);
161 }
ResetCheckboxGroupHeight(ArkUIRuntimeCallInfo * runtimeCallInfo)162 ArkUINativeModuleValue CheckboxGroupBridge::ResetCheckboxGroupHeight(ArkUIRuntimeCallInfo* runtimeCallInfo)
163 {
164     EcmaVM* vm = runtimeCallInfo->GetVM();
165     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
166     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
167     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
168     GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupHeight(nativeNode);
169     return panda::JSValueRef::Undefined(vm);
170 }
SetCheckboxGroupMark(ArkUIRuntimeCallInfo * runtimeCallInfo)171 ArkUINativeModuleValue CheckboxGroupBridge::SetCheckboxGroupMark(ArkUIRuntimeCallInfo* runtimeCallInfo)
172 {
173     EcmaVM* vm = runtimeCallInfo->GetVM();
174     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
175     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
176     Local<JSValueRef> colorArg = runtimeCallInfo->GetCallArgRef(NUM_1);
177     Local<JSValueRef> sizeArg = runtimeCallInfo->GetCallArgRef(NUM_2);
178     Local<JSValueRef> widthArg = runtimeCallInfo->GetCallArgRef(NUM_3);
179     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
180 
181     auto pipeline = PipelineBase::GetCurrentContext();
182     CHECK_NULL_RETURN(pipeline, panda::NativePointerRef::New(vm, nullptr));
183     auto theme = pipeline->GetTheme<CheckboxTheme>();
184     CHECK_NULL_RETURN(theme, panda::NativePointerRef::New(vm, nullptr));
185 
186     Color strokeColor;
187     if (!ArkTSUtils::ParseJsColorAlpha(vm, colorArg, strokeColor)) {
188         strokeColor = theme->GetPointColor();
189     }
190 
191     CalcDimension size;
192     if (!(ArkTSUtils::ParseJsDimensionVp(vm, sizeArg, size, false)) || (size.Unit() == DimensionUnit::PERCENT) ||
193         (size.ConvertToVp() < 0)) {
194         size = Dimension(DEFAULT_SIZE_VALUE);
195     }
196 
197     CalcDimension strokeWidth;
198     if (!(ArkTSUtils::ParseJsDimensionVp(vm, widthArg, strokeWidth, false)) ||
199         (strokeWidth.Unit() == DimensionUnit::PERCENT) || (strokeWidth.ConvertToVp() < 0)) {
200         strokeWidth = theme->GetCheckStroke();
201     }
202 
203     GetArkUINodeModifiers()->getCheckboxGroupModifier()->setCheckboxGroupMark(
204         nativeNode, strokeColor.GetValue(), size.Value(), strokeWidth.Value());
205 
206     return panda::JSValueRef::Undefined(vm);
207 }
ResetCheckboxGroupMark(ArkUIRuntimeCallInfo * runtimeCallInfo)208 ArkUINativeModuleValue CheckboxGroupBridge::ResetCheckboxGroupMark(ArkUIRuntimeCallInfo* runtimeCallInfo)
209 {
210     EcmaVM* vm = runtimeCallInfo->GetVM();
211     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
212     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
213     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
214     GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupMark(nativeNode);
215     return panda::JSValueRef::Undefined(vm);
216 }
217 
SetCheckboxGroupSize(ArkUIRuntimeCallInfo * runtimeCallInfo)218 ArkUINativeModuleValue CheckboxGroupBridge::SetCheckboxGroupSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
219 {
220     EcmaVM* vm = runtimeCallInfo->GetVM();
221     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
222     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
223     Local<JSValueRef> widthArg = runtimeCallInfo->GetCallArgRef(1);
224     Local<JSValueRef> heightArg = runtimeCallInfo->GetCallArgRef(2); // 2: index of parameter CheckboxGroup height
225     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
226     CalcDimension width;
227     CalcDimension height;
228     if (!ArkTSUtils::ParseJsDimensionVpNG(vm, widthArg, width)) {
229         GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupWidth(nativeNode);
230     } else {
231         std::string widthCalc = width.CalcValue();
232         if (LessNotEqual(width.Value(), 0.0)) {
233             width.SetValue(0.0);
234         }
235         GetArkUINodeModifiers()->getCheckboxGroupModifier()->setCheckboxGroupWidth(
236             nativeNode, width.Value(), static_cast<int32_t>(width.Unit()), widthCalc.c_str());
237     }
238     if (!ArkTSUtils::ParseJsDimensionVpNG(vm, heightArg, height)) {
239         GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupHeight(nativeNode);
240     } else {
241         std::string heightCalc = height.CalcValue();
242         if (LessNotEqual(height.Value(), 0.0)) {
243             height.SetValue(0.0);
244         }
245         GetArkUINodeModifiers()->getCheckboxGroupModifier()->setCheckboxGroupHeight(
246             nativeNode, height.Value(), static_cast<int32_t>(height.Unit()), heightCalc.c_str());
247     }
248     return panda::JSValueRef::Undefined(vm);
249 }
250 
ResetCheckboxGroupSize(ArkUIRuntimeCallInfo * runtimeCallInfo)251 ArkUINativeModuleValue CheckboxGroupBridge::ResetCheckboxGroupSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
252 {
253     EcmaVM* vm = runtimeCallInfo->GetVM();
254     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
255     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
256     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
257 
258     GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupWidth(nativeNode);
259     GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupHeight(nativeNode);
260     return panda::JSValueRef::Undefined(vm);
261 }
262 
SetCheckboxGroupStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)263 ArkUINativeModuleValue CheckboxGroupBridge::SetCheckboxGroupStyle(ArkUIRuntimeCallInfo* runtimeCallInfo)
264 {
265     EcmaVM* vm = runtimeCallInfo->GetVM();
266     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
267     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
268     Local<JSValueRef> styleArg = runtimeCallInfo->GetCallArgRef(1);
269     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
270     if (styleArg->IsNull() || styleArg->IsUndefined()) {
271         GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupStyle(nativeNode);
272     } else {
273         int32_t style = styleArg->Int32Value(vm);
274         GetArkUINodeModifiers()->getCheckboxGroupModifier()->setCheckboxGroupStyle(nativeNode, style);
275     }
276 
277     return panda::JSValueRef::Undefined(vm);
278 }
ResetCheckboxGroupStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)279 ArkUINativeModuleValue CheckboxGroupBridge::ResetCheckboxGroupStyle(ArkUIRuntimeCallInfo* runtimeCallInfo)
280 {
281     EcmaVM* vm = runtimeCallInfo->GetVM();
282     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
283     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
284     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
285 
286     GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupStyle(nativeNode);
287     return panda::JSValueRef::Undefined(vm);
288 }
289 
SetCheckboxGroupOptions(ArkUIRuntimeCallInfo * runtimeCallInfo)290 ArkUINativeModuleValue CheckboxGroupBridge::SetCheckboxGroupOptions(ArkUIRuntimeCallInfo* runtimeCallInfo)
291 {
292     EcmaVM* vm = runtimeCallInfo->GetVM();
293     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
294     CHECK_EQUAL_RETURN(runtimeCallInfo->GetArgsNumber() != NUM_2, true, panda::JSValueRef::Undefined(vm));
295     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
296     Local<JSValueRef> groupArg = runtimeCallInfo->GetCallArgRef(NUM_1);
297     auto pointer = nodeArg->ToNativePointer(vm);
298     CHECK_EQUAL_RETURN(pointer.IsEmpty(), true, panda::JSValueRef::Undefined(vm));
299     auto nativeNode = nodePtr(pointer->Value());
300     CHECK_NULL_RETURN(nativeNode, panda::JSValueRef::Undefined(vm));
301     std::string group;
302     if (!groupArg.IsNull() && groupArg->IsString(vm)) {
303         group = groupArg->ToString(vm)->ToString(vm);
304     }
305     auto modifier = GetArkUINodeModifiers()->getCheckboxGroupModifier();
306     CHECK_NULL_RETURN(modifier, panda::JSValueRef::Undefined(vm));
307     modifier->setCheckboxGroupName(nativeNode, group.c_str());
308     return panda::JSValueRef::Undefined(vm);
309 }
310 
311 template<typename T>
String2StringValueWithVM(const EcmaVM * vm,T val)312 panda::Local<panda::JSValueRef> String2StringValueWithVM(const EcmaVM* vm, T val)
313 {
314     if constexpr (std::is_same_v<T, std::string>) {
315         return panda::StringRef::NewFromUtf8(vm, val.c_str());
316     } else if constexpr (std::is_same_v<T, const char*>) {
317         return panda::StringRef::NewFromUtf8(vm, val);
318     } else if constexpr (std::is_same_v<T, std::u16string>) {
319         return panda::StringRef::NewFromUtf16(vm, val.c_str());
320     }
321     return panda::JSValueRef::Undefined(vm);
322 }
323 
SetCheckboxGroupOnChange(ArkUIRuntimeCallInfo * runtimeCallInfo)324 ArkUINativeModuleValue CheckboxGroupBridge::SetCheckboxGroupOnChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
325 {
326     EcmaVM* vm = runtimeCallInfo->GetVM();
327     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
328     uint32_t argsNumber = runtimeCallInfo->GetArgsNumber();
329     if (argsNumber != NUM_2) {
330         return panda::JSValueRef::Undefined(vm);
331     }
332     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
333     Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(NUM_1);
334     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
335     auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
336     CHECK_NULL_RETURN(frameNode, panda::NativePointerRef::New(vm, nullptr));
337     if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
338         GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupOnChange(nativeNode);
339         return panda::JSValueRef::Undefined(vm);
340     }
341     panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
342     std::function<void(const BaseEventInfo*)> callback = [vm, frameNode, func = panda::CopyableGlobal(vm, func)](
343                                                              const BaseEventInfo* info) {
344         panda::LocalScope pandaScope(vm);
345         panda::TryCatch trycatch(vm);
346         PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
347         const auto* eventInfo = TypeInfoHelper::DynamicCast<CheckboxGroupResult>(info);
348         panda::Local<panda::NumberRef> statusParam = panda::NumberRef::New(vm, eventInfo->GetStatus());
349         int32_t i = 0;
350         auto valueArray = panda::ArrayRef::New(vm);
351         for (std::string str : eventInfo->GetNameList()) {
352             panda::Local<panda::StringRef> item = String2StringValueWithVM(vm, str.c_str());
353             panda::ArrayRef::SetValueAt(vm, valueArray, i++, item);
354         }
355         auto resultObj = panda::ObjectRef::New(vm);
356         resultObj->Set(vm, panda::StringRef::NewFromUtf8(vm, "name"), valueArray);
357         resultObj->Set(vm, panda::StringRef::NewFromUtf8(vm, "status"), statusParam);
358         panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_1] = { resultObj };
359         func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_1);
360     };
361     GetArkUINodeModifiers()->getCheckboxGroupModifier()->setCheckboxGroupOnChange(
362         nativeNode, reinterpret_cast<void*>(&callback));
363     return panda::JSValueRef::Undefined(vm);
364 }
365 
ResetCheckboxGroupOnChange(ArkUIRuntimeCallInfo * runtimeCallInfo)366 ArkUINativeModuleValue CheckboxGroupBridge::ResetCheckboxGroupOnChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
367 {
368     EcmaVM* vm = runtimeCallInfo->GetVM();
369     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
370     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
371     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
372 
373     GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupOnChange(nativeNode);
374     return panda::JSValueRef::Undefined(vm);
375 }
376 } // namespace OHOS::Ace::NG
377