@ledvance/group-ui-biz-bundle 1.0.47 → 1.0.49

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.
@@ -1,115 +1,66 @@
1
- import React, { useEffect, useMemo } from "react";
1
+ import React, { useEffect } from "react";
2
2
  import Page from "@ledvance/base/src/components/Page";
3
- import { useDeviceInfo, useFlagMode, useFlags, useMoods, useUAGroupInfo } from "@ledvance/base/src/models/modules/NativePropsSlice";
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, saveFlagMode, useFlag } from "./FlagActions";
10
- import { useRoute, useNavigation } from '@react-navigation/core'
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, isEqual, last, map, range } from "lodash";
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 { getGlobalParamsDp, showDialog } from "@ledvance/base/src/utils/common";
21
22
  const cx = Utils.RatioUtils.convertX
22
23
 
23
24
  export interface FlagPageProps {
24
- isSupportMixScene?: boolean
25
+ isMixLight?: boolean
25
26
  isStripLight?: boolean
26
27
  isStringLight?: boolean
28
+ isCeilingLight?: boolean
27
29
  isSupportTemperature?: boolean
28
30
  isSupportBrightness?: boolean
29
- drawToolLight?: {
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
37
31
  }
38
32
 
39
33
  const FlagPage = () => {
40
- const params = useRoute().params as FlagPageProps
34
+ const params = useParams<FlagPageProps>()
41
35
  const devInfo = useDeviceInfo()
42
36
  const uaGroupInfo = useUAGroupInfo()
43
37
  const navigation = useNavigation()
44
- const [moods, setMoods] = useMoods()
38
+ const [switch_led] = useGroupDp<boolean>(getGlobalParamsDp('switch_led'))
39
+ const [, setWorkMode] = useWorkMode()
45
40
  const [flags, setFlags] = useFlags()
46
41
  const [flagMode, setFlagMode] = useFlagMode()
47
- const [flagState, setFlag] = useFlag({
48
- isStripLight: params.isStripLight,
49
- isStringLight: params.isStringLight,
50
- isMixLight: params.isSupportMixScene
51
- })
42
+ const [, setFlag] = useFlag(params)
52
43
  const state = useReactive({
53
- loading: true,
44
+ loading: false,
54
45
  flags: cloneDeep(flags) as FlagUiInfo[],
55
- moods: params.isStripLight ? [] : cloneDeep(moods),
56
46
  searchText: ''
57
47
  })
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
48
 
88
49
  useEffect(() => {
89
- if(!flags?.length){
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
- }
50
+ getRemoteFlagInfo().then()
100
51
  }, [])
101
52
 
102
- useUpdateEffect(() =>{
103
- state.flags = state.searchText !== '' ? cloneDeep(flags).filter(flag => flag.name.includes(state.searchText)) : cloneDeep(flags)
53
+ useUpdateEffect(() => {
54
+ state.flags = state.searchText !== '' ? cloneDeep(flags).filter(flag => (flag.name ?? '').toLowerCase().includes(state.searchText.toLowerCase())) : cloneDeep(flags)
104
55
  }, [state.searchText, flags])
105
56
 
106
- const getRemoteFlagInfo = async () => {
57
+ const getRemoteFlagInfo = async (isRefresh?: boolean) => {
107
58
  const defNum = uaGroupInfo.groupDevices.filter(device => !(def2Pids.includes(device.tyPid) || def3Pids.includes(device.tyPid))).length
108
59
  const def2Num = uaGroupInfo.groupDevices.filter(device => def2Pids.includes(device.tyPid)).length
109
60
  const def3Num = uaGroupInfo.groupDevices.filter(device => def3Pids.includes(device.tyPid)).length
110
61
  const isDef2 = def2Num > def3Num && def2Num > defNum
111
62
  const isDef3 = def3Num > def2Num && def3Num > defNum
112
- const res = await getRemoteFlag(uaGroupInfo.tyGroupId.toString(), {isDef2, isDef3})
63
+ const res = await getRemoteFlag(uaGroupInfo.tyGroupId.toString(), { isDef2, isDef3, isRefresh })
113
64
  if (res.success) {
114
65
  let cloneFlag: FlagUiInfo[] = cloneDeep(res.data) || []
115
66
  state.flags = cloneFlag
@@ -135,8 +86,8 @@ const FlagPage = () => {
135
86
  let newScene: FlagUiInfo[] = []
136
87
  if (mode === 'add') {
137
88
  newScene = [
138
- checkedMood,
139
89
  ...state.flags,
90
+ checkedMood,
140
91
  ]
141
92
  } else if (mode === 'del') {
142
93
  newScene = state.flags.filter(item => item.id !== checkedMood.id)
@@ -153,22 +104,21 @@ const FlagPage = () => {
153
104
  if (res.success) {
154
105
  state.flags = cloneDeep(newScene)
155
106
  setFlags(cloneDeep(newScene))
156
- if(mode === 'del' && (!flagState?.flag || checkedMood.id !== flagId)){
157
- return{
158
- success: true
107
+ if (mood) {
108
+ if (mode === 'del' && (checkedMood.id !== flagMode?.flagId || !flagMode?.flagMode || !switch_led)) {
109
+ return {
110
+ success: true
111
+ }
159
112
  }
160
- }
161
- if(mood){
162
- setFlag({
163
- ...defParams,
164
- flag: cloneDeep(mood)
165
- }).then()
166
- updateFlagMode(true, mood)
167
- }else{
168
- updateFlagMode(false)
169
- }
170
- return {
171
- success: true
113
+ return setFlag({ flag: cloneDeep(mood) })
114
+ } else {
115
+ if (flagMode?.flagMode) {
116
+ setWorkMode(params.isCeilingLight ? WorkMode.White : WorkMode.Colour)
117
+ }
118
+ return setFlagMode({
119
+ flagMode: false,
120
+ flagId: undefined
121
+ })
172
122
  }
173
123
  }
174
124
  return {
@@ -176,16 +126,6 @@ const FlagPage = () => {
176
126
  }
177
127
  }
178
128
 
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
129
  return (
190
130
  <Page
191
131
  headlineText={I18n.getLang('Feature_devicepanel_flags')}
@@ -194,7 +134,6 @@ const FlagPage = () => {
194
134
  onHeadlineIconClick={() => {
195
135
  const useIds = map([
196
136
  ...state.flags,
197
- ...state.moods
198
137
  ], 'id')
199
138
  const idRange = range(0, 256)
200
139
  const unuseId = last(difference(idRange, useIds))
@@ -202,29 +141,49 @@ const FlagPage = () => {
202
141
  navigationRoute('add', newFlag(unuseId))
203
142
  }
204
143
  }}
144
+ loading={state.loading}
205
145
  >
206
- <TextField
207
- style={{marginHorizontal: cx(24)}}
208
- value={state.searchText}
209
- onChangeText={(v)=>{
210
- state.searchText = v
211
- }}
212
- placeholder={I18n.getLang('country_selection_textfield_headline_search')}
213
- />
146
+ <View style={{flexDirection: 'row', display: 'flex', alignItems: 'center'}}>
147
+ <TextField
148
+ value={state.searchText}
149
+ onChangeText={text => {
150
+ state.searchText = text
151
+ }}
152
+ placeholder={I18n.getLang('country_selection_textfield_headline_search')}
153
+ style={{ marginHorizontal: cx(24), flex: 1 }}
154
+ />
155
+ <TouchableOpacity style={{paddingRight: cx(24)}}
156
+ onPress={() =>{
157
+ showDialog({
158
+ method: 'confirm',
159
+ title: I18n.getLang('flag_resetbutton'),
160
+ subTitle: I18n.getLang('flag_resetdescription'),
161
+ onConfirm: async (_, {close}) =>{
162
+ close()
163
+ state.loading = true
164
+ await getRemoteFlagInfo(true)
165
+ state.loading = false
166
+ }
167
+ })
168
+ }}
169
+ >
170
+ <Image source={res.ic_refresh} style={{width: cx(24), height: cx(24)}}/>
171
+ </TouchableOpacity>
172
+ </View>
214
173
  <FlatList
215
174
  data={state.flags}
216
175
  renderItem={({ item }) => <FlagItem
217
- enable={flagState?.workMode === (params.isStripLight ? WorkMode.Colour : WorkMode.Scene) && flagId === item.id && flagMode?.flagMode}
176
+ enable={flagMode?.flagId === item.id && flagMode?.flagMode && switch_led}
218
177
  title={item.name}
219
178
  icon={item.icon}
220
179
  colors={item.colors.map(item => hsv2Hex(item.h, item.s, item.v)).reverse()}
221
180
  onSwitch={async (enable) => {
222
181
  if (enable) {
182
+ state.loading = true
223
183
  await setFlag({
224
- ...defParams,
225
184
  flag: cloneDeep(item),
226
185
  })
227
- updateFlagMode(true, item)
186
+ state.loading = false
228
187
  }
229
188
  }}
230
189
  onPress={() => {