@letar/forms

Autosave to Server

Automatic server-side form data saving with debounce, offline fallback, and draft recovery

Overview

useFormAutosave periodically saves form data to a server endpoint. If the network is unavailable, data is stored in localStorage and synced when connectivity returns.

Basic Usage

import { useFormAutosave, AutosaveIndicator } from '@letar/forms'

function MyForm() {
  const autosave = useFormAutosave(form, {
    endpoint: '/api/drafts',
    draftId: 'application-123',
    interval: 5000,
    debounce: 1000,
  })

  return (
    <>
      <Form.Field.String name="title" />
      <AutosaveIndicator
        status={autosave.status}
        lastSavedAt={autosave.lastSavedAt}
        error={autosave.error}
      />
    </>
  )
}

Config

OptionTypeDefaultDescription
endpointstringrequiredServer URL for POST/PUT
intervalnumber5000Save interval (ms)
debouncenumber1000Min delay between saves (ms)
draftIdstringDraft identifier for recovery
method'POST' | 'PUT' | 'PATCH''POST'HTTP method
headersRecord<string, string>Extra headers
onSave(response) => voidSuccess callback
onError(error) => voidError callback

Result

PropertyTypeDescription
status'idle' | 'saving' | 'saved' | 'error'Current status
lastSavedAtDate | nullLast successful save time
errorstring | nullError message
saveNow()() => Promise<void>Force save immediately
loadDraft()() => Promise<object | null>Load draft from server

Features

  • Deduplication — skips save if data has not changed
  • Offline fallback — saves to localStorage when offline, clears on successful server save
  • Draft recoveryloadDraft() tries server first, then localStorage

Live Example

Try the interactive example on forms-example.letar.best.

On this page