diff --git a/App.js b/App.js index e839a06..4bb1038 100644 --- a/App.js +++ b/App.js @@ -1 +1,46 @@ export default from './storybook'; + +// import React, {useState} from 'react'; +// import { +// StyleSheet, +// View, +// SafeAreaView, +// Text, +// Alert, +// onChangeText, +// Platform +// } from 'react-native'; +// import {Base as Input} from './src'; + +// const App = () => { +// const [date, setDate] = useState(new Date(1598051730000)); +// const [mode, setMode] = useState('date'); +// const [show, setShow] = useState(false); + +// const onChange = (event, selectedDate) => { +// const currentDate = selectedDate || date; +// setShow(Platform.OS === 'ios'); +// setDate(currentDate); +// }; +// return ( +// +// { +// onChange(v); +// }} +// labelTextColor="#3B82F6" +// maximumDate={new Date(2300, 10, 20)} +// minimumDate={new Date(1950, 0, 1)} +// placeholder="YYYY-MM-DD" +// icon={😊} +// iconPosition="right" +// edit={false} +// /> +// +// ); +// }; +// export default App; diff --git a/package.json b/package.json index c71155a..57e4f96 100644 --- a/package.json +++ b/package.json @@ -67,5 +67,8 @@ }, "jest": { "preset": "react-native" + }, + "dependencies": { + "@react-native-community/datetimepicker": "^5.0.1" } } diff --git a/src/Base/Base.stories.js b/src/Base/Base.stories.js index a6622c4..d2610b6 100644 --- a/src/Base/Base.stories.js +++ b/src/Base/Base.stories.js @@ -47,4 +47,22 @@ storiesOf('Default', module) // borderColor="#FDBA74" // errorTextStyles={{color: '#FDBA74'}} /> + )) + .add('Default Calendar Field', () => ( + { + onChangeText(value) + }} + labelTextColor="#3B82F6" + maximumDate={new Date(2300, 10, 20)} + minimumDate={new Date(1950, 0, 1)} + placeholder="YYYY-MM-DD" + icon={😊} + iconPosition="right" + edit={false} + /> )); diff --git a/src/Base/index.js b/src/Base/index.js index ecf15ce..de4800d 100644 --- a/src/Base/index.js +++ b/src/Base/index.js @@ -1,6 +1,7 @@ import {height} from 'dom-helpers'; -import React from 'react'; -import {Text, View, TextInput} from 'react-native'; +import React, {useState, useRef, useEffect} from 'react'; +import {Text, View, TextInput, Platform, Pressable, Button} from 'react-native'; +import DateTimePicker from '@react-native-community/datetimepicker'; const Input = ({ onChangeText, @@ -8,16 +9,25 @@ const Input = ({ icon, value, placeholder = 'Enter Text', + maximumDate = null, + minimumDate = null, label = null, + calendar = 'false', + autoFocus = false, error, + editable = true, + mode = 'date', + edit = false, + calenderWidth = '100%', ...props }) => { + const inputRef = useRef(null); const [focused, setFocused] = React.useState(false); const textInputStyles = { ...(props.textInputStyles || { flex: 1, width: '100%', - color: props.textColor || '#fff', + color: props.textColor || '#000', letterSpacing: 0, }), }; @@ -39,53 +49,133 @@ const Input = ({ } return props.borderColor; }; + const [event, setEvent] = useState(edit ? 'true' : 'false'); + + const [showDatePicker, setShowDatePicker] = useState('false'); + + const formatDate = value => { + var d = new Date(value.toString()), + month = '' + (d.getMonth() + 1), + day = '' + d.getDate(), + year = d.getFullYear(); + if (month.length < 2) { + month = '0' + month; + } + if (day.length < 2) { + day = '0' + day; + } + + return [year, month, day].join('-'); + }; + + useEffect(() => { + if (autoFocus) { + inputRef.current.focus(); + } + }, [autoFocus]); return ( - <> + {label && ( {label} )} - - - {icon && icon} - + {calendar === 'false' && ( + <> + + + {icon && icon} + + + { + setFocused(true); + }} + onBlur={() => { + setFocused(false); + }} + {...props} + /> + + + + )} + {calendar === 'true' && ( - { - setFocused(true); - }} - onBlur={() => { - setFocused(false); - }} - {...props} - /> + + {icon && icon} + + {event === 'true' && ( + { + setShowDatePicker('true'); + }} + value={value} + /> + )} + + {event === 'false' && ( + { + setShowDatePicker('true'); + }}> + {placeholder} + + )} - + )} + {error && ( )} - + {showDatePicker === 'true' && ( + + { + if (event.type === 'dismissed') { + setShowDatePicker('false'); + } else { + setShowDatePicker('false'); + if (mode === 'time') { + onChangeText( + `${selectedDate.getHours()}:${selectedDate.getMinutes()}`, + ); + } else { + onChangeText(formatDate(selectedDate)); + } + setEvent('true'); + } + }} + /> + + )} + ); }; diff --git a/src/index.js b/src/index.js index 769e688..6fee475 100644 --- a/src/index.js +++ b/src/index.js @@ -1,3 +1,2 @@ import Base from './Base'; - export {Base}; diff --git a/yarn.lock b/yarn.lock index 6c4a78d..baffb85 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1632,6 +1632,13 @@ sudo-prompt "^9.0.0" wcwidth "^1.0.1" +"@react-native-community/datetimepicker@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@react-native-community/datetimepicker/-/datetimepicker-5.0.1.tgz#1113f4c999dff6fda3cb5926e53f5f9c22e42e62" + integrity sha512-yDQbGZbP7SiOLkB2j1F0i9sQvVMo/cv4BB3DnbzPzWWYOH6xSPL1D9hi3YY9UUaJKQnLNgXBRMUEAJkmMy8NTw== + dependencies: + invariant "^2.2.4" + "@react-native-community/eslint-config@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@react-native-community/eslint-config/-/eslint-config-2.0.0.tgz#35dcc529a274803fc4e0a6b3d6c274551fb91774"