@ledvance/ui-biz-bundle 1.1.68 → 1.1.69

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (240) hide show
  1. package/.babelrc +31 -31
  2. package/.eslintignore +5 -5
  3. package/.eslintrc.js +27 -27
  4. package/.prettierrc.js +1 -1
  5. package/.versionrc +5 -5
  6. package/package.json +74 -74
  7. package/rn-cli.config.js +8 -8
  8. package/src/hooks/DeviceDpStateHooks.d.ts +14 -14
  9. package/src/hooks/DeviceDpStateHooks.ts +50 -50
  10. package/src/modules/biorhythm/BiorhythmActions.d.ts +8 -8
  11. package/src/modules/biorhythm/BiorhythmActions.ts +324 -324
  12. package/src/modules/biorhythm/BiorhythmBean.d.ts +58 -58
  13. package/src/modules/biorhythm/BiorhythmBean.ts +230 -230
  14. package/src/modules/biorhythm/BiorhythmEditPage.d.ts +14 -14
  15. package/src/modules/biorhythm/BiorhythmEditPage.tsx +324 -324
  16. package/src/modules/biorhythm/BiorhythmPage.d.ts +10 -10
  17. package/src/modules/biorhythm/BiorhythmPage.tsx +796 -796
  18. package/src/modules/biorhythm/IconSelect.d.ts +2 -2
  19. package/src/modules/biorhythm/IconSelect.tsx +81 -81
  20. package/src/modules/biorhythm/Router.ts +34 -34
  21. package/src/modules/biorhythm/circular/ItemIcon.d.ts +22 -22
  22. package/src/modules/biorhythm/circular/ItemIcon.tsx +172 -172
  23. package/src/modules/biorhythm/circular/Progress.d.ts +24 -24
  24. package/src/modules/biorhythm/circular/Progress.tsx +411 -411
  25. package/src/modules/biorhythm/circular/TimeCircular.d.ts +11 -11
  26. package/src/modules/biorhythm/circular/TimeCircular.tsx +70 -70
  27. package/src/modules/biorhythm/iconListData.d.ts +7 -7
  28. package/src/modules/biorhythm/iconListData.ts +29 -29
  29. package/src/modules/biorhythm/pIdList.d.ts +2 -2
  30. package/src/modules/biorhythm/pIdList.ts +35 -35
  31. package/src/modules/biorhythm/res/BiologicalRes.d.ts +43 -43
  32. package/src/modules/biorhythm/res/BiologicalRes.ts +41 -41
  33. package/src/modules/config/ldvConfig.d.ts +2 -2
  34. package/src/modules/config/ldvConfig.tsx +18 -18
  35. package/src/modules/fixedTime/FixedTimeActions.ts +173 -173
  36. package/src/modules/fixedTime/FixedTimeDetailPage.tsx +372 -372
  37. package/src/modules/fixedTime/FixedTimePage.tsx +213 -213
  38. package/src/modules/fixedTime/Router.ts +26 -26
  39. package/src/modules/flags/FlagActions.ts +267 -267
  40. package/src/modules/flags/FlagEditPage.tsx +441 -441
  41. package/src/modules/flags/FlagInfo.tsx +563 -563
  42. package/src/modules/flags/FlagItem.tsx +90 -90
  43. package/src/modules/flags/FlagPage.tsx +277 -277
  44. package/src/modules/flags/Router.ts +25 -25
  45. package/src/modules/history/HistoryPage.d.ts +2 -2
  46. package/src/modules/history/HistoryPage.tsx +261 -261
  47. package/src/modules/history/Router.ts +16 -16
  48. package/src/modules/history/SwitchHistoryPageActions.d.ts +14 -14
  49. package/src/modules/history/SwitchHistoryPageActions.ts +76 -76
  50. package/src/modules/mood/AddMoodPage.d.ts +10 -10
  51. package/src/modules/mood/AddMoodPage.tsx +792 -792
  52. package/src/modules/mood/DynamicMoodEditorPage.d.ts +6 -6
  53. package/src/modules/mood/DynamicMoodEditorPage.tsx +561 -561
  54. package/src/modules/mood/FantasyMood.tsx +176 -176
  55. package/src/modules/mood/FantasyMoodEditPage.tsx +582 -582
  56. package/src/modules/mood/FantasyMoodItem.tsx +104 -104
  57. package/src/modules/mood/FantasyRouter.ts +35 -35
  58. package/src/modules/mood/MixMood/AddMixMoodPage.tsx +247 -247
  59. package/src/modules/mood/MixMood/MixMoodActions.ts +128 -128
  60. package/src/modules/mood/MixMood/MixMoodEditPage.tsx +721 -721
  61. package/src/modules/mood/MixMood/MixMoodItem.tsx +134 -134
  62. package/src/modules/mood/MixMood/MixMoodPage.tsx +326 -326
  63. package/src/modules/mood/MixMood/MixSceneBeans.ts +364 -364
  64. package/src/modules/mood/MixMood/RecommendMixMoodItem.tsx +69 -69
  65. package/src/modules/mood/MixMood/Router.ts +44 -44
  66. package/src/modules/mood/MoodItem.d.ts +11 -11
  67. package/src/modules/mood/MoodItem.tsx +114 -114
  68. package/src/modules/mood/MoodPage.d.ts +16 -16
  69. package/src/modules/mood/MoodPage.tsx +296 -296
  70. package/src/modules/mood/RecommendMoodItem.d.ts +13 -13
  71. package/src/modules/mood/RecommendMoodItem.tsx +74 -74
  72. package/src/modules/mood/Router.ts +53 -53
  73. package/src/modules/mood/StaticMoodEditorPage.d.ts +16 -16
  74. package/src/modules/mood/StaticMoodEditorPage.tsx +320 -320
  75. package/src/modules/mood/tools.d.ts +3 -3
  76. package/src/modules/mood/tools.ts +11 -11
  77. package/src/modules/music/MusicDataBean.d.ts +47 -47
  78. package/src/modules/music/MusicDataBean.ts +167 -167
  79. package/src/modules/music/MusicManager.d.ts +27 -27
  80. package/src/modules/music/MusicManager.ts +207 -207
  81. package/src/modules/music/MusicPage.d.ts +10 -10
  82. package/src/modules/music/MusicPage.tsx +347 -347
  83. package/src/modules/music/MusicPageActions.d.ts +35 -35
  84. package/src/modules/music/MusicPageActions.ts +317 -317
  85. package/src/modules/music/Router.ts +16 -16
  86. package/src/modules/music/SelecetGenre.d.ts +7 -7
  87. package/src/modules/music/SelecetGenre.tsx +63 -63
  88. package/src/modules/music/color.d.ts +2 -2
  89. package/src/modules/music/color.ts +73 -73
  90. package/src/modules/music/res/index.d.ts +10 -10
  91. package/src/modules/music/res/index.ts +9 -9
  92. package/src/modules/powerOnBehavior/PowerOnBehaviorActions.ts +11 -11
  93. package/src/modules/powerOnBehavior/PowerOnBehaviorPage.tsx +173 -173
  94. package/src/modules/powerOnBehavior/Router.ts +16 -16
  95. package/src/modules/randomTime/RandomTimeActions.ts +160 -160
  96. package/src/modules/randomTime/RandomTimeDetailPage.tsx +337 -337
  97. package/src/modules/randomTime/RandomTimePage.tsx +214 -214
  98. package/src/modules/randomTime/Router.ts +25 -25
  99. package/src/modules/randomTime/Summary.tsx +122 -122
  100. package/src/modules/scene/SceneAction.d.ts +13 -13
  101. package/src/modules/scene/SceneAction.ts +473 -473
  102. package/src/modules/scene/SceneDetailPage.d.ts +1 -1
  103. package/src/modules/scene/SceneDetailPage.tsx +421 -421
  104. package/src/modules/scene/SceneInfo.d.ts +72 -72
  105. package/src/modules/scene/SceneInfo.ts +1059 -1059
  106. package/src/modules/scene/ScenePage.d.ts +7 -7
  107. package/src/modules/scene/ScenePage.tsx +147 -147
  108. package/src/modules/select/SelectPage.d.ts +12 -12
  109. package/src/modules/select/SelectPage.tsx +137 -137
  110. package/src/modules/sleepWakeup/DeviceState.d.ts +9 -9
  111. package/src/modules/sleepWakeup/DeviceState.tsx +99 -99
  112. package/src/modules/sleepWakeup/LdvScheduleItem.d.ts +15 -15
  113. package/src/modules/sleepWakeup/LdvScheduleItem.tsx +176 -176
  114. package/src/modules/sleepWakeup/Router.ts +25 -25
  115. package/src/modules/sleepWakeup/SleepWakeUpActions.d.ts +2 -2
  116. package/src/modules/sleepWakeup/SleepWakeUpActions.ts +180 -180
  117. package/src/modules/sleepWakeup/SleepWakeUpDetailPage.d.ts +2 -2
  118. package/src/modules/sleepWakeup/SleepWakeUpDetailPage.tsx +616 -616
  119. package/src/modules/sleepWakeup/SleepWakeUpPage.d.ts +13 -13
  120. package/src/modules/sleepWakeup/SleepWakeUpPage.tsx +424 -424
  121. package/src/modules/sleepWakeup/utils.d.ts +44 -44
  122. package/src/modules/sleepWakeup/utils.ts +253 -253
  123. package/src/modules/timeSchedule/DeviceState.d.ts +17 -17
  124. package/src/modules/timeSchedule/DeviceState.tsx +94 -94
  125. package/src/modules/timeSchedule/LdvScheduleItem.d.ts +15 -15
  126. package/src/modules/timeSchedule/LdvScheduleItem.tsx +130 -130
  127. package/src/modules/timeSchedule/ManualSetting.d.ts +14 -14
  128. package/src/modules/timeSchedule/ManualSetting.tsx +219 -219
  129. package/src/modules/timeSchedule/MoodSetting.d.ts +11 -11
  130. package/src/modules/timeSchedule/MoodSetting.tsx +228 -228
  131. package/src/modules/timeSchedule/Router.ts +25 -25
  132. package/src/modules/timeSchedule/ScheduleScene.d.ts +6 -6
  133. package/src/modules/timeSchedule/ScheduleScene.tsx +144 -144
  134. package/src/modules/timeSchedule/SingleLightView.d.ts +12 -12
  135. package/src/modules/timeSchedule/SingleLightView.tsx +175 -175
  136. package/src/modules/timeSchedule/TimeScheduleBean.d.ts +14 -14
  137. package/src/modules/timeSchedule/TimeScheduleBean.ts +18 -18
  138. package/src/modules/timeSchedule/TimeScheduleEditpage.d.ts +6 -6
  139. package/src/modules/timeSchedule/TimeScheduleEditpage.tsx +765 -765
  140. package/src/modules/timeSchedule/TimeSchedulePage.d.ts +13 -13
  141. package/src/modules/timeSchedule/TimeSchedulePage.tsx +358 -358
  142. package/src/modules/timeSchedule/components/ColorList.ts +23 -23
  143. package/src/modules/timeSchedule/components/LampSwitchCard.tsx +106 -106
  144. package/src/modules/timeSchedule/mix/MixLightActions.d.ts +3 -3
  145. package/src/modules/timeSchedule/mix/MixLightActions.ts +49 -49
  146. package/src/modules/timeSchedule/mix/MixLightBean.d.ts +10 -10
  147. package/src/modules/timeSchedule/mix/MixLightBean.ts +9 -9
  148. package/src/modules/timeSchedule/mix/MixLightView.d.ts +7 -7
  149. package/src/modules/timeSchedule/mix/MixLightView.tsx +197 -197
  150. package/src/modules/timeSchedule/utils.d.ts +1 -1
  151. package/src/modules/timeSchedule/utils.ts +6 -6
  152. package/src/modules/timer/Router.ts +16 -16
  153. package/src/modules/timer/TimerPage.d.ts +11 -11
  154. package/src/modules/timer/TimerPage.tsx +384 -384
  155. package/src/modules/timer/TimerPageAction.d.ts +22 -22
  156. package/src/modules/timer/TimerPageAction.ts +131 -131
  157. package/src/navigation/Routers.d.ts +15 -15
  158. package/src/navigation/Routers.ts +46 -46
  159. package/src/navigation/tools.d.ts +9 -9
  160. package/src/navigation/tools.ts +21 -21
  161. package/src/newModules/biorhythm/BiorhythmActions.ts +374 -374
  162. package/src/newModules/biorhythm/BiorhythmBean.ts +230 -230
  163. package/src/newModules/biorhythm/BiorhythmEditPage.tsx +267 -267
  164. package/src/newModules/biorhythm/BiorhythmPage.tsx +642 -642
  165. package/src/newModules/biorhythm/IconSelect.tsx +84 -84
  166. package/src/newModules/biorhythm/Router.ts +33 -33
  167. package/src/newModules/biorhythm/circular/ItemIcon.d.ts +22 -22
  168. package/src/newModules/biorhythm/circular/ItemIcon.tsx +172 -172
  169. package/src/newModules/biorhythm/circular/Progress.d.ts +24 -24
  170. package/src/newModules/biorhythm/circular/Progress.tsx +371 -371
  171. package/src/newModules/biorhythm/circular/TimeCircular.d.ts +11 -11
  172. package/src/newModules/biorhythm/circular/TimeCircular.tsx +64 -64
  173. package/src/newModules/biorhythm/iconListData.ts +29 -29
  174. package/src/newModules/biorhythm/pIdList.ts +35 -35
  175. package/src/newModules/biorhythm/res/BiologicalRes.d.ts +43 -43
  176. package/src/newModules/biorhythm/res/BiologicalRes.ts +41 -41
  177. package/src/newModules/childLock/ChildLockPage.tsx +97 -97
  178. package/src/newModules/childLock/Router.ts +16 -16
  179. package/src/newModules/energyConsumption/EnergyConsumptionActions.ts +23 -23
  180. package/src/newModules/energyConsumption/EnergyConsumptionChart.tsx +84 -84
  181. package/src/newModules/energyConsumption/EnergyConsumptionDetail.tsx +322 -322
  182. package/src/newModules/energyConsumption/EnergyConsumptionPage.tsx +393 -393
  183. package/src/newModules/energyConsumption/Router.ts +34 -34
  184. package/src/newModules/energyConsumption/co2Data.ts +23655 -23655
  185. package/src/newModules/energyConsumption/component/BarChart.tsx +93 -93
  186. package/src/newModules/energyConsumption/component/EnergyModal.tsx +284 -284
  187. package/src/newModules/energyConsumption/component/Overview.tsx +118 -118
  188. package/src/newModules/fixedTime/FixedTimeActions.ts +241 -241
  189. package/src/newModules/fixedTime/FixedTimeDetailPage.tsx +345 -345
  190. package/src/newModules/fixedTime/FixedTimePage.tsx +302 -302
  191. package/src/newModules/fixedTime/Router.ts +25 -25
  192. package/src/newModules/lightMode/LightModePage.tsx +204 -204
  193. package/src/newModules/lightMode/Router.ts +16 -16
  194. package/src/newModules/mood/AddMoodPage.tsx +194 -194
  195. package/src/newModules/mood/DynamicMoodEditorPage.tsx +650 -650
  196. package/src/newModules/mood/Interface.ts +220 -220
  197. package/src/newModules/mood/MixDynamicMoodEditor.tsx +786 -786
  198. package/src/newModules/mood/MoodActions.ts +232 -232
  199. package/src/newModules/mood/MoodInfo.ts +2151 -2151
  200. package/src/newModules/mood/MoodItem.tsx +160 -160
  201. package/src/newModules/mood/MoodPage.tsx +386 -386
  202. package/src/newModules/mood/MoodParse.ts +443 -443
  203. package/src/newModules/mood/RecommendMoodItem.tsx +81 -81
  204. package/src/newModules/mood/Router.ts +43 -43
  205. package/src/newModules/mood/StaticMoodEditorPage.tsx +290 -290
  206. package/src/newModules/overchargeSwitch/OverchargeSwitchPage.tsx +96 -96
  207. package/src/newModules/overchargeSwitch/Router.ts +16 -16
  208. package/src/newModules/powerOnBehavior/LightBehaviorPage.tsx +266 -266
  209. package/src/newModules/powerOnBehavior/PlugBehaviorPage.tsx +173 -173
  210. package/src/newModules/powerOnBehavior/PowerOnBehaviorActions.ts +106 -106
  211. package/src/newModules/powerOnBehavior/Router.ts +27 -27
  212. package/src/newModules/randomTime/RandomTimeActions.ts +238 -238
  213. package/src/newModules/randomTime/RandomTimeDetailPage.tsx +325 -325
  214. package/src/newModules/randomTime/RandomTimePage.tsx +299 -299
  215. package/src/newModules/randomTime/Router.ts +25 -25
  216. package/src/newModules/randomTime/Summary.tsx +116 -116
  217. package/src/newModules/remoteControl/RemoteControlActions.ts +5 -5
  218. package/src/newModules/remoteControl/RemoteControlPage.tsx +51 -51
  219. package/src/newModules/remoteControl/Router.ts +15 -15
  220. package/src/newModules/select/Route.ts +16 -16
  221. package/src/newModules/select/SelectPage.d.ts +12 -12
  222. package/src/newModules/select/SelectPage.tsx +137 -137
  223. package/src/newModules/sleepWakeUp/Interface.ts +69 -69
  224. package/src/newModules/sleepWakeUp/Router.ts +24 -24
  225. package/src/newModules/sleepWakeUp/SleepWakeUpActions.ts +317 -317
  226. package/src/newModules/sleepWakeUp/SleepWakeUpDetailPage.tsx +661 -661
  227. package/src/newModules/sleepWakeUp/SleepWakeUpPage.tsx +455 -455
  228. package/src/newModules/sleepWakeUp/utils.ts +253 -253
  229. package/src/newModules/swithInching/Router.ts +16 -16
  230. package/src/newModules/swithInching/SwithInching.tsx +231 -231
  231. package/src/newModules/swithInching/SwithInchingAction.ts +55 -55
  232. package/src/newModules/swithInching/pickerView.tsx +91 -91
  233. package/src/newModules/timeSchedule/Interface.ts +142 -142
  234. package/src/newModules/timeSchedule/Router.ts +25 -25
  235. package/src/newModules/timeSchedule/TimeScheduleActions.ts +53 -53
  236. package/src/newModules/timeSchedule/TimeScheduleDetailPage.tsx +648 -648
  237. package/src/newModules/timeSchedule/TimeSchedulePage.tsx +253 -253
  238. package/src/newModules/timeSchedule/components/ManuaSettings.tsx +460 -460
  239. package/src/newModules/timeSchedule/components/ScheduleCard.tsx +125 -125
  240. package/tsconfig.json +50 -50
@@ -1,290 +1,290 @@
1
- import React, { useCallback, useEffect, useMemo } from 'react';
2
- import { ScrollView, StyleSheet, View } from 'react-native';
3
- import { cloneDeep, isEqual } from 'lodash';
4
- import { useReactive } from 'ahooks';
5
- import Page from '@ledvance/base/src/components/Page';
6
- import I18n from '@ledvance/base/src/i18n';
7
- import { useNavigation } from '@react-navigation/native';
8
- import TextField from '@ledvance/base/src/components/TextField';
9
- import { Utils } from 'tuya-panel-kit';
10
- import Card from '@ledvance/base/src/components/Card';
11
- import Spacer from '@ledvance/base/src/components/Spacer';
12
- import res from '@ledvance/base/src/res';
13
- import TextButton from '@ledvance/base/src/components/TextButton';
14
- import { useFanMaxSpeed } from '@ledvance/base/src/models/modules/NativePropsSlice';
15
- import FanAdjustView from '@ledvance/base/src/components/FanAdjustView';
16
- import { MoodNodeInfo, MoodPageParams, MoodUIInfo } from './Interface';
17
- import { Result } from '@ledvance/base/src/models/modules/Result';
18
- import { hsv2Hex, mapFloatToRange } from '@ledvance/base/src/utils';
19
- import { cctToColor } from '@ledvance/base/src/utils/cctUtils';
20
- import { useParams } from '@ledvance/base/src/hooks/Hooks';
21
- import LampAdjustView2 from '@ledvance/base/src/components/LampAdjustView2';
22
- import { ui_biz_routerKey } from '../../navigation/Routers'
23
- import LdvSwitch from '@ledvance/base/src/components/ldvSwitch';
24
- import { showDialog } from '@ledvance/base/src/utils/common';
25
-
26
- const cx = Utils.RatioUtils.convertX;
27
-
28
- export interface StaticMoodEditorPageParams {
29
- mode: 'add' | 'edit';
30
- currentMood: MoodUIInfo;
31
- moduleParams: MoodPageParams;
32
- nameRepeat: (mood: MoodUIInfo) => boolean
33
- modDeleteMood: (mode: 'add' | 'edit' | 'del', currentMood: MoodUIInfo) => Promise<Result<any>>;
34
- }
35
-
36
- export interface StaticMoodEditorPageState {
37
- headline: string;
38
- mood: MoodUIInfo;
39
- mainNode: MoodNodeInfo;
40
- secondaryNode: MoodNodeInfo;
41
- loading: boolean;
42
- }
43
-
44
- const StaticMoodEditorPage = () => {
45
- const navigation = useNavigation();
46
- const routeParams = useParams<StaticMoodEditorPageParams>();
47
- const params = cloneDeep(routeParams);
48
- const moduleParams = params.moduleParams;
49
- const isMix = !!(moduleParams.isCeilingLight || moduleParams.isMixLight);
50
- const state = useReactive<StaticMoodEditorPageState>({
51
- headline: '',
52
- mood: params.currentMood,
53
- mainNode: params.currentMood.mainLamp.nodes[0],
54
- secondaryNode: params.currentMood?.secondaryLamp?.nodes?.[0],
55
- loading: false,
56
- });
57
-
58
- useEffect(() => {
59
- state.headline = I18n.getLang(
60
- params.mode === 'add' ? 'add_new_static_mood_headline_text' : 'edit_static_mood_headline_text'
61
- );
62
- }, [params.mode]);
63
-
64
- const getColorBlockColor = useCallback((node: MoodNodeInfo) => {
65
- const s = Math.round(mapFloatToRange(node.s / 100, 30, 100));
66
- if (node.isColorNode) {
67
- return hsv2Hex(node.h, s, 100);
68
- } else {
69
- return cctToColor(node.colorTemp.toFixed());
70
- }
71
- }, []);
72
-
73
- const onRightClick = async () => {
74
- if (state.loading || !canSaveMoodData) return;
75
- state.loading = true;
76
- const newMood: MoodUIInfo = {
77
- ...state.mood,
78
- mainLamp: {
79
- ...state.mood.mainLamp,
80
- nodes: [cloneDeep(state.mainNode)],
81
- },
82
- secondaryLamp: {
83
- ...state.mood.secondaryLamp,
84
- id: undefined
85
- }
86
- };
87
- if (isMix && moduleParams.isMixLight) {
88
- newMood.secondaryLamp = {
89
- ...newMood.secondaryLamp,
90
- nodes: [cloneDeep(state.secondaryNode)],
91
- };
92
- newMood.mainLamp.type = 2
93
- if(moduleParams.isSupportBrightness && !moduleParams.isSupportTemperature){
94
- newMood.mainLamp.type = 1
95
- }
96
- if(moduleParams.isSupportColor){
97
- newMood.secondaryLamp.type = 3
98
- }
99
- }
100
- const res = await params.modDeleteMood(params.mode, newMood);
101
- state.loading = false;
102
- if (res.success) {
103
- navigation.navigate(ui_biz_routerKey.ui_biz_mood);
104
- }
105
- };
106
-
107
- const nameRepeat = useMemo(() => {
108
- return params.nameRepeat(state.mood)
109
- }, [state.mood.name]);
110
-
111
- const checkMoodChanged = useMemo(() =>{
112
- return isEqual(state.mood, params.currentMood)
113
- }, [JSON.stringify(state.mood), params.currentMood])
114
-
115
- const canSaveMoodData = useMemo(() =>{
116
- return state.mood.name.length > 0 && state.mood.name.length < 33 && !nameRepeat && (params.mode === 'add' || !checkMoodChanged)
117
- }, [nameRepeat, state.mood.name, checkMoodChanged, params.mode])
118
-
119
- return (
120
- <Page
121
- backText={I18n.getLang('mesh_device_detail_mode')}
122
- showBackDialog={!checkMoodChanged}
123
- backDialogTitle={I18n.getLang(
124
- params.mode === 'add'
125
- ? 'string_light_pp_dialog_sm_add_headline_c'
126
- : 'manage_user_unsaved_changes_dialog_headline'
127
- )}
128
- backDialogContent={I18n.getLang(
129
- params.mode === 'add'
130
- ? 'strip_light_static_mood_add_step_2_dialog_text'
131
- : 'strip_light_static_mood_editor_step_2_dialog_text'
132
- )}
133
- headlineText={state.headline}
134
- rightButtonIcon={canSaveMoodData ? res.ic_check : res.ic_uncheck}
135
- rightButtonIconClick={onRightClick}
136
- loading={state.loading}
137
- >
138
- <ScrollView style={{ flex: 1 }} nestedScrollEnabled={true}>
139
- <View style={styles.root}>
140
- <TextField
141
- style={styles.name}
142
- value={state.mood.name}
143
- placeholder={I18n.getLang('edit_static_mood_inputfield_topic_text')}
144
- onChangeText={text => {
145
- state.mood.name = text;
146
- }}
147
- maxLength={33}
148
- showError={state.mood.name.length > 32 || nameRepeat}
149
- tipColor={nameRepeat ? '#f00' : undefined}
150
- tipIcon={nameRepeat ? res.ic_text_field_input_error : undefined}
151
- errorText={I18n.getLang(
152
- nameRepeat ? 'string_light_pp_field_sm_add_error1' : 'add_new_dynamic_mood_alert_text'
153
- )}
154
- />
155
- <Card style={styles.adjustCard}>
156
- <LdvSwitch
157
- title={I18n.getLang(
158
- isMix
159
- ? 'light_sources_tile_main_lighting_headline'
160
- : 'light_sources_tile_tw_lighting_headline'
161
- )}
162
- color={getColorBlockColor(state.mainNode)}
163
- colorAlpha={1}
164
- enable={!!state.mood.mainLamp.enable}
165
- setEnable={v => {
166
- state.mood.mainLamp.enable = v;
167
- }}
168
- showSwitch={!!moduleParams.isMixLight}
169
- />
170
- {(!moduleParams.isMixLight || state.mood.mainLamp.enable) && (
171
- <LampAdjustView2
172
- isSupportColor={isMix ? false : moduleParams.isSupportColor}
173
- isSupportBrightness={moduleParams.isSupportBrightness}
174
- isSupportCCT={moduleParams.isSupportTemperature}
175
- isColorMode={state.mainNode.isColorNode}
176
- reserveSV={true}
177
- setIsColorMode={isColorMode => {
178
- state.mainNode.isColorNode = isColorMode;
179
- }}
180
- hsv={state.mainNode}
181
- onHSVChange={(hsv) => {
182
- state.mainNode.h = hsv.h
183
- state.mainNode.s = hsv.s
184
- state.mainNode.v = hsv.v
185
- }}
186
- cct={state.mainNode.colorTemp}
187
- brightness={state.mainNode.brightness}
188
- onCCTChange={(cct) => {
189
- state.mainNode.colorTemp = cct;
190
- }}
191
- onBrightnessChange={(brightness) => {
192
- state.mainNode.brightness = brightness;
193
- }}
194
- />
195
- )}
196
- </Card>
197
- <Spacer />
198
- {!!(moduleParams.isFanLight || moduleParams.isUVCFan) && (
199
- <FanAdjustView
200
- fanEnable={!!state.mood.mainLamp.fanEnable}
201
- fanSpeed={state.mood.mainLamp.fanSpeed || 1}
202
- maxFanSpeed={useFanMaxSpeed()}
203
- onFanSwitch={fanEnable => {
204
- state.mood.mainLamp.fanEnable = fanEnable;
205
- }}
206
- onFanSpeedChange={fanSpeed => {
207
- state.mood.mainLamp.fanSpeed = fanSpeed;
208
- }}
209
- onFanSpeedChangeComplete={fanSpeed => {
210
- state.mood.mainLamp.fanSpeed = fanSpeed;
211
- }}
212
- style={styles.fanAdjustCard}
213
- />
214
- )}
215
- {params.mode === 'edit' && (
216
- <View style={{ marginTop: cx(20), marginHorizontal: cx(24) }}>
217
- <TextButton
218
- style={styles.deleteBtn}
219
- textStyle={styles.deleteBtnText}
220
- text={I18n.getLang('edit_static_mood_button_delete_text')}
221
- onPress={() => {
222
- showDialog({
223
- method: 'confirm',
224
- title: I18n.getLang('string_light_pp_dialog_sm_ed_headline_d'),
225
- subTitle: I18n.getLang(`strip_light_static_mood_edit_dialog_text`),
226
- onConfirm: async (_, {close})=>{
227
- close();
228
- state.loading = true;
229
- const res = await params.modDeleteMood('del', state.mood);
230
- state.loading = false;
231
- if (res.success) {
232
- navigation.navigate(ui_biz_routerKey.ui_biz_mood);
233
- }
234
- }
235
- })
236
- }}
237
- />
238
- </View>
239
- )}
240
- <Spacer />
241
- </View>
242
- </ScrollView>
243
- </Page>
244
- );
245
- };
246
-
247
- const styles = StyleSheet.create({
248
- root: {
249
- flex: 1,
250
- flexDirection: 'column',
251
- },
252
- name: {
253
- marginHorizontal: cx(24),
254
- },
255
- adjustCard: {
256
- marginTop: cx(12),
257
- marginHorizontal: cx(24),
258
- },
259
- fanAdjustCard: {
260
- marginHorizontal: cx(24),
261
- },
262
- lightLine: {
263
- flexDirection: 'row',
264
- marginHorizontal: cx(16),
265
- },
266
- light: {
267
- color: '#000',
268
- fontSize: cx(18),
269
- fontFamily: 'helvetica_neue_lt_std_bd',
270
- },
271
- preview: {
272
- width: cx(20),
273
- height: cx(20),
274
- marginStart: cx(12),
275
- borderRadius: cx(4),
276
- },
277
- deleteBtn: {
278
- width: '100%',
279
- height: cx(50),
280
- backgroundColor: '#666',
281
- borderRadius: cx(8),
282
- },
283
- deleteBtnText: {
284
- color: '#fff',
285
- fontSize: cx(16),
286
- fontFamily: 'helvetica_neue_lt_std_bd',
287
- },
288
- });
289
-
290
- export default StaticMoodEditorPage;
1
+ import React, { useCallback, useEffect, useMemo } from 'react';
2
+ import { ScrollView, StyleSheet, View } from 'react-native';
3
+ import { cloneDeep, isEqual } from 'lodash';
4
+ import { useReactive } from 'ahooks';
5
+ import Page from '@ledvance/base/src/components/Page';
6
+ import I18n from '@ledvance/base/src/i18n';
7
+ import { useNavigation } from '@react-navigation/native';
8
+ import TextField from '@ledvance/base/src/components/TextField';
9
+ import { Utils } from 'tuya-panel-kit';
10
+ import Card from '@ledvance/base/src/components/Card';
11
+ import Spacer from '@ledvance/base/src/components/Spacer';
12
+ import res from '@ledvance/base/src/res';
13
+ import TextButton from '@ledvance/base/src/components/TextButton';
14
+ import { useFanMaxSpeed } from '@ledvance/base/src/models/modules/NativePropsSlice';
15
+ import FanAdjustView from '@ledvance/base/src/components/FanAdjustView';
16
+ import { MoodNodeInfo, MoodPageParams, MoodUIInfo } from './Interface';
17
+ import { Result } from '@ledvance/base/src/models/modules/Result';
18
+ import { hsv2Hex, mapFloatToRange } from '@ledvance/base/src/utils';
19
+ import { cctToColor } from '@ledvance/base/src/utils/cctUtils';
20
+ import { useParams } from '@ledvance/base/src/hooks/Hooks';
21
+ import LampAdjustView2 from '@ledvance/base/src/components/LampAdjustView2';
22
+ import { ui_biz_routerKey } from '../../navigation/Routers'
23
+ import LdvSwitch from '@ledvance/base/src/components/ldvSwitch';
24
+ import { showDialog } from '@ledvance/base/src/utils/common';
25
+
26
+ const cx = Utils.RatioUtils.convertX;
27
+
28
+ export interface StaticMoodEditorPageParams {
29
+ mode: 'add' | 'edit';
30
+ currentMood: MoodUIInfo;
31
+ moduleParams: MoodPageParams;
32
+ nameRepeat: (mood: MoodUIInfo) => boolean
33
+ modDeleteMood: (mode: 'add' | 'edit' | 'del', currentMood: MoodUIInfo) => Promise<Result<any>>;
34
+ }
35
+
36
+ export interface StaticMoodEditorPageState {
37
+ headline: string;
38
+ mood: MoodUIInfo;
39
+ mainNode: MoodNodeInfo;
40
+ secondaryNode: MoodNodeInfo;
41
+ loading: boolean;
42
+ }
43
+
44
+ const StaticMoodEditorPage = () => {
45
+ const navigation = useNavigation();
46
+ const routeParams = useParams<StaticMoodEditorPageParams>();
47
+ const params = cloneDeep(routeParams);
48
+ const moduleParams = params.moduleParams;
49
+ const isMix = !!(moduleParams.isCeilingLight || moduleParams.isMixLight);
50
+ const state = useReactive<StaticMoodEditorPageState>({
51
+ headline: '',
52
+ mood: params.currentMood,
53
+ mainNode: params.currentMood.mainLamp.nodes[0],
54
+ secondaryNode: params.currentMood?.secondaryLamp?.nodes?.[0],
55
+ loading: false,
56
+ });
57
+
58
+ useEffect(() => {
59
+ state.headline = I18n.getLang(
60
+ params.mode === 'add' ? 'add_new_static_mood_headline_text' : 'edit_static_mood_headline_text'
61
+ );
62
+ }, [params.mode]);
63
+
64
+ const getColorBlockColor = useCallback((node: MoodNodeInfo) => {
65
+ const s = Math.round(mapFloatToRange(node.s / 100, 30, 100));
66
+ if (node.isColorNode) {
67
+ return hsv2Hex(node.h, s, 100);
68
+ } else {
69
+ return cctToColor(node.colorTemp.toFixed());
70
+ }
71
+ }, []);
72
+
73
+ const onRightClick = async () => {
74
+ if (state.loading || !canSaveMoodData) return;
75
+ state.loading = true;
76
+ const newMood: MoodUIInfo = {
77
+ ...state.mood,
78
+ mainLamp: {
79
+ ...state.mood.mainLamp,
80
+ nodes: [cloneDeep(state.mainNode)],
81
+ },
82
+ secondaryLamp: {
83
+ ...state.mood.secondaryLamp,
84
+ id: undefined
85
+ }
86
+ };
87
+ if (isMix && moduleParams.isMixLight) {
88
+ newMood.secondaryLamp = {
89
+ ...newMood.secondaryLamp,
90
+ nodes: [cloneDeep(state.secondaryNode)],
91
+ };
92
+ newMood.mainLamp.type = 2
93
+ if(moduleParams.isSupportBrightness && !moduleParams.isSupportTemperature){
94
+ newMood.mainLamp.type = 1
95
+ }
96
+ if(moduleParams.isSupportColor){
97
+ newMood.secondaryLamp.type = 3
98
+ }
99
+ }
100
+ const res = await params.modDeleteMood(params.mode, newMood);
101
+ state.loading = false;
102
+ if (res.success) {
103
+ navigation.navigate(ui_biz_routerKey.ui_biz_mood);
104
+ }
105
+ };
106
+
107
+ const nameRepeat = useMemo(() => {
108
+ return params.nameRepeat(state.mood)
109
+ }, [state.mood.name]);
110
+
111
+ const checkMoodChanged = useMemo(() =>{
112
+ return isEqual(state.mood, params.currentMood)
113
+ }, [JSON.stringify(state.mood), params.currentMood])
114
+
115
+ const canSaveMoodData = useMemo(() =>{
116
+ return state.mood.name.length > 0 && state.mood.name.length < 33 && !nameRepeat && (params.mode === 'add' || !checkMoodChanged)
117
+ }, [nameRepeat, state.mood.name, checkMoodChanged, params.mode])
118
+
119
+ return (
120
+ <Page
121
+ backText={I18n.getLang('mesh_device_detail_mode')}
122
+ showBackDialog={!checkMoodChanged}
123
+ backDialogTitle={I18n.getLang(
124
+ params.mode === 'add'
125
+ ? 'string_light_pp_dialog_sm_add_headline_c'
126
+ : 'manage_user_unsaved_changes_dialog_headline'
127
+ )}
128
+ backDialogContent={I18n.getLang(
129
+ params.mode === 'add'
130
+ ? 'strip_light_static_mood_add_step_2_dialog_text'
131
+ : 'strip_light_static_mood_editor_step_2_dialog_text'
132
+ )}
133
+ headlineText={state.headline}
134
+ rightButtonIcon={canSaveMoodData ? res.ic_check : res.ic_uncheck}
135
+ rightButtonIconClick={onRightClick}
136
+ loading={state.loading}
137
+ >
138
+ <ScrollView style={{ flex: 1 }} nestedScrollEnabled={true}>
139
+ <View style={styles.root}>
140
+ <TextField
141
+ style={styles.name}
142
+ value={state.mood.name}
143
+ placeholder={I18n.getLang('edit_static_mood_inputfield_topic_text')}
144
+ onChangeText={text => {
145
+ state.mood.name = text;
146
+ }}
147
+ maxLength={33}
148
+ showError={state.mood.name.length > 32 || nameRepeat}
149
+ tipColor={nameRepeat ? '#f00' : undefined}
150
+ tipIcon={nameRepeat ? res.ic_text_field_input_error : undefined}
151
+ errorText={I18n.getLang(
152
+ nameRepeat ? 'string_light_pp_field_sm_add_error1' : 'add_new_dynamic_mood_alert_text'
153
+ )}
154
+ />
155
+ <Card style={styles.adjustCard}>
156
+ <LdvSwitch
157
+ title={I18n.getLang(
158
+ isMix
159
+ ? 'light_sources_tile_main_lighting_headline'
160
+ : 'light_sources_tile_tw_lighting_headline'
161
+ )}
162
+ color={getColorBlockColor(state.mainNode)}
163
+ colorAlpha={1}
164
+ enable={!!state.mood.mainLamp.enable}
165
+ setEnable={v => {
166
+ state.mood.mainLamp.enable = v;
167
+ }}
168
+ showSwitch={!!moduleParams.isMixLight}
169
+ />
170
+ {(!moduleParams.isMixLight || state.mood.mainLamp.enable) && (
171
+ <LampAdjustView2
172
+ isSupportColor={isMix ? false : moduleParams.isSupportColor}
173
+ isSupportBrightness={moduleParams.isSupportBrightness}
174
+ isSupportCCT={moduleParams.isSupportTemperature}
175
+ isColorMode={state.mainNode.isColorNode}
176
+ reserveSV={true}
177
+ setIsColorMode={isColorMode => {
178
+ state.mainNode.isColorNode = isColorMode;
179
+ }}
180
+ hsv={state.mainNode}
181
+ onHSVChange={(hsv) => {
182
+ state.mainNode.h = hsv.h
183
+ state.mainNode.s = hsv.s
184
+ state.mainNode.v = hsv.v
185
+ }}
186
+ cct={state.mainNode.colorTemp}
187
+ brightness={state.mainNode.brightness}
188
+ onCCTChange={(cct) => {
189
+ state.mainNode.colorTemp = cct;
190
+ }}
191
+ onBrightnessChange={(brightness) => {
192
+ state.mainNode.brightness = brightness;
193
+ }}
194
+ />
195
+ )}
196
+ </Card>
197
+ <Spacer />
198
+ {!!(moduleParams.isFanLight || moduleParams.isUVCFan) && (
199
+ <FanAdjustView
200
+ fanEnable={!!state.mood.mainLamp.fanEnable}
201
+ fanSpeed={state.mood.mainLamp.fanSpeed || 1}
202
+ maxFanSpeed={useFanMaxSpeed()}
203
+ onFanSwitch={fanEnable => {
204
+ state.mood.mainLamp.fanEnable = fanEnable;
205
+ }}
206
+ onFanSpeedChange={fanSpeed => {
207
+ state.mood.mainLamp.fanSpeed = fanSpeed;
208
+ }}
209
+ onFanSpeedChangeComplete={fanSpeed => {
210
+ state.mood.mainLamp.fanSpeed = fanSpeed;
211
+ }}
212
+ style={styles.fanAdjustCard}
213
+ />
214
+ )}
215
+ {params.mode === 'edit' && (
216
+ <View style={{ marginTop: cx(20), marginHorizontal: cx(24) }}>
217
+ <TextButton
218
+ style={styles.deleteBtn}
219
+ textStyle={styles.deleteBtnText}
220
+ text={I18n.getLang('edit_static_mood_button_delete_text')}
221
+ onPress={() => {
222
+ showDialog({
223
+ method: 'confirm',
224
+ title: I18n.getLang('string_light_pp_dialog_sm_ed_headline_d'),
225
+ subTitle: I18n.getLang(`strip_light_static_mood_edit_dialog_text`),
226
+ onConfirm: async (_, {close})=>{
227
+ close();
228
+ state.loading = true;
229
+ const res = await params.modDeleteMood('del', state.mood);
230
+ state.loading = false;
231
+ if (res.success) {
232
+ navigation.navigate(ui_biz_routerKey.ui_biz_mood);
233
+ }
234
+ }
235
+ })
236
+ }}
237
+ />
238
+ </View>
239
+ )}
240
+ <Spacer />
241
+ </View>
242
+ </ScrollView>
243
+ </Page>
244
+ );
245
+ };
246
+
247
+ const styles = StyleSheet.create({
248
+ root: {
249
+ flex: 1,
250
+ flexDirection: 'column',
251
+ },
252
+ name: {
253
+ marginHorizontal: cx(24),
254
+ },
255
+ adjustCard: {
256
+ marginTop: cx(12),
257
+ marginHorizontal: cx(24),
258
+ },
259
+ fanAdjustCard: {
260
+ marginHorizontal: cx(24),
261
+ },
262
+ lightLine: {
263
+ flexDirection: 'row',
264
+ marginHorizontal: cx(16),
265
+ },
266
+ light: {
267
+ color: '#000',
268
+ fontSize: cx(18),
269
+ fontFamily: 'helvetica_neue_lt_std_bd',
270
+ },
271
+ preview: {
272
+ width: cx(20),
273
+ height: cx(20),
274
+ marginStart: cx(12),
275
+ borderRadius: cx(4),
276
+ },
277
+ deleteBtn: {
278
+ width: '100%',
279
+ height: cx(50),
280
+ backgroundColor: '#666',
281
+ borderRadius: cx(8),
282
+ },
283
+ deleteBtnText: {
284
+ color: '#fff',
285
+ fontSize: cx(16),
286
+ fontFamily: 'helvetica_neue_lt_std_bd',
287
+ },
288
+ });
289
+
290
+ export default StaticMoodEditorPage;