• 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 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_nav_destination_bridge.h"
16 
17 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_navigation_utils.h"
18 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_utils.h"
19 #include "bridge/declarative_frontend/jsview/js_utils.h"
20 #include "core/components_ng/pattern/navrouter/navdestination_model_ng.h"
21 namespace OHOS::Ace::NG {
22 constexpr int NUM_0 = 0;
23 constexpr int NUM_1 = 1;
24 constexpr int NUM_2 = 2;
25 constexpr int32_t JS_EMUN_TRANSITIONTYPE_NONE = 1;
26 constexpr int32_t JS_EMUN_TRANSITIONTYPE_TITLE = 2;
27 constexpr int32_t JS_EMUN_TRANSITIONTYPE_CONTENT = 3;
28 
ParseTransitionType(int32_t value)29 NavigationSystemTransitionType ParseTransitionType(int32_t value)
30 {
31     switch (value) {
32         case JS_EMUN_TRANSITIONTYPE_NONE:
33             return NG::NavigationSystemTransitionType::NONE;
34         case JS_EMUN_TRANSITIONTYPE_TITLE:
35             return NG::NavigationSystemTransitionType::TITLE;
36         case JS_EMUN_TRANSITIONTYPE_CONTENT:
37             return NG::NavigationSystemTransitionType::CONTENT;
38         default:
39             return NG::NavigationSystemTransitionType::DEFAULT;
40     }
41 }
42 
SetHideTitleBar(ArkUIRuntimeCallInfo * runtimeCallInfo)43 ArkUINativeModuleValue NavDestinationBridge::SetHideTitleBar(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> hideArg = runtimeCallInfo->GetCallArgRef(1);
49     const int32_t argsNum = 2; // 2: parameter index
50     Local<JSValueRef> animatedArg = runtimeCallInfo->GetCallArgRef(argsNum);
51     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
52     bool hide = false;
53     bool animated = false;
54     if (!hideArg->IsNull() && !hideArg->IsUndefined() && hideArg->IsBoolean()) {
55         hide = hideArg->ToBoolean(vm)->Value();
56     }
57     if (!animatedArg->IsNull() && !animatedArg->IsUndefined() && animatedArg->IsBoolean()) {
58         animated = animatedArg->ToBoolean(vm)->Value();
59     }
60     GetArkUINodeModifiers()->getNavDestinationModifier()->setHideTitleBar(nativeNode, hide, animated);
61     return panda::JSValueRef::Undefined(vm);
62 }
63 
ResetHideTitleBar(ArkUIRuntimeCallInfo * runtimeCallInfo)64 ArkUINativeModuleValue NavDestinationBridge::ResetHideTitleBar(ArkUIRuntimeCallInfo* runtimeCallInfo)
65 {
66     EcmaVM* vm = runtimeCallInfo->GetVM();
67     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
68     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
69     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
70     GetArkUINodeModifiers()->getNavDestinationModifier()->resetHideTitleBar(nativeNode);
71     return panda::JSValueRef::Undefined(vm);
72 }
73 
SetHideToolBar(ArkUIRuntimeCallInfo * runtimeCallInfo)74 ArkUINativeModuleValue NavDestinationBridge::SetHideToolBar(ArkUIRuntimeCallInfo* runtimeCallInfo)
75 {
76     EcmaVM* vm = runtimeCallInfo->GetVM();
77     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
78     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
79     Local<JSValueRef> hideArg = runtimeCallInfo->GetCallArgRef(1);
80     const int32_t argsNum = 2; // 2: parameter index
81     Local<JSValueRef> animatedArg = runtimeCallInfo->GetCallArgRef(argsNum);
82     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
83     bool hide = false;
84     bool animated = false;
85     if (!hideArg->IsNull() && !hideArg->IsUndefined() && hideArg->IsBoolean()) {
86         hide = hideArg->ToBoolean(vm)->Value();
87     }
88     if (!animatedArg->IsNull() && !animatedArg->IsUndefined() && animatedArg->IsBoolean()) {
89         animated = animatedArg->ToBoolean(vm)->Value();
90     }
91     GetArkUINodeModifiers()->getNavDestinationModifier()->setNavDestinationHideToolBar(nativeNode, hide, animated);
92     return panda::JSValueRef::Undefined(vm);
93 }
94 
ResetHideToolBar(ArkUIRuntimeCallInfo * runtimeCallInfo)95 ArkUINativeModuleValue NavDestinationBridge::ResetHideToolBar(ArkUIRuntimeCallInfo* runtimeCallInfo)
96 {
97     EcmaVM* vm = runtimeCallInfo->GetVM();
98     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
99     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
100     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
101     GetArkUINodeModifiers()->getNavDestinationModifier()->resetNavDestinationHideToolBar(nativeNode);
102     return panda::JSValueRef::Undefined(vm);
103 }
104 
SetBackButtonIcon(ArkUIRuntimeCallInfo * runtimeCallInfo)105 ArkUINativeModuleValue NavDestinationBridge::SetBackButtonIcon(ArkUIRuntimeCallInfo* runtimeCallInfo)
106 {
107     EcmaVM* vm = runtimeCallInfo->GetVM();
108     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
109     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
110     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
111     auto* frameNode = reinterpret_cast<FrameNode*>(nativeNode);
112 
113     Framework::JsiCallbackInfo info = Framework::JsiCallbackInfo(runtimeCallInfo);
114     std::string src;
115     auto noPixMap = Framework::JSViewAbstract::ParseJsMedia(info[1], src);
116 
117     RefPtr<PixelMap> pixMap = nullptr;
118 #if defined(PIXEL_MAP_SUPPORTED)
119     if (!noPixMap) {
120         pixMap = CreatePixelMapFromNapiValue(info[1]);
121     }
122 #endif
123     std::string bundleName;
124     std::string moduleName;
125 
126     Framework::JSViewAbstract::GetJsMediaBundleInfo(info[1], bundleName, moduleName);
127     NavDestinationModelNG::SetBackButtonIcon(frameNode, src, noPixMap, pixMap);
128     return panda::JSValueRef::Undefined(vm);
129 }
130 
SetHideBackButton(ArkUIRuntimeCallInfo * runtimeCallInfo)131 ArkUINativeModuleValue NavDestinationBridge::SetHideBackButton(ArkUIRuntimeCallInfo* runtimeCallInfo)
132 {
133     EcmaVM* vm = runtimeCallInfo->GetVM();
134     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
135     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
136     Local<JSValueRef> hideArg = runtimeCallInfo->GetCallArgRef(1);
137     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
138     if (hideArg->IsBoolean()) {
139         bool hide = hideArg->ToBoolean(vm)->Value();
140         GetArkUINodeModifiers()->getNavDestinationModifier()->setNavDestinationHideBackButton(nativeNode, hide);
141     } else {
142         GetArkUINodeModifiers()->getNavDestinationModifier()->resetNavDestinationHideBackButton(nativeNode);
143     }
144     return panda::JSValueRef::Undefined(vm);
145 }
146 
ResetHideBackButton(ArkUIRuntimeCallInfo * runtimeCallInfo)147 ArkUINativeModuleValue NavDestinationBridge::ResetHideBackButton(ArkUIRuntimeCallInfo* runtimeCallInfo)
148 {
149     EcmaVM* vm = runtimeCallInfo->GetVM();
150     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
151     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
152     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
153     GetArkUINodeModifiers()->getNavDestinationModifier()->resetNavDestinationHideBackButton(nativeNode);
154     return panda::JSValueRef::Undefined(vm);
155 }
156 
ResetBackButtonIcon(ArkUIRuntimeCallInfo * runtimeCallInfo)157 ArkUINativeModuleValue NavDestinationBridge::ResetBackButtonIcon(ArkUIRuntimeCallInfo* runtimeCallInfo)
158 {
159     EcmaVM* vm = runtimeCallInfo->GetVM();
160     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
161     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
162     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
163     auto* frameNode = reinterpret_cast<FrameNode*>(nativeNode);
164     bool noPixMap = false;
165     RefPtr<PixelMap> pixMap = nullptr;
166     std::string src;
167     NavDestinationModelNG::SetBackButtonIcon(frameNode, src, noPixMap, pixMap);
168     return panda::JSValueRef::Undefined(vm);
169 }
170 
SetNavDestinationMode(ArkUIRuntimeCallInfo * runtimeCallInfo)171 ArkUINativeModuleValue NavDestinationBridge::SetNavDestinationMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
172 {
173     EcmaVM* vm = runtimeCallInfo->GetVM();
174     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
175     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
176     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
177     auto* frameNode = reinterpret_cast<FrameNode*>(nativeNode);
178 
179     Framework::JsiCallbackInfo info = Framework::JsiCallbackInfo(runtimeCallInfo);
180     if (!info[1]->IsNumber()) {
181         // set default back ground color
182         GetArkUINodeModifiers()->getNavDestinationModifier()->resetNavDestinationMode(nativeNode);
183         return panda::JSValueRef::Undefined(vm);
184     }
185     auto mode = info[1]->ToNumber<int32_t>();
186     NavDestinationModelNG::SetNavDestinationMode(frameNode, static_cast<NG::NavDestinationMode>(mode));
187     return panda::JSValueRef::Undefined(vm);
188 }
189 
ResetNavDestinationMode(ArkUIRuntimeCallInfo * runtimeCallInfo)190 ArkUINativeModuleValue NavDestinationBridge::ResetNavDestinationMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
191 {
192     EcmaVM* vm = runtimeCallInfo->GetVM();
193     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
194     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
195     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
196     GetArkUINodeModifiers()->getNavDestinationModifier()->resetNavDestinationMode(nativeNode);
197     return panda::JSValueRef::Undefined(vm);
198 }
199 
SetIgnoreLayoutSafeArea(ArkUIRuntimeCallInfo * runtimeCallInfo)200 ArkUINativeModuleValue NavDestinationBridge::SetIgnoreLayoutSafeArea(ArkUIRuntimeCallInfo *runtimeCallInfo)
201 {
202     EcmaVM* vm = runtimeCallInfo->GetVM();
203     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
204     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
205     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
206     Local<JSValueRef> thirdArg = runtimeCallInfo->GetCallArgRef(NUM_2);
207     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
208     std::string typeCppStr;
209     std::string edgesCppStr;
210     if (secondArg->IsString(vm)) {
211         typeCppStr = secondArg->ToString(vm)->ToString(vm);
212     } else {
213         //type system
214         typeCppStr = "0";
215     }
216 
217     if (thirdArg->IsString(vm)) {
218         edgesCppStr = thirdArg->ToString(vm)->ToString(vm);
219     } else {
220         //edge top and bottom
221         edgesCppStr = "0|1";
222     }
223     const char* typeStr = typeCppStr.c_str();
224     const char* edgesStr = edgesCppStr.c_str();
225     GetArkUINodeModifiers()->getNavDestinationModifier()->setIgnoreLayoutSafeArea(nativeNode, typeStr, edgesStr);
226     return panda::JSValueRef::Undefined(vm);
227 }
228 
ResetIgnoreLayoutSafeArea(ArkUIRuntimeCallInfo * runtimeCallInfo)229 ArkUINativeModuleValue NavDestinationBridge::ResetIgnoreLayoutSafeArea(ArkUIRuntimeCallInfo* runtimeCallInfo)
230 {
231     EcmaVM* vm = runtimeCallInfo->GetVM();
232     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
233     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
234     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
235     GetArkUINodeModifiers()->getNavDestinationModifier()->resetIgnoreLayoutSafeArea(nativeNode);
236     return panda::JSValueRef::Undefined(vm);
237 }
238 
SetTitle(ArkUIRuntimeCallInfo * runtimeCallInfo)239 ArkUINativeModuleValue NavDestinationBridge::SetTitle(ArkUIRuntimeCallInfo* runtimeCallInfo)
240 {
241     EcmaVM* vm = runtimeCallInfo->GetVM();
242     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
243     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
244     Local<JSValueRef> titleArg = runtimeCallInfo->GetCallArgRef(1);
245     Local<JSValueRef> optionsArg = runtimeCallInfo->GetCallArgRef(2);
246     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
247     std::string title;
248     std::string subtitle;
249     bool hasMain = false;
250     bool hasSub = false;
251     if (ArkTSUtils::ParseJsString(vm, titleArg, title)) {
252         // Resource and string type.
253         subtitle = "";
254         hasMain = true;
255         hasSub = false;
256     } else if (titleArg->IsObject(vm)) {
257         // NavigationCommonTitle
258         auto obj = titleArg->ToObject(vm);
259         auto main = obj->Get(vm, panda::StringRef::NewFromUtf8(vm, "main"));
260         auto sub = obj->Get(vm, panda::StringRef::NewFromUtf8(vm, "sub"));
261         hasMain = ArkTSUtils::ParseJsString(vm, main, title);
262         hasSub = ArkTSUtils::ParseJsString(vm, sub, subtitle);
263         // NavigationCustomTitle or CustomBuilder is not supported
264     } else {
265         GetArkUINodeModifiers()->getNavDestinationModifier()->resetTitle(nativeNode);
266         return panda::JSValueRef::Undefined(vm);
267     }
268 
269     ArkUINavigationTitlebarOptions options;
270     if (optionsArg->IsObject(vm)) {
271         NativeNavigationUtils::ParseTitleOptions(vm, optionsArg, options);
272     }
273     ArkUINavigationTitleInfo titleInfo = { hasSub, hasMain, subtitle.c_str(), title.c_str() };
274     GetArkUINodeModifiers()->getNavDestinationModifier()->setTitle(nativeNode, titleInfo, options);
275     return panda::JSValueRef::Undefined(vm);
276 }
277 
ResetTitle(ArkUIRuntimeCallInfo * runtimeCallInfo)278 ArkUINativeModuleValue NavDestinationBridge::ResetTitle(ArkUIRuntimeCallInfo* runtimeCallInfo)
279 {
280     EcmaVM* vm = runtimeCallInfo->GetVM();
281     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
282     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
283     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
284     GetArkUINodeModifiers()->getNavDestinationModifier()->resetTitle(nativeNode);
285     return panda::JSValueRef::Undefined(vm);
286 }
287 
SetMenus(ArkUIRuntimeCallInfo * runtimeCallInfo)288 ArkUINativeModuleValue NavDestinationBridge::SetMenus(ArkUIRuntimeCallInfo* runtimeCallInfo)
289 {
290     EcmaVM* vm = runtimeCallInfo->GetVM();
291     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
292     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
293     Local<JSValueRef> menusArg = runtimeCallInfo->GetCallArgRef(1);
294     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
295     std::vector<ArkUIBarItem> menuItems;
296     if (menusArg->IsArray(vm)) {
297         NativeNavigationUtils::ParseBarItems(vm, menusArg, menuItems);
298         GetArkUINodeModifiers()->getNavDestinationModifier()->setMenus(nativeNode, menuItems.data(), menuItems.size());
299         // get action and symbolModifier single
300         auto actionSendFunc = GetArkUINodeModifiers()->getNavDestinationModifier()->setMenuItemAction;
301         auto symbolSendFunc = GetArkUINodeModifiers()->getNavDestinationModifier()->setMenuItemSymbol;
302         NativeNavigationUtils::ParseAndSendFunctionParam(runtimeCallInfo, menusArg, actionSendFunc, symbolSendFunc);
303     } else if (menusArg->IsUndefined()) {
304         menuItems = {};
305         GetArkUINodeModifiers()->getNavDestinationModifier()->setMenus(nativeNode, menuItems.data(), menuItems.size());
306     } else if (menusArg->IsObject(vm)) {
307         GetArkUINodeModifiers()->getNavDestinationModifier()->resetMenus(nativeNode);
308     }
309     return panda::JSValueRef::Undefined(vm);
310 }
311 
ResetMenus(ArkUIRuntimeCallInfo * runtimeCallInfo)312 ArkUINativeModuleValue NavDestinationBridge::ResetMenus(ArkUIRuntimeCallInfo* runtimeCallInfo)
313 {
314     EcmaVM* vm = runtimeCallInfo->GetVM();
315     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
316     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
317     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
318     GetArkUINodeModifiers()->getNavDestinationModifier()->resetMenus(nativeNode);
319     return panda::JSValueRef::Undefined(vm);
320 }
321 
SetRecoverable(ArkUIRuntimeCallInfo * runtimeCallInfo)322 ArkUINativeModuleValue NavDestinationBridge::SetRecoverable(ArkUIRuntimeCallInfo* runtimeCallInfo)
323 {
324     EcmaVM* vm = runtimeCallInfo->GetVM();
325     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
326     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
327     Local<JSValueRef> recoverableArg = runtimeCallInfo->GetCallArgRef(1);
328     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
329     if (recoverableArg->IsNull() || recoverableArg->IsUndefined() || !recoverableArg->IsBoolean()) {
330         GetArkUINodeModifiers()->getNavDestinationModifier()->resetRecoverable(nativeNode);
331     } else {
332         bool recoverable = recoverableArg->ToBoolean(vm)->Value();
333         GetArkUINodeModifiers()->getNavDestinationModifier()->setRecoverable(nativeNode, recoverable);
334     }
335     return panda::JSValueRef::Undefined(vm);
336 }
337 
ResetRecoverable(ArkUIRuntimeCallInfo * runtimeCallInfo)338 ArkUINativeModuleValue NavDestinationBridge::ResetRecoverable(ArkUIRuntimeCallInfo* runtimeCallInfo)
339 {
340     EcmaVM* vm = runtimeCallInfo->GetVM();
341     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
342     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
343     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
344     GetArkUINodeModifiers()->getNavDestinationModifier()->resetRecoverable(nativeNode);
345     return panda::JSValueRef::Undefined(vm);
346 }
347 
SetNavDestinationSystemTransition(ArkUIRuntimeCallInfo * runtimeCallInfo)348 ArkUINativeModuleValue NavDestinationBridge::SetNavDestinationSystemTransition(ArkUIRuntimeCallInfo* runtimeCallInfo)
349 {
350     EcmaVM* vm = runtimeCallInfo->GetVM();
351     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
352     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
353     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
354 
355     Framework::JsiCallbackInfo info = Framework::JsiCallbackInfo(runtimeCallInfo);
356     if (!info[1]->IsNumber()) {
357         GetArkUINodeModifiers()->getNavDestinationModifier()->resetNavDestinationSystemTransition(nativeNode);
358         return panda::JSValueRef::Undefined(vm);
359     }
360     auto value = info[1]->ToNumber<int32_t>();
361     NavigationSystemTransitionType type = ParseTransitionType(value);
362     GetArkUINodeModifiers()->getNavDestinationModifier()->setNavDestinationSystemTransition(
363         nativeNode,
364         static_cast<ArkUI_Int32>(type));
365     return panda::JSValueRef::Undefined(vm);
366 }
367 
ResetNavDestinationSystemTransition(ArkUIRuntimeCallInfo * runtimeCallInfo)368 ArkUINativeModuleValue NavDestinationBridge::ResetNavDestinationSystemTransition(ArkUIRuntimeCallInfo* runtimeCallInfo)
369 {
370     EcmaVM* vm = runtimeCallInfo->GetVM();
371     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
372     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
373     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
374     GetArkUINodeModifiers()->getNavDestinationModifier()->resetNavDestinationSystemTransition(nativeNode);
375     return panda::JSValueRef::Undefined(vm);
376 }
377 } // namespace OHOS::Ace::NG
378