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