@ledvance/group-ui-biz-bundle 1.0.96 → 1.0.98
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.
- package/package.json +1 -1
- package/src/modules/biorhythm/BiorhythmDetailPage.tsx +1 -0
- package/src/modules/biorhythm/BiorhythmPage.tsx +8 -2
- package/src/modules/energyConsumption/EnergyConsumptionActions.ts +144 -137
- package/src/modules/energyConsumption/EnergyConsumptionChart.tsx +74 -71
- package/src/modules/energyConsumption/EnergyConsumptionDetail.tsx +11 -9
- package/src/modules/energyConsumption/EnergyConsumptionPage.tsx +4 -3
- package/src/modules/fixedTimeForPlug/FixedTimeForPlugDetailPage.tsx +6 -4
- package/src/modules/fixedTimeForPlug/FixedTimeForPlugPage.tsx +33 -5
- package/src/modules/fixedTimingForLight/FixedTimingForLightDetailPage.tsx +6 -4
- package/src/modules/fixedTimingForLight/FixedTimingForLightPage.tsx +34 -6
- package/src/modules/music/MusicPage.tsx +2 -2
- package/src/modules/music/res/illustrationsFeaturesMusic-dark.png +0 -0
- package/src/modules/music/res/illustrationsFeaturesMusic-dark@2x.png +0 -0
- package/src/modules/music/res/illustrationsFeaturesMusic-dark@3x.png +0 -0
- package/src/modules/music/res/index.ts +2 -1
- package/src/modules/randomTimeForPlug/RandomTimeForPlugDetailPage.tsx +6 -4
- package/src/modules/randomTimeForPlug/RandomTimeForPlugPage.tsx +34 -6
- package/src/modules/randomTimingForLight/RandomTimingForLightDetailPage.tsx +6 -4
- package/src/modules/randomTimingForLight/RandomTimingForLightPage.tsx +34 -6
- package/src/modules/sleepWakeUp/SleepWakeUpActions.ts +1 -1
- package/src/modules/sleepWakeUp/SleepWakeUpDetailPage.tsx +9 -8
- package/src/modules/sleepWakeUp/SleepWakeUpPage.tsx +118 -36
- package/src/modules/timeSchedule/TimeScheduleDetailPage.tsx +3 -2
- package/src/modules/timeSchedule/TimeSchedulePage.tsx +0 -1
|
@@ -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()
|
|
@@ -54,18 +54,18 @@ const SleepWakeUpPage = (props: {theme?: ThemeType}) => {
|
|
|
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 =
|
|
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
|
-
}
|
|
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
|
-
|
|
105
|
-
|
|
106
|
-
|
|
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"
|
|
@@ -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('
|
|
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,
|
|
@@ -113,7 +113,6 @@ const TimeSchedulePage = (props: { theme?: ThemeType }) => {
|
|
|
113
113
|
const res = await getTimeSchedule({
|
|
114
114
|
bizId: uaGroupInfo.tyGroupId.toString()
|
|
115
115
|
})
|
|
116
|
-
console.log(res, '< --- res --- >')
|
|
117
116
|
if (res.success) {
|
|
118
117
|
state.timeScheduleList = res.data || []
|
|
119
118
|
} else {
|