1 /* 2 * Copyright (c) 2021-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 16 #ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_DATEPICKER_H 17 #define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_DATEPICKER_H 18 19 #include "bridge/declarative_frontend/jsview/js_interactable_view.h" 20 #include "bridge/declarative_frontend/jsview/js_view_abstract.h" 21 #include "core/components/picker/picker_base_component.h" 22 #include "core/components_ng/pattern/picker/datepicker_event_hub.h" 23 #include "core/components_ng/pattern/picker/picker_type_define.h" 24 #include "frameworks/base/i18n/time_format.h" 25 #include "frameworks/bridge/declarative_frontend/jsview/dialog/js_alert_dialog.h" 26 #include "bridge/declarative_frontend/ark_theme/theme_apply/js_theme_utils.h" 27 #include "core/components_ng/pattern/picker/picker_model.h" 28 29 namespace OHOS::Ace::Framework { 30 class JSDatePicker : public JSViewAbstract { 31 public: 32 static void Create(const JSCallbackInfo& info); 33 34 static void JSBind(BindingTarget globalObj); 35 static void SetLunar(bool isLunar); 36 static void OnChange(const JSCallbackInfo& info); 37 static void OnDateChange(const JSCallbackInfo& info); 38 static void PickerBackgroundColor(const JSCallbackInfo& info); 39 static void SetDisappearTextStyle(const JSCallbackInfo& info); 40 static void SetTextStyle(const JSCallbackInfo& info); 41 static void SetSelectedTextStyle(const JSCallbackInfo& info); 42 static void ParseTextStyle(const JSRef<JSObject>& paramObj, NG::PickerTextStyle& textStyle, const std::string& pos); 43 static void ParseTextProperties(const JSRef<JSObject>& paramObj, NG::PickerTextProperties& result); 44 // keep compatible, need remove after 45 static void UseMilitaryTime(bool isUseMilitaryTime); 46 static void IsUserDefinedFontFamily(const std::string& pos); 47 static void JsOpacity(const JSCallbackInfo& info); 48 static void SetEnableHapticFeedback(const JSCallbackInfo& info); 49 static void SetDigitalCrownSensitivity(const JSCallbackInfo& info); 50 51 private: 52 static void CreateDatePicker(const JSCallbackInfo& info, const JSRef<JSObject>& paramObj); 53 static void ParseStartEndDate(JSRef<JSVal> startDate, JSRef<JSVal> endDate); 54 static void ParseDatePickerMode(JSRef<JSVal> mode); 55 // keep compatible, need remove after 56 static void CreateTimePicker(const JSCallbackInfo& info, const JSRef<JSObject>& paramObj); 57 static PickerDate ParseDate(const JSRef<JSVal>& dateVal); 58 static void SetDefaultAttributes(); 59 // keep compatible, need remove after 60 static PickerTime ParseTime(const JSRef<JSVal>& timeVal); 61 }; 62 63 class JSDatePickerDialog : JSAlertDialog { 64 public: 65 static void JSBind(BindingTarget globalObj); 66 static void Show(const JSCallbackInfo& info); 67 static void DatePickerDialogShow(const JSRef<JSObject>& paramObj, 68 const std::map<std::string, NG::DialogEvent>& dialogEvent, 69 const std::map<std::string, NG::DialogGestureEvent>& dialogCancelEvent); 70 static void ParseDateTimeOptions(const JSRef<JSObject>& paramObj, DateTimeType& dateTimeOptions); 71 static JsiRef<JsiValue> GetDateObj(const std::unique_ptr<JsonValue>& selectedJson, bool isDatePicker = true); 72 73 private: 74 static std::function<void(const std::string&)> GetDateChangeEvent(const JSRef<JSObject>& paramObject, 75 const JSCallbackInfo& info, const DatePickerType& pickerType, const WeakPtr<NG::FrameNode>& frameNode); 76 static std::function<void(const std::string&)> GetDateAcceptEvent(const JSRef<JSObject>& paramObject, 77 const JSCallbackInfo& info, const DatePickerType& pickerType, const WeakPtr<NG::FrameNode>& frameNode); 78 static std::function<void(const std::string&)> GetChangeEvent(const JSRef<JSObject>& paramObject, 79 const JSCallbackInfo& info, const DatePickerType& pickerType, const WeakPtr<NG::FrameNode>& frameNode); 80 static std::function<void(const std::string&)> GetAcceptEvent( 81 const JSRef<JSObject>& paramObject, const JSCallbackInfo& info, const WeakPtr<NG::FrameNode>& frameNode); 82 static std::function<void()> GetCancelEvent( 83 const JSRef<JSObject>& paramObject, const JSCallbackInfo& info, const WeakPtr<NG::FrameNode>& frameNode); 84 static void UpdateDatePickerSettingData(const JSRef<JSObject>& paramObject, NG::DatePickerSettingData& settingData); 85 static void UpdateLunarSwitchSettingData( 86 const JSRef<JSObject>& paramObject, NG::DatePickerSettingData& settingData); 87 static void UpdatePickerDialogTimeInfo(const JSRef<JSObject>& paramObject, PickerDialogInfo& pickerDialog); 88 static void UpdatePickerDialogPositionInfo(const JSRef<JSObject>& paramObject, PickerDialogInfo& pickerDialog); 89 static void UpdatePickerDialogInfo(const JSRef<JSObject>& paramObject, PickerDialogInfo& pickerDialog); 90 91 static void CreateDatePicker(RefPtr<Component>& component, const JSRef<JSObject>& paramObj); 92 // keep compatible, need remove after 93 static void CreateTimePicker(RefPtr<Component>& component, const JSRef<JSObject>& paramObj); 94 static PickerDate ParseDate(const JSRef<JSVal>& dateVal); 95 // keep compatible, need remove after 96 static PickerTime ParseTime(const JSRef<JSVal>& timeVal); 97 }; 98 99 class JSTimePicker : public JSViewAbstract { 100 public: 101 static void Create(const JSCallbackInfo& info); 102 103 static void JSBind(BindingTarget globalObj); 104 static void OnChange(const JSCallbackInfo& info); 105 static void OnEnterSelectedArea(const JSCallbackInfo& info); 106 static void Loop(const JSCallbackInfo& info); 107 static void UseMilitaryTime(bool isUseMilitaryTime); 108 static void EnableHapticFeedback(const JSCallbackInfo& info); 109 static void PickerBackgroundColor(const JSCallbackInfo& info); 110 111 static void SetDisappearTextStyle(const JSCallbackInfo& info); 112 static void SetTextStyle(const JSCallbackInfo& info); 113 static void SetSelectedTextStyle(const JSCallbackInfo& info); 114 static void DateTimeOptions(const JSCallbackInfo& info); 115 static void JsOpacity(const JSCallbackInfo& info); 116 static void EnableCascade(const JSCallbackInfo& info); 117 118 static void SetDigitalCrownSensitivity(const JSCallbackInfo& info); 119 private: 120 static void CreateTimePicker(const JSCallbackInfo& info, const JSRef<JSObject>& paramObj); 121 static void SetDefaultAttributes(); 122 static PickerTime ParseTime( 123 const JSRef<JSVal>& timeVal, PickerTime defaultTime = PickerTime(), bool useDefaultTime = false); 124 }; 125 126 class JSTimePickerDialog : public JSViewAbstract { 127 public: 128 static void JSBind(BindingTarget globalObj); 129 static void Show(const JSCallbackInfo& info); 130 static void TimePickerDialogShow(const JSRef<JSObject>& paramObj, 131 const std::map<std::string, NG::DialogEvent>& dialogEvent, 132 const std::map<std::string, NG::DialogGestureEvent>& dialogCancelEvent); 133 134 private: 135 static void CreateTimePicker(RefPtr<Component>& component, const JSRef<JSObject>& paramObj); 136 static PickerTime ParseTime( 137 const JSRef<JSVal>& timeVal, PickerTime defaultTime = PickerTime(), bool useDefaultTime = false); 138 static PickerDate ParseDate(const JSRef<JSVal>& dateVal); 139 }; 140 } // namespace OHOS::Ace::Framework 141 #endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_DATEPICKER_H 142