@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.
@@ -1,115 +1,67 @@
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 { 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
31
+ switchLedCode: string
37
32
  }
38
33
 
39
34
  const FlagPage = () => {
40
- const params = useRoute().params as FlagPageProps
35
+ const params = useParams<FlagPageProps>()
41
36
  const devInfo = useDeviceInfo()
42
37
  const uaGroupInfo = useUAGroupInfo()
43
38
  const navigation = useNavigation()
44
- const [moods, setMoods] = useMoods()
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 [flagState, setFlag] = useFlag({
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: true,
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
- 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
- }
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(mode === 'del' && (!flagState?.flag || checkedMood.id !== flagId)){
157
- return{
158
- success: true
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
- 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
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
- <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
- />
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={flagState?.workMode === (params.isStripLight ? WorkMode.Colour : WorkMode.Scene) && flagId === item.id && flagMode?.flagMode}
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
- updateFlagMode(true, item)
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, useUpdateEffect } from 'ahooks';
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 { saveFlagMode } from '../flags/FlagActions';
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,