analuizaff
4 years ago
2 changed files with 174 additions and 120 deletions
@ -0,0 +1,151 @@ |
|||||
|
import React, { useState } from 'react'; 7 |
||||
|
import { Modal, StyleSheet, Text, TouchableHighlight, View, Platform, TouchableOpacity } from 'react-native'; |
||||
|
import DateTimePicker from "@react-native-community/datetimepicker"; |
||||
|
|
||||
|
import moment from "moment"; |
||||
|
import colors from '../../config/colors'; |
||||
|
|
||||
|
const FormDatePicker = (props) => { |
||||
|
|
||||
|
const { textStyle, defaultDate } = props; |
||||
|
const [date, setDate] = useState(moment(defaultDate)); |
||||
|
const [show, setShow] = useState(false); |
||||
|
|
||||
|
const onChange = (e, selectedDate) => { |
||||
|
setDate(moment(selectedDate)); |
||||
|
} |
||||
|
|
||||
|
const androidOnChange = (e, selectedDate) => { |
||||
|
setShow(false); |
||||
|
if (selectedDate) { |
||||
|
setDate(moment(selectedDate)); |
||||
|
props.onDateChange(selectedDate); |
||||
|
// console.log(moment(selectedDate).format("DD-MM-YYYY"));
|
||||
|
// console.log(date.format("DD-MM-YYYY"));
|
||||
|
} |
||||
|
} |
||||
|
|
||||
|
const onCancelPress = () => { |
||||
|
setDate(moment(defaultDate)); |
||||
|
setShow(false); |
||||
|
//console.log(moment(defaultDate).format("DD-MM-YYYY"))
|
||||
|
} |
||||
|
|
||||
|
const onDonePress = () => { |
||||
|
props.onDateChange(date); |
||||
|
setShow(false); |
||||
|
//console.log("done");
|
||||
|
//console.log(date.format("DD-MM-YYYY"));
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
const renderDatePicker = () => { |
||||
|
return ( |
||||
|
<DateTimePicker |
||||
|
timeZoneOffsetInMinutes={0} |
||||
|
value={new Date(date)} |
||||
|
mode="date" |
||||
|
minimumDate={new Date(moment().subtract(1, 'month'))} |
||||
|
maximumDate={new Date(moment())} |
||||
|
display={Platform.OS === 'ios' ? 'spinner' : 'default'} |
||||
|
onChange={Platform.OS === 'ios' ? onChange : androidOnChange} |
||||
|
/> |
||||
|
) |
||||
|
} |
||||
|
|
||||
|
return ( |
||||
|
<TouchableOpacity |
||||
|
onPress={() => setShow(true)}> |
||||
|
<Text> {date.format("DD-MM-YYYY")}</Text> |
||||
|
{Platform.OS !== 'ios' && show && renderDatePicker()} |
||||
|
|
||||
|
{Platform.OS === 'ios' && show && ( |
||||
|
<Modal |
||||
|
transparent={true} |
||||
|
animationType="slide" |
||||
|
visible={show} |
||||
|
supportedOrientations={['portrait']} |
||||
|
onRequestClose={() => setShow(false)} |
||||
|
> |
||||
|
<View style={{ flex: 1 }}> |
||||
|
<TouchableHighlight |
||||
|
style={{ |
||||
|
flex: 1, |
||||
|
alignItems: "flex-end", |
||||
|
flexDirection: "row", |
||||
|
}} |
||||
|
activeOpacity={1} |
||||
|
visible={show} |
||||
|
onPress={() => setShow(false)}> |
||||
|
<TouchableHighlight |
||||
|
underlayColor={'#ffffff'} |
||||
|
style={{ |
||||
|
flex: 1, |
||||
|
borderTopColor: '#d3d3d3', |
||||
|
borderTopWidth: 1, |
||||
|
}} |
||||
|
onPress={() => console.log("datepicker clicked")} |
||||
|
> |
||||
|
<View style={{ |
||||
|
backgroundColor: '#ffffff', |
||||
|
height: 256, |
||||
|
overflow: 'hidden', |
||||
|
}}> |
||||
|
<View style={{ marginTop: 20 }}> |
||||
|
{ renderDatePicker() } |
||||
|
</View> |
||||
|
<TouchableHighlight |
||||
|
underlayColor={"transparent"} |
||||
|
onPress={() => onCancelPress()} |
||||
|
style={[styles.btnText, styles.btnCancel]} |
||||
|
> |
||||
|
<Text style={{ color: colors.primary }}> |
||||
|
Cancel |
||||
|
</Text> |
||||
|
</TouchableHighlight> |
||||
|
<TouchableHighlight |
||||
|
underlayColor={"transparent"} |
||||
|
onPress={() => onDonePress()} |
||||
|
style={[styles.btnText, styles.btnDone]} |
||||
|
> |
||||
|
<Text style={{ color: colors.primary }}> |
||||
|
Done |
||||
|
</Text> |
||||
|
</TouchableHighlight> |
||||
|
|
||||
|
</View> |
||||
|
|
||||
|
</TouchableHighlight> |
||||
|
</TouchableHighlight> |
||||
|
</View> |
||||
|
</Modal> |
||||
|
)} |
||||
|
</TouchableOpacity> |
||||
|
); |
||||
|
}; |
||||
|
|
||||
|
FormDatePicker.defaultProps = { |
||||
|
textStyle: {}, |
||||
|
defaultDate: moment(), |
||||
|
onDateChange: () => { }, |
||||
|
} |
||||
|
|
||||
|
const styles = StyleSheet.create({ |
||||
|
btnCancel: { |
||||
|
left: 0, |
||||
|
}, |
||||
|
btnDone: { |
||||
|
right: 0, |
||||
|
}, |
||||
|
btnText: { |
||||
|
position: "absolute", |
||||
|
top: 0, |
||||
|
height: 42, |
||||
|
paddingHorizontal: 20, |
||||
|
flexDirection: "row", |
||||
|
alignItems: "center", |
||||
|
justifyContent: "center", |
||||
|
}, |
||||
|
}); |
||||
|
|
||||
|
export default FormDatePicker; |
Write
Preview
Loading…
Cancel
Save
Reference in new issue