Skip to content

Commit 59d0b4f

Browse files
committed
Merge branch 'master' into release
2 parents 5de41a5 + 8505bbf commit 59d0b4f

File tree

108 files changed

+2278
-495
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

108 files changed

+2278
-495
lines changed

demo/src/assets/svgs/headerLogo.svg

Lines changed: 11 additions & 0 deletions
Loading

demo/src/configurations.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ Assets.loadAssetsGroup('images.demo', {
1414
brokenImage: require('./assets/images/placeholderMissingImage.png')
1515
});
1616

17+
Assets.loadAssetsGroup('svgs.demo', {
18+
logo: require('./assets/svgs/headerLogo.svg').default
19+
});
20+
1721
Typography.loadTypographies({
1822
h1: {...Typography.text40},
1923
h2: {...Typography.text50},

demo/src/index.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@ module.exports = {
5858
get ChipsInputScreen() {
5959
return require('./screens/componentScreens/ChipsInputScreen').default;
6060
},
61+
get HapticScreen() {
62+
return require('./screens/componentScreens/HapticScreen').default;
63+
},
6164
get HintsScreen() {
6265
return require('./screens/componentScreens/HintsScreen').default;
6366
},
@@ -91,6 +94,9 @@ module.exports = {
9194
get RadioButtonScreen() {
9295
return require('./screens/componentScreens/RadioButtonScreen').default;
9396
},
97+
get SegmentedControlScreen() {
98+
return require('./screens/componentScreens/SegmentedControlScreen').default;
99+
},
94100
get SharedTransitionScreen() {
95101
return require('./screens/componentScreens/SharedTransitionScreen').default;
96102
},

demo/src/screens/MenuStructure.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ export const navigationData = {
5656
{title: 'Picker', tags: 'picker form', screen: 'unicorn.components.PickerScreen'},
5757
{title: 'DateTimePicker', tags: 'date time picker form', screen: 'unicorn.components.DateTimePickerScreen'},
5858
{title: 'RadioButton', tags: 'radio button group controls', screen: 'unicorn.components.RadioButtonScreen'},
59+
{title: 'SegmentedControl', tags: 'segmented control switch toggle', screen: 'unicorn.components.SegmentedControlScreen'},
5960
{title: 'Stepper', tags: 'stepper form', screen: 'unicorn.components.StepperScreen'},
6061
{title: 'Slider', tags: 'slider', screen: 'unicorn.components.SliderScreen'},
6162
{title: 'Switch', tags: 'switch toggle', screen: 'unicorn.components.SwitchScreen'},
@@ -138,6 +139,7 @@ export const navigationData = {
138139
title: 'Animations & Gestures',
139140
screens: [
140141
{title: 'Animated Image', tags: 'animated image', screen: 'unicorn.components.AnimatedImageScreen'},
142+
{title: 'Haptic feedback', tags: 'haptic feedback', screen: 'unicorn.components.HapticScreen'},
141143
{title: 'ProgressiveImage', tags: 'progressive image cover overlay', screen: 'unicorn.components.ProgressiveImageScreen'},
142144
{title: 'List Animations', tags: 'animated card', screen: 'unicorn.animations.ListAnimationsScreen'},
143145
{title: 'Card Animations', tags: 'animated card', screen: 'unicorn.animations.CardAnimationsScreen'},

demo/src/screens/componentScreens/ChipScreen.tsx

Lines changed: 91 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,90 @@
1+
import _ from 'lodash';
12
import React, {Component} from 'react';
23
import {Alert} from 'react-native';
3-
import {Chip, Colors, Spacings, Text, Typography, View} from 'react-native-ui-lib';
4+
import {Chip, Colors, Spacings, Text, Typography, View, Dialog, WheelPickerDialog} from 'react-native-ui-lib';
45

56
const avatarImage = {
67
uri: 'https://randomuser.me/api/portraits/women/24.jpg'
78
};
89
const checkmark = require('../../assets/icons/check-small.png');
10+
const chevron = require('../../assets/icons/chevronDown.png');
11+
912

1013
export default class ChipScreen extends Component {
14+
15+
colors = [
16+
{value: Colors.red10, label: 'Red'},
17+
{value: Colors.blue10, label: 'Blue'},
18+
{value: Colors.purple10, label: 'Purple'},
19+
{value: Colors.green10, label: 'Green'},
20+
{value: Colors.yellow10, label: 'Yellow'}
21+
];
22+
23+
state = {
24+
showDialog: false,
25+
selectedValue: this.colors[2].label
26+
};
27+
28+
toggleDialog = (showDialog: boolean) => {
29+
this.setState({showDialog});
30+
};
31+
32+
openDialog = () => {
33+
this.toggleDialog(true);
34+
}
35+
36+
closeDialog = () => {
37+
this.toggleDialog(false);
38+
};
39+
40+
onSelect = (itemValue: string) => {
41+
const values = _.filter(this.colors, {value: itemValue});
42+
if (values.length > 0) {
43+
this.setState({selectedValue: values[0].label});
44+
}
45+
this.closeDialog();
46+
};
47+
48+
renderItem = ({item: color}) => {
49+
return (
50+
<Text text50 margin-20 color={color.value}>
51+
{color.label}
52+
</Text>
53+
);
54+
};
55+
56+
renderContent = () => {
57+
const {selectedValue} = this.state;
58+
59+
return (
60+
<WheelPickerDialog
61+
items={this.colors}
62+
selectedValue={selectedValue}
63+
onSelect={this.onSelect}
64+
onCancel={this.closeDialog}
65+
wheelPickerProps={{
66+
style: {width: 200}
67+
}}
68+
/>
69+
);
70+
};
71+
72+
renderPickerDialog = () => {
73+
const {showDialog} = this.state;
74+
75+
return (
76+
<Dialog
77+
migrate
78+
visible={showDialog}
79+
useSafeArea
80+
bottom
81+
onDismiss={this.closeDialog}
82+
>
83+
{this.renderContent()}
84+
</Dialog>
85+
);
86+
};
87+
1188
renderExample = (text: string, chip: JSX.Element) => {
1289
return (
1390
<View row spread marginB-12>
@@ -20,22 +97,23 @@ export default class ChipScreen extends Component {
2097
render() {
2198
return (
2299
<View style={{padding: 20}}>
100+
{this.state.showDialog && this.renderPickerDialog()}
23101
<Text marginB-20 text40>
24102
Chip
25103
</Text>
26104
<Text marginB-10 text70BO>
27105
Default
28106
</Text>
29107
{this.renderExample(
30-
'label',
108+
'Label',
31109
<Chip label={'Chip'}/>
32110
)}
33111
{this.renderExample(
34-
'label with onPress',
112+
'Label + onPress',
35113
<Chip label={'Chip'} onPress={() => Alert.alert('onPress')}/>
36114
)}
37115
{this.renderExample(
38-
'label + onDismiss',
116+
'Label + onDismiss',
39117
<Chip
40118
label={'Chip'}
41119
iconColor={Colors.black}
@@ -62,31 +140,31 @@ export default class ChipScreen extends Component {
62140
/>
63141
)}
64142
{this.renderExample(
65-
'Right icon',
143+
'Right icon + onPress + dynamic label',
66144
<Chip
67-
label={'Chip'}
68-
rightIconSource={checkmark}
69-
iconStyle={{width: 24, height: 24}}
70-
iconProps={{tintColor: Colors.black}}
145+
label={this.state.selectedValue}
146+
rightIconSource={chevron}
147+
iconStyle={{margin: 8}}
148+
onPress={this.openDialog}
71149
/>
72150
)}
73151
{this.renderExample(
74-
'label + Avatar',
152+
'Label + Avatar',
75153
<Chip
76154
label={'Chip'}
77155
avatarProps={{source: avatarImage, size: 20}}
78156
/>
79157
)}
80158
{this.renderExample(
81-
'label + Badge',
159+
'Label + Counter',
82160
<Chip
83161
label={'Chip'}
84162
labelStyle={{
85163
marginRight: undefined
86164
}}
165+
useCounter
87166
badgeProps={{
88167
label: '4',
89-
backgroundColor: 'transparent',
90168
labelStyle: {
91169
...Typography.text80R,
92170
color: Colors.grey20
@@ -95,7 +173,7 @@ export default class ChipScreen extends Component {
95173
/>
96174
)}
97175
{this.renderExample(
98-
'label + Badge',
176+
'Label + Badge',
99177
<Chip
100178
label={'Chip'}
101179
badgeProps={{

demo/src/screens/componentScreens/DialogScreen.js

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@ export default class DialogScreen extends Component {
5555
scroll: this.SCROLL_TYPE.NONE,
5656
showHeader: true,
5757
isRounded: true,
58-
showDialog: false
58+
showDialog: false,
59+
ignoreBackgroundPress: false
5960
};
6061
}
6162

@@ -93,6 +94,12 @@ export default class DialogScreen extends Component {
9394
});
9495
};
9596

97+
toggleIgnoreBackgroundPress = () => {
98+
this.setState({
99+
ignoreBackgroundPress: !this.state.ignoreBackgroundPress
100+
});
101+
};
102+
96103
showDialog = () => {
97104
this.setState({showDialog: true});
98105
};
@@ -222,7 +229,7 @@ Scroll: ${scroll}`;
222229
};
223230

224231
renderDialog = () => {
225-
const {showDialog, panDirection, position, scroll, showHeader, isRounded} = this.state;
232+
const {showDialog, panDirection, position, scroll, showHeader, isRounded, ignoreBackgroundPress} = this.state;
226233
const renderPannableHeader = showHeader ? this.renderPannableHeader : undefined;
227234
const height = scroll !== this.SCROLL_TYPE.NONE ? '70%' : undefined;
228235

@@ -241,14 +248,15 @@ Scroll: ${scroll}`;
241248
renderPannableHeader={renderPannableHeader}
242249
pannableHeaderProps={this.pannableTitle}
243250
supportedOrientations={this.supportedOrientations}
251+
ignoreBackgroundPress={ignoreBackgroundPress}
244252
>
245253
{this.renderContent()}
246254
</Dialog>
247255
);
248256
};
249257

250258
render() {
251-
const {panDirection, position, scroll, showHeader, isRounded} = this.state;
259+
const {panDirection, position, scroll, showHeader, isRounded, ignoreBackgroundPress} = this.state;
252260

253261
return (
254262
<ScrollView>
@@ -296,6 +304,11 @@ Scroll: ${scroll}`;
296304
<Switch value={isRounded} onValueChange={this.toggleIsRounded} marginL-10/>
297305
</View>
298306

307+
<View row marginT-20 centerV>
308+
<Text>Ignore Background Press:</Text>
309+
<Switch value={ignoreBackgroundPress} onValueChange={this.toggleIgnoreBackgroundPress} marginL-10/>
310+
</View>
311+
299312
<Button marginT-50 label={'Show dialog'} onPress={this.showDialog}/>
300313

301314
{this.renderDialog()}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import _ from 'lodash';
2+
import React, {Component} from 'react';
3+
import {ScrollView} from 'react-native';
4+
import {View, Text, Button, HapticService} from 'react-native-ui-lib';
5+
6+
export default class HapticScreen extends Component {
7+
onPress = ({method}: {method: string}) => {
8+
HapticService.triggerHaptic(method, 'HapticScreen');
9+
};
10+
11+
render() {
12+
return (
13+
<ScrollView showsVerticalScrollIndicator={false} keyboardShouldPersistTaps="always">
14+
<View padding-20>
15+
<Text text30 dark10 marginB-20>
16+
Haptic Screen
17+
</Text>
18+
19+
{_.map(HapticService.HapticMethods, method => {
20+
return <Button marginV-8 marginH-60 label={method} key={method} onPress={() => this.onPress({method})}/>;
21+
})}
22+
</View>
23+
</ScrollView>
24+
);
25+
}
26+
}

0 commit comments

Comments
 (0)