Skip to content

useInlineEdit

Manages inline editing state with keyboard shortcuts and async save.

Signature

ts
function useInlineEdit<T>(
  options: UseInlineEditOptions<T>
): UseInlineEditReturn<T>

Parameters

UseInlineEditOptions<T>

PropertyTypeDefaultDescription
initialValueTRequiredInitial value
onSave(value: T) => Promise<void> | void-Save function
onCancel() => void-Called when edit is cancelled
onSaveSuccess() => void-Called when save succeeds
onSaveError(error: Error) => void-Called when save fails
enableKeyboardShortcutsbooleantrueEnable Enter/Escape shortcuts

Return Type

UseInlineEditReturn<T>

PropertyTypeDescription
isEditingbooleanWhether in edit mode
draftTCurrent draft value
originalValueTValue before editing
isSavingbooleanWhether save is in progress
saveErrorError | nullError from last save attempt
startEdit() => voidEnter edit mode
cancelEdit() => voidCancel and revert
saveEdit() => Promise<void>Save current draft
setDraft(value: T | ((prev: T) => T)) => voidUpdate draft value
setOriginalValue(value: T) => voidUpdate original value
inputProps{ onKeyDown: (e: KeyboardEvent) => void }Props for input element

Keyboard Shortcuts

KeyAction
EnterSave (when input focused)
EscapeCancel (when input focused)

Example

tsx
const edit = useInlineEdit({
  initialValue: 'Hello',
  onSave: async (value) => api.update({ name: value }),
})

if (edit.isEditing) {
  return <input value={edit.draft} onChange={(e) => edit.setDraft(e.target.value)} {...edit.inputProps} />
}
return <span onClick={edit.startEdit}>{edit.originalValue}</span>

See also