Este documento explica como o sistema de banco de dados IndexedDB está configurado no projeto.
src/
├── database/
│ └── database.ts # Gerenciador do banco IndexedDB
├── api/
│ └── pages.ts # API para operações com páginas
└── components/editor/
├── PageListModal.tsx # Modal para listar páginas
├── PageCard.tsx # Card individual da página
└── Header.tsx # Header com botão de salvar
- Localização: Botão "Salvar Página" no header
- Funcionalidade: Serializa o estado do Craft.js e salva no IndexedDB
- Dados salvos: Título, descrição, estado comprimido, thumbnail
- Localização: Modal que abre automaticamente ao carregar o editor
- Funcionalidade: Lista todas as páginas salvas com thumbnails
- Ações: Abrir página, deletar página
- Funcionalidade: Deserializa o estado do Craft.js e carrega no editor
- Validação: Verifica se o JSON é válido antes de carregar
- Tecnologia: LZUTF8 para comprimir o estado JSON
- Benefício: Reduz significativamente o tamanho dos dados salvos
interface Page {
id: string; // ID único da página
title: string; // Título da página
description?: string; // Descrição opcional
state: string; // Estado do Craft.js (comprimido)
thumbnail?: string; // Thumbnail em Base64
created_at: string; // Data de criação (ISO string)
updated_at: string; // Data de atualização (ISO string)
}- Função: Salva uma nova página
- Retorna:
{ success: boolean, id?: string, error?: string }
- Função: Carrega uma página específica
- Retorna:
{ success: boolean, page?: Page, error?: string }
- Função: Lista todas as páginas
- Retorno:
{ success: boolean, pages?: Page[], error?: string }
- Função: Deleta uma página
- Retorno:
{ success: boolean, error?: string }
{
"dependencies": {
"dexie": "^4.2.0"
}
}- Configuração padrão para aplicações React
- IndexedDB funciona nativamente no navegador
- Sem necessidade de configurações especiais
- Crie sua página no editor
- Clique no botão "Salvar Página" no header
- Preencha o título (obrigatório) e descrição (opcional)
- Clique em "Salvar"
- O modal de páginas abre automaticamente ao carregar o editor
- Clique em "Abrir" na página desejada
- A página será carregada no editor
- No modal de páginas, clique em "Deletar"
- Confirme a ação
- A página será removida do banco de dados
- Localização: IndexedDB do navegador
- Nome:
PageBuilderDatabase - Formato: IndexedDB (nativo do navegador)
- Criação: Automática na primeira execução
- Thumbnails: Por enquanto geradas como vazias (pode ser implementado com canvas/screenshot)
- Backup: Dados ficam no navegador local (sem backup automático)
- Múltiplos usuários: Não há controle de acesso
- Implementar geração de thumbnails com canvas
- Adicionar sistema de backup/export para arquivos
- Implementar versionamento de páginas
- Adicionar sincronização com servidor
- Verifique se o navegador suporta IndexedDB
- Confirme se não há bloqueios de storage no navegador
- Verifique se o estado do Craft.js é válido
- Confirme se a biblioteca
lzutf8está instalada
- Verifique se o ID da página existe no banco
- Confirme se o IndexedDB não foi limpo pelo navegador
Desenvolvido com ❤️ usando Craft.js, IndexedDB e React