fixed: Improper date parsing (#1318)

This commit is contained in:
Arpit 2021-12-03 13:52:14 +05:30 committed by GitHub
parent 372bfe7a18
commit 25a196d354
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 48 additions and 23 deletions

View file

@ -5,45 +5,55 @@ import moment from 'moment';
import 'react-datetime/css/react-datetime.css';
import '@/_styles/custom.scss';
export const Datepicker = function Datepicker({ value, onChange, readOnly, isTimeChecked, dateFormat }) {
const [date, setDate] = React.useState(value);
const getDate = (value, parseDateFormat, displayFormat) => {
const dateString = value;
const momentObj = moment(dateString, parseDateFormat);
const momentString = momentObj.format(displayFormat);
return momentString;
};
const dateChange = (e) => {
if (isTimeChecked) {
setDate(e.format(`${dateFormat} LT`));
} else {
setDate(e.format(dateFormat));
}
export const Datepicker = function Datepicker({
value,
onChange,
readOnly,
isTimeChecked,
dateDisplayFormat, //?Display date format
parseDateFormat, //?Parse date format
}) {
const [date, setDate] = React.useState(() => getDate(value, parseDateFormat, dateDisplayFormat));
const dateChange = (event) => {
const value = event._isAMomentObject ? event.format() : event;
let selectedDateFormat = isTimeChecked ? `${dateDisplayFormat} LT` : dateDisplayFormat;
const dateString = moment(value).format(selectedDateFormat);
setDate(() => dateString);
};
React.useEffect(() => {
if (!isTimeChecked) {
setDate(moment(value, 'DD-MM-YYYY').format(dateFormat));
}
if (isTimeChecked) {
setDate(moment(value, 'DD-MM-YYYY LT').format(`${dateFormat} LT`));
}
let selectedDateFormat = isTimeChecked ? `${dateDisplayFormat} LT` : dateDisplayFormat;
const dateString = getDate(value, parseDateFormat, selectedDateFormat);
setDate(() => dateString);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [isTimeChecked, readOnly, dateFormat]);
let inputProps = {
disabled: !readOnly,
};
}, [isTimeChecked, readOnly, dateDisplayFormat]);
const onDatepickerClose = () => {
onChange(date);
};
let inputProps = {
disabled: !readOnly,
};
return (
<>
<Datetime
inputProps={inputProps}
timeFormat={isTimeChecked}
className="cell-type-datepicker"
dateFormat={dateFormat}
dateFormat={dateDisplayFormat}
value={date}
onChange={dateChange}
closeOnSelect={true}
onClose={onDatepickerClose}
/>
</>

View file

@ -303,6 +303,7 @@ export function Table({
if (columnType === 'datepicker') {
column.isTimeChecked = column.isTimeChecked ? column.isTimeChecked : false;
column.dateFormat = column.dateFormat ? column.dateFormat : 'DD/MM/YYYY';
column.parseDateFormat = column.parseDateFormat ?? column.dateFormat; //backwards compatibility
}
const width = columnSize || defaultColumn.width;
@ -529,10 +530,11 @@ export function Table({
return (
<div>
<Datepicker
dateFormat={column.dateFormat}
dateDisplayFormat={column.dateFormat}
isTimeChecked={column.isTimeChecked}
value={cellValue}
readOnly={column.isEditable}
parseDateFormat={column.parseDateFormat}
onChange={(value) => {
handleCellValueChange(cell.row.index, column.key || column.name, value, cell.row.original);
}}

View file

@ -334,7 +334,7 @@ class Table extends React.Component {
{column.columnType === 'datepicker' && (
<div>
<label className="form-label">Date Format</label>
<label className="form-label">Date Display Format</label>
<div className="field mb-2">
<CodeHinter
currentState={this.props.currentState}
@ -346,6 +346,19 @@ class Table extends React.Component {
onChange={(value) => this.onColumnItemChange(index, 'dateFormat', value)}
/>
</div>
<label className="form-label">Date Parse Format</label>
<div className="field mb-2">
<input
type="text"
className="form-control text-field"
onChange={(e) => {
e.stopPropagation();
this.onColumnItemChange(index, 'parseDateFormat', e.target.value);
}}
defaultValue={column.parseDateFormat}
placeholder={'DD-MM-YYYY'}
/>
</div>
<div className="field mb-2">
<label className="form-check form-switch my-2">
<input