| @ -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 { AppRegistry } from 'react-native' | ||||
| import App from './App' | |||||
| import App from './src/App' | |||||
| AppRegistry.registerComponent('DatePickerExample', () => 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} /> | |||||
| ); | |||||
| } | |||||
| } | |||||