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 SetCanLoop(const JSCallbackInfo& info); 37 static void OnChange(const JSCallbackInfo& info); 38 static void OnDateChange(const JSCallbackInfo& info); 39 static void PickerBackgroundColor(const JSCallbackInfo& info); 40 static void SetDisappearTextStyle(const JSCallbackInfo& info); 41 static void SetTextStyle(const JSCallbackInfo& info); 42 static void SetSelectedTextStyle(const JSCallbackInfo& info); 43 static void ParseTextStyle(const JSRef<JSObject>& paramObj, NG::PickerTextStyle& textStyle, const std::string& pos); 44 static void ParseTextStyleFontSize(const JSRef<JSVal>& fontSize, NG::PickerTextStyle& textStyle); 45 static void ParseTextProperties(const JSRef<JSObject>& paramObj, NG::PickerTextProperties& result); 46 // keep compatible, need remove after 47 static void UseMilitaryTime(bool isUseMilitaryTime); 48 static void IsUserDefinedFontFamily(const std::string& pos); 49 static void JsOpacity(const JSCallbackInfo& info); 50 static void SetEnableHapticFeedback(const JSCallbackInfo& info); 51 static void SetDigitalCrownSensitivity(const JSCallbackInfo& info); 52 53 private: 54 static void CreateDatePicker(const JSCallbackInfo& info, const JSRef<JSObject>& paramObj); 55 static void ParseStartEndDate(JSRef<JSVal> startDate, JSRef<JSVal> endDate); 56 static void ParseDatePickerMode(JSRef<JSVal> mode); 57 // keep compatible, need remove after 58 static void CreateTimePicker(const JSCallbackInfo& info, const JSRef<JSObject>& paramObj); 59 static PickerDate ParseDate(const JSRef<JSVal>& dateVal); 60 static void SetDefaultAttributes(); 61 // keep compatible, need remove after 62 static PickerTime ParseTime(const JSRef<JSVal>& timeVal); 63 }; 64 65 class JSDatePickerDialog : JSAlertDialog { 66 public: 67 static void JSBind(BindingTarget globalObj); 68 static void Show(const JSCallbackInfo& info); 69 static void DatePickerDialogShow(const JSRef<JSObject>& paramObj, 70 const std::map<std::string, NG::DialogEvent>& dialogEvent, 71 const std::map<std::string, NG::DialogGestureEvent>& dialogCancelEvent); 72 static void ParseDateTimeOptions(const JSRef<JSObject>& paramObj, DateTimeType& dateTimeOptions); 73 static JsiRef<JsiValue> GetDateObj(const std::unique_ptr<JsonValue>& selectedJson, bool isDatePicker = true); 74 75 private: 76 static std::function<void(const std::string&)> GetDateChangeEvent(const JSRef<JSObject>& paramObject, 77 const JSCallbackInfo& info, const DatePickerType& pickerType, const WeakPtr<NG::FrameNode>& frameNode); 78 static std::function<void(const std::string&)> GetDateAcceptEvent(const JSRef<JSObject>& paramObject, 79 const JSCallbackInfo& info, const DatePickerType& pickerType, const WeakPtr<NG::FrameNode>& frameNode); 80 static std::function<void(const std::string&)> GetChangeEvent(const JSRef<JSObject>& paramObject, 81 const JSCallbackInfo& info, const DatePickerType& pickerType, const WeakPtr<NG::FrameNode>& frameNode); 82 static std::function<void(const std::string&)> GetAcceptEvent( 83 const JSRef<JSObject>& paramObject, const JSCallbackInfo& info, const WeakPtr<NG::FrameNode>& frameNode); 84 static std::function<void()> GetCancelEvent( 85 const JSRef<JSObject>& paramObject, const JSCallbackInfo& info, const WeakPtr<NG::FrameNode>& frameNode); 86 static void UpdateDatePickerSettingData(const JSRef<JSObject>& paramObject, NG::DatePickerSettingData& settingData); 87 static void UpdateLunarSwitchSettingData( 88 const JSRef<JSObject>& paramObject, NG::DatePickerSettingData& settingData); 89 static void UpdatePickerDialogTimeInfo(const JSRef<JSObject>& paramObject, PickerDialogInfo& pickerDialog); 90 static void UpdatePickerDialogPositionInfo(const JSRef<JSObject>& paramObject, PickerDialogInfo& pickerDialog); 91 static void UpdatePickerDialogInfo(const JSRef<JSObject>& paramObject, PickerDialogInfo& pickerDialog); 92 93 static void CreateDatePicker(RefPtr<Component>& component, const JSRef<JSObject>& paramObj); 94 // keep compatible, need remove after 95 static void CreateTimePicker(RefPtr<Component>& component, const JSRef<JSObject>& paramObj); 96 static PickerDate ParseDate(const JSRef<JSVal>& dateVal); 97 // keep compatible, need remove after 98 static PickerTime ParseTime(const JSRef<JSVal>& timeVal); 99 }; 100 101 class JSTimePicker : public JSViewAbstract { 102 public: 103 static void Create(const JSCallbackInfo& info); 104 105 static void JSBind(BindingTarget globalObj); 106 static void OnChange(const JSCallbackInfo& info); 107 static void OnEnterSelectedArea(const JSCallbackInfo& info); 108 static void Loop(const JSCallbackInfo& info); 109 static void UseMilitaryTime(bool isUseMilitaryTime); 110 static void EnableHapticFeedback(const JSCallbackInfo& info); 111 static void PickerBackgroundColor(const JSCallbackInfo& info); 112 113 static void SetDisappearTextStyle(const JSCallbackInfo& info); 114 static void SetTextStyle(const JSCallbackInfo& info); 115 static void SetSelectedTextStyle(const JSCallbackInfo& info); 116 static void DateTimeOptions(const JSCallbackInfo& info); 117 static void JsOpacity(const JSCallbackInfo& info); 118 static void EnableCascade(const JSCallbackInfo& info); 119 120 static void SetDigitalCrownSensitivity(const JSCallbackInfo& info); 121 private: 122 static void CreateTimePicker(const JSCallbackInfo& info, const JSRef<JSObject>& paramObj); 123 static void SetDefaultAttributes(); 124 static PickerTime ParseTime( 125 const JSRef<JSVal>& timeVal, PickerTime defaultTime = PickerTime(), bool useDefaultTime = false); 126 }; 127 128 class JSTimePickerDialog : public JSViewAbstract { 129 public: 130 static void JSBind(BindingTarget globalObj); 131 static void Show(const JSCallbackInfo& info); 132 static void TimePickerDialogShow(const JSRef<JSObject>& paramObj, 133 const std::map<std::string, NG::DialogEvent>& dialogEvent, 134 const std::map<std::string, NG::DialogGestureEvent>& dialogCancelEvent); 135 136 private: 137 static void CreateTimePicker(RefPtr<Component>& component, const JSRef<JSObject>& paramObj); 138 static PickerTime ParseTime( 139 const JSRef<JSVal>& timeVal, PickerTime defaultTime = PickerTime(), bool useDefaultTime = false); 140 static PickerDate ParseDate(const JSRef<JSVal>& dateVal); 141 }; 142 } // namespace OHOS::Ace::Framework 143 #endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_DATEPICKER_H 144