Advertisement
Guest User

Untitled

a guest
Nov 18th, 2019
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import React, { useState, useEffect } from 'react'
  2. import { debounce } from 'lodash'
  3. import moment from 'moment'
  4. import { format } from 'date-fns'
  5. import { Input, InputPopdown, InputCalendar, InputTime } from 'atti-components'
  6.  
  7. const dateRegex = /^([0-9]|[0-2][0-9]|3[0-1])\/([0-9]|0[0-9]|1[0-2])\/([0-9]{4}) ([0-9]|[0-1][0-9]|2[0-3]):([0-9]|[0-5][0-9]):([0-9]|[0-5][0-9])$/gi
  8.  
  9. const SingleDatePicker = ({ id, disabled, value, t, onChange, ...rest }) => {
  10.     let currentValue = null
  11.     if (moment.isDate(value)) {
  12.         currentValue = value
  13.     } else if(moment.isMoment(value)) {
  14.         currentValue = value.toDate()
  15.     }
  16.  
  17.     const [inputDateValue, setInputDateValue] = useState(!currentValue? "": format(currentValue, "DD/MM/YYYY HH:mm:ss"))
  18.     const handleOnChange = date => {
  19.         onChange(moment(date))
  20.         const newValue = !date? "": format(date, "DD/MM/YYYY HH:mm:ss")
  21.         if (newValue !== inputDateValue) {
  22.             setInputDateValue(newValue)
  23.         }
  24.     }
  25.  
  26.     const handleParseDate = debounce((value) => {
  27.         const parseDate = moment(value, "DD/MM/YYYY HH:mm:ss").toDate()
  28.         if (parseDate instanceof Date && !isNaN(parseDate) && value.match(dateRegex)) {
  29.             handleOnChange(parseDate)
  30.         }
  31.     }, 1000)
  32.  
  33.     const handleTextualChange = e => {
  34.         try {
  35.             setInputDateValue(e.target.value)
  36.             handleParseDate(e.target.value)
  37.         } catch (e) { }
  38.     }
  39.  
  40.     return (<InputPopdown
  41.             enhancer={() => (<React.Fragment>
  42.                 <InputCalendar value={currentValue} onChange={handleOnChange} />
  43.                 <InputTime value={currentValue} onChange={handleOnChange} />
  44.             </React.Fragment>)}
  45.         >
  46.             <Input
  47.                 value={inputDateValue}
  48.                 onChange={handleTextualChange}
  49.                 placeholder="DD/MM/YYYY H:m:s"
  50.             />
  51.         </InputPopdown>)
  52. }
  53.  
  54. export default SingleDatePicker
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement