From cc351e0d088a0af1bb593159e7abd9d31a90fa36 Mon Sep 17 00:00:00 2001 From: Lorenzo Natali Date: Thu, 25 Sep 2025 14:48:37 +0200 Subject: [PATCH] Fix #11510 - Datetime picker fix for invalid values (#11511) --- .../misc/datetimepicker/DateTimePicker.js | 4 +- .../__tests__/DateTimePicker-test.js | 59 ++++++++++++++++++- 2 files changed, 60 insertions(+), 3 deletions(-) diff --git a/web/client/components/misc/datetimepicker/DateTimePicker.js b/web/client/components/misc/datetimepicker/DateTimePicker.js index 3cf35d9acfd..4799c8d53ea 100644 --- a/web/client/components/misc/datetimepicker/DateTimePicker.js +++ b/web/client/components/misc/datetimepicker/DateTimePicker.js @@ -149,7 +149,7 @@ class DateTimePicker extends Component { onMouseDown={this.handleMouseDown} onChange={this.handleCalendarChange} {...props} - value={!isNil(calendarVal) ? new Date(calendarVal) : undefined} + value={!isNil(calendarVal) && !isNaN(new Date(calendarVal).getTime()) ? new Date(calendarVal) : null} />
@@ -271,7 +271,7 @@ class DateTimePicker extends Component { onMouseDown={this.handleMouseDown} onChange={this.handleCalendarChange} {...props} - value={!isNil(calendarVal) ? new Date(calendarVal) : undefined} + value={!isNil(calendarVal) && !isNaN(new Date(calendarVal).getTime()) ? new Date(calendarVal) : null} /> {this.renderQuickTimeSelectors()}
diff --git a/web/client/components/misc/datetimepicker/__tests__/DateTimePicker-test.js b/web/client/components/misc/datetimepicker/__tests__/DateTimePicker-test.js index da82f0ef2de..806321b0607 100644 --- a/web/client/components/misc/datetimepicker/__tests__/DateTimePicker-test.js +++ b/web/client/components/misc/datetimepicker/__tests__/DateTimePicker-test.js @@ -4,7 +4,7 @@ import React from 'react'; import ReactDOM from 'react-dom'; import moment from 'moment'; import expect from 'expect'; -import TestUtils from 'react-dom/test-utils'; +import TestUtils, { act } from 'react-dom/test-utils'; import DateTimePicker from '../index'; import {getUTCTimePart} from "../../../../utils/TimeUtils"; @@ -184,4 +184,61 @@ describe('DateTimePicker component', () => { const day = document.querySelector('.shadow-soft.picker-container tbody tr td:first-child .rw-btn'); TestUtils.Simulate.click(day); }); + it('DateTimePicker avoid error when text (e.g. "2") is inserted and calendar is clicked', (done) => { + // Error boundary component for testing + class ErrorBoundary extends React.Component { + constructor(props) { + super(props); + this.state = { hasError: false, error: null }; + } + static getDerivedStateFromError(error) { + return { hasError: true, error }; + } + componentDidCatch(error, info) { + + console.error( + error, + + info.componentStack, + React.captureOwnerStack() + ); + done(error); + } + render() { + if (this.state.hasError) { + done("Error"); + return
{this.state.error.message}
; + } + return this.props.children; + } + } + + act(() => { + ReactDOM.render( + + + , + document.getElementById("container") + ); + const container = document.getElementById('container'); + const input = container.querySelector('input'); + // // TestUtils.Simulate.change(input, { target: { value: '2' } }); + input.value = '2'; + const button = container.querySelector('.rw-btn-calendar'); + TestUtils.Simulate.click(button); + }); + + const container = document.getElementById('container'); + setTimeout(() => { + const error = container.querySelector('[data-testid="error"]'); + if (error) { + done(error.innerHTML); + } else { + done(); + } + }, 500); + }); });