@ledvance/group-ui-biz-bundle 1.0.46 → 1.0.48
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/BiorhythmActions.ts +5 -13
- package/src/modules/biorhythm/BiorhythmBean.ts +6 -6
- package/src/modules/biorhythm/BiorhythmPage.tsx +373 -420
- package/src/modules/biorhythm/Router.ts +34 -0
- package/src/modules/fixedTimeForPlug/Router.ts +25 -0
- package/src/modules/fixedTimingForLight/Router.ts +25 -0
- package/src/modules/flags/Router.ts +25 -0
- package/src/modules/mood/AddMoodPage.tsx +2 -2
- package/src/modules/mood_new/AddMoodPage.tsx +197 -0
- package/src/modules/mood_new/DynamicMoodEditorPage.tsx +654 -0
- package/src/modules/mood_new/Interface.ts +219 -0
- package/src/modules/mood_new/MixDynamicMoodEditor.tsx +788 -0
- package/src/modules/mood_new/MoodActions.ts +227 -0
- package/src/modules/mood_new/MoodInfo.ts +2151 -0
- package/src/modules/mood_new/MoodItem.tsx +148 -0
- package/src/modules/mood_new/MoodPage.tsx +374 -0
- package/src/modules/mood_new/MoodParse.ts +442 -0
- package/src/modules/mood_new/RecommendMoodItem.tsx +69 -0
- package/src/modules/mood_new/Router.ts +43 -0
- package/src/modules/mood_new/StaticMoodEditorPage.tsx +293 -0
- package/src/modules/music/Router.ts +16 -0
- package/src/modules/randomTimeForPlug/Router.ts +25 -0
- package/src/modules/randomTimingForLight/Router.ts +25 -0
- package/src/modules/remoteSwitch/Router.ts +16 -0
- package/src/modules/select/Router.ts +16 -0
- package/src/modules/switchGradient/Router.ts +16 -0
- package/src/modules/timeSchedule/Interface.ts +150 -0
- package/src/modules/timeSchedule/Router.ts +25 -0
- package/src/modules/timeSchedule/TimeScheduleActions.ts +140 -0
- package/src/modules/timeSchedule/TimeScheduleDetailPage.tsx +625 -0
- package/src/modules/timeSchedule/TimeSchedulePage.tsx +220 -0
- package/src/modules/timeSchedule/components/ManuaSettings.tsx +376 -0
- package/src/modules/timeSchedule/components/ScheduleCard.tsx +109 -0
- package/src/modules/timeSchedule/components/Summary.tsx +124 -0
- package/src/modules/timer/Router.ts +16 -0
- package/src/navigation/Routers.ts +1 -0
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
import React, { useCallback, useEffect, useMemo } from 'react';
|
|
2
|
+
import { ScrollView, StyleSheet, View } from 'react-native';
|
|
3
|
+
import { cloneDeep, find, 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 LampAdjustView2 from '@ledvance/base/src/components/LampAdjustView2';
|
|
16
|
+
import FanAdjustView from '@ledvance/base/src/components/FanAdjustView';
|
|
17
|
+
import { MoodNodeInfo, MoodPageParams, MoodUIInfo } from './Interface';
|
|
18
|
+
import { Result } from '@ledvance/base/src/models/modules/Result';
|
|
19
|
+
import { hsv2Hex, mapFloatToRange } from '@ledvance/base/src/utils';
|
|
20
|
+
import { cctToColor } from '@ledvance/base/src/utils/cctUtils';
|
|
21
|
+
import { useParams } from '@ledvance/base/src/hooks/Hooks';
|
|
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
|
+
moods: MoodUIInfo[];
|
|
31
|
+
currentMood: MoodUIInfo;
|
|
32
|
+
onSave: () => void;
|
|
33
|
+
moduleParams: MoodPageParams;
|
|
34
|
+
modDeleteMood: (mode: 'add' | 'edit' | 'del', currentMood: MoodUIInfo) => Promise<Result<any>>;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface StaticMoodEditorPageState {
|
|
38
|
+
headline: string;
|
|
39
|
+
mood: MoodUIInfo;
|
|
40
|
+
mainNode: MoodNodeInfo;
|
|
41
|
+
secondaryNode: MoodNodeInfo;
|
|
42
|
+
loading: boolean;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const StaticMoodEditorPage = () => {
|
|
46
|
+
const navigation = useNavigation();
|
|
47
|
+
const routeParams = useParams<StaticMoodEditorPageParams>();
|
|
48
|
+
const params = cloneDeep(routeParams);
|
|
49
|
+
const moduleParams = params.moduleParams;
|
|
50
|
+
const isMix = !!(moduleParams.isCeilingLight || moduleParams.isMixLight);
|
|
51
|
+
const state = useReactive<StaticMoodEditorPageState>({
|
|
52
|
+
headline: '',
|
|
53
|
+
mood: params.currentMood,
|
|
54
|
+
mainNode: params.currentMood.mainLamp.nodes[0],
|
|
55
|
+
secondaryNode: params.currentMood?.secondaryLamp?.nodes[0],
|
|
56
|
+
loading: false,
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
useEffect(() => {
|
|
60
|
+
state.headline = I18n.getLang(
|
|
61
|
+
params.mode === 'add' ? 'add_new_static_mood_headline_text' : 'edit_static_mood_headline_text'
|
|
62
|
+
);
|
|
63
|
+
}, [params.mode]);
|
|
64
|
+
|
|
65
|
+
const getColorBlockColor = useCallback((node: MoodNodeInfo) => {
|
|
66
|
+
const s = Math.round(mapFloatToRange(node.s / 100, 30, 100));
|
|
67
|
+
if (node.isColorNode) {
|
|
68
|
+
return hsv2Hex(node.h, s, 100);
|
|
69
|
+
} else {
|
|
70
|
+
return cctToColor(node.colorTemp.toFixed());
|
|
71
|
+
}
|
|
72
|
+
}, []);
|
|
73
|
+
|
|
74
|
+
const onRightClick = async () => {
|
|
75
|
+
if (state.loading) return;
|
|
76
|
+
state.loading = true;
|
|
77
|
+
const newMood: MoodUIInfo = {
|
|
78
|
+
...state.mood,
|
|
79
|
+
mainLamp: {
|
|
80
|
+
...state.mood.mainLamp,
|
|
81
|
+
nodes: [cloneDeep(state.mainNode)],
|
|
82
|
+
},
|
|
83
|
+
secondaryLamp: {
|
|
84
|
+
...state.mood.secondaryLamp,
|
|
85
|
+
id: undefined
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
if (isMix && moduleParams.isMixLight) {
|
|
89
|
+
newMood.secondaryLamp = {
|
|
90
|
+
...newMood.secondaryLamp,
|
|
91
|
+
nodes: [cloneDeep(state.secondaryNode)],
|
|
92
|
+
};
|
|
93
|
+
newMood.mainLamp.type = 2
|
|
94
|
+
if (moduleParams.isSupportBrightness && !moduleParams.isSupportTemperature) {
|
|
95
|
+
newMood.mainLamp.type = 1
|
|
96
|
+
}
|
|
97
|
+
if (moduleParams.isSupportColor) {
|
|
98
|
+
newMood.secondaryLamp.type = 3
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
const res = await params.modDeleteMood(params.mode, newMood);
|
|
102
|
+
state.loading = false;
|
|
103
|
+
if (res.success) {
|
|
104
|
+
navigation.navigate(ui_biz_routerKey.group_ui_biz_mood);
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
|
|
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
|
+
const nameRepeat = useMemo(() => {
|
|
118
|
+
return !!find(params.moods, m => m.id !== state.mood.id && m.name === state.mood.name);
|
|
119
|
+
}, [state.mood.name]);
|
|
120
|
+
|
|
121
|
+
return (
|
|
122
|
+
<Page
|
|
123
|
+
backText={I18n.getLang('mesh_device_detail_mode')}
|
|
124
|
+
showBackDialog={true}
|
|
125
|
+
backDialogTitle={I18n.getLang(
|
|
126
|
+
params.mode === 'add'
|
|
127
|
+
? 'string_light_pp_dialog_sm_add_headline_c'
|
|
128
|
+
: 'manage_user_unsaved_changes_dialog_headline'
|
|
129
|
+
)}
|
|
130
|
+
backDialogContent={I18n.getLang(
|
|
131
|
+
params.mode === 'add'
|
|
132
|
+
? 'strip_light_static_mood_add_step_2_dialog_text'
|
|
133
|
+
: 'strip_light_static_mood_editor_step_2_dialog_text'
|
|
134
|
+
)}
|
|
135
|
+
headlineText={state.headline}
|
|
136
|
+
rightButtonIcon={getButtonStatus() ? res.ic_uncheck : res.ic_check}
|
|
137
|
+
rightButtonDisabled={getButtonStatus()}
|
|
138
|
+
rightButtonIconClick={onRightClick}
|
|
139
|
+
loading={state.loading}
|
|
140
|
+
>
|
|
141
|
+
<ScrollView style={{ flex: 1 }} nestedScrollEnabled={true}>
|
|
142
|
+
<View style={styles.root}>
|
|
143
|
+
<TextField
|
|
144
|
+
style={styles.name}
|
|
145
|
+
value={state.mood.name}
|
|
146
|
+
placeholder={I18n.getLang('edit_static_mood_inputfield_topic_text')}
|
|
147
|
+
onChangeText={text => {
|
|
148
|
+
state.mood.name = text;
|
|
149
|
+
}}
|
|
150
|
+
maxLength={33}
|
|
151
|
+
showError={state.mood.name.length > 32 || nameRepeat}
|
|
152
|
+
tipColor={nameRepeat ? '#f00' : undefined}
|
|
153
|
+
tipIcon={nameRepeat ? res.ic_text_field_input_error : undefined}
|
|
154
|
+
errorText={I18n.getLang(
|
|
155
|
+
nameRepeat ? 'string_light_pp_field_sm_add_error1' : 'add_new_dynamic_mood_alert_text'
|
|
156
|
+
)}
|
|
157
|
+
/>
|
|
158
|
+
<Card style={styles.adjustCard}>
|
|
159
|
+
<LdvSwitch
|
|
160
|
+
title={I18n.getLang(
|
|
161
|
+
isMix
|
|
162
|
+
? 'light_sources_tile_main_lighting_headline'
|
|
163
|
+
: 'light_sources_tile_tw_lighting_headline'
|
|
164
|
+
)}
|
|
165
|
+
color={getColorBlockColor(state.mainNode)}
|
|
166
|
+
colorAlpha={1}
|
|
167
|
+
enable={!!state.mood.mainLamp.enable}
|
|
168
|
+
setEnable={v => {
|
|
169
|
+
state.mood.mainLamp.enable = v;
|
|
170
|
+
}}
|
|
171
|
+
showSwitch={!!moduleParams.isMixLight}
|
|
172
|
+
/>
|
|
173
|
+
{(!moduleParams.isMixLight || state.mood.mainLamp.enable) && (
|
|
174
|
+
<LampAdjustView2
|
|
175
|
+
isSupportColor={isMix ? false : moduleParams.isSupportColor}
|
|
176
|
+
isSupportBrightness={moduleParams.isSupportBrightness}
|
|
177
|
+
isSupportCCT={moduleParams.isSupportTemperature}
|
|
178
|
+
isColorMode={state.mainNode.isColorNode}
|
|
179
|
+
reserveSV={true}
|
|
180
|
+
setIsColorMode={isColorMode => {
|
|
181
|
+
state.mainNode.isColorNode = isColorMode;
|
|
182
|
+
}}
|
|
183
|
+
hsv={state.mainNode}
|
|
184
|
+
onHSVChange={(hsv) => {
|
|
185
|
+
state.mainNode.h = hsv.h
|
|
186
|
+
state.mainNode.s = hsv.s
|
|
187
|
+
state.mainNode.v = hsv.v
|
|
188
|
+
}}
|
|
189
|
+
cct={state.mainNode.colorTemp}
|
|
190
|
+
brightness={state.mainNode.brightness}
|
|
191
|
+
onCCTChange={(cct) => {
|
|
192
|
+
state.mainNode.colorTemp = cct;
|
|
193
|
+
}}
|
|
194
|
+
onBrightnessChange={(brightness) => {
|
|
195
|
+
state.mainNode.brightness = brightness;
|
|
196
|
+
}}
|
|
197
|
+
/>
|
|
198
|
+
)}
|
|
199
|
+
</Card>
|
|
200
|
+
<Spacer />
|
|
201
|
+
{!!(moduleParams.isFanLight || moduleParams.isUVCFan) && (
|
|
202
|
+
<FanAdjustView
|
|
203
|
+
fanEnable={!!state.mood.mainLamp.fanEnable}
|
|
204
|
+
fanSpeed={state.mood.mainLamp.fanSpeed || 1}
|
|
205
|
+
maxFanSpeed={useFanMaxSpeed()}
|
|
206
|
+
onFanSwitch={fanEnable => {
|
|
207
|
+
state.mood.mainLamp.fanEnable = fanEnable;
|
|
208
|
+
}}
|
|
209
|
+
onFanSpeedChange={fanSpeed => {
|
|
210
|
+
state.mood.mainLamp.fanSpeed = fanSpeed;
|
|
211
|
+
}}
|
|
212
|
+
onFanSpeedChangeComplete={fanSpeed => {
|
|
213
|
+
state.mood.mainLamp.fanSpeed = fanSpeed;
|
|
214
|
+
}}
|
|
215
|
+
style={styles.fanAdjustCard}
|
|
216
|
+
/>
|
|
217
|
+
)}
|
|
218
|
+
{params.mode === 'edit' && (
|
|
219
|
+
<View style={{ marginTop: cx(20), marginHorizontal: cx(24) }}>
|
|
220
|
+
<TextButton
|
|
221
|
+
style={styles.deleteBtn}
|
|
222
|
+
textStyle={styles.deleteBtnText}
|
|
223
|
+
text={I18n.getLang('edit_static_mood_button_delete_text')}
|
|
224
|
+
onPress={() => {
|
|
225
|
+
showDialog({
|
|
226
|
+
method: 'confirm',
|
|
227
|
+
title: I18n.getLang('string_light_pp_dialog_sm_ed_headline_d'),
|
|
228
|
+
subTitle: I18n.getLang(`strip_light_static_mood_edit_dialog_text`),
|
|
229
|
+
onConfirm: async (_, {close})=>{
|
|
230
|
+
close();
|
|
231
|
+
state.loading = true;
|
|
232
|
+
const res = await params.modDeleteMood('del', state.mood);
|
|
233
|
+
state.loading = false;
|
|
234
|
+
if (res.success) {
|
|
235
|
+
navigation.navigate(ui_biz_routerKey.group_ui_biz_mood);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
})
|
|
239
|
+
}}
|
|
240
|
+
/>
|
|
241
|
+
</View>
|
|
242
|
+
)}
|
|
243
|
+
<Spacer />
|
|
244
|
+
</View>
|
|
245
|
+
</ScrollView>
|
|
246
|
+
</Page>
|
|
247
|
+
);
|
|
248
|
+
};
|
|
249
|
+
|
|
250
|
+
const styles = StyleSheet.create({
|
|
251
|
+
root: {
|
|
252
|
+
flex: 1,
|
|
253
|
+
flexDirection: 'column',
|
|
254
|
+
},
|
|
255
|
+
name: {
|
|
256
|
+
marginHorizontal: cx(24),
|
|
257
|
+
},
|
|
258
|
+
adjustCard: {
|
|
259
|
+
marginTop: cx(12),
|
|
260
|
+
marginHorizontal: cx(24),
|
|
261
|
+
},
|
|
262
|
+
fanAdjustCard: {
|
|
263
|
+
marginHorizontal: cx(24),
|
|
264
|
+
},
|
|
265
|
+
lightLine: {
|
|
266
|
+
flexDirection: 'row',
|
|
267
|
+
marginHorizontal: cx(16),
|
|
268
|
+
},
|
|
269
|
+
light: {
|
|
270
|
+
color: '#000',
|
|
271
|
+
fontSize: cx(18),
|
|
272
|
+
fontFamily: 'helvetica_neue_lt_std_bd',
|
|
273
|
+
},
|
|
274
|
+
preview: {
|
|
275
|
+
width: cx(20),
|
|
276
|
+
height: cx(20),
|
|
277
|
+
marginStart: cx(12),
|
|
278
|
+
borderRadius: cx(4),
|
|
279
|
+
},
|
|
280
|
+
deleteBtn: {
|
|
281
|
+
width: '100%',
|
|
282
|
+
height: cx(50),
|
|
283
|
+
backgroundColor: '#666',
|
|
284
|
+
borderRadius: cx(8),
|
|
285
|
+
},
|
|
286
|
+
deleteBtnText: {
|
|
287
|
+
color: '#fff',
|
|
288
|
+
fontSize: cx(16),
|
|
289
|
+
fontFamily: 'helvetica_neue_lt_std_bd',
|
|
290
|
+
},
|
|
291
|
+
});
|
|
292
|
+
|
|
293
|
+
export default StaticMoodEditorPage;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import {NavigationRoute} from "tuya-panel-kit";
|
|
2
|
+
import MusicPage from "./MusicPage";
|
|
3
|
+
import {ui_biz_routerKey} from "../../navigation/Routers";
|
|
4
|
+
|
|
5
|
+
const MusicPageRouters: NavigationRoute[] = [
|
|
6
|
+
{
|
|
7
|
+
name: ui_biz_routerKey.group_ui_biz_music,
|
|
8
|
+
component: MusicPage,
|
|
9
|
+
options:{
|
|
10
|
+
hideTopbar: true,
|
|
11
|
+
showOfflineView: false,
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
]
|
|
15
|
+
|
|
16
|
+
export default MusicPageRouters
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import {NavigationRoute} from "tuya-panel-kit";
|
|
2
|
+
import RandomTimeForPlugPage from "./RandomTimeForPlugPage";
|
|
3
|
+
import RandomTimeForPlugDetailPage from "./RandomTimeForPlugDetailPage";
|
|
4
|
+
import {ui_biz_routerKey} from "../../navigation/Routers";
|
|
5
|
+
|
|
6
|
+
const RandomTimeForPlugRouters: NavigationRoute[] = [
|
|
7
|
+
{
|
|
8
|
+
name: ui_biz_routerKey.group_ui_biz_fixed_time_plug,
|
|
9
|
+
component: RandomTimeForPlugPage,
|
|
10
|
+
options:{
|
|
11
|
+
hideTopbar: true,
|
|
12
|
+
showOfflineView: false,
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
name: ui_biz_routerKey.group_ui_biz_fixed_time_plug_detail,
|
|
17
|
+
component: RandomTimeForPlugDetailPage,
|
|
18
|
+
options:{
|
|
19
|
+
hideTopbar: true,
|
|
20
|
+
showOfflineView: false,
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
|
|
25
|
+
export default RandomTimeForPlugRouters
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import {NavigationRoute} from "tuya-panel-kit";
|
|
2
|
+
import RandomTimingForLightPage from "./RandomTimingForLightPage";
|
|
3
|
+
import RandomTimingForLightDetailPage from "./RandomTimingForLightDetailPage";
|
|
4
|
+
import {ui_biz_routerKey} from "../../navigation/Routers";
|
|
5
|
+
|
|
6
|
+
const RandomTimingForLightRouters: NavigationRoute[] = [
|
|
7
|
+
{
|
|
8
|
+
name: ui_biz_routerKey.group_ui_biz_fixed_timing_light,
|
|
9
|
+
component: RandomTimingForLightPage,
|
|
10
|
+
options:{
|
|
11
|
+
hideTopbar: true,
|
|
12
|
+
showOfflineView: false,
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
name: ui_biz_routerKey.group_ui_biz_fixed_timing_light_detail,
|
|
17
|
+
component: RandomTimingForLightDetailPage,
|
|
18
|
+
options:{
|
|
19
|
+
hideTopbar: true,
|
|
20
|
+
showOfflineView: false,
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
|
|
25
|
+
export default RandomTimingForLightRouters
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import {NavigationRoute} from "tuya-panel-kit";
|
|
2
|
+
import RemoteSwitchPage from "./RemoteSwitchPage";
|
|
3
|
+
import {ui_biz_routerKey} from "../../navigation/Routers";
|
|
4
|
+
|
|
5
|
+
const RemoteSwitchPageRouters: NavigationRoute[] = [
|
|
6
|
+
{
|
|
7
|
+
name: ui_biz_routerKey.group_ui_biz_remote_switch,
|
|
8
|
+
component: RemoteSwitchPage,
|
|
9
|
+
options:{
|
|
10
|
+
hideTopbar: true,
|
|
11
|
+
showOfflineView: false,
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
]
|
|
15
|
+
|
|
16
|
+
export default RemoteSwitchPageRouters
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import {NavigationRoute} 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.group_ui_biz_select_page,
|
|
8
|
+
component: SelectPage,
|
|
9
|
+
options:{
|
|
10
|
+
hideTopbar: true,
|
|
11
|
+
showOfflineView: false,
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
]
|
|
15
|
+
|
|
16
|
+
export default SelectPagePageRouters
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import {NavigationRoute} from "tuya-panel-kit";
|
|
2
|
+
import SwitchGradientPage from "./SwitchGradientPage";
|
|
3
|
+
import {ui_biz_routerKey} from "../../navigation/Routers";
|
|
4
|
+
|
|
5
|
+
const SwitchGradientPageRouters: NavigationRoute[] = [
|
|
6
|
+
{
|
|
7
|
+
name: ui_biz_routerKey.group_ui_biz_switch_gradient,
|
|
8
|
+
component: SwitchGradientPage,
|
|
9
|
+
options:{
|
|
10
|
+
hideTopbar: true,
|
|
11
|
+
showOfflineView: false,
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
]
|
|
15
|
+
|
|
16
|
+
export default SwitchGradientPageRouters
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
export interface IAddSingleTime {
|
|
2
|
+
bizId: string;
|
|
3
|
+
bizType?: string;
|
|
4
|
+
actions: any;
|
|
5
|
+
loops?: string;
|
|
6
|
+
category?: string;
|
|
7
|
+
status?: number;
|
|
8
|
+
isAppPush?: boolean;
|
|
9
|
+
aliasName?: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface IQueryTimerTasks {
|
|
13
|
+
bizId: string;
|
|
14
|
+
bizType?: string;
|
|
15
|
+
category?: string;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
export interface IModifySingleTimer {
|
|
21
|
+
bizId: string;
|
|
22
|
+
bizType?: string;
|
|
23
|
+
id: string | number;
|
|
24
|
+
actions: any;
|
|
25
|
+
loops?: string;
|
|
26
|
+
status?: number;
|
|
27
|
+
isAppPush?: boolean;
|
|
28
|
+
aliasName?: string;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface IModDeleteTaskByIds {
|
|
32
|
+
bizId: string;
|
|
33
|
+
bizType?: string;
|
|
34
|
+
ids: string;
|
|
35
|
+
status?: number;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export enum UVCFanMode {
|
|
39
|
+
Nature = 'nature',
|
|
40
|
+
Normal = 'normal'
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
import { MoodInfo, MoodUIInfo } from "@ledvance/group-ui-biz-bundle/src/modules/mood/Interface";
|
|
45
|
+
|
|
46
|
+
export interface Timer {
|
|
47
|
+
status: number;
|
|
48
|
+
loops: string;
|
|
49
|
+
time: string;
|
|
50
|
+
id: number;
|
|
51
|
+
isAppPush: boolean;
|
|
52
|
+
dps: Record<string, any>;
|
|
53
|
+
groupOrder?: number;
|
|
54
|
+
groupId?: string;
|
|
55
|
+
aliasName: string;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export type TimerActions = 'add' | 'delete' | 'update'
|
|
59
|
+
|
|
60
|
+
export interface HSV {
|
|
61
|
+
h: number;
|
|
62
|
+
s: number;
|
|
63
|
+
v: number;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export type Category = 'light' | 'socket' | 'fan' | 'mainLight' | 'secondaryLight'
|
|
67
|
+
|
|
68
|
+
export interface ApplyForItem {
|
|
69
|
+
key: string;
|
|
70
|
+
dp: string;
|
|
71
|
+
type: Category;
|
|
72
|
+
enable: boolean;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
interface judgmentSupport {
|
|
76
|
+
isSupportColor: boolean;
|
|
77
|
+
isSupportBrightness: boolean;
|
|
78
|
+
isSupportTemperature: boolean;
|
|
79
|
+
isCeilingLight?: boolean;
|
|
80
|
+
isStripLight?: boolean;
|
|
81
|
+
isStringLight?: boolean;
|
|
82
|
+
isMixLight?: boolean;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export interface ManualSettingProps extends judgmentSupport {
|
|
86
|
+
applyForList: ApplyForItem[];
|
|
87
|
+
dps: Record<string, any>;
|
|
88
|
+
manualData: ComponentConfig;
|
|
89
|
+
onManualChange?: (manualData: DeviceData | MixLightData | StripLightData) => void
|
|
90
|
+
onApplyChange?: (applyForList: ApplyForItem[]) => void
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export enum DeviceType {
|
|
94
|
+
LightSource = 'lightSource',
|
|
95
|
+
MixLight = 'mixLight',
|
|
96
|
+
StripLight = 'stripLight',
|
|
97
|
+
CeilingLight = 'ceilingLight'
|
|
98
|
+
}
|
|
99
|
+
// export type DeviceType = 'LightSource' | 'CeilingLight' | 'StringLight' | 'StripLight' | 'MixLight';
|
|
100
|
+
|
|
101
|
+
export interface DeviceData {
|
|
102
|
+
h: number;
|
|
103
|
+
s: number;
|
|
104
|
+
v: number;
|
|
105
|
+
brightness: number;
|
|
106
|
+
temperature: number;
|
|
107
|
+
isColorMode: boolean;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export interface MixLightData extends DeviceData {
|
|
111
|
+
colorLightSwitch: boolean;
|
|
112
|
+
whiteLightSwitch: boolean;
|
|
113
|
+
mixRgbcwEnabled: boolean
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export interface StripLightData extends DeviceData {
|
|
117
|
+
colors: string[];
|
|
118
|
+
activeKey: number;
|
|
119
|
+
colorDiskActiveKey: number
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
export interface CeilingLightData extends DeviceData, StripLightData, MixLightData {
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export type ComponentConfig =
|
|
126
|
+
| { type: DeviceType.LightSource; deviceData: DeviceData }
|
|
127
|
+
| { type: DeviceType.MixLight; deviceData: MixLightData }
|
|
128
|
+
| { type: DeviceType.StripLight; deviceData: StripLightData }
|
|
129
|
+
| { type: DeviceType.CeilingLight; deviceData: CeilingLightData }
|
|
130
|
+
|
|
131
|
+
export interface TimeScheduleDetailState {
|
|
132
|
+
timeSchedule: Timer;
|
|
133
|
+
dps: Record<string, any>;
|
|
134
|
+
isManual: boolean;
|
|
135
|
+
selectedSkill: ApplyForItem[];
|
|
136
|
+
unSelectedSkill: ApplyForItem[];
|
|
137
|
+
loading: boolean;
|
|
138
|
+
moodLoading: boolean;
|
|
139
|
+
manualData: ComponentConfig;
|
|
140
|
+
mood?: MoodInfo;
|
|
141
|
+
moods: MoodUIInfo[];
|
|
142
|
+
timerId: any;
|
|
143
|
+
moodName: string;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
export interface DeviceStateType {
|
|
147
|
+
deviceData: ComponentConfig
|
|
148
|
+
mood?: MoodInfo
|
|
149
|
+
isManual: boolean
|
|
150
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import {NavigationRoute} from "tuya-panel-kit";
|
|
2
|
+
import TimeSchedulePage from "./TimeSchedulePage";
|
|
3
|
+
import TimeScheduleDetailPage from "./TimeScheduleDetailPage";
|
|
4
|
+
import {ui_biz_routerKey} from "../../navigation/Routers";
|
|
5
|
+
|
|
6
|
+
const TimeSchedulePageRouters: NavigationRoute[] = [
|
|
7
|
+
{
|
|
8
|
+
name: ui_biz_routerKey.group_ui_biz_time_schedule,
|
|
9
|
+
component: TimeSchedulePage,
|
|
10
|
+
options:{
|
|
11
|
+
hideTopbar: true,
|
|
12
|
+
showOfflineView: false,
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
name: ui_biz_routerKey.group_ui_biz_time_schedule_edit,
|
|
17
|
+
component: TimeScheduleDetailPage,
|
|
18
|
+
options:{
|
|
19
|
+
hideTopbar: true,
|
|
20
|
+
showOfflineView: false,
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
|
|
25
|
+
export default TimeSchedulePageRouters
|