UNPKG

@anpdgovbr/shared-types

Version:

Biblioteca central de tipos TypeScript compartilhados para os projetos da ANPD (BETA)

129 lines (128 loc) 3.86 kB
"use strict"; 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}`, }; }