feat(autosave): grava por ociosidade (10s padrão, configurável) e em silêncio
- debounce de 1,5s → 10s SEM nenhuma alteração (cada tecla reinicia); seletor 5/10/30/60s no diálogo de Preferências (autosaveDelay, clamp 5–120) - autosave silencioso: sem toast, só o status 'salvando…/salvo'; Ctrl+S manual mantém o toast com o hash da revisão - flush de pendências ao trocar de aba do app e em visibilitychange=hidden /pagehide (melhor esforço) — nada se perde ao sair antes do idle - README atualizado
This commit is contained in:
1 parent
993b341fc1
commit
11fc26390d
3 files changed
+35
-9
No files matched your search
@@ -100,9 +100,12 @@ ocupa a tela inteira; menus e toolbar rolam horizontalmente com botões só de
|
||||
automaticamente o diálogo *Conflito de edição* (recarregar | salvar por cima). A própria
|
||||
sessão que salvou ignora o evento; reconexão do `EventSource` é automática e o fallback
|
||||
continua sendo a checagem no foco da janela.
|
||||
- **Autosave**: ligado por padrão — após ~1,5 s sem digitar, a alteração é salva como revisão
|
||||
`autosave` (rascunho novo vira nota criada automaticamente; status *"salvando…"* na barra).
|
||||
Desligável em Preferências. Conflitos durante autosave pausam o ciclo até a resolução.
|
||||
- **Autosave por ociosidade**: só grava após um período **sem nenhuma alteração** — padrão
|
||||
**10 s**, configurável (5/10/30/60 s em Preferências); cada tecla reinicia a contagem, então
|
||||
digitação contínua nunca é interrompida por gravações. Silencioso (sem toast — apenas o
|
||||
status *"salvando…/salvo"*; toast continua no `Ctrl+S` manual). A gravação também é feita
|
||||
ao **trocar de aba do app** ou ao **minimizar/trocar de janela** (`visibilitychange`/
|
||||
`pagehide`), para não perder edição pendente. Conflitos pausam o ciclo até a resolução.
|
||||
- **Sincronia entre dispositivos** (celular + desktop no mesmo servidor):
|
||||
- Cada aba lembra o hash em que se baseia (`base_hash`). Ao salvar, se o servidor mudou desde
|
||||
então, a API responde **409** e a UI abre o diálogo **Conflito de edição** com as duas saídas:
|
||||
|
||||
Reference in new issue
Block a user