@ledvance/ui-biz-bundle 1.1.68 → 1.1.70

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,267 +1,267 @@
1
- import React, { useCallback, useMemo } from 'react'
2
- import { Image, ScrollView, StyleSheet, Text, TouchableOpacity, View } from 'react-native'
3
- import { useNavigation, useRoute } from '@react-navigation/native'
4
- import { TimerPicker, Utils } from 'tuya-panel-kit'
5
- import { useReactive } from 'ahooks'
6
- import { colorTemperatureValue, Plan } from './BiorhythmBean'
7
- import iconList from './iconListData'
8
- import I18n from '@ledvance/base/src/i18n'
9
- import TextField from '@ledvance/base/src/components/TextField'
10
- import BiologicalRes from './res/BiologicalRes'
11
- import { cctToColor } from '@ledvance/base/src/utils/cctUtils'
12
- import ColorTempAdjustView from '@ledvance/base/src/components/ColorTempAdjustView'
13
- import DeleteButton from '@ledvance/base/src/components/DeleteButton'
14
- import res from '@ledvance/base/src/res'
15
- import { ui_biz_routerKey } from "../../navigation/Routers";
16
- import { cloneDeep, isEqual } from 'lodash'
17
- import { useSystemTimeFormate } from '@ledvance/base/src/models/modules/NativePropsSlice'
18
- import Page from '@ledvance/base/src/components/Page'
19
- import Card from '@ledvance/base/src/components/Card'
20
- import Spacer from '@ledvance/base/src/components/Spacer'
21
- import { showDialog } from '@ledvance/base/src/utils/common'
22
-
23
- const cx = Utils.RatioUtils.convertX
24
-
25
- export interface BiorhythmEditPageParams {
26
- planData: Plan
27
- isAdd: boolean
28
- onPlanEdited: (isAdd: boolean, plan: Plan) => void
29
- onPlanDelete: (id: number) => void
30
- minimumEnable: (plan: Plan) => boolean
31
- nameRepeat: (plan: Plan) => boolean
32
- iconIdList?: any
33
- isMixRGBWLamp: boolean
34
- isSupportTemperature: boolean
35
- isSupportBrightness: boolean
36
- showDeleteBtn?: boolean
37
- }
38
-
39
- const BiorhythmEditPage = () => {
40
- const navigation = useNavigation()
41
- const route = useRoute<any>()
42
- const {
43
- planData,
44
- isAdd,
45
- onPlanEdited,
46
- onPlanDelete,
47
- minimumEnable,
48
- nameRepeat,
49
- iconIdList,
50
- isMixRGBWLamp,
51
- isSupportTemperature,
52
- isSupportBrightness,
53
- showDeleteBtn
54
- } = route.params as BiorhythmEditPageParams
55
- const is24Hour = useSystemTimeFormate()
56
- const state = useReactive({
57
- iconIdList,
58
- planData: cloneDeep(planData),
59
- backStatus: false,
60
- })
61
-
62
- const onTopBarRightBtnClick = useCallback(() => {
63
- if (state.backStatus) return
64
- state.backStatus = true
65
- onPlanEdited(isAdd, {
66
- ...state.planData,
67
- icon: iconList?.find(val => val?.id === state.planData.iconId)?.icon || '',
68
- })
69
- state.backStatus = false
70
- navigation.goBack()
71
- }, [state.backStatus, state.planData])
72
-
73
- const onDeleteBtnClick = useCallback(() => {
74
- onPlanDelete(state.planData.index)
75
- navigation.goBack()
76
- }, [])
77
-
78
-
79
- const minimumTipEnable = () => {
80
- const enable = minimumEnable(state.planData)
81
- return enable
82
- }
83
-
84
- const setImg = () => {
85
- const imgIcon = iconList?.find(val => val?.id === state.planData.iconId)?.icon || ''
86
- return imgIcon
87
- }
88
-
89
- const nameRepeatFlag = useMemo(() =>{
90
- return nameRepeat(state.planData)
91
- }, [state.planData.name])
92
-
93
- const checkBiorhythmDataChanged = useMemo(() =>{
94
- return isEqual(state.planData, planData)
95
- }, [JSON.stringify(state.planData), planData])
96
-
97
- const canSaveMoodData = useMemo(() =>{
98
- return state.planData.name.length > 0 && state.planData.name.length < 33 && !nameRepeatFlag && !checkBiorhythmDataChanged && !minimumTipEnable()
99
- }, [nameRepeatFlag, state.planData.name, checkBiorhythmDataChanged])
100
-
101
- return (
102
- <Page
103
- backText={I18n.getLang('add_new_trigger_time_system_back_text')}
104
- loading={state.backStatus}
105
- backDialogTitle={I18n.getLang('manage_user_unsaved_changes_dialog_headline')}
106
- backDialogContent={I18n.getLang('cancel_dialog_leave_unsaved_bio_rhythm_note')}
107
- showBackDialog={!checkBiorhythmDataChanged}
108
- rightButtonIcon={canSaveMoodData ? res.ic_check : res.ic_uncheck}
109
- rightButtonIconClick={canSaveMoodData ? onTopBarRightBtnClick : undefined}
110
- headlineText={I18n.getLang(isAdd ? 'add_new_trigger_time_headline_text' : 'edit_trigger_time_headline_text')}
111
- >
112
- <ScrollView>
113
- <View
114
- style={{
115
- marginHorizontal: cx(24),
116
- backgroundColor: '#fff',
117
- }}>
118
- <View style={{ height: cx(20) }} />
119
- <TextField
120
- value={state.planData.name}
121
- showError={state.planData.name?.length > 32 || nameRepeatFlag}
122
- maxLength={33}
123
- tipColor={nameRepeatFlag ? '#f00' : undefined}
124
- errorText={I18n.getLang(nameRepeatFlag ? 'string_light_pp_field_sm_add_error1' : 'add_new_dynamic_mood_alert_text')}
125
- placeholder={I18n.getLang('add_new_trigger_time_inputfield_value_text')}
126
- onChangeText={text => {
127
- state.planData.name = text
128
- }} />
129
-
130
- <View style={{ height: cx(20) }} />
131
- <TimerPicker
132
- itemTextColor='#aeadb5'
133
- style={{ paddingVertical: cx(0), marginVertical: cx(0) }}
134
- is12Hours={!is24Hour}
135
- singlePicker={true}
136
- amText={I18n.getLang('manage_user_calendar_label_am')}
137
- pmText={I18n.getLang('manage_user_calendar_label_pm')}
138
- startTime={state.planData.time}
139
- symbol={''}
140
- onTimerChange={(time) => {
141
- state.planData.time = time
142
- }}
143
- />
144
- {minimumTipEnable() && <View style={{ flexDirection: 'row', marginVertical: cx(5) }}>
145
- <Image style={{ width: cx(16), height: cx(16), tintColor: '#000' }} source={res.ic_info} />
146
- <Text
147
- style={{ color: '#000', fontSize: cx(12) }}>{I18n.getLang('add_new_trigger_time_information_text')}</Text>
148
- </View>}
149
- <View style={{ height: cx(20) }} />
150
- <View style={{ flexDirection: 'row' }}>
151
- <View style={{ flex: 1 }}>
152
- <Text style={{ fontSize: cx(14) }}>{I18n.getLang(isAdd ? 'add_new_trigger_time_text' : 'edit_trigger_time_headline_text')}</Text>
153
- </View>
154
- <TouchableOpacity
155
- activeOpacity={1}
156
- onPress={() => {
157
- navigation.navigate(ui_biz_routerKey.bi_biz_biological_icon_select, {
158
- id: state?.planData.iconId,
159
- setIcon: (id) => {
160
- state.planData.iconId = id
161
- },
162
- iconIdList: state.iconIdList,
163
- })
164
- }}
165
- >
166
- <View
167
- style={{ flex: 1, flexDirection: 'row', justifyContent: 'flex-end', alignContent: 'center', alignItems: 'center' }}>
168
- <Image
169
- style={{ width: cx(24), height: cx(24), tintColor: '#000' }}
170
- source={setImg()}
171
- />
172
- <Image style={{ width: cx(16), height: cx(16) }} source={BiologicalRes.biorhythom_select_rightIcon} />
173
- </View>
174
- </TouchableOpacity>
175
- </View>
176
- <Text
177
- style={{ fontSize: cx(16), fontFamily: 'helvetica_neue_lt_std_bd', marginTop: cx(33), marginBottom: cx(16) }}>
178
- {I18n.getLang('add_new_trigger_time_subheadline_text')}
179
- </Text>
180
- <Card>
181
- <View style={styles.titleBGView}>
182
- <Text
183
- style={styles.title}>{isMixRGBWLamp ? I18n.getLang('light_sources_tile_main_lighting_headline') : I18n.getLang('light_sources_tile_tw_lighting_headline')}</Text>
184
- {isSupportTemperature && <View style={[
185
- styles.colorBlock,
186
- {
187
- backgroundColor: cctToColor(state.planData.colorTemperature.toFixed()) ?
188
- cctToColor(state.planData.colorTemperature.toFixed()) : '#fff', opacity: 1,
189
- }]}
190
- />}
191
- </View>
192
- <View style={{ paddingBottom: cx(16) }}>
193
- <ColorTempAdjustView
194
- colorTemp={state.planData.colorTemperature}
195
- brightness={Number(state.planData.brightness.toFixed())}
196
- minBrightness={0}
197
- onCCTChange={newValue => {
198
- state.planData.colorTemperature = newValue
199
- state.planData.action[0].startValue = `${colorTemperatureValue(newValue)}`
200
- }}
201
- onCCTChangeComplete={newValue => {
202
- state.planData.colorTemperature = newValue
203
- state.planData.action[0].startValue = `${colorTemperatureValue(newValue)}`
204
- }}
205
- onBrightnessChange={newValue => {
206
- state.planData.brightness = newValue
207
- state.planData.action[1].startValue = `${newValue}`
208
- }}
209
- onBrightnessChangeComplete={newValue => {
210
- state.planData.brightness = newValue
211
- state.planData.action[1].startValue = `${newValue}`
212
- }}
213
- isSupportBrightness={isSupportBrightness}
214
- isSupportTemperature={isSupportTemperature} />
215
- </View>
216
- </Card>
217
- <Spacer />
218
- </View>
219
- {!isAdd && showDeleteBtn &&
220
- <View
221
- style={{
222
- marginHorizontal: cx(24),
223
- marginVertical: cx(20)
224
- }}>
225
- <DeleteButton
226
- text={I18n.getLang('edit_trigger_time_button_delete_text')}
227
- onPress={() =>{
228
- showDialog({
229
- method: 'confirm',
230
- title: I18n.getLang('cancel_dialog_delete_item_bio_rhythm_titel'),
231
- subTitle: I18n.getLang('cancel_dialog_delete_item_wakeupschedule_description'),
232
- onConfirm: async (_, { close }) => {
233
- close()
234
- onDeleteBtnClick()
235
- },
236
- })
237
- }}
238
- />
239
- </View>}
240
- </ScrollView>
241
- </Page>
242
- )
243
- }
244
-
245
-
246
- const styles = StyleSheet.create({
247
- titleBGView: {
248
- flexDirection: 'row',
249
- alignItems: 'center',
250
- paddingHorizontal: cx(16),
251
- },
252
- colorBlock: {
253
- width: cx(20),
254
- height: cx(20),
255
- marginStart: cx(12),
256
- borderRadius: cx(4),
257
- },
258
- title: {
259
- color: '#000',
260
- fontSize: cx(16),
261
- fontFamily: 'helvetica_neue_lt_std_bd',
262
- paddingVertical: cx(16),
263
- },
264
- })
265
-
266
-
267
- export default BiorhythmEditPage
1
+ import React, { useCallback, useMemo } from 'react'
2
+ import { Image, ScrollView, StyleSheet, Text, TouchableOpacity, View } from 'react-native'
3
+ import { useNavigation, useRoute } from '@react-navigation/native'
4
+ import { TimerPicker, Utils } from 'tuya-panel-kit'
5
+ import { useReactive } from 'ahooks'
6
+ import { colorTemperatureValue, Plan } from './BiorhythmBean'
7
+ import iconList from './iconListData'
8
+ import I18n from '@ledvance/base/src/i18n'
9
+ import TextField from '@ledvance/base/src/components/TextField'
10
+ import BiologicalRes from './res/BiologicalRes'
11
+ import { cctToColor } from '@ledvance/base/src/utils/cctUtils'
12
+ import ColorTempAdjustView from '@ledvance/base/src/components/ColorTempAdjustView'
13
+ import DeleteButton from '@ledvance/base/src/components/DeleteButton'
14
+ import res from '@ledvance/base/src/res'
15
+ import { ui_biz_routerKey } from "../../navigation/Routers";
16
+ import { cloneDeep, isEqual } from 'lodash'
17
+ import { useSystemTimeFormate } from '@ledvance/base/src/models/modules/NativePropsSlice'
18
+ import Page from '@ledvance/base/src/components/Page'
19
+ import Card from '@ledvance/base/src/components/Card'
20
+ import Spacer from '@ledvance/base/src/components/Spacer'
21
+ import { showDialog } from '@ledvance/base/src/utils/common'
22
+
23
+ const cx = Utils.RatioUtils.convertX
24
+
25
+ export interface BiorhythmEditPageParams {
26
+ planData: Plan
27
+ isAdd: boolean
28
+ onPlanEdited: (isAdd: boolean, plan: Plan) => void
29
+ onPlanDelete: (id: number) => void
30
+ minimumEnable: (plan: Plan) => boolean
31
+ nameRepeat: (plan: Plan) => boolean
32
+ iconIdList?: any
33
+ isMixRGBWLamp: boolean
34
+ isSupportTemperature: boolean
35
+ isSupportBrightness: boolean
36
+ showDeleteBtn?: boolean
37
+ }
38
+
39
+ const BiorhythmEditPage = () => {
40
+ const navigation = useNavigation()
41
+ const route = useRoute<any>()
42
+ const {
43
+ planData,
44
+ isAdd,
45
+ onPlanEdited,
46
+ onPlanDelete,
47
+ minimumEnable,
48
+ nameRepeat,
49
+ iconIdList,
50
+ isMixRGBWLamp,
51
+ isSupportTemperature,
52
+ isSupportBrightness,
53
+ showDeleteBtn
54
+ } = route.params as BiorhythmEditPageParams
55
+ const is24Hour = useSystemTimeFormate()
56
+ const state = useReactive({
57
+ iconIdList,
58
+ planData: cloneDeep(planData),
59
+ backStatus: false,
60
+ })
61
+
62
+ const onTopBarRightBtnClick = useCallback(() => {
63
+ if (state.backStatus) return
64
+ state.backStatus = true
65
+ onPlanEdited(isAdd, {
66
+ ...state.planData,
67
+ icon: iconList?.find(val => val?.id === state.planData.iconId)?.icon || '',
68
+ })
69
+ state.backStatus = false
70
+ navigation.goBack()
71
+ }, [state.backStatus, state.planData])
72
+
73
+ const onDeleteBtnClick = useCallback(() => {
74
+ onPlanDelete(state.planData.index)
75
+ navigation.goBack()
76
+ }, [])
77
+
78
+
79
+ const minimumTipEnable = () => {
80
+ const enable = minimumEnable(state.planData)
81
+ return enable
82
+ }
83
+
84
+ const setImg = () => {
85
+ const imgIcon = iconList?.find(val => val?.id === state.planData.iconId)?.icon || ''
86
+ return imgIcon
87
+ }
88
+
89
+ const nameRepeatFlag = useMemo(() =>{
90
+ return nameRepeat(state.planData)
91
+ }, [state.planData.name])
92
+
93
+ const checkBiorhythmDataChanged = useMemo(() =>{
94
+ return isEqual(state.planData, planData)
95
+ }, [JSON.stringify(state.planData), planData])
96
+
97
+ const canSaveMoodData = useMemo(() =>{
98
+ return state.planData.name.length > 0 && state.planData.name.length < 33 && !nameRepeatFlag && !checkBiorhythmDataChanged && !minimumTipEnable()
99
+ }, [nameRepeatFlag, state.planData.name, checkBiorhythmDataChanged])
100
+
101
+ return (
102
+ <Page
103
+ backText={I18n.getLang('add_new_trigger_time_system_back_text')}
104
+ loading={state.backStatus}
105
+ backDialogTitle={I18n.getLang('manage_user_unsaved_changes_dialog_headline')}
106
+ backDialogContent={I18n.getLang('cancel_dialog_leave_unsaved_bio_rhythm_note')}
107
+ showBackDialog={!checkBiorhythmDataChanged}
108
+ rightButtonIcon={canSaveMoodData ? res.ic_check : res.ic_uncheck}
109
+ rightButtonIconClick={canSaveMoodData ? onTopBarRightBtnClick : undefined}
110
+ headlineText={I18n.getLang(isAdd ? 'add_new_trigger_time_headline_text' : 'edit_trigger_time_headline_text')}
111
+ >
112
+ <ScrollView>
113
+ <View
114
+ style={{
115
+ marginHorizontal: cx(24),
116
+ backgroundColor: '#fff',
117
+ }}>
118
+ <View style={{ height: cx(20) }} />
119
+ <TextField
120
+ value={state.planData.name}
121
+ showError={state.planData.name?.length > 32 || nameRepeatFlag}
122
+ maxLength={33}
123
+ tipColor={nameRepeatFlag ? '#f00' : undefined}
124
+ errorText={I18n.getLang(nameRepeatFlag ? 'string_light_pp_field_sm_add_error1' : 'add_new_dynamic_mood_alert_text')}
125
+ placeholder={I18n.getLang('add_new_trigger_time_inputfield_value_text')}
126
+ onChangeText={text => {
127
+ state.planData.name = text
128
+ }} />
129
+
130
+ <View style={{ height: cx(20) }} />
131
+ <TimerPicker
132
+ itemTextColor='#aeadb5'
133
+ style={{ paddingVertical: cx(0), marginVertical: cx(0) }}
134
+ is12Hours={!is24Hour}
135
+ singlePicker={true}
136
+ amText={I18n.getLang('manage_user_calendar_label_am')}
137
+ pmText={I18n.getLang('manage_user_calendar_label_pm')}
138
+ startTime={state.planData.time}
139
+ symbol={''}
140
+ onTimerChange={(time) => {
141
+ state.planData.time = time
142
+ }}
143
+ />
144
+ {minimumTipEnable() && <View style={{ flexDirection: 'row', marginVertical: cx(5) }}>
145
+ <Image style={{ width: cx(16), height: cx(16), tintColor: '#000' }} source={res.ic_info} />
146
+ <Text
147
+ style={{ color: '#000', fontSize: cx(12) }}>{I18n.getLang('add_new_trigger_time_information_text')}</Text>
148
+ </View>}
149
+ <View style={{ height: cx(20) }} />
150
+ <View style={{ flexDirection: 'row' }}>
151
+ <View style={{ flex: 1 }}>
152
+ <Text style={{ fontSize: cx(14) }}>{I18n.getLang(isAdd ? 'add_new_trigger_time_text' : 'edit_trigger_time_headline_text')}</Text>
153
+ </View>
154
+ <TouchableOpacity
155
+ activeOpacity={1}
156
+ onPress={() => {
157
+ navigation.navigate(ui_biz_routerKey.bi_biz_biological_icon_select, {
158
+ id: state?.planData.iconId,
159
+ setIcon: (id) => {
160
+ state.planData.iconId = id
161
+ },
162
+ iconIdList: state.iconIdList,
163
+ })
164
+ }}
165
+ >
166
+ <View
167
+ style={{ flex: 1, flexDirection: 'row', justifyContent: 'flex-end', alignContent: 'center', alignItems: 'center' }}>
168
+ <Image
169
+ style={{ width: cx(24), height: cx(24), tintColor: '#000' }}
170
+ source={setImg()}
171
+ />
172
+ <Image style={{ width: cx(16), height: cx(16) }} source={BiologicalRes.biorhythom_select_rightIcon} />
173
+ </View>
174
+ </TouchableOpacity>
175
+ </View>
176
+ <Text
177
+ style={{ fontSize: cx(16), fontFamily: 'helvetica_neue_lt_std_bd', marginTop: cx(33), marginBottom: cx(16) }}>
178
+ {I18n.getLang('add_new_trigger_time_subheadline_text')}
179
+ </Text>
180
+ <Card>
181
+ <View style={styles.titleBGView}>
182
+ <Text
183
+ style={styles.title}>{isMixRGBWLamp ? I18n.getLang('light_sources_tile_main_lighting_headline') : I18n.getLang('light_sources_tile_tw_lighting_headline')}</Text>
184
+ {isSupportTemperature && <View style={[
185
+ styles.colorBlock,
186
+ {
187
+ backgroundColor: cctToColor(state.planData.colorTemperature.toFixed()) ?
188
+ cctToColor(state.planData.colorTemperature.toFixed()) : '#fff', opacity: 1,
189
+ }]}
190
+ />}
191
+ </View>
192
+ <View style={{ paddingBottom: cx(16) }}>
193
+ <ColorTempAdjustView
194
+ colorTemp={state.planData.colorTemperature}
195
+ brightness={Number(state.planData.brightness.toFixed())}
196
+ minBrightness={0}
197
+ onCCTChange={newValue => {
198
+ state.planData.colorTemperature = newValue
199
+ state.planData.action[0].startValue = `${colorTemperatureValue(newValue)}`
200
+ }}
201
+ onCCTChangeComplete={newValue => {
202
+ state.planData.colorTemperature = newValue
203
+ state.planData.action[0].startValue = `${colorTemperatureValue(newValue)}`
204
+ }}
205
+ onBrightnessChange={newValue => {
206
+ state.planData.brightness = newValue
207
+ state.planData.action[1].startValue = `${newValue}`
208
+ }}
209
+ onBrightnessChangeComplete={newValue => {
210
+ state.planData.brightness = newValue
211
+ state.planData.action[1].startValue = `${newValue}`
212
+ }}
213
+ isSupportBrightness={isSupportBrightness}
214
+ isSupportTemperature={isSupportTemperature} />
215
+ </View>
216
+ </Card>
217
+ <Spacer />
218
+ </View>
219
+ {!isAdd && showDeleteBtn &&
220
+ <View
221
+ style={{
222
+ marginHorizontal: cx(24),
223
+ marginVertical: cx(20)
224
+ }}>
225
+ <DeleteButton
226
+ text={I18n.getLang('edit_trigger_time_button_delete_text')}
227
+ onPress={() =>{
228
+ showDialog({
229
+ method: 'confirm',
230
+ title: I18n.getLang('cancel_dialog_delete_item_bio_rhythm_titel'),
231
+ subTitle: I18n.getLang('cancel_dialog_delete_item_wakeupschedule_description'),
232
+ onConfirm: async (_, { close }) => {
233
+ close()
234
+ onDeleteBtnClick()
235
+ },
236
+ })
237
+ }}
238
+ />
239
+ </View>}
240
+ </ScrollView>
241
+ </Page>
242
+ )
243
+ }
244
+
245
+
246
+ const styles = StyleSheet.create({
247
+ titleBGView: {
248
+ flexDirection: 'row',
249
+ alignItems: 'center',
250
+ paddingHorizontal: cx(16),
251
+ },
252
+ colorBlock: {
253
+ width: cx(20),
254
+ height: cx(20),
255
+ marginStart: cx(12),
256
+ borderRadius: cx(4),
257
+ },
258
+ title: {
259
+ color: '#000',
260
+ fontSize: cx(16),
261
+ fontFamily: 'helvetica_neue_lt_std_bd',
262
+ paddingVertical: cx(16),
263
+ },
264
+ })
265
+
266
+
267
+ export default BiorhythmEditPage