# jsegd-fluig-types

![Version](https://img.shields.io/badge/version-1.0.72-blue.svg)
![License](https://img.shields.io/badge/license-CC--BY--NC--ND--4.0-green.svg)

Definições de tipos TypeScript (`.d.ts`) para desenvolvimento na plataforma **Fluig**, cobrindo APIs frontend, eventos de workflow, datasets, SDK Java, webservices e classes Java básicas usadas no runtime Rhino.

## 🎯 Objetivo

Disponibilizar tipagem global para todos os identificadores expostos pelo Fluig em scripts de:

- **Frontend** (widgets, formulários, eventos): `FLUIGC`, `WCMAPI`, `Datatable`, `Modal`, `Toast`, `Autocomplete`, `formMode`, etc.
- **Backend / Workflow** (Rhino + Java): `hAPI`, `log`, `globalVars`, `getValue`, `ServiceManager`, `JSONUtil`, `FormController`, `customHTML`.
- **Datasets**: `DatasetFactory`, `DatasetBuilder`, `DefaultDataset`, `AddColumn`, `setKey`, `addIndex`, `defineStructure`, `onSync`, `onMobileSync`, `createDataset`, `ConstraintType`, `DatasetFieldType`.
- **SDK Java do Fluig**: namespaces `com.fluig.sdk.*` (services, VOs, OAuth).
- **Webservice ECM**: `com.totvs.technology.ecm.workflow.ws.ECMWorkflowEngineServiceService` e DTOs relacionados.
- **Java**: `java.util.*`, `java.lang.*`, `java.sql.*`, `javax.naming.*`, `javax.sql.*`.

Todos os símbolos são declarados em `declare global { ... }`, ficando disponíveis sem `import` em qualquer arquivo `.ts` do projeto consumidor.

## 📦 Instalação

```bash
npm install -D jsegd-fluig-types
```

ou com yarn:

```bash
yarn add -D jsegd-fluig-types
```

ou com pnpm:

```bash
pnpm add -D jsegd-fluig-types
```

## 🚀 Uso

### Carregamento global

Adicione uma única referência num arquivo de bootstrap (ex.: `src/types/global.d.ts`):

```typescript
import 'jsegd-fluig-types'
```

Ou inclua nos `types` do `tsconfig.json`:

```json
{
    "compilerOptions": {
        "types": ["jsegd-fluig-types"]
    }
}
```

### Subpath imports (opcional)

O pacote expõe entradas individuais em `package.json#exports` para uso seletivo:

| Subpath                        | Conteúdo                                                                                  |
| ------------------------------ | ----------------------------------------------------------------------------------------- |
| `jsegd-fluig-types`            | Reexporta todos os módulos abaixo (recomendado).                                          |
| `jsegd-fluig-types/frontend`   | Tipos de widgets/portal: `FLUIGC`, `WCMAPI`, `Datatable`, `Toast`, `formMode`.            |
| `jsegd-fluig-types/backend`    | Tipos de Rhino/workflow: `hAPI`, `log`, `getValue`, `globalVars`, `ServiceManager`.       |
| `jsegd-fluig-types/dataset`    | Tipos de dataset: `DatasetFactory`, `DefaultDataset`, `ConstraintType`, `AddColumn`, etc. |
| `jsegd-fluig-types/sdk`        | Namespaces `com.fluig.sdk.*` (FluigAPI e services).                                       |
| `jsegd-fluig-types/webservice` | `ECMWorkflowEngineServiceService` e DTOs de workflow.                                     |
| `jsegd-fluig-types/api`        | Parâmetros das APIs REST do Fluig (`SearchDatasetValuesParams`).                          |
| `jsegd-fluig-types/java`       | Tipos `java.*` e `javax.*` necessários no Rhino.                                          |

```typescript
import 'jsegd-fluig-types/backend'
import 'jsegd-fluig-types/dataset'
```

## 🧩 Conteúdo

### Frontend (widget/portal)

```typescript
const opts: ModalSettings = {
    title: 'Confirmação',
    content: '<p>Deseja continuar?</p>',
    id: 'modal-confirm',
    showHeader: true,
    showFooter: true,
    actions: [],
    headerActions: [],
    headerContent: '',
    size: 'small',
    formModal: false,
}

FLUIGC.modal(opts)

if (formMode === FormMod.ADD) {
    // formulário em modo de inclusão
}

DatasetFactory.getDataset('colleague', ['colleagueId', 'colleagueName'], [], ['colleagueName'], {
    success: function (result) {
        // result: DatasetWcmResult<unknown>
        console.log(result.columns, result.values)
    },
})
```

### Backend (Rhino / workflow)

```typescript
function beforeTaskSave(colleagueId: string, nextSequenceId: number, userTaskVO: unknown): void {
    const numProc = getValue('WKNumProces')
    const card = hAPI.getCardData(parseInt(numProc))
    log.info('Salvando tarefa de ' + colleagueId + ' no processo ' + numProc)
    globalVars.put('ultimoUsuario', new java.lang.String(colleagueId))
}
```

### Dataset

```typescript
function defineStructure(): void {
    AddColumn(new java.lang.String('NOME'), DatasetFieldType.STRING)
    AddColumn(new java.lang.String('IDADE'), DatasetFieldType.NUMBER)
    setKey([new java.lang.String('NOME')])
    addIndex([new java.lang.String('IDADE')])
}

function createDataset(fields: string[], constraints: SearchConstraint[], sortFields: string[]): DefaultDataset {
    const ds = DatasetBuilder.newDataset()
    ds.addColumn(new java.lang.String('NOME'))
    ds.addRow([new java.lang.String('Maria')] as any)
    return ds
}
```

### SDK e webservice

```typescript
const fluig = new com.fluig.sdk.api.FluigAPI()
const userService = fluig.getUserService()

const wsService = ServiceManager.getService('ECMWorkflowEngineService')
const port = wsService.getBean().instantiate('com.totvs.technology.ecm.workflow.ws.ECMWorkflowEngineServiceService').getWorkflowEngineServicePort()

const cardData = new java.util.HashMap<java.lang.String, java.lang.String>()
const choosedUsers = new java.util.ArrayList<string>()
choosedUsers.add('admin')
port.startProcess('admin', 'secret', 1, 'ProcExemplo', 2, choosedUsers, 'ok', true, cardData, false)
```

## 🗂️ Estrutura

```text
types/
├── index.d.ts                    # reexporta todos os módulos
├── fluig/
│   ├── fluig.api.d.ts            # parâmetros das APIs REST do Fluig
│   ├── fluig.backend.d.ts        # workflow, hAPI, log, ServiceManager, FormController
│   ├── fluig.dataset.d.ts        # DatasetFactory, DefaultDataset, constraints
│   ├── fluig.frontend.d.ts       # FLUIGC, WCMAPI, Datatable, Modal, Toast
│   ├── fluig.sdk.d.ts            # com.fluig.sdk.* (FluigAPI, services, VOs)
│   └── fluig.webservice.d.ts     # ECMWorkflowEngineServiceService e DTOs
└── java/
    └── java.d.ts                 # java.util, java.lang, java.sql, javax.*
```

## 🔗 Integração com `jsegd-fluig-lint`

O plugin [`jsegd-fluig-lint`](https://www.npmjs.com/package/jsegd-fluig-lint) extrai automaticamente os globais declarados aqui em tempo de carga, evitando duplicação de listas de identificadores. Mantenha as duas dependências sincronizadas:

```bash
npm install -D jsegd-fluig-lint jsegd-fluig-types eslint
```

## 📋 Requisitos

- TypeScript **3.0+** (testado em 5.9 com `strict: true`).
- Ambiente Fluig em runtime (não há código emitido — somente tipagens).

## 📄 Licença

Distribuído sob **CC-BY-NC-ND-4.0**. Consulte os termos antes de uso comercial ou redistribuição modificada.

---

Desenvolvido com ❤️ pela [**EGD Tecnologia**](https://www.egd.tec.br/)
