@ledvance/group-ui-biz-bundle 1.0.39 → 1.0.41

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.
@@ -0,0 +1,192 @@
1
+ import Page from "@ledvance/base/src/components/Page";
2
+ import {useDeviceInfo} from "@ledvance/base/src/models/modules/NativePropsSlice";
3
+ import {useNavigation, useRoute} from '@react-navigation/native'
4
+ import I18n from "@ledvance/base/src/i18n/index";
5
+ import res from "@ledvance/base/src/res/index";
6
+ import {useReactive} from "ahooks";
7
+ import React, {useCallback, useMemo} from "react";
8
+ import {FlatList, Image, ScrollView, StyleSheet, Text, TouchableOpacity, View} from "react-native";
9
+ import {Utils} from "tuya-panel-kit";
10
+ import {ui_biz_routerKey} from "../../navigation/Routers";
11
+ import {FixedTimingItem, FixedTimingParam, useFixedTiming} from "./FixedTimingForLightAction";
12
+ import Spacer from "@ledvance/base/src/components/Spacer";
13
+ import ItemCard from "./ItemCard";
14
+ import {cloneDeep} from "lodash";
15
+
16
+ const {convertX: cx, topBarHeight} = Utils.RatioUtils;
17
+ const MAX_NUM = 16
18
+
19
+ const FixedTimeForLightPage = () => {
20
+ const devInfo = useDeviceInfo()
21
+ const navigation = useNavigation()
22
+ const params = useRoute().params as FixedTimingParam
23
+ const [fixedTimingList, setFixedTimingList] = useFixedTiming()
24
+ const state = useReactive({
25
+ loading: false
26
+ })
27
+
28
+ const isMaxNum = useMemo(() => {
29
+ return fixedTimingList.length >= MAX_NUM
30
+ }, [fixedTimingList])
31
+
32
+ const onAddOrEditItem = (mode: 'add' | 'edit', item?: FixedTimingItem) => {
33
+ const path = ui_biz_routerKey.group_ui_biz_fixed_timing_light_detail
34
+ navigation.navigate(path, {
35
+ ...params,
36
+ mode,
37
+ item,
38
+ onPost
39
+ })
40
+ }
41
+
42
+ const onPost = useCallback(async (mode: 'add' | 'edit' | 'del', fixedTiming: FixedTimingItem, goBack?: boolean) => {
43
+ state.loading = true
44
+ const cloneFixedTimingList = cloneDeep(fixedTimingList)
45
+ const idx = fixedTimingList.findIndex(it => it.index === fixedTiming.index)
46
+ if (mode === 'edit') {
47
+ cloneFixedTimingList.splice(idx, 1, fixedTiming)
48
+ }
49
+ if (mode === 'del') cloneFixedTimingList.splice(idx, 1)
50
+ const newFixedTimingList = mode === 'add' ? [...fixedTimingList, {
51
+ ...fixedTiming,
52
+ index: fixedTimingList.length
53
+ }] : cloneFixedTimingList
54
+ const res = await setFixedTimingList(newFixedTimingList)
55
+ state.loading = false
56
+ if (res.success && goBack) {
57
+ navigation.goBack()
58
+ }
59
+ }, [fixedTimingList])
60
+
61
+ const renderList = () => {
62
+ return (
63
+ <ScrollView nestedScrollEnabled={true}>
64
+ <Text style={{
65
+ color: '#000',
66
+ marginLeft: cx(24),
67
+ }}>{I18n.getLang('timeschedule_overview_description_text')}</Text>
68
+ <Spacer height={cx(10)}/>
69
+ {isMaxNum && <View style={{marginHorizontal: cx(24), flexDirection: 'row'}}>
70
+ <Image style={{width: cx(16), height: cx(16), tintColor: '#ff9500'}} source={res.ic_warning_amber}/>
71
+ <Text>{I18n.getLang('fixedtimecycle_warning_max_number_text')}</Text>
72
+ </View>}
73
+ <FlatList
74
+ data={fixedTimingList}
75
+ renderItem={({item}) => (
76
+ <ItemCard
77
+ item={item}
78
+ is24Hour={params.is24Hour}
79
+ onSwitch={async (v) => {
80
+ await onPost('edit', {
81
+ ...item,
82
+ power: v,
83
+ })
84
+ }}
85
+ onPress={() => {
86
+ onAddOrEditItem('edit', item)
87
+ }}
88
+ />
89
+ )}
90
+ keyExtractor={(item: any) => `${item?.index}`}
91
+ ItemSeparatorComponent={() => <Spacer/>}
92
+ ListHeaderComponent={<Spacer height={cx(10)}/>}
93
+ ListFooterComponent={<Spacer/>}
94
+ />
95
+ </ScrollView>
96
+ )
97
+ }
98
+ const renderEmpty = () => {
99
+ return (
100
+ <View style={styles.emptyListCon}>
101
+ <Image
102
+ style={styles.emptyImage}
103
+ source={{uri: res.ldv_timer_empty}}
104
+ resizeMode="contain"/>
105
+ <View
106
+ style={{
107
+ marginHorizontal: cx(24),
108
+ marginTop: cx(30),
109
+ flexDirection: 'row',
110
+ alignItems: 'center',
111
+ }}
112
+ >
113
+ <Image
114
+ source={{uri: res.device_panel_schedule_alert}}
115
+ style={{width: cx(16), height: cx(16)}}
116
+ />
117
+ <Text style={styles.emptyNoTime}>{I18n.getLang('fixedTimeCycle_information_text')}</Text>
118
+ </View>
119
+ <View
120
+ style={{
121
+ height: cx(36),
122
+ width: cx(150),
123
+ marginVertical: cx(25),
124
+ marginHorizontal: cx(24),
125
+ borderRadius: cx(6),
126
+ backgroundColor: '#f60',
127
+ }}
128
+ >
129
+ <TouchableOpacity
130
+ style={{
131
+ flex: 1,
132
+ justifyContent: 'center',
133
+ alignItems: 'center',
134
+ }}
135
+ onPress={() => onAddOrEditItem('add')}
136
+ >
137
+ <Text style={{fontSize: cx(12), fontWeight: 'bold', color: '#fff', textAlign: 'center'}}>
138
+ {I18n.getLang('fixedTimeCycle_bttn_text')}
139
+ </Text>
140
+ </TouchableOpacity>
141
+ </View>
142
+ </View>
143
+ )
144
+ }
145
+ return (
146
+ <Page
147
+ backText={devInfo.name}
148
+ headlineText={I18n.getLang('fixedTimeCycle_socket_headline')}
149
+ headlineIcon={!isMaxNum && res.device_panel_schedule_add || undefined}
150
+ onHeadlineIconClick={() => onAddOrEditItem('add')}
151
+ loading={state.loading}
152
+ >
153
+ {fixedTimingList.length > 0 ? renderList() : renderEmpty()}
154
+ </Page>
155
+ )
156
+ }
157
+
158
+ const styles = StyleSheet.create({
159
+ bg: {
160
+ marginTop: topBarHeight,
161
+ flex: 1,
162
+ },
163
+ emptyListCon: {
164
+ justifyContent: 'center',
165
+ alignItems: 'center',
166
+ marginTop: cx(30),
167
+ },
168
+ emptyImage: {
169
+ width: cx(225),
170
+ height: cx(198)
171
+ },
172
+ emptyNoTime: {
173
+ fontSize: cx(12),
174
+ color: '#000'
175
+ },
176
+ emptyTimeTip: {
177
+ fontSize: cx(12),
178
+ lineHeight: cx(17),
179
+ marginTop: cx(6),
180
+ width: '76%',
181
+ textAlign: 'center'
182
+ },
183
+ listContainer: {
184
+ bottom: cx(74)
185
+ },
186
+ categoryList: {
187
+ marginHorizontal: cx(24),
188
+ marginBottom: cx(12),
189
+ },
190
+ })
191
+
192
+ export default FixedTimeForLightPage
@@ -0,0 +1,71 @@
1
+ import React from 'react'
2
+ import Card from "@ledvance/base/src/components/Card";
3
+ import Spacer from "@ledvance/base/src/components/Spacer";
4
+ import {StyleSheet, Text, View} from "react-native";
5
+ import {SwitchButton, Utils} from "tuya-panel-kit";
6
+ import {loopText} from "@ledvance/base/src/utils/common";
7
+ import {parseHour12} from "@tuya/tuya-panel-lamp-sdk/lib/utils";
8
+ import {FixedTimingItem} from "./FixedTimingForLightAction";
9
+
10
+ const {convertX: cx} = Utils.RatioUtils
11
+ const {parseTimer} = Utils.TimeUtils
12
+
13
+ export interface ItemCardProps {
14
+ item: FixedTimingItem,
15
+ is24Hour?: boolean,
16
+ onSwitch: (enable: boolean) => void
17
+ onPress: () => void
18
+ }
19
+
20
+ const ItemCard = (props: ItemCardProps) => {
21
+ const {item, is24Hour, onSwitch, onPress} = props
22
+ return (
23
+ <Card style={styles.itemCard} onPress={onPress}>
24
+ <Spacer height={cx(16)}/>
25
+ <View style={styles.switchLine}>
26
+ <Text style={styles.time}>
27
+ {is24Hour ?
28
+ `${parseTimer(item.startTime * 60)} - ${parseTimer(item.endTime * 60)}`
29
+ :
30
+ `${parseHour12(item.startTime * 60)} - ${parseHour12(item.endTime * 60)}`
31
+ }
32
+ </Text>
33
+ <SwitchButton
34
+ style={styles.switchBtn}
35
+ value={item.power}
36
+ thumbStyle={{elevation: 0}}
37
+ onValueChange={onSwitch}/>
38
+ </View>
39
+ <Text style={styles.loopText}>{loopText(item.weeks, parseTimer(item.startTime * 60))}</Text>
40
+ <Spacer height={cx(5)}/>
41
+ <Text style={styles.loopText}>{item.name}</Text>
42
+ <Spacer/>
43
+ </Card>
44
+ )
45
+ }
46
+
47
+ const styles = StyleSheet.create({
48
+ itemCard: {
49
+ marginHorizontal: cx(24),
50
+ paddingHorizontal: cx(16),
51
+ },
52
+ switchLine: {
53
+ flexDirection: 'row',
54
+ alignItems: 'center',
55
+ },
56
+ time: {
57
+ flex: 1,
58
+ color: '#000',
59
+ fontSize: cx(16),
60
+ fontWeight: 'bold',
61
+ fontFamily: 'helvetica_neue_lt_std_bd',
62
+ },
63
+ switchBtn: {},
64
+ loopText: {
65
+ color: '#000',
66
+ fontSize: cx(14),
67
+ fontFamily: 'helvetica_neue_lt_std_roman',
68
+ },
69
+ })
70
+
71
+ export default ItemCard
@@ -0,0 +1,123 @@
1
+ import React, { ReactElement, memo } from "react";
2
+ import { Text, Image, ViewStyle, View, StyleSheet } from 'react-native'
3
+ import res from "@ledvance/base/src/res"
4
+ import I18n from "@ledvance/base/src/i18n";
5
+ import { Utils } from "tuya-panel-kit";
6
+ import Spacer from "@ledvance/base/src/components/Spacer";
7
+
8
+ const { convertX: cx } = Utils.RatioUtils;
9
+
10
+ interface SummaryProps {
11
+ style?: ViewStyle
12
+ frequency?: string | ReactElement
13
+ time?: string | ReactElement
14
+ actions?: ReactElement
15
+ hideActions?: boolean
16
+ }
17
+
18
+ const Summary = (props: SummaryProps) => {
19
+ return (
20
+ <View style={styles.cardContainer}>
21
+ <Text style={styles.itemTitle}>{I18n.getLang('add_randomtimecycle_subheadline_text')}</Text>
22
+ <Spacer height={cx(10)} />
23
+ <View style={{}}>
24
+ <View style={styles.summaryContainer}>
25
+ <View style={styles.summaryLeft}>
26
+ <Image
27
+ source={res.summary_icon1}
28
+ resizeMode="contain"
29
+ style={styles.summaryImg}
30
+ />
31
+ <View>
32
+ <Text style={styles.leftTitle}>{I18n.getLang('feature_summary_frequency_headline')}</Text>
33
+ </View>
34
+ </View>
35
+ <View style={styles.summaryRight}>
36
+ <View style={styles.rightWrap}>
37
+ <Text style={styles.rightItem}>{props.frequency}</Text>
38
+ </View>
39
+ </View>
40
+ </View>
41
+ <View style={styles.summaryContainer}>
42
+ <View style={styles.summaryLeft}>
43
+ <Image
44
+ source={res.summary_icon2}
45
+ resizeMode="contain"
46
+ style={styles.summaryImg}
47
+ />
48
+ <View>
49
+ <Text style={styles.leftTitle}>{I18n.getLang('feature_summary_time_headline')}</Text>
50
+ </View>
51
+ </View>
52
+ <View style={styles.summaryRight}>
53
+ <View style={styles.rightWrap}>
54
+ <Text style={styles.rightItem}>{props.time}</Text>
55
+ </View>
56
+ </View>
57
+ </View>
58
+ {!props.hideActions && <View style={[styles.summaryContainer, { alignItems: 'flex-start' }]}>
59
+ <View style={styles.summaryLeft}>
60
+ <Image
61
+ source={res.summary_icon3}
62
+ resizeMode="contain"
63
+ style={styles.summaryImg}
64
+ />
65
+ <View>
66
+ <Text style={styles.leftTitle}>{I18n.getLang('motion_detection_add_time_schedule_actions_text1')}</Text>
67
+ </View>
68
+ </View>
69
+ <View style={styles.summaryRight}>
70
+ {props.actions}
71
+ </View>
72
+ </View>}
73
+ </View>
74
+ </View>
75
+ )
76
+ }
77
+
78
+ const styles = StyleSheet.create({
79
+ cardContainer: {
80
+ marginHorizontal: cx(24),
81
+ },
82
+ itemTitle: {
83
+ color: '#000',
84
+ fontSize: cx(16),
85
+ fontWeight: 'bold',
86
+ fontFamily: 'helvetica_neue_lt_std_bd',
87
+ },
88
+ summaryContainer: {
89
+ flex: 1,
90
+ flexDirection: 'row',
91
+ marginBottom: cx(10),
92
+ },
93
+ summaryLeft: {
94
+ flexDirection: 'row',
95
+ alignItems: 'center',
96
+ minWidth: cx(100)
97
+ },
98
+ summaryImg: {
99
+ width: cx(12),
100
+ height: cx(12),
101
+ marginRight: cx(6)
102
+ },
103
+ leftTitle: {
104
+ fontSize: cx(14),
105
+ color: '#000'
106
+ },
107
+ summaryRight: {
108
+ flex: 1,
109
+ flexDirection: 'column',
110
+ marginLeft: cx(15),
111
+ },
112
+ rightWrap: {
113
+ borderRadius: cx(16),
114
+ paddingHorizontal: cx(12),
115
+ alignSelf: 'flex-start',
116
+ backgroundColor: '#cbcbcb',
117
+ },
118
+ rightItem: {
119
+ color: '#000',
120
+ },
121
+ })
122
+
123
+ export default memo(Summary)
@@ -1,23 +1,23 @@
1
- import React, { useCallback, useEffect, useMemo } from 'react'
1
+ import React, {useCallback, useEffect, useMemo} from 'react'
2
2
  import Page from '@ledvance/base/src/components/Page'
3
- import { Utils } from 'tuya-panel-kit'
4
- import { SceneMode, ScenePageUIState, SceneUIState, StripSceneUIState } from './SceneInfo'
5
- import { getRemoteSceneList, saveScene, useScene, useSwitchLed, useWorkMode } from './SceneAction'
6
- import { WorkMode } from '@ledvance/base/src/utils/interface'
7
- import { useDeviceInfo, useFlagMode, useMoods, useUAGroupInfo } from '@ledvance/base/src/models/modules/NativePropsSlice'
8
- import { useReactive } from 'ahooks'
3
+ import {Utils} from 'tuya-panel-kit'
4
+ import {SceneMode, ScenePageUIState, SceneUIState, StripSceneUIState} from './SceneInfo'
5
+ import {getRemoteSceneList, saveScene, useGroupDpScene, useScene, useSwitchLed, useWorkMode} from './SceneAction'
6
+ import {WorkMode} from '@ledvance/base/src/utils/interface'
7
+ import {useDeviceInfo, useFlagMode, useMoods, useUAGroupInfo} from '@ledvance/base/src/models/modules/NativePropsSlice'
8
+ import {useReactive} from 'ahooks'
9
9
  import Strings from '@ledvance/base/src/i18n'
10
10
  import res from '@ledvance/base/src/res'
11
- import { FlatList, StyleSheet, View, Platform } from 'react-native'
11
+ import {FlatList, Platform, StyleSheet, View} from 'react-native'
12
12
  import Tag from '@ledvance/base/src/components/Tag'
13
13
  import Spacer from '@ledvance/base/src/components/Spacer'
14
14
  import InfoText from '@ledvance/base/src/components/InfoText'
15
15
  import CustomListDialog from '@ledvance/base/src/components/CustomListDialog'
16
16
  import MoodItem from './MoodItem'
17
- import { useNavigation, useRoute } from '@react-navigation/core'
18
- import { cloneDeep } from 'lodash'
19
- import { ui_biz_routerKey } from '../../navigation/Routers'
20
- import { saveFlagMode } from '../flags/FlagActions'
17
+ import {useNavigation, useRoute} from '@react-navigation/core'
18
+ import {cloneDeep} from 'lodash'
19
+ import {ui_biz_routerKey} from '../../navigation/Routers'
20
+ import {saveFlagMode} from '../flags/FlagActions'
21
21
 
22
22
  const cx = Utils.RatioUtils.convertX
23
23
 
@@ -27,7 +27,8 @@ interface MoodPageUIState extends ScenePageUIState {
27
27
  showAddMoodPopover: boolean
28
28
  originScene: SceneUIState[] | StripSceneUIState[]
29
29
  filteredMoods: SceneUIState[] | StripSceneUIState[]
30
- loading: boolean
30
+ loading: boolean,
31
+ workMode: WorkMode
31
32
  }
32
33
 
33
34
  export interface MoodPageProps {
@@ -54,6 +55,13 @@ const MoodPage = () => {
54
55
  const deviceInfo = useDeviceInfo()
55
56
  const uaGroupInfo = useUAGroupInfo()
56
57
  const navigation = useNavigation()
58
+ const groupDpScene = useGroupDpScene({
59
+ isStringLight: params.isStringLight,
60
+ isStripLight: params.isStripLight,
61
+ isSupportFan: params.isSupportFan,
62
+ isSupportUVC: params.isSupportUVC,
63
+ sceneDataDpCode: params.sceneDataDpCode
64
+ })
57
65
  const [scene, setScene] = useScene({
58
66
  isStringLight: params.isStringLight,
59
67
  isStripLight: params.isStripLight,
@@ -62,7 +70,7 @@ const MoodPage = () => {
62
70
  })
63
71
  const [moods, setMoods] = useMoods()
64
72
  const [workMode] = useWorkMode()
65
- const [switchLed] = useSwitchLed()
73
+ const [switchLed] = useSwitchLed(params.switchLedDpCode)
66
74
  const [flagMode, setFlagMode] = useFlagMode()
67
75
  const state = useReactive<MoodPageUIState>({
68
76
  currentScene: undefined,
@@ -74,8 +82,13 @@ const MoodPage = () => {
74
82
  originScene: [],
75
83
  filteredMoods: [],
76
84
  loading: false,
85
+ workMode: workMode
77
86
  })
78
87
 
88
+ useEffect(() => {
89
+ state.workMode = workMode
90
+ }, [workMode]);
91
+
79
92
  useEffect(() => {
80
93
  if (!(moods && moods.length)) {
81
94
  getRemoteSceneList(uaGroupInfo.tyGroupId.toString(), {
@@ -235,6 +248,11 @@ const MoodPage = () => {
235
248
  params.isStringLight ? SceneMode.StringGradient : params.isStripLight ? SceneMode.StripGradient : SceneMode.SourceGradient
236
249
  ), [params.isStringLight, params.isStripLight, SceneMode])
237
250
 
251
+ const itemEnable = useCallback((item: SceneUIState) => {
252
+ const sceneId = groupDpScene?.id ?? scene?.scene?.id
253
+ return switchLed && state.workMode === WorkMode.Scene && sceneId === item.id && !flagMode?.flagMode;
254
+ }, [switchLed, state.workMode, groupDpScene, scene, flagMode?.flagMode])
255
+
238
256
  return (
239
257
  <>
240
258
  <Page
@@ -282,7 +300,7 @@ const MoodPage = () => {
282
300
  renderItem={({ item }) => {
283
301
  return (
284
302
  <MoodItem
285
- enable={switchLed && workMode === WorkMode.Scene && scene?.scene?.id === item.id && !flagMode?.flagMode}
303
+ enable={itemEnable(item)}
286
304
  mood={item}
287
305
  onPress={() => {
288
306
  navigationRoute(item.nodes.length === 1, 'edit', item)
@@ -19,15 +19,19 @@ import res from '@ledvance/base/src/res'
19
19
  import {Utils} from '@tuya/tuya-panel-lamp-sdk'
20
20
  import {parseJSON} from '@tuya/tuya-panel-lamp-sdk/lib/utils'
21
21
  import {WorkMode} from "@ledvance/base/src/utils/interface"
22
+ import {useGroupDp} from "@ledvance/base/src/models/modules/NativePropsSlice";
23
+ import {GlobalParams} from "@ledvance/base/src/models/GlobalParams";
22
24
 
23
25
  const { nToHS, toFixed, sToN } = Utils
24
26
 
25
27
  export function useWorkMode(): [WorkMode, (value: WorkMode) => Promise<Result<any>>] {
26
- return useFeatureHook<SceneDataConfigType, WorkMode>('workMode', WorkMode.White)
28
+ const [workMode] = useGroupDp<WorkMode>(getGlobalParamsDp('work_mode'))
29
+ const [config, setConfig] = useFeatureHook<SceneDataConfigType, WorkMode>('workMode', WorkMode.White);
30
+ return [workMode ?? config, setConfig]
27
31
  }
28
32
 
29
- export function useSwitchLed(): [boolean, (value: boolean) => Promise<Result<any>>] {
30
- return useFeatureHook<SceneDataConfigType, boolean>('switch_led', false)
33
+ export function useSwitchLed(dpCode: string): [boolean] {
34
+ return useGroupDp<boolean>(dpCode)
31
35
  }
32
36
 
33
37
  interface SceneDataType {
@@ -49,6 +53,20 @@ interface LightType {
49
53
  isStripLight?: boolean
50
54
  isSupportFan?: boolean
51
55
  isSupportUVC?: boolean
56
+ sceneDataDpCode?: string
57
+ }
58
+
59
+ function getGlobalParamsDp(key: string) {
60
+ return GlobalParams.dpSchemaMap[key] && GlobalParams.dpSchemaMap[key].dp.toString()
61
+ }
62
+
63
+ export function useGroupDpScene(params: LightType) {
64
+ const [sceneData] = useGroupDp<string>(params.sceneDataDpCode || getGlobalParamsDp('scene_data'))
65
+ if (sceneData) {
66
+ const isFantasy = params.isStringLight || params.isStripLight;
67
+ return isFantasy ? stripDp2Obj(sceneData, params.isStringLight) : dp2Obj(sceneData, params.isSupportFan, params.isSupportUVC)
68
+ }
69
+ return undefined
52
70
  }
53
71
 
54
72
  export function useScene(params: LightType): [SceneDataType | undefined, (scene?: SceneDataType) => Promise<Result<any>>] {
@@ -304,6 +322,7 @@ export function saveScene(
304
322
  ) {
305
323
  console.log(scenes, '< --- save new Scenes')
306
324
  const isFantasy = sceneParams.isStringLight || sceneParams.isStripLight
325
+ // @ts-ignore
307
326
  const newScenes = scenes.map(s => {
308
327
  return {
309
328
  n: s.name,
@@ -54,8 +54,5 @@ export const useDreamMusicData = (musicOption: MusicPageParams) => {
54
54
  })
55
55
  }
56
56
 
57
- export const useMusciData = () =>{
58
- return useFeatureHook<LightConfig, string>('musicData', '',)
59
- }
60
57
 
61
58
 
@@ -2,10 +2,10 @@ import React from 'react'
2
2
  import { StyleSheet, View, Text, Image } from 'react-native'
3
3
  import { useNavigation } from '@react-navigation/core'
4
4
  import Page from '@ledvance/base/src/components/Page'
5
- import { useDeviceInfo, useGroupConfig } from '@ledvance/base/src/models/modules/NativePropsSlice'
5
+ import { useDeviceInfo, useGroupConfig, putGroupTYDps, useUAGroupInfo } from '@ledvance/base/src/models/modules/NativePropsSlice'
6
6
  import I18n from '@ledvance/base/src/i18n'
7
7
  import Img from './res'
8
- import { useDreamMusicData, useMusciData } from './MusicActions'
8
+ import { useDreamMusicData } from './MusicActions'
9
9
  import { useReactive, useUpdateEffect } from 'ahooks'
10
10
  import { musicTabs } from './MusicDataBean'
11
11
  import { SwitchButton, TabBar, Utils } from 'tuya-panel-kit'
@@ -31,10 +31,10 @@ export interface MusicPageParams {
31
31
 
32
32
  const MusicPage = () => {
33
33
  const deviceInfo = useDeviceInfo()
34
+ const tyGroupId = useUAGroupInfo().tyGroupId
34
35
  const parmas = useParams<MusicPageParams>()
35
36
  const navigation = useNavigation()
36
37
  const [musicData, setMusicData] = useDreamMusicData(parmas)
37
- const [, setMusic] = useMusciData()
38
38
  const [config] = useGroupConfig<any>()
39
39
  const state = useReactive({
40
40
  musicData: cloneDeep(musicData),
@@ -50,10 +50,10 @@ const MusicPage = () => {
50
50
  if (parmas.dreamMusicDp && state.musicData.musicType === 0){
51
51
  setMusicData(cloneDeep(state.musicData))
52
52
  }else{
53
- // setMusicData({
54
- // ...cloneDeep(state.musicData),
55
- // phoneDpData: ''
56
- // }).then()
53
+ setMusicData({
54
+ ...cloneDeep(state.musicData),
55
+ phoneDpData: ''
56
+ }).then()
57
57
  MusicManager.open(
58
58
  state.musicData.phoneMusicData[state.musicData.phoneGenreMode],
59
59
  () => {},
@@ -66,11 +66,7 @@ const MusicPage = () => {
66
66
  v.brightness,
67
67
  v.temperature
68
68
  );
69
- // await setMusic(musicDpData)
70
- await setMusicData({
71
- ...cloneDeep(state.musicData),
72
- phoneDpData: musicDpData
73
- })
69
+ putGroupTYDps(tyGroupId, {[parmas.musicDataDp]: musicDpData}).then()
74
70
  },
75
71
  { isColourExist: true, isTempExist: true }
76
72
  )
@@ -19,6 +19,10 @@ import BiorhythmPage from '../modules/biorhythm/BiorhythmPage'
19
19
  import BiorhythmEditPage from '../modules/biorhythm/BiorhythmDetailPage'
20
20
  import IconSelectPage from '../modules/biorhythm/IconSelect'
21
21
  import MusicPage from '../modules/music/MusicPage'
22
+ import FixedTimeForPlugPage from "../modules/fixedTimeForPlug/FixedTimeForPlugPage";
23
+ import FixedTimeForPlugDetailPage from "../modules/fixedTimeForPlug/FixedTimeForPlugDetailPage";
24
+ import FixedTimingForLightPage from "../modules/fixedTimingForLight/FixedTimingForLightPage";
25
+ import FixedTimingForLightDetailPage from "../modules/fixedTimingForLight/FixedTimingForLightDetailPage";
22
26
 
23
27
  export const ui_biz_routerKey = {
24
28
  'group_ui_biz_timer': 'group_ui_biz_timer',
@@ -40,7 +44,11 @@ export const ui_biz_routerKey = {
40
44
  'group_ui_biz_biological': 'group_ui_biz_biological',
41
45
  'group_ui_biz_biological_detail': 'group_ui_biz_biological_detail',
42
46
  'group_ui_biz_biological_icon_select': 'group_ui_biz_biological_icon_select',
43
- 'group_ui_biz_music': 'group_ui_biz_music'
47
+ 'group_ui_biz_music': 'group_ui_biz_music',
48
+ 'group_ui_biz_fixed_time_plug': 'group_ui_biz_fixed_time_plug',
49
+ 'group_ui_biz_fixed_time_plug_detail': 'group_ui_biz_fixed_time_plug_detail',
50
+ 'group_ui_biz_fixed_timing_light': 'group_ui_biz_fixed_timing_light',
51
+ 'group_ui_biz_fixed_timing_light_detail': 'group_ui_biz_fixed_timing_light_detail',
44
52
  }
45
53
 
46
54
  export const TimerRouters: NavigationRoute[] = [
@@ -236,3 +244,41 @@ export const MusicPageRouters: NavigationRoute[] = [
236
244
  },
237
245
  },
238
246
  ]
247
+
248
+ export const FixedTimeForPlugRouters: NavigationRoute[] = [
249
+ {
250
+ name: ui_biz_routerKey.group_ui_biz_fixed_time_plug,
251
+ component: FixedTimeForPlugPage,
252
+ options: {
253
+ hideTopbar: true,
254
+ showOfflineView: false,
255
+ },
256
+ },
257
+ {
258
+ name: ui_biz_routerKey.group_ui_biz_fixed_time_plug_detail,
259
+ component: FixedTimeForPlugDetailPage,
260
+ options: {
261
+ hideTopbar: true,
262
+ showOfflineView: false,
263
+ },
264
+ },
265
+ ]
266
+
267
+ export const FixedTimingForLightRouters: NavigationRoute[] = [
268
+ {
269
+ name: ui_biz_routerKey.group_ui_biz_fixed_timing_light,
270
+ component: FixedTimingForLightPage,
271
+ options: {
272
+ hideTopbar: true,
273
+ showOfflineView: false,
274
+ },
275
+ },
276
+ {
277
+ name: ui_biz_routerKey.group_ui_biz_fixed_timing_light_detail,
278
+ component: FixedTimingForLightDetailPage,
279
+ options: {
280
+ hideTopbar: true,
281
+ showOfflineView: false,
282
+ },
283
+ },
284
+ ]