@@ -12,7 +12,7 @@ import { isNumber } from "lodash";
12
12
import dayjs from "dayjs" ;
13
13
import utc from "dayjs/plugin/utc" ;
14
14
import { CalendarCompIconSmall , PrevIcon , SuperPrevIcon } from "lowcoder-design" ;
15
- import { useState } from "react" ;
15
+ import { useEffect , useRef , useState } from "react" ;
16
16
import styled from "styled-components" ;
17
17
import { DateParser , DATE_FORMAT } from "util/dateTimeUtils" ;
18
18
@@ -149,20 +149,34 @@ type DateEditProps = {
149
149
} ;
150
150
151
151
export const DateEdit = ( props : DateEditProps ) => {
152
+ const pickerRef = useRef < any > ( ) ;
152
153
const [ panelOpen , setPanelOpen ] = useState ( true ) ;
153
154
let value = dayjs ( props . value , DateParser ) ;
154
155
if ( ! value . isValid ( ) ) {
155
156
value = dayjs ( 0 , DateParser ) ;
156
157
}
158
+
159
+ const [ tempValue , setTempValue ] = useState < dayjs . Dayjs | null > ( value ) ;
160
+
161
+ useEffect ( ( ) => {
162
+ const value = props . value ? dayjs ( props . value , DateParser ) : null ;
163
+ setTempValue ( value ) ;
164
+ } , [ props . value ] )
165
+
157
166
return (
158
167
< Wrapper
159
168
onKeyDown = { ( e ) => {
160
169
if ( e . key === "Enter" && ! panelOpen ) {
161
170
props . onChangeEnd ( ) ;
162
171
}
163
172
} }
173
+ onMouseDown = { ( e ) => {
174
+ e . stopPropagation ( ) ;
175
+ e . preventDefault ( ) ;
176
+ } }
164
177
>
165
178
< DatePickerStyled
179
+ ref = { pickerRef }
166
180
$open = { panelOpen }
167
181
suffixIcon = { < CalendarCompIconSmall /> }
168
182
prevIcon = { < PrevIcon /> }
@@ -172,7 +186,7 @@ export const DateEdit = (props: DateEditProps) => {
172
186
allowClear = { false }
173
187
variant = "borderless"
174
188
autoFocus
175
- defaultValue = { value }
189
+ value = { tempValue }
176
190
showTime = { props . showTime }
177
191
showNow = { true }
178
192
defaultOpen = { true }
@@ -184,7 +198,7 @@ export const DateEdit = (props: DateEditProps) => {
184
198
} }
185
199
onOpenChange = { ( open ) => setPanelOpen ( open ) }
186
200
onChange = { ( value , dateString ) => props . onChange ( dateString as string ) }
187
- onBlur = { props . onChangeEnd }
201
+ onBlur = { ( ) => props . onChangeEnd ( ) }
188
202
/>
189
203
</ Wrapper >
190
204
) ;
0 commit comments