@ledvance/group-ui-biz-bundle 1.0.95 → 1.0.97

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 (25) hide show
  1. package/package.json +1 -1
  2. package/src/modules/biorhythm/BiorhythmDetailPage.tsx +1 -0
  3. package/src/modules/biorhythm/BiorhythmPage.tsx +8 -2
  4. package/src/modules/energyConsumption/EnergyConsumptionActions.ts +144 -137
  5. package/src/modules/energyConsumption/EnergyConsumptionChart.tsx +74 -71
  6. package/src/modules/energyConsumption/EnergyConsumptionDetail.tsx +13 -11
  7. package/src/modules/energyConsumption/EnergyConsumptionPage.tsx +7 -6
  8. package/src/modules/energyConsumption/component/EnergyModal.tsx +1 -1
  9. package/src/modules/fixedTimeForPlug/FixedTimeForPlugDetailPage.tsx +6 -4
  10. package/src/modules/fixedTimeForPlug/FixedTimeForPlugPage.tsx +33 -5
  11. package/src/modules/fixedTimingForLight/FixedTimingForLightDetailPage.tsx +6 -4
  12. package/src/modules/fixedTimingForLight/FixedTimingForLightPage.tsx +34 -6
  13. package/src/modules/music/MusicActions.ts +3 -0
  14. package/src/modules/music/MusicPage.tsx +2 -0
  15. package/src/modules/randomTimeForPlug/RandomTimeForPlugDetailPage.tsx +6 -4
  16. package/src/modules/randomTimeForPlug/RandomTimeForPlugPage.tsx +34 -6
  17. package/src/modules/randomTimingForLight/ItemCard.tsx +3 -2
  18. package/src/modules/randomTimingForLight/RandomTimingForLightDetailPage.tsx +6 -4
  19. package/src/modules/randomTimingForLight/RandomTimingForLightPage.tsx +34 -6
  20. package/src/modules/sleepWakeUp/SleepWakeUpActions.ts +1 -1
  21. package/src/modules/sleepWakeUp/SleepWakeUpDetailPage.tsx +9 -8
  22. package/src/modules/sleepWakeUp/SleepWakeUpPage.tsx +120 -38
  23. package/src/modules/timeSchedule/TimeScheduleDetailPage.tsx +3 -2
  24. package/src/modules/timeSchedule/TimeSchedulePage.tsx +15 -1
  25. package/src/modules/timeSchedule/components/ManuaSettings.tsx +18 -8
@@ -1,27 +1,27 @@
1
- import React, {useCallback, useEffect, useMemo} from "react";
2
- import {FlatList, Image, StyleSheet, Text, View} from 'react-native'
1
+ import React, { useCallback, useEffect, useMemo } from "react";
2
+ import { FlatList, Image, StyleSheet, Text, View } from 'react-native'
3
3
  import Page from '@ledvance/base/src/components/Page'
4
4
  import Tag from '@ledvance/base/src/components/Tag'
5
5
  import Spacer from '@ledvance/base/src/components/Spacer'
6
- import {useNavigation} from '@react-navigation/native'
6
+ import { useNavigation } from '@react-navigation/native'
7
7
  import I18n from '@ledvance/base/src/i18n'
8
8
  import res from '@ledvance/base/src/res'
9
- import {useDeviceInfo, useSystemTimeFormate} from "@ledvance/base/src/models/modules/NativePropsSlice";
10
- import {useReactive, useUpdateEffect} from "ahooks";
9
+ import { useDeviceInfo, useSystemTimeFormate } from "@ledvance/base/src/models/modules/NativePropsSlice";
10
+ import { useReactive, useUpdateEffect } from "ahooks";
11
11
  import CustomListDialog from "@ledvance/base/src/components/CustomListDialog";
12
- import {SwitchButton, Utils} from "tuya-panel-kit";
13
- import {convertMinutesTo12HourFormat, getIsClosed, loopText, showDialog} from "@ledvance/base/src/utils/common";
12
+ import { Dialog, SwitchButton, Utils } from "tuya-panel-kit";
13
+ import { convertMinutesTo12HourFormat, getGlobalParamsDp, getIsClosed, isConflictTask, loopText, showDialog } from "@ledvance/base/src/utils/common";
14
14
  import TextButton from "@ledvance/base/src/components/TextButton";
15
- import {ui_biz_routerKey} from "../../navigation/Routers";
16
- import {cloneDeep} from "lodash";
15
+ import { ui_biz_routerKey } from "../../navigation/Routers";
16
+ import { cloneDeep } from "lodash";
17
17
  import Card from "@ledvance/base/src/components/Card";
18
- import {useParams} from "@ledvance/base/src/hooks/Hooks";
19
- import {ApplyForItem} from "@ledvance/base/src/utils/interface";
20
- import {getEndTime, getStartTime, SleepWakeUpItem, useSleepPlan, useWakeUpPlan} from "./SleepWakeUpActions";
18
+ import { useParams } from "@ledvance/base/src/hooks/Hooks";
19
+ import { ApplyForItem } from "@ledvance/base/src/utils/interface";
20
+ import { encodeSleepOrWakeUp, getEndTime, getStartTime, SleepWakeUpItem, useSleepPlan, useWakeUpPlan } from "./SleepWakeUpActions";
21
21
  import ThemeType from '@ledvance/base/src/config/themeType'
22
22
 
23
23
  const cx = Utils.RatioUtils.convertX
24
- const {parseTimer} = Utils.TimeUtils
24
+ const { parseTimer } = Utils.TimeUtils
25
25
  const { withTheme } = Utils.ThemeUtils
26
26
 
27
27
  export interface SleepWakeUpPageRouteParams {
@@ -35,7 +35,7 @@ export interface SleepWakeUpPageRouteParams {
35
35
  }
36
36
 
37
37
  const MAX_SCHEDULE = 4
38
- const SleepWakeUpPage = (props: {theme?: ThemeType}) => {
38
+ const SleepWakeUpPage = (props: { theme?: ThemeType }) => {
39
39
  const deviceInfo = useDeviceInfo()
40
40
  const navigation = useNavigation()
41
41
  const is24HourClock = useSystemTimeFormate()
@@ -49,23 +49,23 @@ const SleepWakeUpPage = (props: {theme?: ThemeType}) => {
49
49
  sleepScheduleList: cloneDeep(sleepList),
50
50
  wakeUpScheduleList: cloneDeep(wakeUpList),
51
51
  filteredScheduleList: [] as any[],
52
- loading: false
52
+ loading: false
53
53
  })
54
54
 
55
55
  const isMaxNum = useMemo(() => {
56
56
  return state.sleepScheduleList.length >= MAX_SCHEDULE && state.wakeUpScheduleList.length >= MAX_SCHEDULE
57
- }, [state.sleepScheduleList, state.wakeUpScheduleList])
57
+ }, [JSON.stringify(state.sleepScheduleList), JSON.stringify(state.wakeUpScheduleList)])
58
58
 
59
- useUpdateEffect(() =>{
59
+ useUpdateEffect(() => {
60
60
  state.sleepScheduleList = cloneDeep(sleepList)
61
- }, [sleepList])
61
+ }, [JSON.stringify(sleepList)])
62
62
 
63
- useUpdateEffect(() =>{
63
+ useUpdateEffect(() => {
64
64
  state.wakeUpScheduleList = cloneDeep(wakeUpList)
65
- }, [wakeUpList])
65
+ }, [JSON.stringify(wakeUpList)])
66
66
 
67
67
 
68
- const onAddScheduleDialogItemClick = useCallback((isSleep: boolean, mode: 'add' | 'edit', scheduleItem: SleepWakeUpItem) => {
68
+ const onAddScheduleDialogItemClick = (isSleep: boolean, mode: 'add' | 'edit', scheduleItem: SleepWakeUpItem) => {
69
69
  if (mode === 'add' && isSleep && state.sleepScheduleList.length === MAX_SCHEDULE) return
70
70
  if (mode === 'add' && !isSleep && state.wakeUpScheduleList.length === MAX_SCHEDULE) return
71
71
  navigateToEdit({
@@ -76,9 +76,11 @@ const SleepWakeUpPage = (props: {theme?: ThemeType}) => {
76
76
  modDeleteTimeSchedule
77
77
  })
78
78
  state.showAddSchedulePopover = false
79
- }, [state.filteredScheduleList])
79
+ }
80
80
 
81
- const modDeleteTimeSchedule = async (mode: 'add' | 'edit' | 'del', isSleep: boolean, sleepWakeUp: SleepWakeUpItem) => {
81
+ const modDeleteTimeSchedule = async (mode: 'add' | 'edit' | 'del' | 'set', isSleep: boolean, sleepWakeUp: SleepWakeUpItem) => {
82
+ const conflictDps = {}
83
+ const conflictConfig = {}
82
84
  let cloneSleepWakeUp: SleepWakeUpItem[] = isSleep ? cloneDeep(state.sleepScheduleList) : cloneDeep(state.wakeUpScheduleList)
83
85
  if (mode === 'add') {
84
86
  cloneSleepWakeUp = [
@@ -92,7 +94,7 @@ const SleepWakeUpPage = (props: {theme?: ThemeType}) => {
92
94
  if (mode === 'del') {
93
95
  cloneSleepWakeUp = cloneSleepWakeUp.filter(item => sleepWakeUp.index !== item.index)
94
96
  }
95
- if (mode === 'edit') {
97
+ if (mode === 'edit' || mode === 'set') {
96
98
  cloneSleepWakeUp = cloneSleepWakeUp.map(item => {
97
99
  if (item.index === sleepWakeUp.index) {
98
100
  return sleepWakeUp
@@ -100,18 +102,98 @@ const SleepWakeUpPage = (props: {theme?: ThemeType}) => {
100
102
  return item
101
103
  })
102
104
  }
105
+ if (((mode === 'edit' || mode === 'set') && sleepWakeUp.enable) || mode === 'add') {
106
+ let sleepConflict = false
107
+ let wakeUpConflict = false
108
+ const cloneSleepPlan = isSleep ? cloneSleepWakeUp : cloneDeep(sleepList)
109
+ const cloneWakeUpPlan = isSleep ? cloneDeep(wakeUpList) : cloneSleepWakeUp
110
+ const currentSleepWakeUp = {
111
+ ...sleepWakeUp,
112
+ startTime: getStartTime(sleepWakeUp),
113
+ endTime: getEndTime(sleepWakeUp)
114
+ }
115
+ const newSleepList = cloneSleepPlan.map((item, idx) => {
116
+ const itself = isSleep ? (mode === 'add' ? (idx === cloneSleepPlan.length - 1) : sleepWakeUp.index === item.index) : isSleep
117
+ if (!itself && item.enable && isConflictTask({
118
+ ...item,
119
+ startTime: getStartTime(item),
120
+ endTime: getEndTime(item)
121
+ }, currentSleepWakeUp)) {
122
+ sleepConflict = true
123
+ item.enable = false
124
+ return item
125
+ }
103
126
 
104
- const res = isSleep ? await setSleepList(cloneSleepWakeUp) : await setWakeUpList(cloneSleepWakeUp)
105
- if(res.success){
106
- if(isSleep){
127
+ return item
128
+ })
129
+ const newWakeUpList = cloneWakeUpPlan.map((item, idx) => {
130
+ const itself = !isSleep ? (mode === 'add' ? (idx === cloneWakeUpPlan.length - 1) : sleepWakeUp.index === item.index) : !isSleep
131
+ if (!itself && item.enable && isConflictTask({
132
+ ...item,
133
+ startTime: getStartTime(item),
134
+ endTime: getEndTime(item)
135
+ }, currentSleepWakeUp)) {
136
+ wakeUpConflict = true
137
+ item.enable = false
138
+ return item
139
+ }
140
+ return item
141
+ })
142
+ const isConflict = sleepConflict || wakeUpConflict
143
+ if (isSleep) {
144
+ if (wakeUpConflict) {
145
+ conflictDps[getGlobalParamsDp('wakeup_mode')] = encodeSleepOrWakeUp(newWakeUpList)
146
+ conflictConfig['wakeupMode'] = newWakeUpList
147
+ }
148
+ } else {
149
+ if (sleepConflict) {
150
+ conflictDps[getGlobalParamsDp('sleep_mode')] = encodeSleepOrWakeUp(newSleepList)
151
+ conflictConfig['sleepMode'] = newSleepList
152
+ }
153
+ }
154
+ if (isConflict && mode === 'set') {
155
+ return new Promise((resolve) => {
156
+ showDialog({
157
+ method: 'confirm',
158
+ title: I18n.getLang(isSleep ? 'conflict_dialog_active_item_sleepschedule_titel' : 'conflict_dialog_active_item_wakeupschedule_titel'),
159
+ subTitle: I18n.getLang(isSleep ? 'conflict_dialog_active_item_sleepschedule_description' : 'conflict_dialog_active_item_wakeupschedule_description'),
160
+ onConfirm: async (_, { close }) => {
161
+ close()
162
+ const res = isSleep ? await setSleepList(newSleepList, conflictDps, conflictConfig) : await setWakeUpList(newWakeUpList, conflictDps, conflictConfig)
163
+ if (isSleep) {
164
+ state.sleepScheduleList = cloneDeep(newSleepList)
165
+ } else {
166
+ state.wakeUpScheduleList = cloneDeep(newWakeUpList)
167
+ }
168
+ resolve(res)
169
+ },
170
+ onCancel: () => {
171
+ resolve({
172
+ success: false
173
+ })
174
+ Dialog.close()
175
+ }
176
+ })
177
+ })
178
+ }
179
+ if (isSleep) {
180
+ cloneSleepWakeUp = newSleepList
181
+ } else {
182
+ cloneSleepWakeUp = newWakeUpList
183
+ }
184
+ }
185
+ const res = isSleep ? await setSleepList(cloneSleepWakeUp, conflictDps, conflictConfig) : await setWakeUpList(cloneSleepWakeUp, conflictDps, conflictConfig)
186
+ console.log(cloneSleepWakeUp, '< --- cloneSleepWakeUp')
187
+ if (res.success) {
188
+ if (isSleep) {
107
189
  state.sleepScheduleList = cloneDeep(cloneSleepWakeUp)
108
- }else{
190
+ } else {
109
191
  state.wakeUpScheduleList = cloneDeep(cloneSleepWakeUp)
110
192
  }
111
193
  return {
112
194
  success: true
113
195
  }
114
- }else{
196
+ } else {
115
197
  return {
116
198
  success: false
117
199
  }
@@ -126,7 +208,7 @@ const SleepWakeUpPage = (props: {theme?: ThemeType}) => {
126
208
  } else {
127
209
  state.filteredScheduleList = state.wakeUpScheduleList
128
210
  }
129
- }, [state.sleepTagChecked, state.wakeUpTagChecked, state.sleepScheduleList, state.wakeUpScheduleList])
211
+ }, [state.sleepTagChecked, state.wakeUpTagChecked, JSON.stringify(state.sleepScheduleList), JSON.stringify(state.wakeUpScheduleList)])
130
212
 
131
213
  const getTipText = useCallback(() => {
132
214
  if (state.sleepScheduleList.length >= MAX_SCHEDULE && state.wakeUpScheduleList.length >= MAX_SCHEDULE) return "both"
@@ -193,7 +275,7 @@ const SleepWakeUpPage = (props: {theme?: ThemeType}) => {
193
275
  alignItems: 'center'
194
276
  },
195
277
  emptyBtn: {
196
- backgroundColor: props.theme?.button.active,
278
+ backgroundColor: props.theme?.button.primary,
197
279
  borderRadius: cx(5),
198
280
  paddingHorizontal: cx(15),
199
281
  paddingVertical: cx(10)
@@ -266,9 +348,9 @@ const SleepWakeUpPage = (props: {theme?: ThemeType}) => {
266
348
  <Spacer />
267
349
  {!!getTipText() && <View style={{ marginHorizontal: cx(24), marginVertical: cx(10), flexDirection: 'row', alignItems: 'center' }}>
268
350
  <Image style={{ width: cx(16), height: cx(16), tintColor: props.theme?.global.warning }} source={res.ic_warning_amber} />
269
- {getTipText() === "sleep" && <Text style={{fontSize: cx(12), color: props.theme?.global.secondFontColor}}>{I18n.getLang('sleepwakeschedule_warning_max_number_sleep_text')}</Text>}
270
- {getTipText() === "wakeup" && <Text style={{fontSize: cx(12), color: props.theme?.global.secondFontColor}}>{I18n.getLang('sleepwakeschedule_warning_max_number_wakeup_text')}</Text>}
271
- {getTipText() === "both" && <Text style={{fontSize: cx(12), color: props.theme?.global.secondFontColor}}>{I18n.getLang('sleepwakeschedule_warning_max_number_both_text')}</Text>}
351
+ {getTipText() === "sleep" && <Text style={{ fontSize: cx(12), color: props.theme?.global.secondFontColor }}>{I18n.getLang('sleepwakeschedule_warning_max_number_sleep_text')}</Text>}
352
+ {getTipText() === "wakeup" && <Text style={{ fontSize: cx(12), color: props.theme?.global.secondFontColor }}>{I18n.getLang('sleepwakeschedule_warning_max_number_wakeup_text')}</Text>}
353
+ {getTipText() === "both" && <Text style={{ fontSize: cx(12), color: props.theme?.global.secondFontColor }}>{I18n.getLang('sleepwakeschedule_warning_max_number_both_text')}</Text>}
272
354
  <Spacer />
273
355
  </View>}
274
356
  {hasScheduleList() && <View style={styles.tagLine}>
@@ -298,13 +380,13 @@ const SleepWakeUpPage = (props: {theme?: ThemeType}) => {
298
380
  onAddScheduleDialogItemClick(item.isSleep, 'edit', item)
299
381
  }}
300
382
  onSwitch={async (v) => {
301
- await modDeleteTimeSchedule('edit', item.isSleep, {
383
+ await modDeleteTimeSchedule('set', item.isSleep, {
302
384
  ...item,
303
385
  enable: v,
304
386
  settingTime: new Date().getTime()
305
387
  })
306
388
  }}
307
- onLongPress={() =>{
389
+ onLongPress={() => {
308
390
  showDialog({
309
391
  method: 'confirm',
310
392
  title: I18n.getLang(
@@ -410,7 +492,7 @@ const SleepWakeUpCard = ({ sleepWakeUp, is24HourClock, onSwitch, onPress, onLong
410
492
  is24HourClock: boolean
411
493
  styles: StyleSheet.NamedStyles<any>
412
494
  }) => {
413
- const closed = getIsClosed({weeks: sleepWakeUp.weeks, settingTime: sleepWakeUp.settingTime, endTime: getEndTime(sleepWakeUp)})
495
+ const closed = getIsClosed({ weeks: sleepWakeUp.weeks, settingTime: sleepWakeUp.settingTime, endTime: getEndTime(sleepWakeUp) })
414
496
  return (
415
497
  <Card style={styles.randomTimingCard} onPress={onPress} onLongPress={onLongPress}>
416
498
  <Spacer height={cx(16)} />
@@ -441,7 +523,7 @@ const getNewSleepWakeUp = (isSleep: boolean, params: SleepWakeUpPageRouteParams)
441
523
  const hour = isSleep ? 23 : 7
442
524
  return {
443
525
  enable: true,
444
- name: '',
526
+ name: `${I18n.getLang(isSleep ? 'sleepwakeschedule_field_3_Times_chips2_text' : 'sleepwakeschedule_field_3_Times_chips_text')}`,
445
527
  weeks: [0, 0, 0, 0, 0, 0, 0],
446
528
  fade: 6,
447
529
  time: hour * 60,
@@ -231,7 +231,7 @@ const TimeScheduleDetailPage = (props: { theme?: ThemeType }) => {
231
231
  (state.timeSchedule.aliasName.length && state.timeSchedule.aliasName.length < 33) &&
232
232
  state.selectedSkill.length &&
233
233
  (state.isManual ? state.isManual : !!state.mood) &&
234
- !isModify &&
234
+ (!isModify || params.mode === 'add') &&
235
235
  !showMoodFanSelectText
236
236
  );
237
237
  }, [state.timeSchedule.aliasName, state.selectedSkill, isModify, state.isManual, state.mood, showMoodFanSelectText]);
@@ -350,6 +350,7 @@ const TimeScheduleDetailPage = (props: { theme?: ThemeType }) => {
350
350
 
351
351
  {/* pick */}
352
352
  <TimerPicker
353
+ key={props.theme?.type}
353
354
  itemTextColor="#aeadb5"
354
355
  style={{ paddingVertical: cx(0), marginVertical: cx(0), backgroundColor: props.theme?.global.background }}
355
356
  pickerFontColor={props.theme?.global.fontColor}
@@ -681,7 +682,7 @@ const newTimeSchedule = () => {
681
682
  status: 1,
682
683
  loops: '0000000',
683
684
  isAppPush: false,
684
- aliasName: '',
685
+ aliasName: I18n.getLang('timeschedule_add_schedule_system_back_text'),
685
686
  time: `${toFixedString(new Date().getHours(), 2)}:${toFixedString(new Date().getMinutes(), 2)}`,
686
687
  dps: {},
687
688
  id: -1,
@@ -21,6 +21,7 @@ import ScheduleCard from './components/ScheduleCard';
21
21
  import { ui_biz_routerKey } from "../../navigation/Routers";
22
22
  import { ApplyForItem } from '@ledvance/base/src/utils/interface';
23
23
  import ThemeType from '@ledvance/base/src/config/themeType'
24
+ import { showDialog } from '@ledvance/base/src/utils/common';
24
25
 
25
26
  const { convertX: cx } = Utils.RatioUtils;
26
27
  const { withTheme } = Utils.ThemeUtils
@@ -112,7 +113,6 @@ const TimeSchedulePage = (props: { theme?: ThemeType }) => {
112
113
  const res = await getTimeSchedule({
113
114
  bizId: uaGroupInfo.tyGroupId.toString()
114
115
  })
115
- console.log(res, '< --- res --- >')
116
116
  if (res.success) {
117
117
  state.timeScheduleList = res.data || []
118
118
  } else {
@@ -186,6 +186,20 @@ const TimeSchedulePage = (props: { theme?: ThemeType }) => {
186
186
  onPress={() => {
187
187
  navigateToEdit('edit', item);
188
188
  }}
189
+ onLongPress={() =>{
190
+ showDialog({
191
+ method: 'confirm',
192
+ title: I18n.getLang('cancel_dialog_delete_item_timeschedule_titel'),
193
+ subTitle: I18n.getLang('cancel_dialog_delete_item_timeschedule_description'),
194
+ onConfirm: async (_, { close }) => {
195
+ state.loading = true;
196
+ close();
197
+ await modDeleteTimeSchedule('del', {...item, status: 2}, item.id.toString());
198
+ state.flag = Symbol()
199
+ state.loading = false;
200
+ },
201
+ });
202
+ }}
189
203
  />
190
204
  )}
191
205
  keyExtractor={item => item.id.toString()}
@@ -1,5 +1,13 @@
1
1
  import React, { memo, useMemo } from 'react';
2
- import { CeilingLightData, DeviceType, FanLightData, ManualSettingProps, StripLightData, directOptions, modeOptions } from '../Interface';
2
+ import {
3
+ CeilingLightData,
4
+ DeviceType,
5
+ FanLightData,
6
+ ManualSettingProps,
7
+ StripLightData,
8
+ directOptions,
9
+ modeOptions,
10
+ } from '../Interface';
3
11
  import { View } from 'react-native';
4
12
  import Card from '@ledvance/base/src/components/Card';
5
13
  import LampAdjustView from '@ledvance/base/src/components/LampAdjustView';
@@ -17,7 +25,7 @@ import { cloneDeep } from 'lodash';
17
25
  import { FanAdjustViewContent } from '@ledvance/base/src/components/FanAdjustView';
18
26
  import { cctToColor } from '@ledvance/base/src/utils/cctUtils';
19
27
  import {hsv2Hex, mapFloatToRange } from '@ledvance/base/src/utils';
20
- import { AdjustType } from '@ledvance/base/src/utils/interface';
28
+ import { AdjustType, ApplyForItem } from '@ledvance/base/src/utils/interface';
21
29
  const { convertX: cx } = Utils.RatioUtils;
22
30
  const { withTheme } = Utils.ThemeUtils
23
31
 
@@ -69,11 +77,13 @@ function ManualSettings(props: ManualSettingProps) {
69
77
 
70
78
  const lightSourceCard = useMemo(() => {
71
79
  const { deviceData } = state;
72
- const getBlockColor = () => {
73
- if (!deviceData.isColorMode) return cctToColor(deviceData.temperature)
74
- if (deviceData.isColorMode) {
75
- const s = Math.round(mapFloatToRange(deviceData.s / 100, 30, 100))
76
- return hsv2Hex(deviceData.h, s, 100)
80
+ const getBlockColor = (item: ApplyForItem) => {
81
+ if (['light', 'mainLight', 'secondaryLight'].includes(item.type)) {
82
+ if (!deviceData.isColorMode) return cctToColor(deviceData.temperature)
83
+ if (deviceData.isColorMode) {
84
+ const s = Math.round(mapFloatToRange(deviceData.s / 100, 30, 100))
85
+ return hsv2Hex(deviceData.h, s, 100)
86
+ }
77
87
  }
78
88
  return props.theme?.card?.background
79
89
  };
@@ -84,7 +94,7 @@ function ManualSettings(props: ManualSettingProps) {
84
94
  <Card style={{ marginHorizontal: cx(24) }}>
85
95
  <LdvSwitch
86
96
  title={item.name || item.key}
87
- color={getBlockColor()}
97
+ color={getBlockColor(item)}
88
98
  colorAlpha={1}
89
99
  enable={item.enable}
90
100
  setEnable={(enable: boolean) => {