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_stepper_item_bridge.h"
16
17 namespace OHOS::Ace::NG {
18 constexpr int32_t CALL_ARG_0 = 0;
19 constexpr int32_t CALL_ARG_1 = 1;
SetNextLabel(ArkUIRuntimeCallInfo * runtimeCallInfo)20 ArkUINativeModuleValue StepperItemBridge::SetNextLabel(ArkUIRuntimeCallInfo* runtimeCallInfo)
21 {
22 EcmaVM* vm = runtimeCallInfo->GetVM();
23 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
24 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
25 Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
26 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
27 if (valueArg->IsUndefined() || valueArg->IsNull()) {
28 GetArkUINodeModifiers()->getStepperItemModifier()->resetNextLabel(nativeNode);
29 return panda::JSValueRef::Undefined(vm);
30 }
31 std::string nextLabel = valueArg->ToString(vm)->ToString(vm);
32 GetArkUINodeModifiers()->getStepperItemModifier()->setNextLabel(nativeNode, nextLabel.c_str());
33 return panda::JSValueRef::Undefined(vm);
34 }
35
ResetNextLabel(ArkUIRuntimeCallInfo * runtimeCallInfo)36 ArkUINativeModuleValue StepperItemBridge::ResetNextLabel(ArkUIRuntimeCallInfo* runtimeCallInfo)
37 {
38 EcmaVM* vm = runtimeCallInfo->GetVM();
39 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
40 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
41 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
42 GetArkUINodeModifiers()->getStepperItemModifier()->resetNextLabel(nativeNode);
43 return panda::JSValueRef::Undefined(vm);
44 }
45
SetPrevLabel(ArkUIRuntimeCallInfo * runtimeCallInfo)46 ArkUINativeModuleValue StepperItemBridge::SetPrevLabel(ArkUIRuntimeCallInfo* runtimeCallInfo)
47 {
48 EcmaVM* vm = runtimeCallInfo->GetVM();
49 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
50 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
51 Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(1);
52 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
53 if (valueArg->IsUndefined() || valueArg->IsNull()) {
54 GetArkUINodeModifiers()->getStepperItemModifier()->resetPrevLabel(nativeNode);
55 return panda::JSValueRef::Undefined(vm);
56 }
57 std::string prevLabel = valueArg->ToString(vm)->ToString(vm);
58 GetArkUINodeModifiers()->getStepperItemModifier()->setPrevLabel(nativeNode, prevLabel.c_str());
59 return panda::JSValueRef::Undefined(vm);
60 }
61
ResetPrevLabel(ArkUIRuntimeCallInfo * runtimeCallInfo)62 ArkUINativeModuleValue StepperItemBridge::ResetPrevLabel(ArkUIRuntimeCallInfo* runtimeCallInfo)
63 {
64 EcmaVM* vm = runtimeCallInfo->GetVM();
65 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
66 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
67 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
68 GetArkUINodeModifiers()->getStepperItemModifier()->resetPrevLabel(nativeNode);
69 return panda::JSValueRef::Undefined(vm);
70 }
71
SetStatus(ArkUIRuntimeCallInfo * runtimeCallInfo)72 ArkUINativeModuleValue StepperItemBridge::SetStatus(ArkUIRuntimeCallInfo* runtimeCallInfo)
73 {
74 EcmaVM* vm = runtimeCallInfo->GetVM();
75 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
76 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
77 Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(1);
78 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
79 if (valueArg->IsUndefined() || !valueArg->IsNumber()) {
80 GetArkUINodeModifiers()->getStepperItemModifier()->resetStatus(nativeNode);
81 return panda::JSValueRef::Undefined(vm);
82 }
83 const std::array<std::string, 4> statusArray = { "normal", "disabled", "waiting", "skip" };
84 std::string status = statusArray[0];
85 int32_t index = valueArg->Int32Value(vm);
86 if (index > 0 && static_cast<size_t>(index) < statusArray.size()) {
87 status = statusArray.at(index);
88 }
89 GetArkUINodeModifiers()->getStepperItemModifier()->setStatus(nativeNode, status.c_str());
90 return panda::JSValueRef::Undefined(vm);
91 }
92
ResetStatus(ArkUIRuntimeCallInfo * runtimeCallInfo)93 ArkUINativeModuleValue StepperItemBridge::ResetStatus(ArkUIRuntimeCallInfo* runtimeCallInfo)
94 {
95 EcmaVM* vm = runtimeCallInfo->GetVM();
96 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
97 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
98 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
99 GetArkUINodeModifiers()->getStepperItemModifier()->resetStatus(nativeNode);
100 return panda::JSValueRef::Undefined(vm);
101 }
102 } // namespace OHOS::Ace::NG