Skip to content

Formulaire ​

Le formulaire n'est pas un layout exporté sous la forme useXLayout(...), mais il joue le même rôle de forme racine.

L'API concernée est createForm(...).

Signature ​

ts
ts
import { createForm } from "@duplojs/form/vue";

const useForm = createForm(templates);

Puis :

ts
ts
const {
	component,
	check,
	currentValue,
	reset,
	dispose,
} = useForm(rootField, params);

Paramètres de createForm(...) ​

  • templates: objet Templates contenant les templates de rendu à utiliser.

Paramètres de useForm(...) ​

ts
ts
useForm(formField, {
	class?: string,
	template?: Templates["form"],
});
  • formField: le FormField racine à instancier.
  • class: classe CSS ajoutée au template du formulaire.
  • template: surcharge locale du template form.

Valeur retournée ​

useForm(...) retourne :

  • component: composant Vue à rendre.
  • check(): validation complète du formulaire.
  • currentValue: Ref de la valeur courante brute.
  • reset(): remise à zéro à partir des defaultValue.
  • dispose(): destruction des effets internes de l'instance.

Contrat du template form ​

Le template form reçoit :

Props ​

ts
ts
{
	fieldKey: string;
	getCurrentValue(): unknown;
}

Emits ​

ts
ts
{
	submit: [];
}

Slots ​

ts
ts
{
	formField(): any;
	submitter(): any;
}

Petit exemple de template ​

vue
vue
<script setup lang="ts">
import { type FormTemplateProperties } from "@duplojs/form/vue";

defineProps<FormTemplateProperties["props"]>();
defineSlots<FormTemplateProperties["slots"]>();
defineEmits<FormTemplateProperties["emits"]>();
</script>

<template>
	<form>
		<slot name="formField" />

		<slot name="submitter" />
	</form>
</template>
ts
ts
import { createTemplate } from "@duplojs/form/vue";
import MyFormTemplate from "./formTemplate.vue";

export const useMyFormTemplate = createTemplate(
	"form",
	MyFormTemplate,
);

Exemple minimal ​

ts
ts
import { 
useTextInput
} from "@duplojs/form/vueDesignSystem";
import {
useForm
} from "./init";
export function
useNewsletterForm
() {
const {
component
,
check
,
currentValue
,
reset
,
dispose
} =
useForm
(
useTextInput
({
label
: "Email",
defaultValue
: "",
}), ); return {
NewsletterForm
:
component
,
checkNewsletterForm
:
check
,
currentNewsletterValue
:
currentValue
,
resetNewsletterForm
:
reset
,
disposeNewsletterForm
:
dispose
,
}; }

À retenir ​

  • le formulaire instancie un FormField racine ;
  • il délègue tout le rendu au template form ;
  • il expose l'API de cycle de vie la plus haute : check, currentValue, reset, dispose.

Released under the MIT License.