npm package: @ftdata/core
Description: ![cover](./cover-core.svg) <br>
Latest version: 0.0.12

# @ftdata/core

![cover](./cover-core.svg) <br>

![React](https://img.shields.io/badge/React-61DAFB?style=for-the-badge&logo=react&logoColor=black) ![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?style=for-the-badge&logo=typescript&logoColor=white) ![Vitest](https://img.shields.io/badge/Vitest-6E9F18?style=for-the-badge&logo=vitest&logoColor=white)

<br>

Pacote interno que fornece a base para aplicações web Fulltrack, incluindo autenticação, internacionalização e configuração global. Contém hooks e tipos reutilizáveis usados em projetos internos.

---

## Funcionalidades

- Shell principal para aplicações web Fulltrack
- Hooks para autenticação, configuração, idioma, permissões, sessão e settings
- Tipos e interfaces para configuração, ambiente, navbar, idiomas, usuário e settings
- Constantes de configuração
- Integração com `react-i18next` para internacionalização

---

## Executando localmente

```bash
pnpm install
pnpm build  # ← builda a lib
pnpm dev    # ← Observa mudanças e builda em tempo real.
```

---

## Como usar

O principal export da biblioteca é o `AppCore`, que funciona como um **wrapper central da aplicação**, gerenciando autenticação, idioma, configuração, sessão e rotas. Os hooks também estão disponíveis, mas seu uso é opcional.

### Importação

```ts
import { AppCore, DEFAULT_CONFIG } from '@ftdata/core';
```

### Exemplo de uso

```ts
import "@ftdata/ui/base.css"; // ← consulte a doc @ftdata/ui
import { AppCore, DEFAULT_CONFIG } from '@ftdata/core';
import httpInstance from './libs/http'; // ← consulte a doc @ftdata/http
import Welcome from './pages/Welcome';
import Settings from './pages/Settings';
import Report from './pages/Report';

const ROUTES = [
  { path: '/', element: <Welcome /> },
  { path: '/settings', element: <Settings /> },
  { path: '/reports', element: <Report /> },
];


function App() {
  return (
    <AppCore config={{ ...DEFAULT_CONFIG, httpInstance, routes: ROUTES }} />
  );
}

export default App;
```

---

## Configuração mínima do AppCore

As informações que você precisa fornecer ao `AppCore` podem ser resumidas em tópicos:

- `module`: nome do módulo da aplicação. Serve para identificar o módulo nas configurações internas. (opcional)
  <br>

- `namespace`: número usado para requisições de traduções. Por padrão, é '114'. (opcional)
  <br>

- `navbar`: configurações do que aparece na barra de navegação, permitindo customizar a interface principal. (opcional)
  - `changeCompanies`: habilita a opção de trocar de empresa no sistema.
  - `attendance`: habilita a exibição do painel de ponto/frequência.
  - `alerts`: habilita notificações de alertas no navbar.
  - `notifications`: habilita notificações gerais.
  - `breadcrumb`: exibe ou oculta o breadcrumb da navegação.
  - `wiki`: habilita link ou acesso ao wiki interno.
    <br>

- `environment`: configuração do ambiente da aplicação. (obrigatório)
  - `S3_URL`: URL do bucket S3 para armazenamento e recursos.
    <br>

- `httpInstance`: instância do `@ftdata/http` usada para chamadas HTTP. (obrigatório)
  <br>

- `routes`: array de rotas da aplicação, cada uma com `path` e `element`. Define a navegação do app. (opcional)

> &nbsp;
> **Observações:**
>
>     - A maioria das configurações podem ser herdadas do `DEFAULT_CONFIG`, mas são totalmente customizáveis.
>
>     - `AppCore` já gerencia todo o fluxo da aplicação, então o uso de hooks é opcional.
>
> &nbsp;   

---

### Hooks

| Nome               | Descrição                                                                                  |
| ------------------ | ------------------------------------------------------------------------------------------ |
| `useAuth`          | Gerencia autenticação do usuário, login, logout e dados do usuário autenticado.            |
| `useConfiguration` | Permite acessar e modificar configurações globais da aplicação.                            |
| `useLanguage`      | Gerencia o idioma da aplicação e integra com o sistema de internacionalização (`i18next`). |
| `usePermissions`   | Controla permissões e regras de acesso do usuário.                                         |
| `useSession`       | Gerencia informações da sessão atual do usuário.                                           |
| `useSettings`      | Permite acessar e modificar configurações personalizadas do usuário.                       |
| `useTranslation`   | Hook para internacionalização, baseado no `react-i18next`.                                 |

---

### Componentes

| Nome             | Descrição                                                                                  |
| ---------------- | ------------------------------------------------------------------------------------------ |
| `AppCore`        | Wrapper central da aplicação, gerencia autenticação, idioma, configuração, sessão e rotas. |
| `WithPermission` | Componente para renderização condicional por permissão.                                    |

---

### Tipos e Interfaces

| Nome                 | Descrição                                      |
| -------------------- | ---------------------------------------------- |
| `IConfig`            | Interface para configuração global do AppCore. |
| `IEnvironmentConfig` | Interface para configuração de ambiente.       |
| `INavbarConfig`      | Interface para configuração da navbar.         |
| `UserType`           | Tipo para dados do usuário.                    |
| `SettingsType`       | Tipo para configurações personalizadas.        |
| `LanguageType`       | Tipo para idiomas suportados.                  |

---

### Constantes

| Nome             | Descrição                       |
| ---------------- | ------------------------------- |
| `DEFAULT_CONFIG` | Configuração padrão do AppCore. |

---

> &nbsp;
> Para importar:
>
> ```ts
> import { AppCore, useAuth, IConfig, DEFAULT_CONFIG, ... } from '@ftdata/core';
> ```
>
> &nbsp;