Skip to main content

multipleform

Funcionalidades

  • Construir varios formularios dinamicamente
  • Agregar formularios
  • Eliminar formularios

El componente MultipleForm te permite gestionar múltiples conjuntos de campos de formulario, como en el caso de formularios repetibles o dinámicos.

Ejemplo de Input

Uso en Componentes

Utilizando en un Componente

Puedes integrar el componente MultipleForm en tus componentes de la siguiente manera:

<template>
<div>
<MultipleForm
title="Daños partes"
:forms="daniosPartes"
:deleteIcon="deleteIconUrl"
@remove="removeFormDaniosPartes"
@add="addForm"
@getMultipleValues="getMultipleValues"
/>
</div>
</template>

<script setup lang="ts">
import { ref } from 'vue';

const modelDanios = ref<any>([
{
key: "parte_id",
title: "Parte",
type : "select",
validations : {
rules : {
required : true
},
},
formatValue: (data:any) => {
return data?.id
},
options: partes,
placeholder : "Parte",
value : null,
cols: 3,
listenForm: true
},
{
key: "daño_id",
title: "Daños",
type : "select",
validations : {
rules : {
required : true
},
},
formatValue: (data:any) => {
return data?.id
},
options: daños,
placeholder : "Daños",
value : [],
cols: 4,
listenForm: true
},
{
key: "codigo",
title: "Codigo de danio",
type : "text",
placeholder : "Codigo de danio",
value : null,
state : null,
cols: 4,
listenForm: true
},
{
slot: true,
key: 'delete-0',
cols: 1
}
])

const daniosPartes = ref<any>([modelDanios.value])

const daniosPartesValues = ref<any>([])

const deleteIconUrl = `${baseApiUrl}/icons/basura.svg`;

const removeFormDaniosPartes = async (data : any) => {
let lookForIndex = daniosPartes.value.findIndex((forms:any) => forms.findIndex((input:any) => input.key === data.unique) > -1)
if(lookForIndex > -1){
daniosPartesValues.value.splice(lookForIndex, 1)
daniosPartes.value.splice(lookForIndex, 1)
}
}

const addForm = () => {
let nextForm = modelDanios.value.map((form: any) => {
if(form.slot === true){
return {
...form,
key: 'delete-' + generateId()
}
} else {
return form
}
});
daniosPartes.value.push(nextForm)
}

const removeDeleteKeys = (obj: object) => {
const newObj = {};

Object.keys(obj).forEach((key) => {
if (!/^delete-\d+$/.test(key)) {
newObj[key as keyof object] = obj[key as keyof object];
}
});

return newObj;
};

const getMultipleValues = async ({ formValues, index}: any) => {
const cleanedFormValues = removeDeleteKeys(formValues);
daniosPartesValues.value[index] = cleanedFormValues;
}
</script>

Propiedades y Configuraciones

Propiedad/ConfiguraciónTipoDescripción
formsArrayConjuntos de campos de formulario.
titleStringTítulo que se muestra en la sección.
deleteIconStringURL del ícono de eliminación.
iconStringURL del ícono para agregar.

Eventos

EventoParámetrosDescripción
removeform, index, uniqueSe emite al eliminar un conjunto de formulario.
add-Se emite al agregar un nuevo conjunto de formulario.
getMultipleValuesdataSe emite para obtener los valores de un conjunto.