@anpdgovbr/shared-types
Version:
Biblioteca central de tipos TypeScript compartilhados para os projetos da ANPD (BETA)
122 lines (121 loc) • 3.53 kB
JavaScript
import { UNIDADES_FLAT } from "./departments.data";
/**
* Converte uma lista plana de UnidadeFlat em uma lista de nós de árvore (DepartmentTreeNode),
* ligando cada nó ao seu pai pelo código e populando a propriedade children.
*
* @param items Lista plana de unidades. Quando não fornecida, usa o conjunto padrão `UNIDADES_FLAT`.
* @returns Array de nós raiz (ou seja, nós sem parentId) prontos para uso em estruturas em árvore.
*
* @example
* ```ts
* const roots = toTreeNodes(myUnidades)
* // cada root tem .children[] contendo os filhos diretos
* ```
*
* @public
*/
export function toTreeNodes(items) {
var _a;
const source = items !== null && items !== void 0 ? items : UNIDADES_FLAT;
const map = new Map();
for (const u of source) {
map.set(u.codigo, {
id: u.codigo,
data: u,
parentId: (_a = u.pai) === null || _a === void 0 ? void 0 : _a.codigo,
});
}
// attach children
for (const node of map.values()) {
if (node.parentId) {
const parent = map.get(node.parentId);
if (parent) {
parent.children = parent.children || [];
parent.children.push(node);
}
}
}
// return roots
return Array.from(map.values()).filter((n) => !n.parentId);
}
/**
* Retorna os filhos diretos da unidade identificada pela sigla.
*
* @param sigla Sigla da unidade cujo filhos serão retornados.
* @returns Vetor de UnidadeFlat representando os filhos diretos; retorna [] se não encontrada.
*
* @example
* ```ts
* const filhos = listarFilhosPorSigla('DG')
* ```
*
* @public
*/
export function listarFilhosPorSigla(sigla) {
const unidade = UNIDADES_FLAT.find((u) => u.sigla === sigla);
return unidade ? unidade.filhos : [];
}
/**
* Retorna todas as unidades cuja propriedade pai possua o código informado.
*
* @param codigo Código do pai a ser buscado.
* @returns Lista de UnidadeFlat cujo pai.codigo === codigo.
*
* @example
* ```ts
* const filhos = listarPorPaiCodigo('1000')
* ```
*
* @public
*/
export function listarPorPaiCodigo(codigo) {
return UNIDADES_FLAT.filter((u) => { var _a; return ((_a = u.pai) === null || _a === void 0 ? void 0 : _a.codigo) === codigo; });
}
/**
* Mapeia uma UnidadeFlat para um objeto DepartmentDto leve, adequado para envio a clientes.
*
* @param u UnidadeFlat de origem.
* @returns DepartmentDto contendo os campos básicos e referências por sigla.
*
* @example
* ```ts
* const dto = mapToDepartmentDto(unidade)
* // { codigo, sigla, nome, tipo, nivel, paiSigla, filhosSiglas }
* ```
*
* @public
*/
export function mapToDepartmentDto(u) {
var _a;
return {
codigo: u.codigo,
sigla: u.sigla,
nome: u.nome,
tipo: u.tipo,
nivel: u.nivel,
paiSigla: (_a = u.pai) === null || _a === void 0 ? void 0 : _a.sigla,
filhosSiglas: u.filhos.map((f) => f.sigla),
};
}
/**
* Converte uma UnidadeFlat em um DepartmentOptionDto usado em componentes de seleção (select/options).
*
* @param u UnidadeFlat a ser convertida.
* @returns DepartmentOptionDto com label formatado (ex: "SIG - Nome da Unidade").
*
* @example
* ```ts
* const option = mapToOption(unidade)
* // { codigo, sigla, nome, label: "SIG - Nome" }
* ```
*
* @public
*/
export function mapToOption(u) {
return {
codigo: u.codigo,
sigla: u.sigla,
nome: u.nome,
label: `${u.sigla} - ${u.nome}`,
};
}