Form
The UiForm component renders a <form> DOM element and allows you to easily validate child form components (like Field wrapped components) that have the internal validation (NOT the external one) through rules associated with them.
Basic
Typings
typescript
interface UiFormProps {
modelValue: Indexable;
stacked?: boolean;
loading?: boolean;
errors?: Indexable<string>;
type?: FormType;
required: string[];
watchFields?: string[];
sections: FieldSection[];
actions?: FormAction[];
addNewLabel?: string;
removeLabel?: string;
}Basic Implementation
vue
<template>
<form v-bind="schema" v-model="initialValues" @on:submit="handleSubmit" />
</template>
<script setup lang="ts">
import { Form } from '@components/form';
import type { FormProps } from '../../../src/components/form/types';
import { ref } from 'vue';
interface FormValues {
first_name: string;
last_name: string;
accept: boolean;
}
const schema = ref<FormProps>({
type: 'object',
required: ['accept'],
stacked: false,
sections: [
{
heading: {
title: 'Personal Info',
subtitle: 'This is a simple form example',
},
properties: {
first_name: {
type: 'TEXT',
variant: 'DEFAULT',
title: 'First Name',
clearable: true,
},
last_name: {
type: 'TEXT',
variant: 'DEFAULT',
title: 'Last Name',
clearable: true,
},
accept: {
type: 'CHECKBOX',
variant: 'DEFAULT',
title: 'I accept the terms and conditions',
description:
'If you do not accept the terms and conditions, you will not be able to submit the form.',
},
},
},
],
});
const initialValues = ref<FormValues>({
name: '',
lastname: '',
acceptin: false,
});
const handleSubmit = (values) => {
alert(JSON.stringify(values, null, 2));
};
</script>