Skip to content

Commit 56ec929

Browse files
authored
Demo screen support injected ui (#855)
* WIP, added injectable ui prop to render extra settings component in demo settings screen * Added support injecting extra ui component to the setting screen, with ability to controll the 'refresh app' message as a prop * Support injecting extra ui comonent to the settings screen. * Removed show-toast injected code (now handled by the caller) * removed redundant state value
1 parent f9eb7cc commit 56ec929

File tree

2 files changed

+16
-7
lines changed

2 files changed

+16
-7
lines changed

demo/src/screens/MainScreen.js

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,11 @@ class MainScreen extends Component {
1515
static propTypes = {
1616
containerStyle: ViewPropTypes.style,
1717
renderItem: PropTypes.func,
18-
pageStyle: ViewPropTypes.style
18+
pageStyle: ViewPropTypes.style
1919
};
2020

21+
settingsScreenName = 'unicorn.Settings';
22+
2123
static options() {
2224
return {
2325
topBar: {
@@ -63,8 +65,12 @@ class MainScreen extends Component {
6365

6466
if (buttonId === 'uilib.settingsButton') {
6567
this.pushScreen({
66-
name: 'unicorn.Settings',
67-
passProps: {navigationData: data, playground: this.props.playground}
68+
name: this.settingsScreenName,
69+
passProps: {
70+
navigationData: data,
71+
playground: this.props.playground,
72+
extraSettingsUI: this.props.extraSettingsUI
73+
}
6874
});
6975
}
7076
};
@@ -73,6 +79,7 @@ class MainScreen extends Component {
7379
Navigation.push(this.props.componentId, {
7480
component: {
7581
name: options.name || options.screen,
82+
id: this.settingsScreenName,
7683
passProps: options.passProps,
7784
options: {
7885
topBar: {

demo/src/screens/SettingsScreen.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import {StyleSheet, I18nManager} from 'react-native';
55
import {Colors, View, Text, Picker, Toast, Switch} from 'react-native-ui-lib'; //eslint-disable-line
66
import {navigationData} from './MenuStructure';
77

8-
98
const none = {label: '[None]', value: ''};
109
const playgroundScreen = {label: 'Playground', value: 'unicorn.PlaygroundScreen'};
1110

@@ -15,7 +14,7 @@ class SettingsScreen extends Component {
1514

1615
const data = props.navigationData || navigationData;
1716
const playground = props.playground || playgroundScreen;
18-
17+
1918
this.state = {
2019
showRefreshMessage: false,
2120
screens: [
@@ -62,8 +61,9 @@ class SettingsScreen extends Component {
6261

6362
render() {
6463
const {defaultScreen, showRefreshMessage, isRTL, screens} = this.state;
64+
const {extraSettingsUI} = this.props;
6565
const filteredScreens = _.filter(screens, screen => !_.isUndefined(screen.value));
66-
66+
6767
return (
6868
<View flex padding-25 bg-grey80>
6969
<View flex>
@@ -82,7 +82,7 @@ class SettingsScreen extends Component {
8282
<Picker.Item key={screen.value} value={screen}/>
8383
))}
8484
</Picker>
85-
85+
8686
<View style={{borderWidth: 1, borderColor: Colors.dark70, marginTop: 40}}>
8787
<View style={[{padding: 5, borderBottomWidth: 1}, styles.block]}>
8888
<Text text80 dark20>Current layout direction</Text>
@@ -99,6 +99,8 @@ class SettingsScreen extends Component {
9999
<Text text80 dark20>Force RTL</Text>
100100
</View>
101101
</View>
102+
103+
{extraSettingsUI?.()}
102104
</View>
103105

104106
<Text text30 dark10>Settings</Text>

0 commit comments

Comments
 (0)