Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 www 1
import React from "react";
2
import { useState, useEffect, useRef } from "react";
3
import styled from "styled-components";
4
import DateTime from "react-datetime";
5
import moment from "moment";
6
 
7
const DateTimeWrapper = styled.div`
8
  .rdtPicker {
9
    position: absolute;
10
  }
11
`;
12
 
13
const DateTimeInput = (props) => {
14
  // props destructuring
15
  const {
16
    dateFormat = "YYYY-MM-DD",
17
    timeFormat = false,
18
    viewMode = "days",
19
    onChange,
20
    isValidDate,
21
    settedDate,
22
  } = props;
23
 
24
  // states
25
  const [date, setDate] = useState("");
26
  const [formattedDate, setFormattedDate] = useState("");
27
  const [dateTimeOpen, setDateTimeOpen] = useState(false);
28
 
29
  // refs
30
  const dateTimeWrapperEl = useRef();
31
 
32
  const handleDateChange = (date) => {
33
    // onChange(date.format(dateFormat));
34
    const formattedDate = date.format(dateFormat);
35
    setFormattedDate(formattedDate);
36
    setDate(date);
37
    if (onChange) {
38
      onChange(formattedDate);
39
    }
40
    setDateTimeOpen(false);
41
  };
42
 
43
  const handleClickOutside = (e) => {
44
    if (
45
      !dateTimeWrapperEl.current.contains(e.target) &&
46
      dateTimeOpen &&
47
      !RegExp(/\brdt/).test(e.target.className)
48
    ) {
49
      setDateTimeOpen(false);
50
    }
51
  };
52
 
53
  useEffect(() => {
54
    addEventListener("click", handleClickOutside);
55
    return () => {
56
      removeEventListener("click", handleClickOutside);
57
    };
58
  }, [handleClickOutside]);
59
 
60
  useEffect(() => {
61
    setDate(moment(settedDate));
62
    setFormattedDate(moment(settedDate).format(dateFormat));
63
  }, [settedDate]);
64
 
65
  let isValidDateProp = {};
66
  if (isValidDate) {
67
    isValidDateProp = { ...isValidDateProp, isValidDate: isValidDate };
68
  }
69
 
70
  return (
71
    <React.Fragment>
72
      <DateTimeWrapper ref={dateTimeWrapperEl}>
73
        <input
74
          type="text"
75
          value={moment(date).locale("es").format(dateFormat)}
76
          onClick={(e) => {
77
            e.preventDefault();
78
            setDateTimeOpen(true);
79
          }}
80
          readOnly
81
        />
82
        <div
83
          style={{
84
            display: dateTimeOpen ? "block" : "none",
85
          }}
86
        >
87
          <DateTime
88
            onChange={(date) => {
89
              handleDateChange(date);
90
            }}
91
            value={date}
92
            dateFormat={dateFormat}
93
            timeFormat={timeFormat}
94
            viewMode={viewMode}
95
            input={false}
96
            // isValidDate={isValidDate}
97
            {...isValidDateProp}
98
          />
99
        </div>
100
      </DateTimeWrapper>
101
    </React.Fragment>
102
  );
103
};
104
 
105
export default DateTimeInput;