@ledvance/ui-biz-bundle 1.1.65 → 1.1.67
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/navigation/Routers.ts +1 -0
- package/src/newModules/biorhythm/BiorhythmPage.tsx +11 -7
- package/src/newModules/fixedTime/FixedTimePage.tsx +4 -3
- package/src/newModules/mood/DynamicMoodEditorPage.tsx +16 -24
- package/src/newModules/mood/Interface.ts +1 -0
- package/src/newModules/mood/MixDynamicMoodEditor.tsx +40 -41
- package/src/newModules/mood/MoodActions.ts +45 -48
- package/src/newModules/mood/MoodInfo.ts +34 -34
- package/src/newModules/mood/MoodItem.tsx +19 -7
- package/src/newModules/mood/MoodPage.tsx +31 -30
- package/src/newModules/mood/MoodParse.ts +2 -1
- package/src/newModules/mood/RecommendMoodItem.tsx +18 -5
- package/src/newModules/mood/Router.ts +6 -16
- package/src/newModules/mood/StaticMoodEditorPage.tsx +45 -105
- package/src/newModules/randomTime/RandomTimePage.tsx +4 -3
- package/src/newModules/remoteControl/RemoteControlActions.ts +6 -0
- package/src/newModules/remoteControl/RemoteControlPage.tsx +51 -0
- package/src/newModules/remoteControl/Router.ts +16 -0
- package/src/newModules/select/Route.ts +17 -0
- package/src/newModules/select/SelectPage.d.ts +12 -0
- package/src/newModules/select/SelectPage.tsx +138 -0
- package/src/newModules/sleepWakeUp/Interface.ts +70 -0
- package/src/newModules/sleepWakeUp/Router.ts +25 -0
- package/src/newModules/sleepWakeUp/SleepWakeUpActions.ts +317 -0
- package/src/newModules/sleepWakeUp/SleepWakeUpDetailPage.tsx +661 -0
- package/src/newModules/sleepWakeUp/SleepWakeUpPage.tsx +456 -0
- package/src/newModules/sleepWakeUp/utils.ts +254 -0
- package/src/newModules/mood/tools.ts +0 -12
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { useCallback, useEffect, useMemo } from 'react';
|
|
2
2
|
import { ScrollView, StyleSheet, View } from 'react-native';
|
|
3
|
-
import { cloneDeep,
|
|
3
|
+
import { cloneDeep, isEqual } from 'lodash';
|
|
4
4
|
import { useReactive } from 'ahooks';
|
|
5
5
|
import Page from '@ledvance/base/src/components/Page';
|
|
6
6
|
import I18n from '@ledvance/base/src/i18n';
|
|
@@ -12,26 +12,24 @@ import Spacer from '@ledvance/base/src/components/Spacer';
|
|
|
12
12
|
import res from '@ledvance/base/src/res';
|
|
13
13
|
import TextButton from '@ledvance/base/src/components/TextButton';
|
|
14
14
|
import { useFanMaxSpeed } from '@ledvance/base/src/models/modules/NativePropsSlice';
|
|
15
|
-
import LampAdjustView from '@ledvance/base/src/components/LampAdjustView';
|
|
16
15
|
import FanAdjustView from '@ledvance/base/src/components/FanAdjustView';
|
|
17
|
-
import { showDeleteMoodDialog } from './tools';
|
|
18
16
|
import { MoodNodeInfo, MoodPageParams, MoodUIInfo } from './Interface';
|
|
19
17
|
import { Result } from '@ledvance/base/src/models/modules/Result';
|
|
20
18
|
import { hsv2Hex, mapFloatToRange } from '@ledvance/base/src/utils';
|
|
21
19
|
import { cctToColor } from '@ledvance/base/src/utils/cctUtils';
|
|
22
20
|
import { useParams } from '@ledvance/base/src/hooks/Hooks';
|
|
23
|
-
import
|
|
24
|
-
import {
|
|
21
|
+
import LampAdjustView2 from '@ledvance/base/src/components/LampAdjustView2';
|
|
22
|
+
import { ui_biz_routerKey } from '../../navigation/Routers'
|
|
25
23
|
import LdvSwitch from '@ledvance/base/src/components/ldvSwitch';
|
|
24
|
+
import { showDialog } from '@ledvance/base/src/utils/common';
|
|
26
25
|
|
|
27
26
|
const cx = Utils.RatioUtils.convertX;
|
|
28
27
|
|
|
29
28
|
export interface StaticMoodEditorPageParams {
|
|
30
29
|
mode: 'add' | 'edit';
|
|
31
|
-
moods: MoodUIInfo[];
|
|
32
30
|
currentMood: MoodUIInfo;
|
|
33
|
-
onSave: () => void;
|
|
34
31
|
moduleParams: MoodPageParams;
|
|
32
|
+
nameRepeat: (mood: MoodUIInfo) => boolean
|
|
35
33
|
modDeleteMood: (mode: 'add' | 'edit' | 'del', currentMood: MoodUIInfo) => Promise<Result<any>>;
|
|
36
34
|
}
|
|
37
35
|
|
|
@@ -53,7 +51,7 @@ const StaticMoodEditorPage = () => {
|
|
|
53
51
|
headline: '',
|
|
54
52
|
mood: params.currentMood,
|
|
55
53
|
mainNode: params.currentMood.mainLamp.nodes[0],
|
|
56
|
-
secondaryNode: params.currentMood?.secondaryLamp?.nodes[0],
|
|
54
|
+
secondaryNode: params.currentMood?.secondaryLamp?.nodes?.[0],
|
|
57
55
|
loading: false,
|
|
58
56
|
});
|
|
59
57
|
|
|
@@ -73,10 +71,7 @@ const StaticMoodEditorPage = () => {
|
|
|
73
71
|
}, []);
|
|
74
72
|
|
|
75
73
|
const onRightClick = async () => {
|
|
76
|
-
if (
|
|
77
|
-
return
|
|
78
|
-
}
|
|
79
|
-
if (state.loading) return;
|
|
74
|
+
if (state.loading || !canSaveMoodData) return;
|
|
80
75
|
state.loading = true;
|
|
81
76
|
const newMood: MoodUIInfo = {
|
|
82
77
|
...state.mood,
|
|
@@ -84,8 +79,12 @@ const StaticMoodEditorPage = () => {
|
|
|
84
79
|
...state.mood.mainLamp,
|
|
85
80
|
nodes: [cloneDeep(state.mainNode)],
|
|
86
81
|
},
|
|
82
|
+
secondaryLamp: {
|
|
83
|
+
...state.mood.secondaryLamp,
|
|
84
|
+
id: undefined
|
|
85
|
+
}
|
|
87
86
|
};
|
|
88
|
-
if (isMix) {
|
|
87
|
+
if (isMix && moduleParams.isMixLight) {
|
|
89
88
|
newMood.secondaryLamp = {
|
|
90
89
|
...newMood.secondaryLamp,
|
|
91
90
|
nodes: [cloneDeep(state.secondaryNode)],
|
|
@@ -101,37 +100,26 @@ const StaticMoodEditorPage = () => {
|
|
|
101
100
|
const res = await params.modDeleteMood(params.mode, newMood);
|
|
102
101
|
state.loading = false;
|
|
103
102
|
if (res.success) {
|
|
104
|
-
navigation.navigate(
|
|
103
|
+
navigation.navigate(ui_biz_routerKey.ui_biz_mood);
|
|
105
104
|
}
|
|
106
105
|
};
|
|
107
106
|
|
|
108
|
-
const getButtonStatus = () => {
|
|
109
|
-
return (
|
|
110
|
-
(params.mode === 'edit' && isEqual(state.mood, params.currentMood)) ||
|
|
111
|
-
!state.mood.name ||
|
|
112
|
-
nameRepeat ||
|
|
113
|
-
state.mood.name.length > 32
|
|
114
|
-
);
|
|
115
|
-
};
|
|
116
|
-
|
|
117
107
|
const nameRepeat = useMemo(() => {
|
|
118
|
-
return
|
|
108
|
+
return params.nameRepeat(state.mood)
|
|
119
109
|
}, [state.mood.name]);
|
|
120
110
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
}, [JSON.stringify(state.mood)])
|
|
125
|
-
|
|
111
|
+
const checkMoodChanged = useMemo(() =>{
|
|
112
|
+
return isEqual(state.mood, params.currentMood)
|
|
113
|
+
}, [JSON.stringify(state.mood), params.currentMood])
|
|
126
114
|
|
|
127
|
-
const
|
|
128
|
-
return
|
|
129
|
-
}
|
|
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])
|
|
130
118
|
|
|
131
119
|
return (
|
|
132
120
|
<Page
|
|
133
121
|
backText={I18n.getLang('mesh_device_detail_mode')}
|
|
134
|
-
showBackDialog={
|
|
122
|
+
showBackDialog={!checkMoodChanged}
|
|
135
123
|
backDialogTitle={I18n.getLang(
|
|
136
124
|
params.mode === 'add'
|
|
137
125
|
? 'string_light_pp_dialog_sm_add_headline_c'
|
|
@@ -143,7 +131,7 @@ const StaticMoodEditorPage = () => {
|
|
|
143
131
|
: 'strip_light_static_mood_editor_step_2_dialog_text'
|
|
144
132
|
)}
|
|
145
133
|
headlineText={state.headline}
|
|
146
|
-
rightButtonIcon={
|
|
134
|
+
rightButtonIcon={canSaveMoodData ? res.ic_check : res.ic_uncheck}
|
|
147
135
|
rightButtonIconClick={onRightClick}
|
|
148
136
|
loading={state.loading}
|
|
149
137
|
>
|
|
@@ -180,86 +168,33 @@ const StaticMoodEditorPage = () => {
|
|
|
180
168
|
showSwitch={!!moduleParams.isMixLight}
|
|
181
169
|
/>
|
|
182
170
|
{(!moduleParams.isMixLight || state.mood.mainLamp.enable) && (
|
|
183
|
-
<
|
|
171
|
+
<LampAdjustView2
|
|
184
172
|
isSupportColor={isMix ? false : moduleParams.isSupportColor}
|
|
185
173
|
isSupportBrightness={moduleParams.isSupportBrightness}
|
|
186
|
-
|
|
174
|
+
isSupportCCT={moduleParams.isSupportTemperature}
|
|
187
175
|
isColorMode={state.mainNode.isColorNode}
|
|
188
176
|
reserveSV={true}
|
|
189
177
|
setIsColorMode={isColorMode => {
|
|
190
178
|
state.mainNode.isColorNode = isColorMode;
|
|
191
179
|
}}
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
state.mainNode.
|
|
197
|
-
state.mainNode.s = s
|
|
198
|
-
state.mainNode.v = v
|
|
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
|
|
199
185
|
}}
|
|
200
|
-
|
|
201
|
-
state.mainNode.h = h
|
|
202
|
-
state.mainNode.s = s
|
|
203
|
-
state.mainNode.v = v
|
|
204
|
-
}}
|
|
205
|
-
colorTemp={state.mainNode.colorTemp}
|
|
186
|
+
cct={state.mainNode.colorTemp}
|
|
206
187
|
brightness={state.mainNode.brightness}
|
|
207
|
-
onCCTChange={() => {
|
|
208
|
-
onCCTChangeComplete={cct => {
|
|
188
|
+
onCCTChange={(cct) => {
|
|
209
189
|
state.mainNode.colorTemp = cct;
|
|
210
190
|
}}
|
|
211
|
-
onBrightnessChange={() => {
|
|
212
|
-
onBrightnessChangeComplete={brightness => {
|
|
191
|
+
onBrightnessChange={(brightness) => {
|
|
213
192
|
state.mainNode.brightness = brightness;
|
|
214
193
|
}}
|
|
215
194
|
/>
|
|
216
195
|
)}
|
|
217
196
|
</Card>
|
|
218
197
|
<Spacer />
|
|
219
|
-
{isMix && (
|
|
220
|
-
<Card style={styles.fanAdjustCard}>
|
|
221
|
-
<LdvSwitch
|
|
222
|
-
title={I18n.getLang('light_sources_tile_sec_lighting_headline')}
|
|
223
|
-
color={'#fff'}
|
|
224
|
-
colorAlpha={1}
|
|
225
|
-
enable={!!state.mood.secondaryLamp.enable}
|
|
226
|
-
setEnable={v => {
|
|
227
|
-
if(v && !state.mood.secondaryLamp.nodes.length){
|
|
228
|
-
state.mood.secondaryLamp.nodes.push(
|
|
229
|
-
{
|
|
230
|
-
h: 0,
|
|
231
|
-
s: 100,
|
|
232
|
-
v: 100,
|
|
233
|
-
brightness: 0,
|
|
234
|
-
colorTemp: 0,
|
|
235
|
-
isColorNode: true,
|
|
236
|
-
},
|
|
237
|
-
)
|
|
238
|
-
state.secondaryNode = state.mood.secondaryLamp.nodes[0]
|
|
239
|
-
}
|
|
240
|
-
state.mood.secondaryLamp.enable = v;
|
|
241
|
-
}}
|
|
242
|
-
showSwitch={!!moduleParams.isMixLight}
|
|
243
|
-
/>
|
|
244
|
-
{(!moduleParams.isMixLight || state.mood.secondaryLamp.enable) && (
|
|
245
|
-
<>
|
|
246
|
-
<ColorAdjustView
|
|
247
|
-
h={state.secondaryNode.h}
|
|
248
|
-
s={state.secondaryNode.s}
|
|
249
|
-
v={state.secondaryNode.v}
|
|
250
|
-
reserveSV={true}
|
|
251
|
-
onHSVChange={() => {}}
|
|
252
|
-
onHSVChangeComplete={(h, s, v) => {
|
|
253
|
-
state.secondaryNode.h = h
|
|
254
|
-
state.secondaryNode.s = s
|
|
255
|
-
state.secondaryNode.v = v
|
|
256
|
-
}}
|
|
257
|
-
/>
|
|
258
|
-
<Spacer height={cx(16)}/>
|
|
259
|
-
</>
|
|
260
|
-
)}
|
|
261
|
-
</Card>
|
|
262
|
-
)}
|
|
263
198
|
{!!(moduleParams.isFanLight || moduleParams.isUVCFan) && (
|
|
264
199
|
<FanAdjustView
|
|
265
200
|
fanEnable={!!state.mood.mainLamp.fanEnable}
|
|
@@ -284,15 +219,20 @@ const StaticMoodEditorPage = () => {
|
|
|
284
219
|
textStyle={styles.deleteBtnText}
|
|
285
220
|
text={I18n.getLang('edit_static_mood_button_delete_text')}
|
|
286
221
|
onPress={() => {
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
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
|
+
}
|
|
293
234
|
}
|
|
294
|
-
|
|
295
|
-
});
|
|
235
|
+
})
|
|
296
236
|
}}
|
|
297
237
|
/>
|
|
298
238
|
</View>
|
|
@@ -27,9 +27,10 @@ const MAX_NUM = 10
|
|
|
27
27
|
export interface RandomTimePageParams {
|
|
28
28
|
randomTimeDpCode: string
|
|
29
29
|
conflictDps: {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
fixedTimeDpCode?: string
|
|
31
|
+
biorhythmDpCode?: string
|
|
32
|
+
sleepDpCode?: string
|
|
33
|
+
wakeUpDpCode?: string
|
|
33
34
|
}
|
|
34
35
|
isPlug?: boolean
|
|
35
36
|
showTags?: boolean
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import I18n from '@ledvance/base/src/i18n';
|
|
3
|
+
import { useReactive } from 'ahooks';
|
|
4
|
+
import { useDeviceInfo } from '@ledvance/base/src/models/modules/NativePropsSlice';
|
|
5
|
+
import Page from '@ledvance/base/src/components/Page';
|
|
6
|
+
import LdvSwitch from '@ledvance/base/src/components/ldvSwitch';
|
|
7
|
+
import { useRemoteControl } from './RemoteControlActions';
|
|
8
|
+
import { useParams } from '@ledvance/base/src/hooks/Hooks';
|
|
9
|
+
import Card from '@ledvance/base/src/components/Card';
|
|
10
|
+
import Spacer from '@ledvance/base/src/components/Spacer';
|
|
11
|
+
import { Utils } from 'tuya-panel-kit'
|
|
12
|
+
|
|
13
|
+
const { convertX: cx } = Utils.RatioUtils
|
|
14
|
+
|
|
15
|
+
export interface RemoteControlPageParams {
|
|
16
|
+
remoteControlDpCode: string;
|
|
17
|
+
}
|
|
18
|
+
const RemoteControlPage = () => {
|
|
19
|
+
const deviceInfo = useDeviceInfo();
|
|
20
|
+
const params = useParams<RemoteControlPageParams>();
|
|
21
|
+
const [remoteControl, setRemoteControl] = useRemoteControl(params.remoteControlDpCode);
|
|
22
|
+
|
|
23
|
+
const state = useReactive({
|
|
24
|
+
loading: false,
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
return (
|
|
28
|
+
<Page
|
|
29
|
+
backText={deviceInfo.name}
|
|
30
|
+
loading={state.loading}
|
|
31
|
+
headlineText={I18n.getLang('light_sources_specific_settings_remote_control')}
|
|
32
|
+
>
|
|
33
|
+
<Spacer />
|
|
34
|
+
<Card style={{marginHorizontal: cx(24)}}>
|
|
35
|
+
<LdvSwitch
|
|
36
|
+
title={I18n.getLang('light_sources_specific_settings_remote_control')}
|
|
37
|
+
color="#fff"
|
|
38
|
+
colorAlpha={1}
|
|
39
|
+
enable={remoteControl}
|
|
40
|
+
setEnable={async v => {
|
|
41
|
+
state.loading = true;
|
|
42
|
+
await setRemoteControl(v);
|
|
43
|
+
state.loading = false;
|
|
44
|
+
}}
|
|
45
|
+
/>
|
|
46
|
+
</Card>
|
|
47
|
+
</Page>
|
|
48
|
+
);
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
export default RemoteControlPage;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import {NavigationRoute} from "tuya-panel-kit";
|
|
2
|
+
import RemoteControlPage from "./RemoteControlPage";
|
|
3
|
+
import {ui_biz_routerKey} from "../../navigation/Routers";
|
|
4
|
+
|
|
5
|
+
const RemoteControlPageRouters: NavigationRoute[] = [
|
|
6
|
+
{
|
|
7
|
+
name: ui_biz_routerKey.ui_biz_remote_control,
|
|
8
|
+
component: RemoteControlPage,
|
|
9
|
+
options: {
|
|
10
|
+
hideTopbar: true,
|
|
11
|
+
showOfflineView: false,
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
]
|
|
15
|
+
|
|
16
|
+
export default RemoteControlPageRouters
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import {NavigationRoute, TransitionPresets} from "tuya-panel-kit";
|
|
2
|
+
import SelectPage from "./SelectPage";
|
|
3
|
+
import {ui_biz_routerKey} from "../../navigation/Routers";
|
|
4
|
+
|
|
5
|
+
const SelectPagePageRouters: NavigationRoute[] = [
|
|
6
|
+
{
|
|
7
|
+
name: ui_biz_routerKey.ui_biz_select_page,
|
|
8
|
+
component: SelectPage,
|
|
9
|
+
options: {
|
|
10
|
+
hideTopbar: true,
|
|
11
|
+
showOfflineView: false,
|
|
12
|
+
...TransitionPresets.ModalPresentationIOS,
|
|
13
|
+
},
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
export default SelectPagePageRouters
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface SelectPageData<T> {
|
|
2
|
+
text: string;
|
|
3
|
+
selected: boolean;
|
|
4
|
+
value: T;
|
|
5
|
+
}
|
|
6
|
+
export interface SelectPageParams<T> {
|
|
7
|
+
title: string;
|
|
8
|
+
data: SelectPageData<T>[];
|
|
9
|
+
onSelect: (selectPageData: SelectPageData<T>) => void;
|
|
10
|
+
}
|
|
11
|
+
declare const SelectPage: () => any;
|
|
12
|
+
export default SelectPage;
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import {FlatList, Image, ScrollView, StyleSheet, Text, TouchableOpacity, View} from 'react-native'
|
|
2
|
+
import React from 'react'
|
|
3
|
+
import {useNavigation, useRoute} from '@react-navigation/core'
|
|
4
|
+
import {Utils} from 'tuya-panel-kit'
|
|
5
|
+
import Spacer from '@ledvance/base/src/components/Spacer'
|
|
6
|
+
import I18n from '@ledvance/base/src/i18n'
|
|
7
|
+
import Card from '@ledvance/base/src/components/Card'
|
|
8
|
+
import res from '@ledvance/base/src/res'
|
|
9
|
+
|
|
10
|
+
const cx = Utils.RatioUtils.convertX
|
|
11
|
+
|
|
12
|
+
export interface SelectPageData<T> {
|
|
13
|
+
text: string
|
|
14
|
+
selected: boolean
|
|
15
|
+
value: T
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface SelectPageParams<T> {
|
|
19
|
+
title: string
|
|
20
|
+
data: SelectPageData<T>[]
|
|
21
|
+
onSelect: (selectPageData: SelectPageData<T>) => void
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const SelectPage = () => {
|
|
25
|
+
const params = useRoute().params as SelectPageParams<any>
|
|
26
|
+
const navigation = useNavigation()
|
|
27
|
+
return (
|
|
28
|
+
<View style={styles.root}>
|
|
29
|
+
<View style={styles.topBar}>
|
|
30
|
+
<View style={styles.topContent}>
|
|
31
|
+
<Text style={styles.title}>{params.title}</Text>
|
|
32
|
+
<TouchableOpacity
|
|
33
|
+
onPress={() => {
|
|
34
|
+
navigation.goBack()
|
|
35
|
+
}}>
|
|
36
|
+
<Text style={styles.cancel}>{I18n.getLang('auto_scan_system_cancel')}</Text>
|
|
37
|
+
</TouchableOpacity>
|
|
38
|
+
</View>
|
|
39
|
+
<View style={styles.line}/>
|
|
40
|
+
</View>
|
|
41
|
+
<ScrollView nestedScrollEnabled={true}>
|
|
42
|
+
<View>
|
|
43
|
+
<Spacer height={cx(40)}/>
|
|
44
|
+
<Card style={styles.card}>
|
|
45
|
+
<FlatList
|
|
46
|
+
data={params.data}
|
|
47
|
+
renderItem={({item}) => {
|
|
48
|
+
return (
|
|
49
|
+
<TouchableOpacity
|
|
50
|
+
onPress={() => {
|
|
51
|
+
params.onSelect(item)
|
|
52
|
+
navigation.goBack()
|
|
53
|
+
}}>
|
|
54
|
+
<View style={styles.item}>
|
|
55
|
+
<Text style={styles.itemText}>{item.text}</Text>
|
|
56
|
+
<Image
|
|
57
|
+
style={[
|
|
58
|
+
styles.itemIcon,
|
|
59
|
+
{
|
|
60
|
+
opacity: item.selected ? 1 : 0,
|
|
61
|
+
},
|
|
62
|
+
]}
|
|
63
|
+
source={{uri: res.ic_check}}/>
|
|
64
|
+
</View>
|
|
65
|
+
</TouchableOpacity>
|
|
66
|
+
)
|
|
67
|
+
}}
|
|
68
|
+
ItemSeparatorComponent={() => <View style={styles.itemLine}/>}
|
|
69
|
+
keyExtractor={(_, index) => `${index}`}/>
|
|
70
|
+
</Card>
|
|
71
|
+
<Spacer height={cx(40)}/>
|
|
72
|
+
</View>
|
|
73
|
+
</ScrollView>
|
|
74
|
+
</View>
|
|
75
|
+
)
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const styles = StyleSheet.create({
|
|
79
|
+
root: {
|
|
80
|
+
flex: 1,
|
|
81
|
+
},
|
|
82
|
+
topBar: {
|
|
83
|
+
backgroundColor: '#eaeaea',
|
|
84
|
+
},
|
|
85
|
+
line: {
|
|
86
|
+
height: cx(1),
|
|
87
|
+
backgroundColor: '#d9d9d9',
|
|
88
|
+
},
|
|
89
|
+
topContent: {
|
|
90
|
+
paddingVertical: cx(30),
|
|
91
|
+
flexDirection: 'row',
|
|
92
|
+
alignItems: 'center',
|
|
93
|
+
},
|
|
94
|
+
cancel: {
|
|
95
|
+
marginStart: cx(16),
|
|
96
|
+
color: '#f60',
|
|
97
|
+
fontSize: cx(17),
|
|
98
|
+
fontFamily: 'helvetica_neue_lt_std_roman',
|
|
99
|
+
},
|
|
100
|
+
title: {
|
|
101
|
+
width: '100%',
|
|
102
|
+
position: 'absolute',
|
|
103
|
+
start: 0,
|
|
104
|
+
textAlign: 'center',
|
|
105
|
+
color: '#000',
|
|
106
|
+
fontSize: cx(17),
|
|
107
|
+
paddingHorizontal: cx(110),
|
|
108
|
+
fontFamily: 'helvetica_neue_lt_std_bd',
|
|
109
|
+
},
|
|
110
|
+
card: {
|
|
111
|
+
marginHorizontal: cx(16),
|
|
112
|
+
},
|
|
113
|
+
item: {
|
|
114
|
+
height: cx(44),
|
|
115
|
+
flexDirection: 'row',
|
|
116
|
+
alignItems: 'center',
|
|
117
|
+
},
|
|
118
|
+
itemText: {
|
|
119
|
+
flex: 1,
|
|
120
|
+
marginStart: cx(13),
|
|
121
|
+
color: '#000',
|
|
122
|
+
fontSize: cx(17),
|
|
123
|
+
fontFamily: 'helvetica_neue_lt_std_roman',
|
|
124
|
+
},
|
|
125
|
+
itemLine: {
|
|
126
|
+
height: cx(1),
|
|
127
|
+
marginStart: cx(13),
|
|
128
|
+
backgroundColor: '#ccc',
|
|
129
|
+
},
|
|
130
|
+
itemIcon: {
|
|
131
|
+
width: cx(30),
|
|
132
|
+
height: cx(30),
|
|
133
|
+
marginEnd: cx(13),
|
|
134
|
+
tintColor: '#f60',
|
|
135
|
+
},
|
|
136
|
+
})
|
|
137
|
+
|
|
138
|
+
export default SelectPage
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
export interface WakeUpItem {
|
|
2
|
+
enable: boolean;
|
|
3
|
+
weeks: number[];
|
|
4
|
+
delay: number;
|
|
5
|
+
hour: number;
|
|
6
|
+
minute: number;
|
|
7
|
+
h: number;
|
|
8
|
+
s: number;
|
|
9
|
+
v: number;
|
|
10
|
+
brightness: number;
|
|
11
|
+
temperature: number;
|
|
12
|
+
last: number;
|
|
13
|
+
nodeHex: string;
|
|
14
|
+
isSleep: boolean;
|
|
15
|
+
startTime: number;
|
|
16
|
+
endTime: number;
|
|
17
|
+
isColorMode: boolean;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface WakeUpUIItem extends WakeUpItem {
|
|
21
|
+
name: string
|
|
22
|
+
id: number
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface WakeUpData {
|
|
26
|
+
version: number;
|
|
27
|
+
num: number;
|
|
28
|
+
nodes: WakeUpItem[];
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface WakeUpUIData {
|
|
32
|
+
version: number;
|
|
33
|
+
num: number;
|
|
34
|
+
nodes: WakeUpUIItem[];
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface SleepItem {
|
|
38
|
+
enable: boolean;
|
|
39
|
+
weeks: number[];
|
|
40
|
+
delay: number;
|
|
41
|
+
hour: number;
|
|
42
|
+
minute: number;
|
|
43
|
+
h: number;
|
|
44
|
+
s: number;
|
|
45
|
+
v: number;
|
|
46
|
+
brightness: number;
|
|
47
|
+
temperature: number;
|
|
48
|
+
nodeHex: string;
|
|
49
|
+
isSleep: boolean;
|
|
50
|
+
startTime: number;
|
|
51
|
+
endTime: number;
|
|
52
|
+
isColorMode: boolean;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export interface SleepUIItem extends SleepItem {
|
|
56
|
+
name: string
|
|
57
|
+
id: number
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export interface SleepData {
|
|
61
|
+
version: number;
|
|
62
|
+
num: number;
|
|
63
|
+
nodes: SleepItem[]
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export interface SleepUIData {
|
|
67
|
+
version: number;
|
|
68
|
+
num: number;
|
|
69
|
+
nodes: SleepUIItem[]
|
|
70
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import {NavigationRoute} from "tuya-panel-kit";
|
|
2
|
+
import NewSleepWakeUpPage from './SleepWakeUpPage'
|
|
3
|
+
import NewSleepWakeUpDetailPage from './SleepWakeUpDetailPage'
|
|
4
|
+
import {ui_biz_routerKey} from "../../navigation/Routers";
|
|
5
|
+
|
|
6
|
+
const NewSleepWakeUpPageRouters: NavigationRoute[] = [
|
|
7
|
+
{
|
|
8
|
+
name: ui_biz_routerKey.ui_biz_sleep_wakeUp_new,
|
|
9
|
+
component: NewSleepWakeUpPage,
|
|
10
|
+
options: {
|
|
11
|
+
hideTopbar: true,
|
|
12
|
+
showOfflineView: false,
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
name: ui_biz_routerKey.ui_biz_sleep_wakeUp_edit_new,
|
|
17
|
+
component: NewSleepWakeUpDetailPage,
|
|
18
|
+
options: {
|
|
19
|
+
hideTopbar: true,
|
|
20
|
+
showOfflineView: false,
|
|
21
|
+
},
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
|
|
25
|
+
export default NewSleepWakeUpPageRouters
|