@ledvance/ui-biz-bundle 1.1.86 → 1.1.89

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 (29) hide show
  1. package/package.json +1 -1
  2. package/src/modules/flags/FlagHash.ts +346 -0
  3. package/src/modules/flags/FlagPage.tsx +10 -2
  4. package/src/modules/history/HistoryPage.tsx +233 -223
  5. package/src/modules/history/SwitchHistoryPageActions.ts +5 -5
  6. package/src/modules/timer/TimerPage.tsx +2 -2
  7. package/src/modules/timer/TimerPageAction.ts +2 -2
  8. package/src/newModules/biorhythm/BiorhythmEditPage.tsx +1 -1
  9. package/src/newModules/biorhythm/BiorhythmPage.tsx +1 -1
  10. package/src/newModules/energyConsumption/EnergyConsumptionChart.tsx +22 -30
  11. package/src/newModules/energyConsumption/EnergyConsumptionDetail.tsx +5 -5
  12. package/src/newModules/energyConsumption/EnergyConsumptionPage.tsx +4 -4
  13. package/src/newModules/energyConsumption/component/EnergyModal.tsx +1 -1
  14. package/src/newModules/energyConsumption/component/Overview.tsx +1 -1
  15. package/src/newModules/fixedTime/FixedTimeDetailPage.tsx +9 -11
  16. package/src/newModules/mood/AddMoodPage.tsx +1 -1
  17. package/src/newModules/mood/MoodActions.ts +13 -6
  18. package/src/newModules/mood/MoodInfo.ts +170 -18
  19. package/src/newModules/mood/MoodPage.tsx +69 -53
  20. package/src/newModules/mood/StaticMoodEditorPage.tsx +8 -0
  21. package/src/newModules/randomTime/RandomTimeDetailPage.tsx +2 -1
  22. package/src/newModules/randomTime/RandomTimePage.tsx +1 -1
  23. package/src/newModules/sleepWakeUp/Interface.ts +2 -0
  24. package/src/newModules/sleepWakeUp/SleepWakeUpActions.ts +21 -6
  25. package/src/newModules/sleepWakeUp/SleepWakeUpDetailPage.tsx +10 -33
  26. package/src/newModules/sleepWakeUp/SleepWakeUpPage.tsx +4 -3
  27. package/src/newModules/swithInching/SwithInching.tsx +4 -4
  28. package/src/newModules/timeSchedule/TimeScheduleDetailPage.tsx +1 -1
  29. package/src/newModules/timeSchedule/TimeSchedulePage.tsx +1 -1
@@ -1,7 +1,7 @@
1
1
  import React, { useCallback, useEffect, useMemo } from 'react';
2
2
  import Page from '@ledvance/base/src/components/Page';
3
3
  import { Utils } from 'tuya-panel-kit';
4
- import {saveMoodList, useSceneStatusId, useSwitchLed, useWorkMode} from './MoodActions';
4
+ import { saveMoodList, useSceneStatusId, useSwitchLed, useWorkMode } from './MoodActions';
5
5
  import {
6
6
  useDeviceId,
7
7
  useDeviceInfo,
@@ -11,7 +11,7 @@ import {
11
11
  import { useReactive } from 'ahooks';
12
12
  import Strings from '@ledvance/base/src/i18n';
13
13
  import res from '@ledvance/base/src/res';
14
- import { FlatList, StyleSheet, View, Platform } from 'react-native';
14
+ import { FlatList, StyleSheet, View, Platform, TouchableOpacity, Image } from 'react-native';
15
15
  import Tag from '@ledvance/base/src/components/Tag';
16
16
  import Spacer from '@ledvance/base/src/components/Spacer';
17
17
  import InfoText from '@ledvance/base/src/components/InfoText';
@@ -25,6 +25,8 @@ import { ui_biz_routerKey } from '../../navigation/Routers'
25
25
  import { cloneDeep, filter, map } from 'lodash';
26
26
  import { saveFlagMode } from '@ledvance/ui-biz-bundle/src/modules/flags/FlagActions';
27
27
  import { WorkMode } from '@ledvance/base/src/utils/interface';
28
+ import { showDialog } from '@ledvance/base/src/utils/common';
29
+ import I18n from '@ledvance/base/src/i18n';
28
30
 
29
31
  const cx = Utils.RatioUtils.convertX;
30
32
 
@@ -65,16 +67,7 @@ const MoodPage = () => {
65
67
  useEffect(() => {
66
68
  state.loading = true
67
69
  state.timerId = setTimeout(() => {
68
- getRemoteMoodList(
69
- devId,
70
- params,
71
- params.featureId
72
- ).then(res => {
73
- state.loading = false
74
- if (res.success && Array.isArray(res.data)) {
75
- state.originMoods = cloneDeep(res.data);
76
- }
77
- });
70
+ getRemoteMoodInfo().then()
78
71
  }, 250);
79
72
 
80
73
  return () => {
@@ -82,6 +75,15 @@ const MoodPage = () => {
82
75
  };
83
76
  }, []);
84
77
 
78
+ const getRemoteMoodInfo = async (isRefresh?: boolean) => {
79
+ state.loading = true
80
+ const res = await getRemoteMoodList(devId, params, params.featureId, isRefresh)
81
+ state.loading = false
82
+ if (res.success && Array.isArray(res.data)) {
83
+ state.originMoods = cloneDeep(res.data);
84
+ }
85
+ }
86
+
85
87
  useEffect(() => {
86
88
  state.filterMoods = state.originMoods.filter(item => {
87
89
  return (
@@ -99,10 +101,10 @@ const MoodPage = () => {
99
101
  mode === 'add'
100
102
  ? ui_biz_routerKey.ui_biz_mood_add
101
103
  : isStatic
102
- ? ui_biz_routerKey.ui_biz_static_mood_edit
103
- : !!(params.isMixLight || params.isCeilingLight)
104
- ? ui_biz_routerKey.ui_biz_dynamic_mix_mood_edit
105
- : ui_biz_routerKey.ui_biz_dynamic_mood_edit;
104
+ ? ui_biz_routerKey.ui_biz_static_mood_edit
105
+ : !!(params.isMixLight || params.isCeilingLight)
106
+ ? ui_biz_routerKey.ui_biz_dynamic_mix_mood_edit
107
+ : ui_biz_routerKey.ui_biz_dynamic_mood_edit;
106
108
  navigation.navigate(path, {
107
109
  mode,
108
110
  isStatic,
@@ -141,29 +143,28 @@ const MoodPage = () => {
141
143
  ...currentMood.secondaryLamp,
142
144
  nodes: currentMood.secondaryLamp && currentMood.secondaryLamp.nodes?.length
143
145
  ? currentMood.secondaryLamp.nodes.map(node => {
144
- if (mode !== 'del') {
145
- if (node.isColorNode) {
146
- node.brightness = 0;
147
- node.colorTemp = 0;
148
- } else {
149
- node.h = 0;
150
- node.s = 0;
151
- node.v = 0;
152
- if (!params.isSupportTemperature) {
153
- node.colorTemp = 100; // 适配dim灯
154
- }
146
+ if (mode !== 'del') {
147
+ if (node.isColorNode) {
148
+ node.brightness = 0;
149
+ node.colorTemp = 0;
150
+ } else {
151
+ node.h = 0;
152
+ node.s = 0;
153
+ node.v = 0;
154
+ if (!params.isSupportTemperature) {
155
+ node.colorTemp = 100; // 适配dim灯
155
156
  }
156
- return node;
157
157
  }
158
158
  return node;
159
- })
159
+ }
160
+ return node;
161
+ })
160
162
  : [],
161
163
  },
162
164
  };
163
165
  if (mode === 'set') {
164
- await setMoodInfo(checkedMood);
165
166
  await setSceneStatusId(checkedMood.id);
166
- return;
167
+ return setMoodInfo(checkedMood);
167
168
  }
168
169
  let newScene: MoodUIInfo[] = [];
169
170
  if (mode === 'add') {
@@ -200,11 +201,11 @@ const MoodPage = () => {
200
201
  if (mood) {
201
202
  if (mode === 'del') {
202
203
  if (
203
- (mainWork !== WorkMode.Scene && secondaryWork !== WorkMode.Scene) ||
204
- (params.isCeilingLight
205
- ? currentMood.mainLamp.id !== moodInfo.mainLamp.id &&
206
- currentMood.secondaryLamp.id !== moodInfo.secondaryLamp.id
207
- : (params.isSupportSceneStatus ? currentMood.id !== sceneStatusId : currentMood.id !== moodInfo.id)) || !switchLed
204
+ (mainWork !== WorkMode.Scene && secondaryWork !== WorkMode.Scene) ||
205
+ (params.isCeilingLight
206
+ ? currentMood.mainLamp.id !== moodInfo.mainLamp.id &&
207
+ currentMood.secondaryLamp.id !== moodInfo.secondaryLamp.id
208
+ : (params.isSupportSceneStatus ? currentMood.id !== sceneStatusId : currentMood.id !== moodInfo.id)) || !switchLed
208
209
  ) {
209
210
  return {
210
211
  success: true,
@@ -271,21 +272,21 @@ const MoodPage = () => {
271
272
  );
272
273
 
273
274
  const getItemEnable = useCallback(
274
- (moodItem: MoodUIInfo) => {
275
- if (params.isCeilingLight) {
276
- return (
277
- moodInfo.mainLamp.id === moodItem.mainLamp.id &&
278
- moodInfo.secondaryLamp.id === moodItem.secondaryLamp.id &&
279
- (mainWork === WorkMode.Scene || secondaryWork === WorkMode.Scene) && !flagMode.flagMode && switchLed
280
- );
281
- } else if (params.isSupportSceneStatus && sceneStatusId !== -1) {
282
- return sceneStatusId === moodItem.id && mainWork === WorkMode.Scene && !flagMode.flagMode && switchLed
283
- } else {
284
- return moodInfo.id === moodItem.id && mainWork === WorkMode.Scene && !flagMode.flagMode && switchLed
285
- }
286
- },
287
- [moodInfo, mainWork, secondaryWork, flagMode?.flagMode, switchLed, sceneStatusId]
288
- );
275
+ (moodItem: MoodUIInfo) => {
276
+ if (params.isCeilingLight) {
277
+ return (
278
+ moodInfo.mainLamp.id === moodItem.mainLamp.id &&
279
+ moodInfo.secondaryLamp.id === moodItem.secondaryLamp.id &&
280
+ (mainWork === WorkMode.Scene || secondaryWork === WorkMode.Scene) && !flagMode.flagMode && switchLed
281
+ );
282
+ } else if (params.isSupportSceneStatus && sceneStatusId !== -1) {
283
+ return sceneStatusId === moodItem.id && mainWork === WorkMode.Scene && !flagMode.flagMode && switchLed
284
+ } else {
285
+ return moodInfo.id === moodItem.id && mainWork === WorkMode.Scene && !flagMode.flagMode && switchLed
286
+ }
287
+ },
288
+ [moodInfo, mainWork, secondaryWork, flagMode?.flagMode, switchLed, sceneStatusId]
289
+ );
289
290
 
290
291
  const nameRepeat = useCallback((mood: MoodUIInfo) => {
291
292
  return !!state.originMoods.filter(m => !(params.isCeilingLight ? (m.mainLamp.id === mood.mainLamp.id && m.secondaryLamp.id === mood.secondaryLamp.id) : (m.id === mood.id))).find(m => m.name === mood.name)
@@ -306,7 +307,7 @@ const MoodPage = () => {
306
307
  }}
307
308
  loading={state.loading}
308
309
  >
309
- <View style={styles.tagLine}>
310
+ {!(params.isStringLight || params.isStripLight) && <View style={styles.tagLine}>
310
311
  <Tag
311
312
  checked={state.staticTagChecked}
312
313
  text={Strings.getLang('mood_overview_filter_name_text1')}
@@ -322,7 +323,22 @@ const MoodPage = () => {
322
323
  state.dynamicTagChecked = checked;
323
324
  }}
324
325
  />
325
- </View>
326
+ </View>}
327
+ <TouchableOpacity style={{ alignItems: 'flex-end',paddingRight: cx(24) }}
328
+ onPress={() => {
329
+ showDialog({
330
+ method: 'confirm',
331
+ title: I18n.getLang('flag_resetbutton'),
332
+ subTitle: I18n.getLang('flag_resetdescription'),
333
+ onConfirm: async (_, { close }) => {
334
+ close()
335
+ await getRemoteMoodInfo(true)
336
+ }
337
+ })
338
+ }}
339
+ >
340
+ <Image source={res.ic_refresh} style={{ width: cx(24), height: cx(24) }} />
341
+ </TouchableOpacity>
326
342
  <Spacer height={cx(10)} />
327
343
  {state.originMoods.length >= MAX_MOOD_COUNT && (
328
344
  <View style={styles.infoLine}>
@@ -177,6 +177,14 @@ const StaticMoodEditorPage = () => {
177
177
  reserveSV={true}
178
178
  setIsColorMode={isColorMode => {
179
179
  state.mainNode.isColorNode = isColorMode;
180
+ if (isColorMode && state.mainNode.h === 0 && state.mainNode.s === 0 && state.mainNode.v === 0) {
181
+ state.mainNode.s = 100;
182
+ state.mainNode.v = 100;
183
+ } else {
184
+ if (state.mainNode.brightness === 0 && state.mainNode.colorTemp === 0) {
185
+ state.mainNode.brightness = 100;
186
+ }
187
+ }
180
188
  }}
181
189
  hsv={state.mainNode}
182
190
  onHSVChange={(hsv) => {
@@ -22,6 +22,7 @@ import { Result } from "@ledvance/base/src/models/modules/Result";
22
22
  import { useSystemTimeFormate } from "@ledvance/base/src/models/modules/NativePropsSlice";
23
23
 
24
24
  const { convertX: cx } = Utils.RatioUtils;
25
+ const {parseTimer} = Utils.TimeUtils
25
26
 
26
27
  export interface RandomTimeDetailPageParams extends RandomTimePageParams {
27
28
  mode: 'add' | 'edit'
@@ -225,7 +226,7 @@ const RandomTimeDetailPage = () => {
225
226
  </View>}
226
227
  {/* summary */}
227
228
  <Summary
228
- frequency={loopText(state.randomTime.weeks)}
229
+ frequency={loopText(state.randomTime.weeks, parseTimer(state.randomTime.endTime * 60))}
229
230
  time={`${convertMinutesTo12HourFormat(state.randomTime.startTime, is24Hour)} - ${convertMinutesTo12HourFormat(state.randomTime.endTime, is24Hour)}`}
230
231
  hideActions={true}
231
232
  />
@@ -214,7 +214,7 @@ const RandomTimeCard = (props: {
214
214
  thumbStyle={{ elevation: 0 }}
215
215
  onValueChange={onSwitch} />
216
216
  </View>
217
- <Text style={styles.loopText}>{loopText(randomTime.weeks, parseTimer(randomTime.startTime * 60))}</Text>
217
+ <Text style={styles.loopText}>{loopText(randomTime.weeks, parseTimer(randomTime.endTime * 60))}</Text>
218
218
  <Spacer height={cx(5)} />
219
219
  <Text style={styles.loopText}>{randomTime.name}</Text>
220
220
  <Spacer height={cx(showTags ? 5 : 20)} />
@@ -14,6 +14,7 @@ export interface WakeUpItem {
14
14
  isSleep: boolean;
15
15
  startTime: number;
16
16
  endTime: number;
17
+ time: number
17
18
  isColorMode: boolean;
18
19
  }
19
20
 
@@ -49,6 +50,7 @@ export interface SleepItem {
49
50
  isSleep: boolean;
50
51
  startTime: number;
51
52
  endTime: number;
53
+ time: number
52
54
  isColorMode: boolean;
53
55
  }
54
56
 
@@ -10,6 +10,17 @@ import I18n from '@ledvance/base/src/i18n'
10
10
  const sleepPlanFeatureId = 'SleepPlan'
11
11
  const wakeUpPlanFeatureId = 'WakeUpPlan'
12
12
 
13
+ export function getStartTime(item: SleepItem | WakeUpItem) {
14
+ const time = item.time - (item.isSleep ? 0 : item.delay * 5)
15
+ return time < 0 ? time + 1440 : time
16
+ }
17
+
18
+ export function getEndTime(item: SleepItem | WakeUpItem) {
19
+ // @ts-ignore
20
+ const time = item.time + (item.isSleep ? item.delay * 5 : item.last * 5)
21
+ return time > 1440 ? time - 1440 : time
22
+ }
23
+
13
24
  // 接口失败重试
14
25
  let retryNumber = 0
15
26
  const putFeatureFn = async (devId, featureId, data) => {
@@ -109,9 +120,11 @@ const wakeUpDp2Obj = (dp: string): WakeUpData | undefined => {
109
120
  const brightness = hex2Int(plan.slice(18, 20))
110
121
  const temperature = hex2Int(plan.slice(20, 22))
111
122
  const last = hex2Int(plan.slice(22, 24))
112
- const endTime = hour * 60 + minute
113
- const endMin = endTime - delay * 5
114
- const startTime = endMin < 0 ? 1440 + endMin : endMin
123
+ const startMin = hour * 60 + minute - delay * 5
124
+ const startTime = startMin < 0 ? 1440 + startMin : startMin
125
+ const endMin = hour * 60 + minute + last * 5
126
+ const endTime = endMin > 1440 ? endMin - 1440 : endMin
127
+ const time = hour * 60 + minute
115
128
  const cloneWeek = cloneDeep(weeks)
116
129
  cloneWeek.pop()
117
130
  const weeksValue = padStart([...cloneWeek].join(''), 8, '0')
@@ -121,6 +134,7 @@ const wakeUpDp2Obj = (dp: string): WakeUpData | undefined => {
121
134
  enable, weeks, delay, hour, minute, h, s, v, brightness, temperature, last, nodeHex, isSleep: false,
122
135
  startTime,
123
136
  endTime,
137
+ time,
124
138
  isColorMode: !!(h !== 0 || s !== 0 || v !== 0)
125
139
  }
126
140
  })
@@ -254,9 +268,9 @@ export const sleepDp2Obj = (dp: string): SleepData | undefined => {
254
268
  const v = hex2Int(plan.slice(16, 18))
255
269
  const brightness = hex2Int(plan.slice(18, 20))
256
270
  const temperature = hex2Int(plan.slice(20, 22))
257
- const startTime = hour * 60 + minute
258
- const endMin = startTime + delay * 5
259
- const endTime = endMin > 1440 ? endMin - 1440 : endMin
271
+ const startMin = hour * 60 + minute - delay * 5
272
+ const startTime = startMin < 0 ? 1440 + startMin : startMin
273
+ const endTime = hour * 60 + minute
260
274
  const cloneWeek = cloneDeep(weeks)
261
275
  cloneWeek.pop()
262
276
  const weeksValue = padStart([...cloneWeek].join(''), 8, '0')
@@ -266,6 +280,7 @@ export const sleepDp2Obj = (dp: string): SleepData | undefined => {
266
280
  enable, weeks, delay, hour, minute, h, s, v, brightness, temperature, nodeHex, isSleep: true,
267
281
  startTime,
268
282
  endTime,
283
+ time: endTime,
269
284
  isColorMode: !!(h !== 0 || s !== 0 || v !== 0)
270
285
  }
271
286
  })
@@ -30,9 +30,11 @@ import { useParams } from '@ledvance/base/src/hooks/Hooks';
30
30
  import ColorTempAdjustView from '@ledvance/base/src/components/ColorTempAdjustView';
31
31
  import ColorAdjustView from '@ledvance/base/src/components/ColorAdjustView';
32
32
  import Summary from '@ledvance/base/src/components/Summary';
33
+ import { getEndTime, getStartTime } from './SleepWakeUpActions'
33
34
 
34
35
  const { convertX: cx } = Utils.RatioUtils;
35
36
  const { toFixedString } = Utils.NumberUtils;
37
+ const {parseTimer} = Utils.TimeUtils
36
38
 
37
39
  interface SleepWakeUpDetailPageProps extends SleepWakeUpPageRouteParams {
38
40
  mode: 'add' | 'edit';
@@ -79,21 +81,6 @@ const SleepWakeUpDetailPage = () => {
79
81
  }
80
82
  }, [state.sleepWakeUp.last]);
81
83
 
82
- useUpdateEffect(() => {
83
- const { startTime, endTime, delay, isSleep } = state.sleepWakeUp;
84
- if (isSleep) {
85
- state.sleepWakeUp.hour = Math.trunc(startTime / 60);
86
- state.sleepWakeUp.minute = startTime % 60;
87
- const endMin = startTime + delay * 5;
88
- state.sleepWakeUp.endTime = endMin > 1440 ? endMin - 1440 : endMin;
89
- } else {
90
- state.sleepWakeUp.hour = Math.trunc(endTime / 60);
91
- state.sleepWakeUp.minute = endTime % 60;
92
- const startMin = endTime - delay * 5;
93
- state.sleepWakeUp.startTime = startMin < 0 ? startMin + 1440 : startMin;
94
- }
95
- }, [state.sleepWakeUp.startTime, state.sleepWakeUp.delay, state.sleepWakeUp.endTime]);
96
-
97
84
  const getRangeTime = (time: number, isStart?: boolean) => {
98
85
  if (isStart) {
99
86
  return time < 0 ? 1440 + time : time;
@@ -270,14 +257,10 @@ const SleepWakeUpDetailPage = () => {
270
257
  singlePicker={true}
271
258
  amText={I18n.getLang('manage_user_calendar_label_am')}
272
259
  pmText={I18n.getLang('manage_user_calendar_label_pm')}
273
- startTime={props.isSleep ? state.sleepWakeUp.startTime : state.sleepWakeUp.endTime}
260
+ startTime={state.sleepWakeUp.time}
274
261
  symbol={''}
275
262
  onTimerChange={time => {
276
- if (props.isSleep) {
277
- state.sleepWakeUp.startTime = time;
278
- } else {
279
- state.sleepWakeUp.endTime = time;
280
- }
263
+ state.sleepWakeUp.time = time
281
264
  }}
282
265
  />
283
266
 
@@ -295,7 +278,7 @@ const SleepWakeUpDetailPage = () => {
295
278
  }}
296
279
  />
297
280
  <Spacer />
298
- <Text style={{ marginHorizontal: cx(24) }}>{loopText(state.sleepWakeUp.weeks)}</Text>
281
+ <Text style={{ marginHorizontal: cx(24) }}>{loopText(state.sleepWakeUp.weeks, parseTimer(getEndTime(state.sleepWakeUp) * 60))}</Text>
299
282
  <Spacer />
300
283
  </View>
301
284
 
@@ -440,7 +423,7 @@ const SleepWakeUpDetailPage = () => {
440
423
  props.isSleep
441
424
  ? 'add_sleepschedule_one_source_settings_text2'
442
425
  : 'add_wakeupschedule_settings_text2',
443
- `${convertMinutesTo12HourFormat(state.sleepWakeUp.startTime, is24HourClock)}`
426
+ `${convertMinutesTo12HourFormat(getStartTime(state.sleepWakeUp), is24HourClock)}`
444
427
  )}
445
428
  </Text>
446
429
  <Spacer />
@@ -490,7 +473,7 @@ const SleepWakeUpDetailPage = () => {
490
473
  {I18n.formatValue(
491
474
  'add_wakeupschedule_settings_text5',
492
475
  `${convertMinutesTo12HourFormat(
493
- getRangeTime(state.sleepWakeUp.endTime + state.sleepWakeUp.last * 5),
476
+ getEndTime(state.sleepWakeUp),
494
477
  is24HourClock
495
478
  )}`
496
479
  )}
@@ -501,12 +484,8 @@ const SleepWakeUpDetailPage = () => {
501
484
  </View>
502
485
  {/* Summary */}
503
486
  <Summary
504
- frequency={loopText(state.sleepWakeUp.weeks)}
505
- time={`${convertMinutesTo12HourFormat(
506
- state.sleepWakeUp.startTime,
507
- is24HourClock
508
- )} - ${convertMinutesTo12HourFormat(state.sleepWakeUp.endTime + (state.sleepWakeUp.isSleep ? 0 : state.sleepWakeUp.last * 5),
509
- is24HourClock)}`}
487
+ frequency={loopText(state.sleepWakeUp.weeks, parseTimer(getEndTime(state.sleepWakeUp) * 60))}
488
+ time={`${convertMinutesTo12HourFormat(getStartTime(state.sleepWakeUp), is24HourClock)} - ${convertMinutesTo12HourFormat(getEndTime(state.sleepWakeUp), is24HourClock)}`}
510
489
  actions={(
511
490
  <View>
512
491
  <Text style={{ fontSize: cx(12), color: '#000000' }}>
@@ -532,9 +511,7 @@ const SleepWakeUpDetailPage = () => {
532
511
  <View style={styles.filletCorner}>
533
512
  <Text style={styles.rightTitle}>
534
513
  {convertMinutesTo12HourFormat(
535
- props.isSleep
536
- ? state.sleepWakeUp.endTime
537
- : getRangeTime(state.sleepWakeUp.endTime + state.sleepWakeUp.last * 5),
514
+ getEndTime(state.sleepWakeUp),
538
515
  is24HourClock
539
516
  )}
540
517
  </Text>
@@ -14,7 +14,7 @@ import { convertMinutesTo12HourFormat, loopText } from "@ledvance/base/src/utils
14
14
  import TextButton from "@ledvance/base/src/components/TextButton";
15
15
  import { ui_biz_routerKey } from '../../navigation/Routers'
16
16
  import { cloneDeep } from "lodash";
17
- import { sleepNode2Dp, useSleepMode, useWakeUp, wakeUpNode2Dp } from "./SleepWakeUpActions";
17
+ import { getEndTime, getStartTime, sleepNode2Dp, useSleepMode, useWakeUp, wakeUpNode2Dp } from "./SleepWakeUpActions";
18
18
  import { SleepUIItem, WakeUpUIItem } from "./Interface";
19
19
  import Card from "@ledvance/base/src/components/Card";
20
20
  import { useParams } from "@ledvance/base/src/hooks/Hooks";
@@ -22,6 +22,7 @@ import { ApplyForItem } from "../timeSchedule/Interface";
22
22
  import InfoText from "@ledvance/base/src/components/InfoText";
23
23
 
24
24
  const cx = Utils.RatioUtils.convertX
25
+ const { parseTimer } = Utils.TimeUtils
25
26
 
26
27
  export interface SleepWakeUpPageRouteParams {
27
28
  isSupportColor?: boolean
@@ -317,13 +318,13 @@ const SleepWakeUpCard = (props: {
317
318
  <Spacer height={cx(16)} />
318
319
  <View style={styles.switchLine}>
319
320
  <Text style={styles.time}>
320
- {`${convertMinutesTo12HourFormat(sleepWakeUp.startTime, is24HourClock)} - ${convertMinutesTo12HourFormat(sleepWakeUp.endTime + (sleepWakeUp.isSleep ? 0 : sleepWakeUp.last * 5), is24HourClock)}`}</Text>
321
+ {`${convertMinutesTo12HourFormat(getStartTime(sleepWakeUp), is24HourClock)} - ${convertMinutesTo12HourFormat(getEndTime(sleepWakeUp), is24HourClock)}`}</Text>
321
322
  <SwitchButton
322
323
  value={sleepWakeUp.enable}
323
324
  thumbStyle={{ elevation: 0 }}
324
325
  onValueChange={onSwitch} />
325
326
  </View>
326
- <Text style={styles.loopText}>{loopText(sleepWakeUp.weeks)}</Text>
327
+ <Text style={styles.loopText}>{loopText(sleepWakeUp.weeks, parseTimer(getEndTime(sleepWakeUp) * 60))}</Text>
327
328
  <Spacer height={cx(5)} />
328
329
  <Text style={styles.loopText}>{sleepWakeUp.name}</Text>
329
330
  <Spacer height={cx(10)} />
@@ -26,11 +26,11 @@ const SwitchInching = () => {
26
26
  const deviceInfo = useDeviceInfo()
27
27
  const navigation = useNavigation()
28
28
  const [switchInching, setSwitchInching] = useSwitchInching(params.switchInchingCode)
29
- const [randomTimePlan, setRandomTimePlan] = useRandomTime(params.cycleTimeCode, true)
30
- const [fixedTimePlan, setFixedTimePlan] = useFixedTime(params.randomTimeCode, true)
29
+ const [randomTimePlan, setRandomTimePlan] = useRandomTime(params.randomTimeCode, true)
30
+ const [fixedTimePlan, setFixedTimePlan] = useFixedTime(params.cycleTimeCode, true)
31
31
  const [countdown1, setCountDown1] = useCountdown1(params.countdownCode)
32
- const randomEnable = !!randomTimePlan.filter(item => item.enable).length
33
- const fixedEnable = !!fixedTimePlan.filter(item => item.enable).length
32
+ const randomEnable = randomTimePlan.some(item => item.enable)
33
+ const fixedEnable = fixedTimePlan.some(item => item.enable)
34
34
  const timerEnable = !!countdown1
35
35
  const state = useReactive<SwitchInchingState>({
36
36
  enable: false,
@@ -221,7 +221,7 @@ const TimeScheduleDetailPage = (props: { theme?: any }) => {
221
221
  fontFamily: 'helvetica_neue_lt_std_bd',
222
222
  },
223
223
  applyContent: {
224
- backgroundColor: props.theme.card.board,
224
+ backgroundColor: props.theme.card.border,
225
225
  borderRadius: 4,
226
226
  minHeight: cx(55),
227
227
  flex: 1,
@@ -141,7 +141,7 @@ const TimeSchedulePage = (props: { theme?: any }) => {
141
141
  width: 'auto',
142
142
  minWidth: cx(150),
143
143
  paddingHorizontal: cx(16),
144
- backgroundColor: props.theme.button.active,
144
+ backgroundColor: props.theme.button.primary,
145
145
  },
146
146
  categoryList: {
147
147
  display: 'flex',