feat(ivr): persiste posição dos nós do editor visual entre recargas
Pedido do usuário: "faz a posição dos nós persistir entre recargas" — o editor visual da PHASE 60 recalculava o layout do zero a cada carga da página, perdendo qualquer arrasto manual assim que a tela recarregava. `IvrMenu.entryPositionX/Y` + `IvrMenuOption.positionX/Y` (nullable, puramente de apresentação — nunca entram no dialplan compilado, só no layout do canvas). Salvos no banco, nunca localStorage: mesma convenção do resto do app, estado compartilhado entre quem quer que edite o tenant, não por navegador/dispositivo. "Salvar alterações" agora lê a posição de verdade do estado de nós do @xyflow/react (reflete arrastos feitos na sessão), não do estado de conteúdo das opções — os dois tinham ficado dessincronizados desde a PHASE 60. Sem posição salva ainda (menu novo, opção recém-adicionada), continua caindo num layout automático em coluna. Testado ponta a ponta: PATCH com coordenadas específicas (incluindo o nó "Entrada"), GET de volta confirma os mesmos valores, e a página carregada de novo com uma sessão real (cookie de login, não só a API crua) já embute essas coordenadas nos props iniciais do componente. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BFaBaBSQGhyXGEgtTYZGV8
This commit is contained in:
@@ -201,12 +201,23 @@ uma segunda opção adicionada via `PATCH` (mesma chamada que o botão
|
||||
"Salvar" do editor visual faz) — confirmado no banco que a versão 2 do
|
||||
dialplan compilou as duas opções corretamente, superando a versão 1.
|
||||
|
||||
### Posição dos nós persiste entre recargas (PHASE 61)
|
||||
|
||||
`IvrMenu.entryPositionX/Y` + `IvrMenuOption.positionX/Y` (nullable,
|
||||
puramente de apresentação — nunca entram no dialplan compilado). Salvos
|
||||
no banco (nunca `localStorage`, mesma convenção do resto do app: estado
|
||||
compartilhado entre quem quer que edite o tenant, não por navegador) a
|
||||
cada "Salvar alterações" — o editor lê a posição de verdade do estado de
|
||||
nós do `@xyflow/react` (reflete arrastos feitos na sessão), não do
|
||||
estado de conteúdo das opções. Sem posição salva (menu novo, opção
|
||||
recém-adicionada), cai num layout automático em coluna. Testado ponta a
|
||||
ponta: `PATCH` com coordenadas específicas, `GET` de volta confirma os
|
||||
mesmos valores, e a página carregada de novo (SSR) já embute essas
|
||||
coordenadas nos props iniciais do componente.
|
||||
|
||||
## O que falta
|
||||
|
||||
- Sem TTS (texto→voz) — só upload de arquivo WAV já gravado.
|
||||
- Editor visual não persiste posição manual dos nós entre recargas
|
||||
(layout recalculado a cada carga da página — arrastar só ajuda
|
||||
durante a mesma sessão de edição).
|
||||
- Menu de IVR não suporta sub-menus (uma opção levando a OUTRO IVR) nem
|
||||
destino "fila" — só ramal, dentro do contexto `default`.
|
||||
- Tela de frontend "Rotas de Entrada" cobre só CRUD simples (DID →
|
||||
|
||||
Reference in New Issue
Block a user