@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
Markdown
# đ 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