@anpdgovbr/shared-types
Version:
Biblioteca central de tipos TypeScript compartilhados para os projetos da ANPD (BETA)
129 lines (128 loc) • 3.86 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.toTreeNodes = toTreeNodes;
exports.listarFilhosPorSigla = listarFilhosPorSigla;
exports.listarPorPaiCodigo = listarPorPaiCodigo;
exports.mapToDepartmentDto = mapToDepartmentDto;
exports.mapToOption = mapToOption;
const departments_data_1 = require("./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
*/
function toTreeNodes(items) {
var _a;
const source = items !== null && items !== void 0 ? items : departments_data_1.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
*/
function listarFilhosPorSigla(sigla) {
const unidade = departments_data_1.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
*/
function listarPorPaiCodigo(codigo) {
return departments_data_1.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
*/
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
*/
function mapToOption(u) {
return {
codigo: u.codigo,
sigla: u.sigla,
nome: u.nome,
label: `${u.sigla} - ${u.nome}`,
};
}