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