parseLimitProps
Converte uma lista de campos em uma estrutura compatível com o Form Blocks, gerando automaticamente as propriedades model e back utilizadas pelo framework. A função também permite limitar ou selecionar intervalos específicos dos itens processados.
Função
Ver Função
const parseLimitProps = (stringsArray, limitOrRange = [0, stringsArray.length]) => {
const toCamelCase = (str) => {
return str
.replace(/[-_ ](.)/g, (_, char) => char.toUpperCase()) // Converte traços, underscores e espaços para camelCase
.replace(/^(.)/, (match) => match.toLowerCase()); // Garante que o primeiro caractere seja minúsculo
};
let start = 0, end = stringsArray.length;
// Se for um número, define como limite máximo
if (typeof limitOrRange === "number") {
end = Math.min(limitOrRange, stringsArray.length);
}
// Se for um array [start, end]
else if (Array.isArray(limitOrRange) && limitOrRange.length === 2) {
[start, end] = limitOrRange;
end = Math.min(end, stringsArray.length); // Evita ultrapassar o tamanho
}
return stringsArray.slice(start, end).flatMap(item => {
if (Array.isArray(item) && item.length > 2) {
const [groupName, _, ...values] = item
return values.map(str => ({ model: toCamelCase(str), back: `${groupName}.${str}` }));
} else if (typeof item === "string") {
return { model: toCamelCase(item), back: item };
}
return [];
});
}Parametros
stringsArray
Array contendo os nomes dos campos que serão convertidos para o formato utilizado internamente pelo Form Blocks.
O array aceita dois formatos:
Campos Simples
[
'first_name',
'last_name',
'email'
]Campos Agrupados
[
['contacts', null, 'type', 'value']
]Neste caso, o primeiro elemento representa o grupo e os valores subsequentes representam os campos pertencentes a ele.
limitOrRange (Opicional)
Define quais elementos de stringsArray serão processados.
Pode receber:
Número
Limita a quantidade máxima de itens processados a partir do início do array.
parseLimitProps(fields, 3)
// equivalente a:
fields.slice(0, 3)Intervalo
Um array contendo a posição inicial e final.
parseLimitProps(fields, [2, 5])
// equivalente a:
fields.slice(2, 5)O segundo valor segue o comportamento padrão do
Array.slice(), sendo exclusivo.
Caso nenhum valor seja informado, todos os itens serão processados.
Retorno
Retorna um array de objetos contendo as propriedades utilizadas pelo Form Blocks para vincular os campos ao estado do formulário.
Exemplos
Exemplo de Entrada
[
'first_name',
'email'
]Saída
[
{
model: 'firstName',
back: 'first_name'
},
{
model: 'email',
back: 'email'
}
]Exemplo de entrada com Grupo
[
['contacts', Array, 'type', 'value']
]Saída
[
{
model: 'type',
back: 'contacts.type'
},
{
model: 'value',
back: 'contacts.value'
}
]