Advertisement
Guest User

Untitled

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