diff --git a/frontend/src/App/App.jsx b/frontend/src/App/App.jsx index e8f6a597fe..3c00d663c1 100644 --- a/frontend/src/App/App.jsx +++ b/frontend/src/App/App.jsx @@ -66,6 +66,8 @@ class App extends React.Component { return ( <> + +
{updateAvailable && ( @@ -96,8 +98,6 @@ class App extends React.Component { {!onboarded && } - - { + 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 ( <> diff --git a/frontend/src/Editor/Components/Table/Table.jsx b/frontend/src/Editor/Components/Table/Table.jsx index 9e75de5ad0..b620f2d86c 100644 --- a/frontend/src/Editor/Components/Table/Table.jsx +++ b/frontend/src/Editor/Components/Table/Table.jsx @@ -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; @@ -531,10 +532,11 @@ export function Table({ return (
{ handleCellValueChange(cell.row.index, column.key || column.name, value, cell.row.original); }} @@ -665,7 +667,10 @@ export function Table({ ] // Hack: need to fix ); - const data = useMemo(() => tableData, [tableData.length, componentState.changeSet]); + const data = useMemo( + () => tableData, + [tableData.length, componentState.changeSet, component.definition.properties.data.value] + ); const computedStyles = { // width: `${width}px`, diff --git a/frontend/src/Editor/Inspector/Components/Table.jsx b/frontend/src/Editor/Inspector/Components/Table.jsx index bc742d3d85..ac4d835b75 100644 --- a/frontend/src/Editor/Inspector/Components/Table.jsx +++ b/frontend/src/Editor/Inspector/Components/Table.jsx @@ -334,7 +334,7 @@ class Table extends React.Component { {column.columnType === 'datepicker' && (
- +
this.onColumnItemChange(index, 'dateFormat', value)} />
+ +
+ { + e.stopPropagation(); + this.onColumnItemChange(index, 'parseDateFormat', e.target.value); + }} + defaultValue={column.parseDateFormat} + placeholder={'DD-MM-YYYY'} + /> +