UNPKG

infinity-forge

Version:
385 lines (283 loc) 10.2 kB
{ "include": ["src/**/*", "styled.d.ts"], "compilerOptions": { "lib": ["es2021", "dom"], "types": ["node"], "jsx": "react-jsx", "baseUrl": "./src", "outDir": "./dist", "declaration": true, "sourceMap": true, "paths": { "@/*": ["./*"] }, "esModuleInterop": true, "moduleResolution": "node", "skipLibCheck": true }, "afterDeclarations": true } Coisas a fazer: Terminar de documentar o FormHandler (está comentado nessa mesma página). Vamos integrar com alguma biblioteca de excel, porque precisamos reestrututar o exports da tabela, basicamente teria que buscar todos os resultados do back e gerar um arquivo excel usuario ver o upload da imagem import axios from 'axios'; const formData = new FormData(); formData.append('file', selectedFile); axios.post('/upload', formData, { onUploadProgress: function (progressEvent) { const percent = Math.round((progressEvent.loaded * 100) / progressEvent.total); console.log(Progresso do upload: percent%); // Atualize seu componente com este valor } }) .then(response => { console.log('Upload completo', response); }) .catch(error => { console.error('Erro no upload', error); }); Aqui deixaremos por hora a versão styleVersion: v1, depois de tudo programado e tudo estando CERTO, iremos fazer a v3 baseado nofigma Tópico para auth pro futuro: https://www.linkedin.com/pulse/armazenamento-seguro-de-senhas-um-guia-pr%C3%A1tico-texto-puro-deschamps-5lt8f/?trackingId=zvK9%2BayeC543FIuw%2FGetZQ%3D%3D Adicionar possibilidade de passar um "filter" pra dentro das opções do InputFile e ele filtrar dentro lidando com performance e outras coisas que podem afetar e passar um componente de erro customizado também para caso não haja opções # Infinity Forge Uma biblioteca abrangente React/Next.js da **Codie Digital** que fornece um poderoso sistema de gerenciamento de conteúdo chamado **Atena** para construir sites dinâmicos e editáveis. ## Visão Geral O Infinity Forge foi projetado para criar sites onde o conteúdo pode ser gerenciado dinamicamente através de uma interface CMS intuitiva. O núcleo da biblioteca é o sistema **Atena**, que permite edição de conteúdo em tempo real, suporte multi-idioma e controle de acesso baseado em funções. ## Principais Recursos - 🚀 **Renderização Dinâmica de Páginas** - Páginas são construídas dinamicamente baseadas nos caminhos das URLs - ✏️ **Edição de Conteúdo em Tempo Real** - Edite conteúdo diretamente no site com preview ao vivo - 🌍 **Internacionalização (i18n)** - Suporte multi-idioma integrado - 🔐 **Controle de Acesso Baseado em Funções** - Gerenciamento seguro de conteúdo com permissões de usuário - 📱 **Renderização no Servidor (SSR)** - Suporte completo a SSR para melhor SEO e performance - 🎨 **Componentes Modulares** - Seções dinâmicas e componentes reutilizáveis - 📊 **Painel Administrativo** - Interface administrativa abrangente para gerenciamento de conteúdo ## Arquitetura ### Componentes Principais #### **Sistema Atena** O coração do Infinity Forge, fornecendo: - Gerenciamento dinâmico de conteúdo - Roteamento e renderização de páginas - Funcionalidade de modo de edição - Organização de conteúdo baseada em seções #### **Camada UI** (`src/ui/`) - Componentes UI reutilizáveis - Seções e elementos dinâmicos - Hooks para gerenciamento de conteúdo #### **Camada Sistema** (`src/system/`) - Autenticação e autorização - Gerenciamento de temas e layout - Provedores de contexto #### **Codie Panel** (`src/codie_panel/`) - Componentes da interface administrativa - Ferramentas de gerenciamento de conteúdo - Painéis de configuração ## Instalação ```bash npm install infinity-forge # ou pnpm install infinity-forge ``` ## Início Rápido ### 1. Configure sua Aplicação Next.js ```typescript // pages/_app.tsx import { InfinityForgeProviders, api } from 'infinity-forge' import 'infinity-forge/dist/infinity-forge.css' export default function App({ Component, pageProps }) { const forgeConfig = { queryClient: new QueryClient(), auth: { roles: { administradorMaster: {}, }, }, atena: { ...pageProps, disableAuth: false }, siteConfigurations: { // Suas configurações do site }, } return ( <InfinityForgeProviders {...forgeConfig}> <Component {...pageProps} /> </InfinityForgeProviders> ) } ``` ### 2. Crie Páginas Dinâmicas ```typescript // pages/[...dynamic].tsx import { AtenaPage, AtenaSSR } from 'infinity-forge' export default function DynamicPage() { return <AtenaPage /> } export const getServerSideProps = (ctx) => AtenaSSR(ctx, {}) ``` ### 3. Use Seções Dinâmicas ```typescript import { useDynamicSection } from 'infinity-forge' function MeuComponente() { const section = useDynamicSection({ refSection: 'minha-secao', fields: { title: {}, description: {}, images: {}, }, }) return ( <section.Section> <h1>{section.title}</h1> <p>{section.description}</p> <img src={section.images[0]?.url} alt='' /> </section.Section> ) } ``` ## Como o Atena Funciona ### 1. **Resolução de Páginas** Quando um usuário visita qualquer URL, o manipulador de rota dinâmica (`[...dynamic].tsx`) captura a requisição. ### 2. **Processamento no Servidor** A função `AtenaSSR`: - Analisa a URL requisitada - Busca seções dinâmicas da API - Carrega dados específicos da página - Gerencia internacionalização - Retorna props processadas ### 3. **Gerenciamento de Contexto** `AtenaProvider` gerencia o estado global: - Permissões e funções do usuário - Status do modo de edição - Dados das seções dinâmicas - Informações da página atual ### 4. **Seções Dinâmicas** Componentes usam `useDynamicSection` para: - Buscar conteúdo específico da seção - Gerenciar renderização do modo de edição - Gerenciar conteúdo multilíngue - Fornecer capacidades de edição inline ### 5. **Gerenciamento de Conteúdo** Usuários autorizados podem: - Editar conteúdo diretamente na página - Gerenciar mídia e imagens - Configurar definições de seção - Visualizar mudanças em tempo real ## Referência da API ### Hooks Principais #### `useDynamicSection<T>(props: DynamicSectionProps)` Hook principal para criar seções dinâmicas e editáveis. ```typescript const section = useDynamicSection<MeuTipoDeConteudo>({ refSection: 'id-unico-da-secao', isGlobal: false, // Opcional: torna a seção disponível globalmente fields: { title: {}, description: {}, images: {}, // ... outros campos }, }) ``` #### `useAtena()` Acesse dados do contexto Atena. ```typescript const { sections, isEditMode, hasPermission, atenaPagePathname } = useAtena() ``` ### Componentes Principais #### `AtenaPage` Renderiza páginas dinâmicas baseadas no roteamento de URL. #### `AtenaProvider` Provedor de contexto para funcionalidade Atena. #### `InfinityForgeProviders` Componente wrapper principal que fornece todos os contextos necessários. ## Tipos de Conteúdo ### DynamicSection ```typescript type DynamicSection<J> = { id: string enabled: boolean i18n: i18n<{ title: string subtitle: string description: string linkText: string }> ref: string videoUrl: string linkUrl: string jsonContent: J images: FileSystemType[] } ``` ## Configuração ### Configuração do Atena ```typescript type AtenaConfigurations = { ssrFunction?: () => Promise<Record<string, any>> apiUrl?: string debugMode?: boolean i18n?: { active: boolean } disableAuth?: boolean modifierSections?: (sections: any) => { sections: any; [key: string]: any } } ``` ## Desenvolvimento ### Pré-requisitos - Node.js 18+ - pnpm (recomendado) ou npm - Next.js 15+ - React 19+ ### Configuração TypeScript Para usar o Infinity Forge em seu projeto, configure o `tsconfig.json` com as seguintes configurações: ```json { "include": ["src/**/*", "styled.d.ts"], "compilerOptions": { "lib": ["es2021", "dom"], "types": ["node"], "jsx": "react-jsx", "baseUrl": "./src", "outDir": "./dist", "declaration": true, "sourceMap": true, "paths": { "@/*": ["./*"] }, "esModuleInterop": true, "moduleResolution": "node", "skipLibCheck": true }, "afterDeclarations": true } ``` ### Scripts ```bash # Desenvolvimento pnpm dev # Build pnpm build # Iniciar servidor de produção pnpm start # Deploy (incrementa versão e publica) pnpm deploy ``` ## Páginas Integradas A biblioteca inclui vários tipos de página pré-construídas: - **Páginas de Contato** - Formulários de contato dinâmicos com campos personalizáveis - **Páginas de Blog** - Listagem de blog e páginas de posts individuais - **Páginas Administrativas** - Interface de gerenciamento de conteúdo ## Internacionalização Atena suporta gerenciamento de conteúdo multi-idioma: ```typescript // Habilitar i18n no AtenaSSR export const getServerSideProps = (ctx) => AtenaSSR(ctx, { i18n: { active: true }, }) ``` O conteúdo é automaticamente gerenciado por idioma, com fallbacks para o idioma padrão. ## Autenticação e Permissões Controle de acesso baseado em funções para edição de conteúdo: ```typescript const forgeConfig = { auth: { roles: { admin: {}, editor: {}, // ... outras funções }, }, } ``` ## Licença Licença MIT - veja o arquivo [LICENSE](./LICENSE) para detalhes. ## Suporte Para suporte e dúvidas, entre em contato com a **Codie Digital** em [https://codie.com.br/](https://codie.com.br/) --- **Infinity Forge** - Capacitando desenvolvedores a construir sites dinâmicos e gerenciados por conteúdo com facilidade.