From 93a24d8a7944578220dc10f4a0775f540285885e Mon Sep 17 00:00:00 2001 From: Roman Sedaikin Date: Wed, 25 Dec 2024 11:53:45 +0300 Subject: [PATCH] Fix NavPathStack Signed-off-by: Roman Sedaikin --- arkoala-arkts/arkui/src/ArkNavigation.ts | 5 ++- .../generated/ArkNavPathStackMaterialized.ts | 3 +- .../arkui/src/handwritten/ArkNavPathStack.ts | 30 +++++++------ .../native/src/generated/dummy_impl.cc | 43 +++++++++---------- 4 files changed, 43 insertions(+), 38 deletions(-) diff --git a/arkoala-arkts/arkui/src/ArkNavigation.ts b/arkoala-arkts/arkui/src/ArkNavigation.ts index 6e16ee87b..a220815f1 100644 --- a/arkoala-arkts/arkui/src/ArkNavigation.ts +++ b/arkoala-arkts/arkui/src/ArkNavigation.ts @@ -357,7 +357,10 @@ export function ArkNavigation( style?.(receiver) content_?.() if (pathInfos != undefined) { - receiver._navDestination(pathInfos!._extender.currentName.value, pathInfos!._extender.currentParam) + receiver._navDestination( + pathInfos!._extender.currentData.value.name, + pathInfos!._extender.currentData.value.param + ) } receiver.applyAttributesFinish() }) diff --git a/arkoala-arkts/arkui/src/generated/ArkNavPathStackMaterialized.ts b/arkoala-arkts/arkui/src/generated/ArkNavPathStackMaterialized.ts index ad1d82332..a3324aeb4 100644 --- a/arkoala-arkts/arkui/src/generated/ArkNavPathStackMaterialized.ts +++ b/arkoala-arkts/arkui/src/generated/ArkNavPathStackMaterialized.ts @@ -88,7 +88,8 @@ export class NavPathStack implements MaterializedBase,INTERFACE_NavPathStack { const animated_casted = animated as (NavigationOptions | undefined) this.pushPath1_serialize(info_casted, animated_casted) } - throw new Error("Can not select appropriate overload") + // TODO: fix in idlize + // throw new Error("Can not select appropriate overload") } pushDestination(info: NavPathInfo, animated?: boolean | undefined | NavigationOptions | undefined): Promise { this._extender.push(info.name, info.param) diff --git a/arkoala-arkts/arkui/src/handwritten/ArkNavPathStack.ts b/arkoala-arkts/arkui/src/handwritten/ArkNavPathStack.ts index fa6908cfb..f8238091d 100644 --- a/arkoala-arkts/arkui/src/handwritten/ArkNavPathStack.ts +++ b/arkoala-arkts/arkui/src/handwritten/ArkNavPathStack.ts @@ -16,38 +16,40 @@ import { GlobalStateManager, MutableState } from "@koalaui/runtime" class PathData { readonly name: string - readonly param: object | undefined + readonly param: Array = new Array() constructor(name: string, param: object | undefined) { this.name = name - this.param = param + if (param !== undefined) { + this.param.push(param!) + } } + static readonly EMPTY: PathData = new PathData("", undefined) } export class NavPathStackExtender { - currentName: MutableState - currentParam: object = new Object() private _stack: Array = new Array() + currentData: MutableState constructor() { - this.currentName = GlobalStateManager.instance.mutableState("", true) + this.currentData = GlobalStateManager.instance.mutableState(PathData.EMPTY, true) } + push(path: string, param: Object|undefined): void { - console.log(" ### pushPath = " + path) - this.currentName.value = path - this._stack.push(new PathData(path, param)) + this.currentData.value = new PathData(path, param) + this._stack.push(this.currentData.value) } + pop(): void { - console.log(" ### pop = ") this._stack.pop() - const page = this._stack[this._stack.length - 1] - this.currentName.value = page?.name ?? "" - if (page?.param != undefined) { - this.currentParam = page?.param! + if (this._stack.length > 0) { + this.currentData.value = this._stack[this._stack.length - 1] + } else { + this.currentData.value = PathData.EMPTY } } getParamByName(name: string): Array { - return this._stack[this._stack.length - 1].param as Array + return this._stack[this._stack.length - 1].param } } \ No newline at end of file diff --git a/arkoala/framework/native/src/generated/dummy_impl.cc b/arkoala/framework/native/src/generated/dummy_impl.cc index 4f56447de..e319ed0c5 100644 --- a/arkoala/framework/native/src/generated/dummy_impl.cc +++ b/arkoala/framework/native/src/generated/dummy_impl.cc @@ -2630,25 +2630,29 @@ namespace OHOS::Ace::NG::GeneratedModifier { void OnClick0Impl(Ark_NativePointer node, const Callback_ClickEvent_Void* value) { - if (!needGroupedLog(1)) - return; - string out("onClick("); - WriteToString(&out, value); - out.append(") \n"); - appendGroupedLog(1, out); + auto frameNode = AsNode(node); + auto callback = *value; + callback.resource.hold(callback.resource.resourceId); + auto onEvent = [frameNode, callback](Ark_ClickEvent event) { + if (callback.call) { + callback.call(callback.resource.resourceId, event); + } + }; + frameNode->setClickEvent(std::move(onEvent)); } void OnClick1Impl(Ark_NativePointer node, const Callback_ClickEvent_Void* event, const Ark_Number* distanceThreshold) { - if (!needGroupedLog(1)) - return; - string out("onClick("); - WriteToString(&out, event); - out.append(", "); - WriteToString(&out, distanceThreshold); - out.append(") \n"); - appendGroupedLog(1, out); + auto frameNode = AsNode(node); + auto callback = *event; + callback.resource.hold(callback.resource.resourceId); + auto onEvent = [frameNode, callback](Ark_ClickEvent event) { + if (callback.call) { + callback.call(callback.resource.resourceId, event); + } + }; + frameNode->setClickEvent(std::move(onEvent)); } void OnHoverImpl(Ark_NativePointer node, const Callback_Boolean_HoverEvent_Void* value) @@ -20170,14 +20174,9 @@ namespace OHOS::Ace::NG::GeneratedModifier { void EmitClickEventImpl(Ark_NativePointer node, const Ark_ClickEvent* event) { - if (!needGroupedLog(1)) - return; - string out("emitClickEvent("); - WriteToString(&out, node); - out.append(", "); - WriteToString(&out, event); - out.append(") \n"); - appendGroupedLog(1, out); + auto frameNode = AsNode(node); + auto value = *event; + frameNode->callClickEvent(value); } void EmitTextInputEventImpl(Ark_NativePointer node, const Ark_String* text) -- Gitee