1 /* 2 * Copyright (c) 2025 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 16 #ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_FUNCTION_JS_CITED_EVENT_FUNCTION_H 17 #define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_FUNCTION_JS_CITED_EVENT_FUNCTION_H 18 19 #include "frameworks/bridge/declarative_frontend/engine/functions/js_function.h" 20 21 namespace OHOS::Ace::Framework { 22 23 template<class T, int32_t ARGC = 0> 24 class ACE_EXPORT JsCitedEventFunction : public JsFunction { 25 DECLARE_ACE_TYPE(JsCitedEventFunction, JsFunction); 26 27 public: 28 using ParseFunc = std::function<JSRef<JSVal>(T&)>; 29 JsCitedEventFunction() = delete; JsCitedEventFunction(const JSRef<JSFunc> & jsFunction,ParseFunc parser)30 JsCitedEventFunction(const JSRef<JSFunc>& jsFunction, ParseFunc parser) 31 : JsFunction(JSRef<JSObject>(), jsFunction), parser_(parser) {} 32 ~JsCitedEventFunction() override = default; 33 Execute(T & eventInfo)34 void Execute(T& eventInfo) 35 { 36 JSRef<JSVal> param; 37 if (parser_) { 38 param = parser_(eventInfo); 39 } 40 JsFunction::ExecuteJS(ARGC, ¶m); 41 } 42 Execute(const std::string & val,T & eventInfo)43 void Execute(const std::string& val, T& eventInfo) 44 { 45 JSRef<JSVal> jsVal = JSRef<JSVal>::Make(ToJSValue(val)); 46 JSRef<JSVal> itemInfo; 47 if (parser_) { 48 itemInfo = parser_(eventInfo); 49 } 50 JSRef<JSVal> params[] = { jsVal, itemInfo }; 51 JsFunction::ExecuteJS(ARGC, params); 52 } 53 Execute(const std::u16string & val,T & eventInfo)54 void Execute(const std::u16string& val, T& eventInfo) 55 { 56 JSRef<JSVal> jsVal = JSRef<JSVal>::Make(ToJSValue(val)); 57 JSRef<JSVal> itemInfo; 58 if (parser_) { 59 itemInfo = parser_(eventInfo); 60 } 61 JSRef<JSVal> params[] = { jsVal, itemInfo }; 62 JsFunction::ExecuteJS(ARGC, params); 63 } 64 65 private: 66 ParseFunc parser_; 67 }; 68 69 } // namespace OHOS::Ace::Framework 70 71 #endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_FUNCTION_JS_CITED_EVENT_FUNCTION_H 72