Aller au contenu principal

Implémenter un formulaire React Formik avec le hook useFormConfig.

Dans cet exemple, nous démontrons comment implémenter un formulaire React Formik en utilisant le hook useFormConfig de OneEntry.

✅ Objectif du scénario :

  • Implémenter un formulaire Formik utilisant le hook useFormConfig de OneEntry.
  • S'assurer que les données sont correctement formatées et validées avant la soumission.

✅ Ce dont vous avez besoin :

  • Une PROJECT_URL et un APP_TOKEN valides pour l'authentification avec l'API OneEntry.
  • Un environnement de développement configuré avec React.js activé (par exemple, Next.js, Create React App).
  • Configuré dans l'interface utilisateur OneEntry avec le marqueur "contact_us".

📌 Important :

  • Ces exemples n'incluent pas la gestion des erreurs.
  • Vous pouvez gérer les erreurs en utilisant un bloc try-catch ou en employant une construction comme await Promise.catch((error) => error).
  • Assurez-vous que le marqueur de formulaire (par exemple, "contact_us") utilisé dans Forms.getFormByMarker correspond à un formulaire existant dans votre projet OneEntry.

Scénario

1. Importer oneEntry et définir l'url et le token

Exemple :

import { defineOneEntry } from 'oneentry';

const PROJECT_URL = 'your-project-url';
const APP_TOKEN = 'your-app-token';

2. Création d'un client API avec la fonction defineOneEntry()

Exemple :

const { Forms } = defineOneEntry(PROJECT_URL, {
token: APP_TOKEN,
});

Obtenir les données du formulaire depuis oneentry

Exemple :

const formData = await Forms.getFormByMarker('contact_us');
Résultat :
{
"id": 3,
"attributeSetId": 2,
"type": "data",
"localizeInfos": {
"title": "Contactez-nous",
"titleForSite": "",
"successMessage": "Message concernant le traitement réussi des données",
"unsuccessMessage": "Message concernant le traitement échoué des données",
"urlAddress": "",
"database": "0",
"script": "0"
},
"version": 5,
"position": 1,
"identifier": "contact_us",
"processingType": "script",
"templateId": null,
"attributes": [
{
"type": "string",
"marker": "first_name",
"isLogin": null,
"isSignUp": null,
"position": 1,
"settings": {},
"isVisible": true,
"listTitles": [],
"validators": {
"requiredValidator": {
"strict": true
}
},
"localizeInfos": {
"title": "Prénom"
},
"additionalFields": [],
"isNotificationEmail": null,
"isNotificationPhoneSMS": null,
"isNotificationPhonePush": null
},
{
"type": "string",
"marker": "email",
"isLogin": null,
"isSignUp": null,
"position": 2,
"settings": {},
"isVisible": true,
"listTitles": [],
"validators": {
"requiredValidator": {
"strict": true
},
"emailInspectionValidator": true
},
"localizeInfos": {
"title": "Email"
},
"additionalFields": [],
"isNotificationEmail": null,
"isNotificationPhoneSMS": null,
"isNotificationPhonePush": null
},
{
"type": "string",
"marker": "surname",
"isLogin": null,
"isSignUp": null,
"position": 3,
"settings": {},
"isVisible": true,
"listTitles": [],
"validators": {
"stringInspectionValidator": {
"stringMax": 0,
"stringMin": 0,
"stringLength": 0
}
},
"localizeInfos": {
"title": "Nom de famille"
},
"additionalFields": [],
"isNotificationEmail": null,
"isNotificationPhoneSMS": null,
"isNotificationPhonePush": null
},
{
"type": "list",
"marker": "topic",
"isLogin": null,
"isSignUp": null,
"position": 4,
"settings": {},
"isVisible": true,
"listTitles": [
{
"title": "Article",
"value": "article",
"extended": {
"type": null,
"value": null
},
"position": 1
},
{
"title": "Article-2",
"value": "article-2",
"extended": {
"type": null,
"value": null
},
"position": 2
}
],
"validators": {
"requiredValidator": {
"strict": true
}
},
"localizeInfos": {
"title": "Sujet"
},
"additionalFields": [],
"isNotificationEmail": null,
"isNotificationPhoneSMS": null,
"isNotificationPhonePush": null
},
{
"type": "text",
"marker": "text",
"isLogin": null,
"isSignUp": null,
"position": 5,
"settings": {},
"isVisible": true,
"listTitles": [],
"validators": {},
"localizeInfos": {
"title": "Texte"
},
"additionalFields": [],
"isNotificationEmail": null,
"isNotificationPhoneSMS": null,
"isNotificationPhonePush": null
},
{
"type": "spam",
"marker": "spam",
"isLogin": null,
"isSignUp": null,
"position": 6,
"settings": {},
"isVisible": true,
"listTitles": [],
"validators": {},
"localizeInfos": {
"title": "Vous n'êtes pas un robot ?"
},
"additionalFields": [],
"isNotificationEmail": null,
"isNotificationPhoneSMS": null,
"isNotificationPhonePush": null
},
{
"type": "button",
"marker": "send",
"isLogin": null,
"isSignUp": null,
"position": 7,
"settings": {},
"isVisible": true,
"listTitles": [],
"validators": {},
"localizeInfos": {
"title": "Envoyer"
},
"additionalFields": [],
"isNotificationEmail": null,
"isNotificationPhoneSMS": null,
"isNotificationPhonePush": null
}
]
}

Utiliser le hook useFormConfig

Ce hook fournit des données de configuration du formulaire.

Exemple :

const {
fields,
initialValues,
validationSchema,
} = useFormConfig(formData?.attributes);

Intégration de Formik

Exemple :

<Formik initialValues={initialValues} validationSchema={validationSchema} onSubmit={() => {}}>
{({
values,
errors,
touched,
handleChange,
handleBlur,
handleSubmit,
isSubmitting,
}) => {
return (
<form onSubmit={handleSubmit}>
<input
type="email"
name="email"
onChange={handleChange}
onBlur={handleBlur}
value={values?.email}
/>
<input
type="text"
name="first_name"
onChange={handleChange}
onBlur={handleBlur}
value={values?.first_name}
/>
<input
type="text"
name="surname"
onChange={handleChange}
onBlur={handleBlur}
value={values?.surname}
/>
<button type="submit" disabled={isSubmitting}>
Soumettre
</button>
</form>
);
}}
</Formik>

Exemple final

// 1. Importer defineOneEntry, Formik et useFormConfig
import { defineOneEntry } from 'oneentry';
import { Formik } from 'formik';
import useFormConfig from './useFormConfig';

// 1.1 définir PROJECT_URL et APP_TOKEN
const PROJECT_URL = 'your-project-url';
const APP_TOKEN = 'your-app-token';

// 2. Création d'un client API
const { Forms, FormData } = defineOneEntry(PROJECT_URL, {
token: APP_TOKEN,
});

// 3. Obtenir les données du formulaire depuis OneEntry
const formData = await Forms.getFormByMarker('contact_us');

// 4. Extraire la configuration du formulaire avec le hook react useFormConfig
const {
fields,
initialValues,
validationSchema,
} = useFormConfig(formData?.attributes);

// 5. Créer le formulaire avec Formik et les données de useFormConfig
return (
<Formik initialValues={initialValues} validationSchema={validationSchema} onSubmit={() => {}}>
{({
values,
errors,
touched,
handleChange,
handleBlur,
handleSubmit,
isSubmitting,
}) => {
return (
<form onSubmit={handleSubmit}>
<input
type="email"
name="email"
onChange={handleChange}
onBlur={handleBlur}
value={values?.email}
/>
<input
type="text"
name="first_name"
onChange={handleChange}
onBlur={handleBlur}
value={values?.first_name}
/>
<input
type="text"
name="surname"
onChange={handleChange}
onBlur={handleBlur}
value={values?.surname}
/>
<button type="submit" disabled={isSubmitting}>
Soumettre
</button>
</form>
);
}}
</Formik>
);