DéveloppeursDocsFournisseurs
Yeria
Documentation

QRScanView

Scanner un code QR et soumettre le résultat.

Description

Le composant QRScanView fournit une interface de scanner de codes QR. L'application mobile prend en charge toute l'implémentation du scanner (caméra, torche, mise au point, formats, interface), tandis que la vue se contente de décrire ce qu'il faut scanner et où soumettre le résultat.

Principes de conception :

  • L'application mobile prend en charge TOUTE l'implémentation du scanner
  • La vue décrit uniquement ce qu'il faut scanner et où soumettre
  • Le nom du champ est TOUJOURS "qrData" (non configurable)
  • Soumission automatique par défaut : scan → POST immédiat de { qrData: "scanned-value" }
  • Un bouton de soumission désactive la soumission automatique, pour les parcours à confirmation manuelle
  • L'aperçu est en lecture seule : une valeur que l'utilisateur pourrait ressaisir permettrait de publier n'importe quoi comme si cela avait été scanné

Convention de soumission :

  • Soumission automatique : POST vers {service.baseUrl}/{viewId} avec { qrData: "scanned-value" }
  • Avec bouton : l'utilisateur scanne, consulte l'aperçu (s'il est activé), puis appuie sur le bouton pour soumettre

Contrat de comportement côté client

Le moteur de rendu résout les trois indicateurs dans cet ordre — le premier qui s'applique l'emporte :

  1. submit est défini → un bouton est affiché, la soumission automatique est désactivée (le SDK force également autoSubmit: false)
  2. preview.enabled vaut true → la valeur scannée est affichée et la soumission attend l'appui
  3. sinon autoSubmit (true par défaut) → un scan valide est envoyé immédiatement

Scans refusés : lorsqu'une valeur scannée échoue à la validation, le client arrête le scanner et affiche un panneau d'échec portant validation.errorMessage. Il ne poursuit pas silencieusement le balayage — un code qui enfreint les règles les enfreindrait de nouveau à chaque image — et il ne renvoie jamais la valeur refusée à l'utilisateur. Deux conséquences pour le fournisseur :

  • Rédigez errorMessage de façon à énoncer la règle (« doit commencer par PROD- suivi de 6 à 12 chiffres »), et pas simplement « code invalide » : c'est la seule information visible par l'utilisateur.
  • La seule issue pour l'utilisateur est de scanner à nouveau ou de quitter la vue.

Message de confirmation. submit.confirmMessage est rendu comme texte d'aide sur l'écran de résultat du scan, à côté de la valeur scannée — et non comme une boîte de dialogue modale. Sur une vue QRScan, l'appui sur le bouton de soumission (avec la valeur sous les yeux de l'utilisateur) constitue déjà l'étape de confirmation ; une boîte de dialogue poserait deux fois la même question. Servez-vous-en pour indiquer ce que l'utilisateur doit vérifier avant d'appuyer (« comparez la référence avec celle imprimée sur l'étiquette »). Le champ conserve son nom par cohérence avec SubmitAction dans les autres vues ; seul son rendu en QRScan diffère.

Quand activer l'aperçu. Il affiche la valeur brute scannée : il n'est donc utile que si cette valeur signifie quelque chose pour l'utilisateur — une référence de billet, un numéro de facture imprimé à côté du code, ou un lot de codes assez proches physiquement pour que la caméra lise le mauvais. Pour des charges utiles opaques (blobs signés, UUID, URL), laissez-le désactivé et soumettez automatiquement, puis renvoyez une vue décrivant ce à quoi le code correspond : l'utilisateur confirme ainsi un sens plutôt qu'une chaîne de caractères. Afficher une charge utile opaque ou sensible expose au regard indiscret sans aucun bénéfice.

Description des champs

idstringrequis
Identifiant unique de la vue de scan QR
typestringrequis
Toujours "QRScan"
contentQRScanContentrequis
Objet de contenu du scan QR
content.titlestringrequis
Titre de la vue affiché à l'utilisateur
content.introstringoptionnel
Texte d'instruction (par exemple « Dirigez la caméra vers le code QR »)
content.autoSubmitbooleanoptionnel
Soumission automatique après le scan (par défaut : true)
content.submitQRScanSubmitActionoptionnel
Configuration du bouton de soumission (désactive autoSubmit lorsqu'elle est définie)
content.submit.textstringrequis*
Texte du bouton (requis si submit est défini)
content.submit.methodHttpMethodoptionnel
Méthode HTTP (toujours POST pour QRScan)
content.submit.confirmMessagestringoptionnel
Rendu comme texte d'aide à côté de la valeur scannée, et non comme boîte de dialogue — voir « Message de confirmation » plus haut
content.validationobjectoptionnel
Règles de validation des données scannées
content.validation.formatstringoptionnel
Format des données : "text", "number", "url", "email"
content.validation.startsWithstringoptionnel
Préfixe requis (exempté de la validation de format)
content.validation.minLengthnumberoptionnel
Longueur minimale (inclut le préfixe si startsWith est défini)
content.validation.maxLengthnumberoptionnel
Longueur maximale (inclut le préfixe si startsWith est défini)
content.validation.errorMessagestringrequis*
Message d'erreur affiché en cas d'échec de la validation (requis si validation est défini)
content.previewobjectoptionnel
Configuration de l'aperçu avant la soumission
content.preview.enabledbooleanoptionnel
Affiche la valeur scannée, en lecture seule, avant la soumission (par défaut : false)
content.preview.labelstringoptionnel
Libellé du champ dans l'aperçu (par défaut : "Scanned Code")
processIdstringoptionnel
Identifiant de processus pour les parcours multi-étapes
metadataobjectoptionnel
Métadonnées de la vue (version, createdAt, author, tags)

Note : Le serveur DOIT revalider les données scannées pour des raisons de sécurité, même si une validation côté client a été effectuée. Les règles côté client relèvent du confort d'usage — elles évitent un aller-retour, elles ne garantissent rien.

Méthodes

setIntro(intro)this
Définit le texte d'instruction affiché à l'utilisateur
  • intro - Texte d'instruction
submitButton(text, confirmMessage?)this
Configure le bouton de soumission (désactive autoSubmit)
  • text - Texte du bouton
  • confirmMessage - Message optionnel affiché comme texte d'aide avec la valeur scannée
setValidation(errorMessage, format?, minLength?, maxLength?, startsWith?)this
Définit les règles de validation des données scannées
  • errorMessage - Message d'erreur
  • format - Format des données ('text', 'number', 'url', 'email')
  • minLength - Longueur minimale
  • maxLength - Longueur maximale
  • startsWith - Préfixe requis
enablePreview(label?)this
Affiche la valeur scannée en lecture seule avant la soumission
  • label - Libellé du champ (par défaut : "Scanned Code")
disablePreview()this
Désactive le mode aperçu
setAutoSubmit(enabled?)this
Active ou désactive explicitement la soumission automatique
  • enabled - Indicateur d'activation (par défaut : true)
serve()Record<string, unknown>
Sert la vue avec validation (hérité de BaseView)
toJSON()Record<string, unknown>
Renvoie la représentation JSON (hérité de BaseView)
setState(key, value)void
Définit l'état de la vue (hérité de BaseView)
  • key - Clé d'état
  • value - Valeur d'état
getState(key)unknown
Lit l'état de la vue (hérité de BaseView)
  • key - Clé d'état
setNext(url)this
Définit la navigation vers la vue suivante (hérité de BaseView)
  • url - URL de la vue suivante
setPrev(url)this
Définit la navigation vers la vue précédente (hérité de BaseView)
  • url - URL de la vue précédente
setProcess(processId, context?)this
Définit le contexte de processus (hérité de BaseView)
  • processId - Identifiant de processus
  • context - Contexte de processus

Exemples de code JavaScript

Scan QR simple avec soumission automatique

javascript
1import { YeriaApp } from '@numerum-tech/yeriasdk';
2
3const yeriaApp = new YeriaApp({ appId: 'my-app' });
4
5const qrScan = yeriaApp
6    .createQRScanView('scan-ticket', 'Scan Your Ticket')
7    .setIntro('Point camera at the QR code on your ticket');
8// → Scans, immediately POSTs { qrData: "ABC123" } to {baseUrl}/scan-ticket
9
10const response = yeriaApp.serve(qrScan);

Scan QR avec confirmation manuelle

javascript
1const qrScan = yeriaApp
2    .createQRScanView('verify-product', 'Verify Product')
3    .setIntro('Scan the product barcode')
4    .enablePreview('Product Code')
5    .submitButton('Verify Product');
6// → Scans, shows the code read-only, user clicks "Verify Product" to submit

Scan QR avec validation

javascript
1const qrScan = yeriaApp
2    .createQRScanView('scan-invoice', 'Scan Invoice')
3    .setIntro('Scan the invoice QR code')
4    .setValidation(
5        'Invalid invoice format',
6        'number',      // Format: digits only
7        10,            // minLength
8        15,            // maxLength
9        'INV-'         // startsWith prefix
10    )
11    .submitButton('Process Invoice');
12// → Accepts: "INV-123456" (10-15 chars total, digits after INV-)

Scan QR avec validation de code numérique

javascript
1const qrScan = yeriaApp
2    .createQRScanView('scan-code', 'Scan Code')
3    .setIntro('Scan the 6-digit code')
4    .setValidation(
5        'Code must be 6 digits',
6        'number',  // Format: digits only
7        6,         // minLength
8        6          // maxLength
9    );
10// → Accepts: "123456", "000001"

Scan QR avec validation de format e-mail

javascript
1const qrScan = yeriaApp
2    .createQRScanView('scan-email', 'Scan Email QR')
3    .setIntro('Scan the email QR code')
4    .setValidation(
5        'Invalid email format',
6        'email'  // Simple check: has @ and .
7    )
8    .submitButton('Submit Email');
9// → Accepts: "user@example.com"

Scan QR avec validation de format URL

javascript
1const qrScan = yeriaApp
2    .createQRScanView('scan-url', 'Scan URL')
3    .setIntro('Scan the URL QR code')
4    .setValidation(
5        'Invalid URL',
6        'url'  // Starts with http:// or https://
7    )
8    .submitButton('Open URL');
9// → Accepts: "https://example.com"

Scan QR avec validation de préfixe

javascript
1const qrScan = yeriaApp
2    .createQRScanView('scan-ticket', 'Scan Ticket')
3    .setIntro('Scan your ticket QR code')
4    .setValidation(
5        'Must start with TICKET-',
6        undefined,      // No format restriction
7        undefined,      // No minLength
8        undefined,      // No maxLength
9        'TICKET-'       // Required prefix
10    )
11    .submitButton('Confirm Ticket');
12// → Accepts: "TICKET-ABC123", "TICKET-XYZ"

Scan QR avec validation de plage de longueur

javascript
1const qrScan = yeriaApp
2    .createQRScanView('scan-code', 'Scan Code')
3    .setIntro('Scan the code')
4    .setValidation(
5        'Code must be 8-20 characters',
6        undefined,  // No format restriction
7        8,          // minLength
8        20          // maxLength
9    )
10    .submitButton('Submit Code');

Scan QR avec aperçu et message de confirmation

javascript
1const qrScan = yeriaApp
2    .createQRScanView('scan-confirm', 'Scan Code')
3    .setIntro('Scan the code on the parcel')
4    .enablePreview('Parcel Code')
5    .submitButton('Confirm', 'Check the code against the label before validating.');
6// → Shows the scanned code read-only, with the message rendered as help text
7//   next to it, and submits on the tap. The preview is never editable.

Scan QR désactivant la soumission automatique

javascript
1const qrScan = yeriaApp
2    .createQRScanView('scan-review', 'Scan Code')
3    .setIntro('Scan the code')
4    .setAutoSubmit(false)  // Explicitly disable auto-submit
5    .submitButton('Review and Submit');
6// → Requires button click to submit

Scan QR dans un parcours multi-étapes

javascript
1const qrScan = yeriaApp
2    .createQRScanView('scan-step-2', 'Scan Verification Code')
3    .setProcess('verification', {
4        processName: 'Account Verification',
5        currentStep: 2,
6        totalSteps: 3,
7        stepName: 'Scan Code'
8    })
9    .setIntro('Scan the verification code sent to your email')
10    .setValidation(
11        'Invalid verification code',
12        'number',
13        6,
14        6
15    )
16    .submitButton('Verify');

Exemple JSON complet

json
1{
2  "id": "scan-verification",
3  "type": "QRScan",
4  "content": {
5    "title": "Scan Verification Code",
6    "intro": "Scan the verification code sent to your email",
7    "autoSubmit": true,
8    "submit": {
9      "text": "Verify",
10      "method": "POST"
11    },
12    "validation": {
13      "errorMessage": "Invalid verification code",
14      "format": "number",
15      "minLength": 6,
16      "maxLength": 6
17    },
18    "preview": {
19      "enabled": true,
20      "label": "Scanned Code"
21    }
22  },
23  "process": {
24    "processId": "verification",
25    "processName": "Account Verification",
26    "currentStep": 2,
27    "totalSteps": 3,
28    "stepName": "Scan Code"
29  },
30  "metadata": {
31    "version": "2.0.0",
32    "createdAt": "2025-01-28T10:00:00.000Z"
33  }
34}