@ -1,108 +0,0 @@ | |||
import React, { Component } from 'react'; | |||
import { Button, View, StyleSheet, ScrollView, Text, TouchableOpacity } from 'react-native'; | |||
import SearchInput, { createFilter } from 'react-native-search-filter'; | |||
import DeviceInfo from 'react-native-device-info'; | |||
import DatePicker from 'react-native-date-picker-x'; | |||
import locales from '../locales'; | |||
Date.prototype.addHours = function (h) { | |||
this.setTime(this.getTime() + (h * 60 * 60 * 1000)); | |||
return this; | |||
} | |||
export default class Advanced extends Component { | |||
state = { | |||
chosenDate: new Date(), | |||
searchTerm: '', | |||
locale: DeviceInfo.getDeviceLocale(), | |||
textColor: '#000000', | |||
} | |||
render() { | |||
const result = locales.filter(createFilter(this.state.searchTerm)).slice(0, 5); | |||
return ( | |||
<View style={styles.container}> | |||
<DatePicker | |||
date={this.state.chosenDate} | |||
onDateChange={this.setDate} | |||
locale={this.state.locale} | |||
minuteInterval={1} | |||
minimumDate={new Date()} | |||
maximumDate={(new Date()).addHours(24 * 5)} | |||
fadeToColor={this.props.backgroundColor} | |||
textColor={this.state.textColor} | |||
/> | |||
<Text>Current locale: {this.state.locale}</Text> | |||
<Text>Current date: {this.state.chosenDate.toISOString()}</Text> | |||
<Text /> | |||
<Button title='Change date' | |||
onPress={() => this.setState({ | |||
chosenDate: new Date(this.state.chosenDate.getTime() + 86400000) | |||
})} /> | |||
<SearchInput | |||
onChangeText={this.searchUpdated} | |||
style={styles.searchInput} | |||
placeholder="Change locale" | |||
/> | |||
<ScrollView> | |||
{result.map(locale => ( | |||
<TouchableOpacity onPress={() => this.setState({ locale })} key={locale} style={styles.item}> | |||
<Text>{locale}</Text> | |||
</TouchableOpacity> | |||
)) | |||
} | |||
</ScrollView> | |||
<Text /> | |||
<Button title={'Change background color'} onPress={this.changeColors} /> | |||
</View> | |||
); | |||
} | |||
changeColors = () => { | |||
this.props.setBackground(randomColor()); | |||
this.setState({ textColor: randomColor() }) | |||
} | |||
setDate = (newDate) => this.setState({ chosenDate: newDate }) | |||
searchUpdated = (term) => this.setState({ searchTerm: term }) | |||
} | |||
const styles = StyleSheet.create({ | |||
container: { | |||
flex: 1, | |||
alignItems: 'center', | |||
justifyContent: 'center', | |||
marginTop: 15, | |||
backgroundColor: 'transparent', | |||
}, | |||
item: { | |||
borderWidth: 1, | |||
marginTop: -1, | |||
borderColor: 'rgba(0,0,0,1)', | |||
padding: 3, | |||
width: 100, | |||
alignItems: 'center', | |||
}, | |||
emailSubject: { | |||
color: 'rgba(0,0,0,0.5)' | |||
}, | |||
searchInput: { | |||
padding: 5, | |||
borderColor: '#CCC', | |||
borderWidth: 1, | |||
width: 100, | |||
} | |||
}) | |||
const randomColor = () => '#' + pad(Math.floor(Math.random() * 16777215).toString(16), 6); | |||
function pad(n, width) { | |||
n = n + ''; | |||
return n.length >= width ? n : new Array(width - n.length + 1).join('0') + n; | |||
} |
@ -1,4 +1,4 @@ | |||
import { AppRegistry } from 'react-native' | |||
import App from './App' | |||
import App from './src/App' | |||
AppRegistry.registerComponent('DatePickerExample', () => App) |
@ -0,0 +1,60 @@ | |||
import React, { Component } from 'react'; | |||
import { FlatList, Dimensions, Button, View, StyleSheet, ScrollView, Text, TouchableOpacity } from 'react-native'; | |||
import SearchInput, { createFilter } from 'react-native-search-filter'; | |||
import DeviceInfo from 'react-native-device-info'; | |||
import DatePicker from 'react-native-date-picker-x'; | |||
import Carousel from 'react-native-snap-carousel'; | |||
const { width, height } = Dimensions.get('screen') | |||
export default class PropSlider extends Component { | |||
render() { | |||
return ( | |||
<FlatList | |||
horizontal | |||
style={styles.list} | |||
data={this.data()} | |||
renderItem={this.renderItem} | |||
contentContainerStyle={styles.content} | |||
keyExtractor={item => item.name} | |||
/> | |||
) | |||
} | |||
data = () => this.props.data.map(prop => (prop.selected = this.props.selectedProp === prop.name, prop)) | |||
onPress = index => () => this.props.onSelect(this.props.data[index].name) | |||
renderItem = ({ item, index }) => ( | |||
<TouchableOpacity | |||
key={item.name} | |||
style={[styles.item, this.getStyle(item)]} | |||
onPress={this.onPress(index)} | |||
> | |||
<Text key={item.name}>{item.name}</Text> | |||
</TouchableOpacity> | |||
) | |||
getStyle = (item) => ({ | |||
backgroundColor: item.selected ? '#82e584' : '#abcdef', | |||
width: this.props.width ? this.props.width : 100, | |||
height: 30, | |||
}) | |||
} | |||
const styles = StyleSheet.create({ | |||
list: { | |||
width, | |||
}, | |||
content: { | |||
padding: 20, | |||
}, | |||
item: { | |||
justifyContent: 'center', | |||
alignItems: 'center', | |||
marginHorizontal: 5, | |||
borderRadius: 10, | |||
}, | |||
}) |
@ -0,0 +1,115 @@ | |||
import React, { Component } from 'react'; | |||
import { Dimensions, Button, View, StyleSheet, ScrollView, Text, TouchableOpacity } from 'react-native'; | |||
import SearchInput, { createFilter } from 'react-native-search-filter'; | |||
import DatePicker from 'react-native-date-picker-x'; | |||
import Carousel from 'react-native-snap-carousel'; | |||
import PropSlider from '../PropSlider'; | |||
import LocalePicker from '../propPickers/LocalePicker'; | |||
import ModePicker from '../propPickers/ModePicker'; | |||
import DateChange from '../propPickers/DateChange'; | |||
import FadeToColor from '../propPickers/FadeToColor'; | |||
import TextColor from '../propPickers/TextColor'; | |||
import DeviceInfo from 'react-native-device-info'; | |||
Date.prototype.addHours = function (h) { | |||
this.setTime(this.getTime() + (h * 60 * 60 * 1000)); | |||
return this; | |||
} | |||
export default class Advanced extends Component { | |||
state = { | |||
chosenDate: new Date(), | |||
searchTerm: '', | |||
textColor: '#000000', | |||
selectedProp: 'mode', | |||
locale: DeviceInfo.getDeviceLocale(), | |||
mode: 'datetime', | |||
} | |||
render() { | |||
return ( | |||
<View style={styles.container}> | |||
<DatePicker | |||
date={this.state.chosenDate} | |||
onDateChange={this.setDate} | |||
locale={this.state.locale} | |||
minuteInterval={1} | |||
minimumDate={new Date()} | |||
maximumDate={(new Date()).addHours(24 * 5)} | |||
fadeToColor={this.props.backgroundColor} | |||
textColor={this.state.textColor} | |||
mode={this.state.mode} | |||
/> | |||
<Text>Picker date: {this.state.chosenDate.toISOString()}</Text> | |||
<Text /> | |||
<Text>Change prop: </Text> | |||
<Text /> | |||
<PropSlider | |||
selectedProp={this.state.selectedProp} | |||
onSelect={this.onSelect} | |||
data={this.propertyList()} | |||
/> | |||
<Text>Prop value:</Text> | |||
{this.selectedPropData().component} | |||
</View> | |||
) | |||
} | |||
propertyList = () => [ | |||
{ | |||
name: 'mode', component: | |||
<ModePicker selected={this.state.mode} onChange={mode => this.setState({ mode })} /> | |||
}, | |||
{ | |||
name: 'locale', component: | |||
<LocalePicker locale={this.state.locale} onChange={locale => this.setState({ locale })} /> | |||
}, | |||
{ | |||
name: 'date', component: | |||
<DateChange value={this.state.chosenDate} onChange={chosenDate => this.setState({ chosenDate })} /> | |||
}, | |||
{ name: 'minuteInterval' }, | |||
{ name: 'minDate' }, | |||
{ name: 'maxDate' }, | |||
{ | |||
name: 'fadeToColor', component: | |||
<FadeToColor onChange={() => this.props.setBackground(randomColor())} /> | |||
}, | |||
{ | |||
name: 'textColor', component: | |||
<TextColor onChange={() => this.setState({ textColor: randomColor() })} /> | |||
}, | |||
] | |||
selectedPropData = () => this.propertyList().find(p => p.name === this.state.selectedProp) | |||
onSelect = selectedProp => this.setState({ selectedProp }) | |||
setDate = newDate => this.setState({ chosenDate: newDate }) | |||
} | |||
const styles = StyleSheet.create({ | |||
container: { | |||
alignItems: 'center', | |||
justifyContent: 'center', | |||
marginTop: 15, | |||
backgroundColor: 'transparent', | |||
flex: 1, | |||
}, | |||
item: { | |||
borderWidth: 1, | |||
marginTop: -1, | |||
borderColor: 'rgba(0,0,0,1)', | |||
padding: 3, | |||
width: 100, | |||
alignItems: 'center', | |||
}, | |||
}) | |||
const randomColor = () => '#' + pad(Math.floor(Math.random() * 16777215).toString(16), 6); | |||
function pad(n, width) { | |||
n = n + ''; | |||
return n.length >= width ? n : new Array(width - n.length + 1).join('0') + n; | |||
} |
@ -0,0 +1,26 @@ | |||
import React, { Component } from 'react'; | |||
import { Dimensions, Button, View, StyleSheet, ScrollView, Text, TouchableOpacity } from 'react-native'; | |||
export default class extends Component { | |||
render() { | |||
return ( | |||
<React.Fragment> | |||
<Button title='Add 1 min' | |||
onPress={() => this.props.onChange( | |||
new Date(this.props.value.getTime() + 60 * 1000) | |||
)} /> | |||
<Text /> | |||
<Button title='Add 1 hour' | |||
onPress={() => this.props.onChange( | |||
new Date(this.props.value.getTime() + 60 * 60 * 1000) | |||
)} /> | |||
<Text /> | |||
<Button title='Add 24 hours' | |||
onPress={() => this.props.onChange( | |||
new Date(this.props.value.getTime() + 60 * 60 * 24 * 1000) | |||
)} /> | |||
</React.Fragment> | |||
); | |||
} | |||
} |
@ -0,0 +1,15 @@ | |||
import React, { Component } from 'react'; | |||
import { Dimensions, Button, View, StyleSheet, ScrollView, Text, TouchableOpacity } from 'react-native'; | |||
import SearchInput, { createFilter } from 'react-native-search-filter'; | |||
import locales from '../locales'; | |||
import PropSlider from '../PropSlider'; | |||
export default class extends Component { | |||
render() { | |||
return ( | |||
<Button title={'Change color'} onPress={this.props.onChange} /> | |||
); | |||
} | |||
} |
@ -0,0 +1,42 @@ | |||
import React, { Component } from 'react'; | |||
import { Dimensions, Button, View, StyleSheet, ScrollView, Text, TouchableOpacity } from 'react-native'; | |||
import SearchInput, { createFilter } from 'react-native-search-filter'; | |||
import locales from '../locales'; | |||
import PropSlider from '../PropSlider'; | |||
const data = locales.map(key => ({ name: key })); | |||
const split1 = Math.floor(data.length / 3); | |||
const split2 = Math.floor(2 * data.length / 3); | |||
const data1 = data.slice(0, split1); | |||
const data2 = data.slice(split1, split2); | |||
const data3 = data.slice(split2); | |||
export default class LocalPicker extends Component { | |||
render() { | |||
return ( | |||
<React.Fragment> | |||
<PropSlider | |||
selectedProp={this.props.locale} | |||
onSelect={this.props.onChange} | |||
data={data1} | |||
width={50} | |||
/> | |||
<PropSlider | |||
selectedProp={this.props.locale} | |||
onSelect={this.props.onChange} | |||
data={data2} | |||
width={50} | |||
/> | |||
<PropSlider | |||
selectedProp={this.props.locale} | |||
onSelect={this.props.onChange} | |||
data={data3} | |||
width={50} | |||
/> | |||
</React.Fragment> | |||
); | |||
} | |||
} |
@ -0,0 +1,25 @@ | |||
import React, { Component } from 'react'; | |||
import { Dimensions, Button, View, StyleSheet, ScrollView, Text, TouchableOpacity } from 'react-native'; | |||
import SearchInput, { createFilter } from 'react-native-search-filter'; | |||
import locales from '../locales'; | |||
import PropSlider from '../PropSlider'; | |||
const data = [ | |||
{ name: 'datetime' }, | |||
{ name: 'date' }, | |||
{ name: 'time' }, | |||
] | |||
export default class extends Component { | |||
render() { | |||
return ( | |||
<PropSlider | |||
selectedProp={this.props.selected} | |||
onSelect={this.props.onChange} | |||
data={data} | |||
width={100} | |||
/> | |||
); | |||
} | |||
} |
@ -0,0 +1,15 @@ | |||
import React, { Component } from 'react'; | |||
import { Dimensions, Button, View, StyleSheet, ScrollView, Text, TouchableOpacity } from 'react-native'; | |||
import SearchInput, { createFilter } from 'react-native-search-filter'; | |||
import locales from '../locales'; | |||
import PropSlider from '../PropSlider'; | |||
export default class extends Component { | |||
render() { | |||
return ( | |||
<Button title={'Change color'} onPress={this.props.onChange} /> | |||
); | |||
} | |||
} |