@ledvance/group-ui-biz-bundle 1.0.48 → 1.0.50
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 +1 -1
- package/src/modules/biorhythm/BiorhythmDetailPage.tsx +27 -16
- package/src/modules/biorhythm/BiorhythmPage.tsx +15 -7
- package/src/modules/biorhythm/circular/Progress.tsx +320 -360
- package/src/modules/biorhythm/circular/TimeCircular.tsx +12 -18
- package/src/modules/flags/FlagActions.ts +151 -30
- package/src/modules/flags/FlagEditPage.tsx +26 -18
- package/src/modules/flags/FlagInfo.tsx +1188 -481
- package/src/modules/flags/FlagPage.tsx +68 -108
- package/src/modules/mood_new/MoodPage.tsx +3 -11
|
@@ -1,115 +1,67 @@
|
|
|
1
|
-
import React, { useEffect
|
|
1
|
+
import React, { useEffect } from "react";
|
|
2
2
|
import Page from "@ledvance/base/src/components/Page";
|
|
3
|
-
import { useDeviceInfo,
|
|
4
|
-
import { FlatList } from "react-native";
|
|
3
|
+
import { useDeviceInfo, useFlags, useGroupDp, useUAGroupInfo } from "@ledvance/base/src/models/modules/NativePropsSlice";
|
|
4
|
+
import { FlatList, TouchableOpacity, View, Image } from "react-native";
|
|
5
5
|
import Spacer from "@ledvance/base/src/components/Spacer";
|
|
6
6
|
import { Utils } from "tuya-panel-kit";
|
|
7
7
|
import FlagItem from "./FlagItem";
|
|
8
8
|
import { FlagUiInfo, def2Pids, def3Pids } from "./FlagInfo";
|
|
9
|
-
import { getRemoteFlag, saveFlag,
|
|
10
|
-
import {
|
|
9
|
+
import { getRemoteFlag, saveFlag, useFlag, useFlagMode, useWorkMode } from "./FlagActions";
|
|
10
|
+
import { useNavigation } from '@react-navigation/core'
|
|
11
11
|
import I18n from "@ledvance/base/src/i18n";
|
|
12
12
|
import { useReactive, useUpdateEffect } from "ahooks";
|
|
13
|
-
import { cloneDeep, difference,
|
|
13
|
+
import { cloneDeep, difference, last, map, range } from "lodash";
|
|
14
14
|
import { ui_biz_routerKey } from "../../navigation/Routers";
|
|
15
15
|
import res from "@ledvance/base/src/res";
|
|
16
16
|
import { hsv2Hex } from "@ledvance/base/src/utils";
|
|
17
17
|
import { SceneNodeTransitionMode } from "@ledvance/group-ui-biz-bundle/src/modules/mood/SceneInfo";
|
|
18
|
-
import { Result } from "@ledvance/base/src/models/modules/Result";
|
|
19
|
-
import { WorkMode } from "@ledvance/base/src/utils/interface";
|
|
20
18
|
import TextField from "@ledvance/base/src/components/TextField";
|
|
19
|
+
import { useParams } from "@ledvance/base/src/hooks/Hooks";
|
|
20
|
+
import { WorkMode } from "@ledvance/base/src/utils/interface";
|
|
21
|
+
import { showDialog } from "@ledvance/base/src/utils/common";
|
|
21
22
|
const cx = Utils.RatioUtils.convertX
|
|
22
23
|
|
|
23
24
|
export interface FlagPageProps {
|
|
24
|
-
|
|
25
|
+
isMixLight?: boolean
|
|
25
26
|
isStripLight?: boolean
|
|
26
27
|
isStringLight?: boolean
|
|
28
|
+
isCeilingLight?: boolean
|
|
27
29
|
isSupportTemperature?: boolean
|
|
28
30
|
isSupportBrightness?: boolean
|
|
29
|
-
|
|
30
|
-
drawToolCode: string
|
|
31
|
-
drawToolObj2dp: (colors: string[]) => string
|
|
32
|
-
}
|
|
33
|
-
getRemoteMoodList?: (groupId: string) => Promise<Result<any>>
|
|
34
|
-
sceneDataCode?: string
|
|
35
|
-
workModeCode: string
|
|
36
|
-
switchLedCode: string
|
|
31
|
+
switchLedCode: string
|
|
37
32
|
}
|
|
38
33
|
|
|
39
34
|
const FlagPage = () => {
|
|
40
|
-
const params =
|
|
35
|
+
const params = useParams<FlagPageProps>()
|
|
41
36
|
const devInfo = useDeviceInfo()
|
|
42
37
|
const uaGroupInfo = useUAGroupInfo()
|
|
43
38
|
const navigation = useNavigation()
|
|
44
|
-
const [
|
|
39
|
+
const [switch_led] = useGroupDp<boolean>(params.switchLedCode)
|
|
40
|
+
const [, setWorkMode] = useWorkMode()
|
|
45
41
|
const [flags, setFlags] = useFlags()
|
|
46
42
|
const [flagMode, setFlagMode] = useFlagMode()
|
|
47
|
-
const [
|
|
48
|
-
isStripLight: params.isStripLight,
|
|
49
|
-
isStringLight: params.isStringLight,
|
|
50
|
-
isMixLight: params.isSupportMixScene
|
|
51
|
-
})
|
|
43
|
+
const [, setFlag] = useFlag(params)
|
|
52
44
|
const state = useReactive({
|
|
53
|
-
loading:
|
|
45
|
+
loading: false,
|
|
54
46
|
flags: cloneDeep(flags) as FlagUiInfo[],
|
|
55
|
-
moods: params.isStripLight ? [] : cloneDeep(moods),
|
|
56
47
|
searchText: ''
|
|
57
48
|
})
|
|
58
|
-
const defParams = {
|
|
59
|
-
workModeDpCode: params.workModeCode,
|
|
60
|
-
switchLedDpCode: params.switchLedCode,
|
|
61
|
-
workMode: params.isStripLight ? WorkMode.Colour : WorkMode.Scene,
|
|
62
|
-
sceneStatus: !params.isStripLight && params.sceneDataCode ? {
|
|
63
|
-
sceneDataDpCode: params.sceneDataCode
|
|
64
|
-
} : undefined,
|
|
65
|
-
drawToolStatus: params.isStripLight && params.drawToolLight ? {
|
|
66
|
-
drawToolCode: params.drawToolLight.drawToolCode,
|
|
67
|
-
drawToolObj2dp: params.drawToolLight.drawToolObj2dp
|
|
68
|
-
} : undefined
|
|
69
|
-
}
|
|
70
|
-
const flagId = useMemo(() => {
|
|
71
|
-
if (flagState && state.flags?.length) {
|
|
72
|
-
const { flag } = flagState
|
|
73
|
-
if(params.isStripLight && flag?.colors !== undefined){
|
|
74
|
-
if(flagMode?.flagId !== undefined) return flagMode.flagId
|
|
75
|
-
const v = state.flags.find(item => {
|
|
76
|
-
return isEqual(item.colors, flag?.colors)
|
|
77
|
-
})
|
|
78
|
-
return v?.id
|
|
79
|
-
}
|
|
80
|
-
if (flag?.id !== undefined) {
|
|
81
|
-
return flag.id
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
return -1
|
|
86
|
-
}, [JSON.stringify(flagState), JSON.stringify(state.flags), flagMode])
|
|
87
49
|
|
|
88
50
|
useEffect(() => {
|
|
89
|
-
|
|
90
|
-
getRemoteFlagInfo().then()
|
|
91
|
-
}
|
|
92
|
-
if (params.getRemoteMoodList && !params.isStripLight && !moods?.length) {
|
|
93
|
-
params.getRemoteMoodList(uaGroupInfo.tyGroupId.toString()).then(res => {
|
|
94
|
-
if (res.success && Array.isArray(res.data)) {
|
|
95
|
-
state.moods = res.data
|
|
96
|
-
setMoods(cloneDeep(res.data))
|
|
97
|
-
}
|
|
98
|
-
})
|
|
99
|
-
}
|
|
51
|
+
getRemoteFlagInfo().then()
|
|
100
52
|
}, [])
|
|
101
53
|
|
|
102
|
-
useUpdateEffect(() =>{
|
|
103
|
-
state.flags = state.searchText !== '' ? cloneDeep(flags).filter(flag => flag.name.includes(state.searchText)) : cloneDeep(flags)
|
|
54
|
+
useUpdateEffect(() => {
|
|
55
|
+
state.flags = state.searchText !== '' ? cloneDeep(flags).filter(flag => (flag.name ?? '').toLowerCase().includes(state.searchText.toLowerCase())) : cloneDeep(flags)
|
|
104
56
|
}, [state.searchText, flags])
|
|
105
57
|
|
|
106
|
-
const getRemoteFlagInfo = async () => {
|
|
58
|
+
const getRemoteFlagInfo = async (isRefresh?: boolean) => {
|
|
107
59
|
const defNum = uaGroupInfo.groupDevices.filter(device => !(def2Pids.includes(device.tyPid) || def3Pids.includes(device.tyPid))).length
|
|
108
60
|
const def2Num = uaGroupInfo.groupDevices.filter(device => def2Pids.includes(device.tyPid)).length
|
|
109
61
|
const def3Num = uaGroupInfo.groupDevices.filter(device => def3Pids.includes(device.tyPid)).length
|
|
110
62
|
const isDef2 = def2Num > def3Num && def2Num > defNum
|
|
111
63
|
const isDef3 = def3Num > def2Num && def3Num > defNum
|
|
112
|
-
const res = await getRemoteFlag(uaGroupInfo.tyGroupId.toString(), {isDef2, isDef3})
|
|
64
|
+
const res = await getRemoteFlag(uaGroupInfo.tyGroupId.toString(), { isDef2, isDef3, isRefresh })
|
|
113
65
|
if (res.success) {
|
|
114
66
|
let cloneFlag: FlagUiInfo[] = cloneDeep(res.data) || []
|
|
115
67
|
state.flags = cloneFlag
|
|
@@ -135,8 +87,8 @@ const FlagPage = () => {
|
|
|
135
87
|
let newScene: FlagUiInfo[] = []
|
|
136
88
|
if (mode === 'add') {
|
|
137
89
|
newScene = [
|
|
138
|
-
checkedMood,
|
|
139
90
|
...state.flags,
|
|
91
|
+
checkedMood,
|
|
140
92
|
]
|
|
141
93
|
} else if (mode === 'del') {
|
|
142
94
|
newScene = state.flags.filter(item => item.id !== checkedMood.id)
|
|
@@ -153,22 +105,21 @@ const FlagPage = () => {
|
|
|
153
105
|
if (res.success) {
|
|
154
106
|
state.flags = cloneDeep(newScene)
|
|
155
107
|
setFlags(cloneDeep(newScene))
|
|
156
|
-
if
|
|
157
|
-
|
|
158
|
-
|
|
108
|
+
if (mood) {
|
|
109
|
+
if (mode === 'del' && (checkedMood.id !== flagMode?.flagId || !flagMode?.flagMode || !switch_led)) {
|
|
110
|
+
return {
|
|
111
|
+
success: true
|
|
112
|
+
}
|
|
159
113
|
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
}
|
|
170
|
-
return {
|
|
171
|
-
success: true
|
|
114
|
+
return setFlag({ flag: cloneDeep(mood) })
|
|
115
|
+
} else {
|
|
116
|
+
if (flagMode?.flagMode) {
|
|
117
|
+
setWorkMode(params.isCeilingLight ? WorkMode.White : WorkMode.Colour)
|
|
118
|
+
}
|
|
119
|
+
return setFlagMode({
|
|
120
|
+
flagMode: false,
|
|
121
|
+
flagId: undefined
|
|
122
|
+
})
|
|
172
123
|
}
|
|
173
124
|
}
|
|
174
125
|
return {
|
|
@@ -176,16 +127,6 @@ const FlagPage = () => {
|
|
|
176
127
|
}
|
|
177
128
|
}
|
|
178
129
|
|
|
179
|
-
const updateFlagMode = (flagMode: boolean, flag?:FlagUiInfo) =>{
|
|
180
|
-
saveFlagMode(uaGroupInfo.tyGroupId.toString(), JSON.stringify({
|
|
181
|
-
flagMode,
|
|
182
|
-
flagId: flag?.id
|
|
183
|
-
})).then()
|
|
184
|
-
setFlagMode({
|
|
185
|
-
flagMode,
|
|
186
|
-
flagId: flag?.id
|
|
187
|
-
})
|
|
188
|
-
}
|
|
189
130
|
return (
|
|
190
131
|
<Page
|
|
191
132
|
headlineText={I18n.getLang('Feature_devicepanel_flags')}
|
|
@@ -194,7 +135,6 @@ const FlagPage = () => {
|
|
|
194
135
|
onHeadlineIconClick={() => {
|
|
195
136
|
const useIds = map([
|
|
196
137
|
...state.flags,
|
|
197
|
-
...state.moods
|
|
198
138
|
], 'id')
|
|
199
139
|
const idRange = range(0, 256)
|
|
200
140
|
const unuseId = last(difference(idRange, useIds))
|
|
@@ -202,29 +142,49 @@ const FlagPage = () => {
|
|
|
202
142
|
navigationRoute('add', newFlag(unuseId))
|
|
203
143
|
}
|
|
204
144
|
}}
|
|
145
|
+
loading={state.loading}
|
|
205
146
|
>
|
|
206
|
-
<
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
147
|
+
<View style={{flexDirection: 'row', display: 'flex', alignItems: 'center'}}>
|
|
148
|
+
<TextField
|
|
149
|
+
value={state.searchText}
|
|
150
|
+
onChangeText={text => {
|
|
151
|
+
state.searchText = text
|
|
152
|
+
}}
|
|
153
|
+
placeholder={I18n.getLang('country_selection_textfield_headline_search')}
|
|
154
|
+
style={{ marginHorizontal: cx(24), flex: 1 }}
|
|
155
|
+
/>
|
|
156
|
+
<TouchableOpacity style={{paddingRight: cx(24)}}
|
|
157
|
+
onPress={() =>{
|
|
158
|
+
showDialog({
|
|
159
|
+
method: 'confirm',
|
|
160
|
+
title: I18n.getLang('flag_resetbutton'),
|
|
161
|
+
subTitle: I18n.getLang('flag_resetdescription'),
|
|
162
|
+
onConfirm: async (_, {close}) =>{
|
|
163
|
+
close()
|
|
164
|
+
state.loading = true
|
|
165
|
+
await getRemoteFlagInfo(true)
|
|
166
|
+
state.loading = false
|
|
167
|
+
}
|
|
168
|
+
})
|
|
169
|
+
}}
|
|
170
|
+
>
|
|
171
|
+
<Image source={res.ic_refresh} style={{width: cx(24), height: cx(24)}}/>
|
|
172
|
+
</TouchableOpacity>
|
|
173
|
+
</View>
|
|
214
174
|
<FlatList
|
|
215
175
|
data={state.flags}
|
|
216
176
|
renderItem={({ item }) => <FlagItem
|
|
217
|
-
enable={
|
|
177
|
+
enable={flagMode?.flagId === item.id && flagMode?.flagMode && switch_led}
|
|
218
178
|
title={item.name}
|
|
219
179
|
icon={item.icon}
|
|
220
180
|
colors={item.colors.map(item => hsv2Hex(item.h, item.s, item.v)).reverse()}
|
|
221
181
|
onSwitch={async (enable) => {
|
|
222
182
|
if (enable) {
|
|
183
|
+
state.loading = true
|
|
223
184
|
await setFlag({
|
|
224
|
-
...defParams,
|
|
225
185
|
flag: cloneDeep(item),
|
|
226
186
|
})
|
|
227
|
-
|
|
187
|
+
state.loading = false
|
|
228
188
|
}
|
|
229
189
|
}}
|
|
230
190
|
onPress={() => {
|
|
@@ -4,11 +4,10 @@ import { Utils } from 'tuya-panel-kit';
|
|
|
4
4
|
import { saveMoodList, useRgbicWorkMode, useWorkMode } from './MoodActions';
|
|
5
5
|
import {
|
|
6
6
|
useDeviceInfo,
|
|
7
|
-
useFlagMode,
|
|
8
7
|
useMoods,
|
|
9
8
|
useUAGroupInfo,
|
|
10
9
|
} from '@ledvance/base/src/models/modules/NativePropsSlice';
|
|
11
|
-
import { useReactive
|
|
10
|
+
import { useReactive } from 'ahooks';
|
|
12
11
|
import Strings from '@ledvance/base/src/i18n';
|
|
13
12
|
import res from '@ledvance/base/src/res';
|
|
14
13
|
import { FlatList, StyleSheet, View, Platform } from 'react-native';
|
|
@@ -23,7 +22,7 @@ import { getRemoteMoodList, useMoodScene } from './MoodActions';
|
|
|
23
22
|
import { useParams } from '@ledvance/base/src/hooks/Hooks';
|
|
24
23
|
import { ui_biz_routerKey } from '../../navigation/Routers'
|
|
25
24
|
import { cloneDeep } from 'lodash';
|
|
26
|
-
import {
|
|
25
|
+
import { useFlagMode } from '../flags/FlagActions';
|
|
27
26
|
import { WorkMode } from '@ledvance/base/src/utils/interface';
|
|
28
27
|
|
|
29
28
|
const cx = Utils.RatioUtils.convertX;
|
|
@@ -197,7 +196,6 @@ const MoodPage = () => {
|
|
|
197
196
|
if (res.success) {
|
|
198
197
|
state.originMoods = cloneDeep(newScene);
|
|
199
198
|
setMoods(cloneDeep(newScene));
|
|
200
|
-
updateFlagMode();
|
|
201
199
|
if ((mode === 'del' && (params.isCeilingLight ?
|
|
202
200
|
(moodInfo.scene?.mainLamp.id !== checkedMood.mainLamp.id || moodInfo.scene?.secondaryLamp.id !== checkedMood.secondaryLamp.id) :
|
|
203
201
|
moodInfo.scene?.id !== checkedMood.id)) ||
|
|
@@ -206,6 +204,7 @@ const MoodPage = () => {
|
|
|
206
204
|
success: true
|
|
207
205
|
}
|
|
208
206
|
}
|
|
207
|
+
updateFlagMode();
|
|
209
208
|
return setMoodInfo({
|
|
210
209
|
scene: cloneDeep(mood)
|
|
211
210
|
})
|
|
@@ -217,13 +216,6 @@ const MoodPage = () => {
|
|
|
217
216
|
|
|
218
217
|
const updateFlagMode = () => {
|
|
219
218
|
if (flagMode?.flagMode) {
|
|
220
|
-
saveFlagMode(
|
|
221
|
-
uaGroupInfo.tyGroupId.toString(),
|
|
222
|
-
JSON.stringify({
|
|
223
|
-
flagMode: false,
|
|
224
|
-
flagId: undefined,
|
|
225
|
-
})
|
|
226
|
-
).then();
|
|
227
219
|
setFlagMode({
|
|
228
220
|
flagMode: false,
|
|
229
221
|
flagId: undefined,
|