@ledvance/ui-biz-bundle 1.1.135 → 1.1.137

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 CHANGED
@@ -4,7 +4,7 @@
4
4
  "name": "@ledvance/ui-biz-bundle",
5
5
  "pid": [],
6
6
  "uiid": "",
7
- "version": "1.1.135",
7
+ "version": "1.1.137",
8
8
  "scripts": {},
9
9
  "dependencies": {
10
10
  "@ledvance/base": "^1.x",
@@ -206,7 +206,6 @@ export function dp2Obj(dp: string): BiorhythmBean {
206
206
  enabled: p === '1',
207
207
  }
208
208
  })
209
- repeatPeriod.sort((a, b) => a.index - b.index)
210
209
  dpCopy = dpCopy.slice(2)
211
210
  // 节点个数 (每个节点长度18),最多8个节点
212
211
  hex2Int(dpCopy.slice(0, 2))
@@ -371,9 +370,8 @@ function obj2Dp(obj: BiorhythmBean): string {
371
370
  const versionHex = '00'
372
371
  const enableHex = obj.enable ? '01' : '00'
373
372
  const gradientHex = obj.gradient === BiorhythmGradientType.EntireGradient ? '00' : '0F'
374
- const newRepeatPeriod = [obj.repeatPeriod[obj.repeatPeriod.length - 1], ...obj.repeatPeriod.slice(0, -1)]
375
373
  const repeatPeriodHex = parseInt(
376
- newRepeatPeriod
374
+ obj.repeatPeriod
377
375
  .map(p => (p.enabled ? '1' : '0'))
378
376
  .reverse()
379
377
  .join(''),
@@ -21,6 +21,7 @@ import I18n from '@ledvance/base/src/i18n'
21
21
  import res from '@ledvance/base/src/res'
22
22
  import { ui_biz_routerKey } from "../../navigation/Routers";
23
23
  import { cctToColor } from '@ledvance/base/src/utils/cctUtils'
24
+ import { setDataSource } from '@ledvance/base/src/components/weekSelect'
24
25
  import { BiorhythmEditPageParams } from './BiorhythmEditPage'
25
26
  import { useBiorhythm } from './BiorhythmActions'
26
27
  import { convertMinutesTo12HourFormat, showDialog as showCommonDialog } from '@ledvance/base/src/utils/common'
@@ -189,7 +190,11 @@ const BiorhythmPage = (props: { theme?: ThemeType }) => {
189
190
  }
190
191
 
191
192
  useEffect(() => {
192
- const weeks = biorhythm.repeatPeriod.filter(it => it.enabled).map(it => it.title)
193
+ const weeks: string[] = setDataSource(
194
+ biorhythm.repeatPeriod.map(item => {
195
+ return item?.enabled ? 1 : 0
196
+ })).filter(item => item.enabled)
197
+ .map(item => item.title)
193
198
 
194
199
  if (weeks.length > 0) {
195
200
  if (weeks.length === 7) {
@@ -232,21 +237,20 @@ const BiorhythmPage = (props: { theme?: ThemeType }) => {
232
237
  const sunHomeText = string => {
233
238
  const text = string.split('SUN@HOME')
234
239
  return text?.length === 1 && <Text style={{ fontSize: cx(14), color: props.theme?.global.fontColor }}>{text[0]}</Text> ||
235
- <Text style={{
236
- fontSize: cx(14),
237
- flexDirection: 'row',
238
- }}>
239
- <Text style={{ color: props.theme?.global.fontColor }}>{text[0]}</Text>
240
- <Text
241
- onPress={openLink}
242
- style={{
243
- fontFamily: 'helvetica_neue_lt_std_roman',
244
- color: props.theme?.button.primary,
245
- textDecorationLine: 'underline',
246
- flexWrap: 'wrap',
247
- }}>SUN@HOME</Text>
248
- <Text style={{ color: props.theme?.global.fontColor }}>{text[1]}</Text>
249
- </Text>
240
+ <Text style={{
241
+ fontSize: cx(14),
242
+ flexDirection: 'row',
243
+ }}>
244
+ <Text style={{ color: props.theme?.global.fontColor }}>{text[0]}</Text>
245
+ <Text onPress={openLink}
246
+ style={{
247
+ fontFamily: 'helvetica_neue_lt_std_roman',
248
+ color: props.theme?.button.primary,
249
+ textDecorationLine: 'underline',
250
+ flexWrap: 'wrap',
251
+ }}>SUN@HOME</Text>
252
+ <Text style={{ color: props.theme?.global.fontColor }}>{text[1]}</Text>
253
+ </Text>
250
254
  }
251
255
 
252
256
  const randomIcon = () => {
@@ -448,66 +452,66 @@ const BiorhythmPage = (props: { theme?: ThemeType }) => {
448
452
  marginTop: cx(26),
449
453
  }}>
450
454
  {state.planList.length === 8 && <View
451
- style={{ marginVertical: cx(10), flexDirection: 'row', alignItems: 'center', width: width - cx(48) }}>
452
- <Image style={{ width: cx(16), height: cx(16), tintColor: props.theme?.global.warning }} source={{ uri: res.ic_warning_amber }} />
453
- <Text
454
- style={{
455
- flexWrap: 'wrap',
456
- fontSize: cx(12),
457
- color: props.theme?.global.fontColor
458
- }}>{I18n.getLang('add_new_trigger_time_warning_max_number_text')}</Text>
455
+ style={{ marginVertical: cx(10), flexDirection: 'row', alignItems: 'center', width: width - cx(48) }}>
456
+ <Image style={{ width: cx(16), height: cx(16), tintColor: props.theme?.global.warning }} source={{ uri: res.ic_warning_amber }} />
457
+ <Text
458
+ style={{
459
+ flexWrap: 'wrap',
460
+ fontSize: cx(12),
461
+ color: props.theme?.global.fontColor
462
+ }}>{I18n.getLang('add_new_trigger_time_warning_max_number_text')}</Text>
459
463
  </View>}
460
464
  {state.planList.length < 8 &&
461
- <>
462
- <Text
463
- style={{
464
- fontSize: cx(16),
465
- fontWeight: 'bold',
466
- color: props.theme?.global.fontColor,
467
- }}>{I18n.getLang('bio_ryhthm_default_subheadline_text')}</Text>
468
- <TouchableOpacity
469
- onPress={() => {
470
- const ids: number[] = state.planList.map(p => p.index)
471
- const newPlan: Plan = {
472
- index: Math.max(...ids) + 1,
473
- icon: res.rhythm_icon1,
474
- time: 0,
475
- name: '',
476
- colorTemperature: 0,
477
- brightness: 100,
478
- action: [
479
- {
480
- uri: 'model/attribute/set/LightCtrl/ColorTemperature',
481
- startValue: `${colorTemperatureValue(0)}`,
482
- },
483
- {
484
- uri: 'model/attribute/set/LightCtrl/Brightness',
485
- startValue: '100',
486
- },
487
- ],
488
- enable: true,
489
- iconId: randomIcon(),
490
- }
491
- const editPageParams: BiorhythmEditPageParams = {
492
- planData: newPlan,
493
- isAdd: true,
494
- onPlanEdited,
495
- onPlanDelete,
496
- minimumEnable,
497
- nameRepeat,
498
- iconIdList: state.planList?.map(item => {
499
- return item.iconId
500
- }),
501
- isMixRGBWLamp: !!params.isMixLight,
502
- isSupportTemperature: params.isSupportTemperature,
503
- isSupportBrightness: params.isSupportBrightness,
504
- showDeleteBtn
505
- }
506
- navigation.navigate(ui_biz_routerKey.bi_biz_biological_edit, editPageParams)
507
- }}>
508
- <Image source={{ uri: res.biorhythom_add }} style={{ height: cx(24), width: cx(24), tintColor: props.theme?.icon.primary }} />
509
- </TouchableOpacity>
510
- </>
465
+ <>
466
+ <Text
467
+ style={{
468
+ fontSize: cx(16),
469
+ fontWeight: 'bold',
470
+ color: props.theme?.global.fontColor,
471
+ }}>{I18n.getLang('bio_ryhthm_default_subheadline_text')}</Text>
472
+ <TouchableOpacity
473
+ onPress={() => {
474
+ const ids: number[] = state.planList.map(p => p.index)
475
+ const newPlan: Plan = {
476
+ index: Math.max(...ids) + 1,
477
+ icon: res.rhythm_icon1,
478
+ time: 0,
479
+ name: '',
480
+ colorTemperature: 0,
481
+ brightness: 100,
482
+ action: [
483
+ {
484
+ uri: 'model/attribute/set/LightCtrl/ColorTemperature',
485
+ startValue: `${colorTemperatureValue(0)}`,
486
+ },
487
+ {
488
+ uri: 'model/attribute/set/LightCtrl/Brightness',
489
+ startValue: '100',
490
+ },
491
+ ],
492
+ enable: true,
493
+ iconId: randomIcon(),
494
+ }
495
+ const editPageParams: BiorhythmEditPageParams = {
496
+ planData: newPlan,
497
+ isAdd: true,
498
+ onPlanEdited,
499
+ onPlanDelete,
500
+ minimumEnable,
501
+ nameRepeat,
502
+ iconIdList: state.planList?.map(item => {
503
+ return item.iconId
504
+ }),
505
+ isMixRGBWLamp: !!params.isMixLight,
506
+ isSupportTemperature: params.isSupportTemperature,
507
+ isSupportBrightness: params.isSupportBrightness,
508
+ showDeleteBtn
509
+ }
510
+ navigation.navigate(ui_biz_routerKey.bi_biz_biological_edit, editPageParams)
511
+ }}>
512
+ <Image source={{ uri: res.biorhythom_add }} style={{ height: cx(24), width: cx(24), tintColor: props.theme?.icon.primary }} />
513
+ </TouchableOpacity>
514
+ </>
511
515
  }
512
516
  </View>
513
517
  <FlatList
@@ -23,7 +23,7 @@ const SwitchInching = (props: { theme?: ThemeType }) => {
23
23
  const navigation = useNavigation()
24
24
  const [switchInching, setSwitchInching] = useSwitchInching(params.switchIngCode)
25
25
  const [checkConflict, resolveConflict] = useConflictTask(params.conflictDps, true)
26
- const [countdowns, setCountdowns] = useCountdowns(params.countdownCode || params.channelConfig?.map(item => item.countdownCode) || [])
26
+ const [countdowns, setCountdowns] = useCountdowns(params.countdownCode || params.channelConfig.map(item => item.countdownCode))
27
27
  const timeRef = useRef({
28
28
  minute: '00',
29
29
  second: '00',
@@ -41,23 +41,23 @@ const SwitchInching = (props: { theme?: ThemeType }) => {
41
41
  const updateTime = (minute?: string, second?: string) => {
42
42
  if (minute !== undefined) timeRef.current.minute = minute;
43
43
  if (second !== undefined) timeRef.current.second = second;
44
-
44
+
45
45
  if (!Number(timeRef.current.minute) && Number(timeRef.current.second) < 1) {
46
46
  timeRef.current.second = '01';
47
47
  }
48
-
48
+
49
49
  if (Number(timeRef.current.minute) === 60) {
50
50
  timeRef.current.second = '00';
51
51
  }
52
-
52
+
53
53
  const time = Number(timeRef.current.minute) * 60 + Number(timeRef.current.second);
54
54
  const newSwitchInchingItem = {
55
55
  ...state.switchInchingItem,
56
56
  time
57
57
  };
58
-
58
+
59
59
  updateState({ switchInchingItem: newSwitchInchingItem });
60
-
60
+
61
61
  };
62
62
 
63
63
  const switchInchingItem = useMemo(() => {
@@ -73,11 +73,8 @@ const SwitchInching = (props: { theme?: ThemeType }) => {
73
73
  const saveInchingConfig = async (item: SwitchInchingItem) => {
74
74
  const updatedSwitchInching = [...switchInching];
75
75
  const existingItemIndex = updatedSwitchInching.findIndex(item => item.channel === state.channel);
76
- if (existingItemIndex === -1) {
77
- updatedSwitchInching.push(item);
78
- } else {
79
- updatedSwitchInching[existingItemIndex] = item;
80
- }
76
+ updatedSwitchInching[existingItemIndex] = item;
77
+ console.log('updatedSwitchInching', updatedSwitchInching)
81
78
  await setSwitchInching(updatedSwitchInching)
82
79
  }
83
80
 
@@ -146,18 +143,18 @@ const SwitchInching = (props: { theme?: ThemeType }) => {
146
143
  >
147
144
  <ScrollView nestedScrollEnabled={true}>
148
145
  {params.channelConfig && params.channelConfig.length > 1 && <>
149
- <Segmented
150
- style={{ marginHorizontal: cx(24) }}
151
- options={params.channelConfig.map(item => ({
152
- label: item.channelTitle,
153
- value: item.channel
154
- }))}
155
- value={state.channel}
156
- onChange={v => {
157
- updateState({ channel: Number(v) })
158
- }}
159
- />
160
- <Spacer />
146
+ <Segmented
147
+ style={{ marginHorizontal: cx(24) }}
148
+ options={params.channelConfig.map(item => ({
149
+ label: item.channelTitle,
150
+ value: item.channel
151
+ }))}
152
+ value={state.channel}
153
+ onChange={v => {
154
+ updateState({ channel: Number(v) })
155
+ }}
156
+ />
157
+ <Spacer />
161
158
  </>}
162
159
  <View style={styles.switchContainer}>
163
160
  <View style={styles.switchCardContainer}>
@@ -3,15 +3,14 @@ import { Result } from "@ledvance/base/src/models/modules/Result"
3
3
  import { useDp } from "@ledvance/base/src/models/modules/NativePropsSlice";
4
4
  import { spliceByStep } from '@ledvance/base/src/utils/common';
5
5
  import { Utils } from '@tuya/tuya-panel-lamp-sdk'
6
- import {useEffect, useState} from "react";
7
6
 
8
7
  const { to16 } = Utils
9
8
  export interface SwitchInchingPageParams {
10
9
  switchIngCode: string
11
10
  countdownCode?: string
12
11
  channelConfig?: {
13
- countdownCode: string
14
- channelTitle: string
12
+ countdownCode: string
13
+ channelTitle: string
15
14
  channel: number
16
15
  }[]
17
16
  conflictDps: {
@@ -32,20 +31,20 @@ export function useCountdowns(countdownCodes: string | string[]): [Record<string
32
31
  const codes = Array.isArray(countdownCodes) ? countdownCodes : [countdownCodes];
33
32
  const countdownValues: Record<string, number> = {};
34
33
  const dpSetters: Record<string, (value: number) => Promise<Result<any>>> = {};
35
-
34
+
36
35
  for (const code of codes) {
37
36
  const [value, setDp] = useDp<number, any>(code);
38
37
  countdownValues[code] = value;
39
38
  dpSetters[code] = setDp;
40
39
  }
41
-
40
+
42
41
  const setCountdown = async (countdownCode: string, value: number) => {
43
42
  if (dpSetters[countdownCode]) {
44
43
  return await dpSetters[countdownCode](value);
45
44
  }
46
45
  return { success: false, msg: 'Countdown code not found' } as Result<any>;
47
46
  };
48
-
47
+
49
48
  return [countdownValues, setCountdown];
50
49
  }
51
50
 
@@ -57,19 +56,15 @@ export const defSwitchInching = [{ enable: false, channel: 0, time: 1 }]
57
56
 
58
57
  export const useSwitchInching = (switchInchingCode: string) => {
59
58
  const [hex, setHex] = useSwitchInchingHex(switchInchingCode)
60
- const [value, setValue] = useState(defSwitchInching)
61
- useEffect(() => {
62
- const switching = hex ? spliceByStep(Buffer.from(hex, 'base64').toString('hex'), 6).map(item => {
63
- const powerInfo = parseInt(`${item.slice(0, 2)}`, 16).toString(2).padStart(8, '0');
64
- const powerBits = powerInfo.split('');
65
- const enable = !!Number(powerBits[powerBits.length - 1]);
66
- // 通道号
67
- const channel = parseInt(powerBits.slice(1, powerBits.length - 1).join(''), 2);
68
- const time = parseInt(item.slice(2, 6), 16)
69
- return { enable, channel, time }
70
- }) : defSwitchInching
71
- setValue(switching)
72
- }, [hex]);
59
+ const switching = hex ? spliceByStep(Buffer.from(hex, 'base64').toString('hex'), 6).map(item => {
60
+ const powerInfo = parseInt(`${item.slice(0, 2)}`, 16).toString(2).padStart(8, '0');
61
+ const powerBits = powerInfo.split('');
62
+ const enable = !!Number(powerBits[powerBits.length - 1]);
63
+ // 通道号
64
+ const channel = parseInt(powerBits.slice(1, powerBits.length - 1).join(''), 2);
65
+ const time = parseInt(item.slice(2, 6), 16)
66
+ return { enable, channel, time }
67
+ }) : defSwitchInching
73
68
 
74
69
  const setSwitchInching = (switching: SwitchInchingItem[]) => {
75
70
  const inchingString = switching.map(item => {
@@ -80,9 +75,8 @@ export const useSwitchInching = (switchInchingCode: string) => {
80
75
  return powerChannelStr + timeHex
81
76
  }).join('')
82
77
  const inchingHex = Buffer.from(inchingString, 'hex').toString('base64')
83
- setValue(switching)
84
78
  return setHex(inchingHex)
85
79
  }
86
- return [value, setSwitchInching] as const
80
+ return [switching, setSwitchInching] as const
87
81
  }
88
82