UNPKG

@horizon-apps/domain-schema-core

Version:

Core domain schema utilities for Horizon Platform - Schema generators, data enrichers, converters and specifications

139 lines (108 loc) ‱ 4.23 kB
# 🔄 Domain Data Transformers FunçÔes para transformar estruturas de dados de domĂ­nio. ## 📋 Funcionalidades ### expandArrayFieldToBoolean Expande um campo array em mĂșltiplos campos booleanos independentes. ```typescript import { expandArrayFieldToBoolean } from '@horizon-apps/domain-schema-core' // Expandir array simples const amenities = ['Piscina', 'GinĂĄsio', 'Estacionamento'] const booleanFields = expandArrayFieldToBoolean(amenities) // Resultado: [ // { key: 'Piscina', value: true, type: 'Boolean', label: 'Piscina' }, // { key: 'GinĂĄsio', value: true, type: 'Boolean', label: 'GinĂĄsio' }, // { key: 'Estacionamento', value: true, type: 'Boolean', label: 'Estacionamento' } // ] // Expandir campo com value array const field = { key: 'caracteristicas', value: ['Wi-Fi', 'Ar-condicionado', 'TV'] } const booleanFields = expandArrayFieldToBoolean(field) // Resultado: [ // { key: 'Wi-Fi', value: true, type: 'Boolean', label: 'Wi-Fi' }, // { key: 'Ar-condicionado', value: true, type: 'Boolean', label: 'Ar-condicionado' }, // { key: 'TV', value: true, type: 'Boolean', label: 'TV' } // ] ``` ## 🎯 Casos de Uso ### Transformar caracterĂ­sticas em filtros ```typescript // Propriedade com caracterĂ­sticas const property = { amenities: { key: 'amenities', value: ['Piscina', 'Academia', 'SalĂŁo de Festas'] } } // Expandir para campos booleanos para interface de filtros const filterFields = expandArrayFieldToBoolean(property.amenities) // Cada caracterĂ­stica vira um checkbox independente na UI ``` ### Converter arrays em campos individuais ```typescript // Lista de comodidades const comodidades = ['Elevador', 'Portaria 24h', 'Área Gourmet'] // Transformar em campos booleanos const camposBooleanos = expandArrayFieldToBoolean(comodidades) // Usar em formulĂĄrios ou interfaces que precisam de campos individuais camposBooleanos.forEach(campo => { // Cada item vira um campo separado: campo.key, campo.value, campo.label console.log(`${campo.label}: ${campo.value}`) // "Elevador: true" }) ``` ## 🔧 API Reference ### expandArrayFieldToBoolean(field) **ParĂąmetros:** - `field`: `Field | string[]` - Campo com value array ou array de strings direto **Retorna:** `Field[]` - Array de campos booleanos **Comportamento:** - Cada item do array se torna um campo com `value: true` - A `key` e `label` sĂŁo definidas com o valor do item - O `type` Ă© sempre definido como `'Boolean'` - Se receber array vazio ou campo invĂĄlido, retorna array vazio ## 📝 Tipos ```typescript interface Field { key: string; value?: any; label?: string; type?: string; [key: string]: any; } ``` ### sortFields Ordena array de objetos baseado em mĂșltiplos campos e direçÔes. ```typescript import { sortFields } from '@horizon-apps/domain-schema-core' // Ordenar por nome crescente, depois preço decrescente const properties = [ { name: "Casa A", price: 300000, area: 120 }, { name: "Casa B", price: 250000, area: 100 }, { name: "Casa A", price: 280000, area: 110 } ] const sorted = sortFields(properties, ["name:asc", "price:desc"]) // Resultado: Casa A (300k), Casa A (280k), Casa B (250k) ``` ## 🔧 API Reference ### sortFields(fields, sortKeys) **ParĂąmetros:** - `fields`: `any[]` - Array de objetos para ordenar - `sortKeys`: `string[]` - Array de regras no formato "campo:direção" (ex: `["name:asc", "price:desc"]`) **Retorna:** `any[]` - Nova instĂąncia do array ordenado (nĂŁo modifica o original) **DireçÔes vĂĄlidas:** - `"asc"` - Crescente (A→Z, 0→9) - `"desc"` - Decrescente (Z→A, 9→0) **Comportamento:** - Ordena por mĂșltiplos campos em sequĂȘncia - NĂŁo modifica o array original - Ignora campos `undefined` - Avisa sobre direçÔes invĂĄlidas ## 🌟 CaracterĂ­sticas - ✅ **FlexĂ­vel** - Aceita tanto arrays simples quanto campos complexos - ✅ **Seguro** - Trata casos de entrada invĂĄlida - ✅ **Tipado** - TypeScript com tipos bem definidos - ✅ **Acentuação** - Preserva caracteres especiais e acentuação - ✅ **Consistente** - Sempre retorna campos com mesma estrutura - ✅ **Multi-sort** - Ordena por mĂșltiplos campos em sequĂȘncia - ✅ **ImutĂĄvel** - NĂŁo modifica arrays originais