55 formatDate ,
66 getColDateFormat ,
77 getDateFNSDateFormat ,
8- getJsonDateTimeFormatString ,
9- getJsonDateFormatString ,
108 getDateTimeDisplayValueFromStr ,
9+ getJsonDateFormatString ,
10+ getJsonDateTimeFormatString ,
1111} from '../util/Date' ;
1212import { Key , useEnterEscape } from '../../public/useEnterEscape' ;
1313
@@ -20,6 +20,7 @@ import { useServerContext } from './base/ServerContext';
2020import { resolveDetailEditRenderer } from './forms/detail/DetailDisplay' ;
2121import { UserLink } from './user/UserLink' ;
2222import { DatePickerInput } from './forms/input/DatePickerInput' ;
23+ import { isBlankValue } from '../util/utils' ;
2324
2425interface Props {
2526 allowBlank ?: boolean ;
@@ -99,7 +100,7 @@ export const EditInlineField: FC<Props> = memo(props => {
99100 // Issue 48196: if the domain column has been setup with a "url" prop, use it in the EditInlineField value display
100101 if ( value_ !== undefined && value ?. url ) {
101102 value_ = (
102- < a href = { value . url } target = "_blank" rel = "noopener noreferrer" >
103+ < a href = { value . url } rel = "noopener noreferrer" target = "_blank ">
103104 { value_ }
104105 </ a >
105106 ) ;
@@ -128,7 +129,7 @@ export const EditInlineField: FC<Props> = memo(props => {
128129 const saveEdit = useCallback ( ( ) => {
129130 const inputValue = getInputValue ( ) ;
130131
131- if ( allowBlank === false && ! isDate && inputValue . trim ( ) === '' ) {
132+ if ( allowBlank === false && ! isDate && isBlankValue ( inputValue ) ) {
132133 return ;
133134 }
134135
@@ -140,7 +141,7 @@ export const EditInlineField: FC<Props> = memo(props => {
140141
141142 const onBlur = useCallback ( ( ) : void => {
142143 if ( ! state . ignoreBlur ) {
143- if ( allowBlank === false && ! isDate && getInputValue ( ) . trim ( ) === '' ) {
144+ if ( allowBlank === false && ! isDate && isBlankValue ( getInputValue ( ) ) ) {
144145 onCancel ( ) ;
145146 } else {
146147 saveEdit ( ) ;
@@ -154,6 +155,11 @@ export const EditInlineField: FC<Props> = memo(props => {
154155 if ( date instanceof Array ) throw new Error ( 'Unsupported date/time type' ) ;
155156
156157 if ( ! date ) {
158+ if ( allowBlank === false ) {
159+ onCancel ( ) ;
160+ return ;
161+ }
162+
157163 if ( isDate ) setDateValue ( undefined ) ;
158164 else setTimeJsonValue ( undefined ) ;
159165 } else if ( typeof date === 'string' ) {
@@ -162,7 +168,7 @@ export const EditInlineField: FC<Props> = memo(props => {
162168 if ( isDate ) setDateValue ( date ) ;
163169 }
164170 } ,
165- [ isDate ]
171+ [ isDate , allowBlank ]
166172 ) ;
167173
168174 const onFormsyColumnChange = useCallback (
@@ -214,38 +220,38 @@ export const EditInlineField: FC<Props> = memo(props => {
214220 { state . editing && isDateOrTime && ! ! column && (
215221 < DatePickerInput
216222 autoFocus
217- name = { name }
218223 formsy = { false }
219- queryColumn = { column }
220- showLabel = { false }
221- value = { isDate ? dateValue : _value }
224+ inlineEdit
222225 inputWrapperClassName = "form-control"
226+ name = { name }
223227 onBlur = { onBlur }
224- onKeyDown = { onKeyDown }
225228 onChange = { onDateChange }
229+ onKeyDown = { onKeyDown }
226230 placeholderText = { placeholder }
227- inlineEdit
231+ queryColumn = { column }
232+ showLabel = { false }
233+ value = { isDate ? dateValue : _value }
228234 />
229235 ) }
230236 { state . editing && isDateOrTime && ! column && (
231237 < DateInput
232238 autoFocus
233239 container = { container }
240+ dateFormat = { dateInputDateFormat }
234241 endDate = { endDate }
235- minDate = { startDate }
236242 maxDate = { endDate }
243+ minDate = { startDate }
237244 name = { name }
238245 onBlur = { onBlur }
239- onKeyDown = { onKeyDown }
240246 onChange = { onDateChange }
247+ onKeyDown = { onKeyDown }
241248 onMonthChange = { onDateChange }
242249 placeholderText = { placeholder }
243250 selected = { dateValue }
244251 selectsEnd = { startDate !== undefined }
245252 selectsStart = { endDate !== undefined }
246- startDate = { startDate }
247253 showTimeSelect = { ! ! column }
248- dateFormat = { dateInputDateFormat }
254+ startDate = { startDate }
249255 />
250256 ) }
251257 { state . editing && isTextArea && (
@@ -255,10 +261,10 @@ export const EditInlineField: FC<Props> = memo(props => {
255261 className = "form-control"
256262 cols = { 100 }
257263 defaultValue = { _value }
264+ name = { name }
258265 onBlur = { onBlur }
259266 onFocus = { onTextAreaFocus }
260267 onKeyDown = { onKeyDown }
261- name = { name }
262268 placeholder = { placeholder }
263269 ref = { inputRef }
264270 rows = { 5 }
@@ -278,14 +284,14 @@ export const EditInlineField: FC<Props> = memo(props => {
278284 autoFocus
279285 className = "form-control"
280286 defaultValue = { _value }
287+ name = { name }
281288 onBlur = { onBlur }
289+ onInput = { onInputChange }
282290 onKeyDown = { onKeyDown }
283- name = { name }
284291 placeholder = { placeholder }
285292 ref = { inputRef }
286- type = { inputType }
287293 size = { Math . max ( _value ?. length ?? 0 , 20 ) }
288- onInput = { onInputChange }
294+ type = { inputType }
289295 />
290296 </ span >
291297 ) }
@@ -294,13 +300,13 @@ export const EditInlineField: FC<Props> = memo(props => {
294300 { label && (
295301 < span
296302 className = "edit-inline-field__label"
297- unselectable = "on"
298303 title = { allowEdit ? tooltip : undefined }
304+ unselectable = "on"
299305 >
300306 { label }
301307 </ span >
302308 ) }
303- { isUser && < UserLink userId = { value ?. value } userDisplayValue = { value ?. displayValue } /> }
309+ { isUser && < UserLink userDisplayValue = { value ?. displayValue } userId = { value ?. value } /> }
304310 < span
305311 className = { classNames ( { 'edit-inline-field__toggle' : allowEdit , 'ws-pre-wrap' : isTextArea } ) }
306312 onClick = { toggleEdit }
0 commit comments