Vai al contenuto principale

Integra il Visualizzatore di Documenti

Il Visualizzatore di Documenti è un componente web che consente agli utenti di modificare modelli e preparare documenti per la firma — direttamente all'interno della tua applicazione. Questa guida mostra come collegarlo all'API GraphQL per costruire un flusso di lavoro completo per la firma.

Panoramica

Una tipica integrazione segue questi passaggi:

  1. Autenticarsi — ottenere un token per il visualizzatore
  2. Caricare un modello — tramite l'API GraphQL
  3. Renderizzare il visualizzatore — passare l'ID del modello e il token
  4. Catturare eventi — il visualizzatore emette eventi update e validate mentre l'utente lavora
  5. Inviare il documento — chiamare la mutazione send con i dati dei destinatari e dei ruoli dal visualizzatore

Autenticazione

Il visualizzatore necessita di un token valido passato al suo attributo token. Consulta Autenticarsi con l'API prima di collegare il visualizzatore nella tua applicazione.

Modalità Composizione — Inviare un Documento Pre-costruito

La modalità composizione è per flussi di lavoro in cui il tuo sistema conosce già i destinatari. L'utente posiziona solo i campi di firma e invia.

1. Renderizza il visualizzatore

<ls-document-viewer
id="viewer"
templateid="dHBsYjQ5YTg5NWQtYWRhMy0xMWYwLWIxZGMtMDY5NzZlZmU0MzIx"
token="YOUR_ACCESS_TOKEN"
mode="compose"
recipients='[
{"email": "jane@example.com", "firstname": "Jane", "lastname": "Smith", "signerIndex": 1},
{"email": "john@example.com", "firstname": "John", "lastname": "Doe", "signerIndex": 2}
]'
filtertoolbox="signature|initials|date|text"
>
<span slot="right-button">
<button id="send-btn" disabled>Send</button>
</span>
</ls-document-viewer>

2. Traccia la validazione e gli ID ruolo

Mentre l'utente aggiunge campi, il visualizzatore emette eventi. Hai bisogno di due cose da questi eventi:

  • validate — indica se il modello ha tutti i campi richiesti (al minimo, una firma per destinatario)
  • update — fornisce lo stato corrente del modello, incluso il roleId per ogni partecipante quando serve la mappatura del ruolo nel modello
const viewer = document.getElementById('viewer');
const sendBtn = document.getElementById('send-btn');

let isValid = false;
const recipientRoles = {};

viewer.addEventListener('validate', (e) => {
isValid = e.detail.valid;
sendBtn.disabled = !isValid;
});

viewer.addEventListener('update', (e) => {
const roles = e.detail.template.roles;
roles.forEach((role) => {
recipientRoles[role.signerIndex] = role.id;
});
});

Il roleId proveniente dall'evento update mappa ogni destinatario ai suoi campi sul modello. Includilo quando il tuo flusso di invio necessita di tale mappatura.

3. Invia il documento

Quando l'utente clicca invia, chiama la mutazione send con i dati dei destinatari e gli ID ruolo catturati dal visualizzatore:

sendBtn.addEventListener('click', async () => {
const token = '<token-from-authentication-guide>';

const recipients = [
{
firstName: 'Jane',
lastName: 'Smith',
email: 'jane@example.com',
role: 'Signer',
roleId: recipientRoles[1],
signerIndex: 1,
order: 1,
},
{
firstName: 'John',
lastName: 'Doe',
email: 'john@example.com',
role: 'Signer',
roleId: recipientRoles[2],
signerIndex: 2,
order: 2,
},
];

const response = await fetch('https://graphql.uk.legalesign.com/graphql', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${token}`,
},
body: JSON.stringify({
query: `mutation SendDocument {
send(input: {
groupId: "YOUR_GROUP_ID"
templateId: "dHBsYjQ5YTg5NWQtYWRhMy0xMWYwLWIxZGMtMDY5NzZlZmU0MzIx"
title: "Contract - Jane Smith & John Doe"
recipients: ${JSON.stringify(recipients).replace(/"(\w+)":/g, '$1:')}
sequentialSigning: true
})
}`,
}),
});

const result = await response.json();
const taskId = result.data.send;

// Poll for completion
console.log('Task started:', taskId);
});

La mutazione send restituisce un ID attività. Interroga la query task e monitora task.report.status finché raggiunge COMPLETED o FAILED per confermare che la creazione del documento è terminata.

Modalità Editor — Creazione Modelli

La modalità editor offre agli utenti l'esperienza completa di modifica del modello — aggiungendo ruoli, posizionando campi, configurando opzioni. Usala quando vuoi che gli utenti creino modelli riutilizzabili.

<ls-document-viewer
id="editor"
templateid="dHBsYjQ5YTg5NWQtYWRhMy0xMWYwLWIxZGMtMDY5NzZlZmU0MzIx"
token="YOUR_ACCESS_TOKEN"
mode="editor"
></ls-document-viewer>

In modalità editor, l'evento update viene emesso ogni volta che il modello cambia. Puoi usarlo per tracciare lo stato del modello o mostrare un indicatore di salvataggio:

const editor = document.getElementById('editor');

editor.addEventListener('update', (e) => {
console.log('Template updated:', e.detail);
});

editor.addEventListener('validate', (e) => {
console.log('Template valid:', e.detail.valid);
});

Le modifiche al modello sono salvate automaticamente dal visualizzatore — non è necessario chiamare alcuna mutazione GraphQL per salvare le modifiche.

Integrazione React

Il wrapper React fornisce la stessa funzionalità con la gestione eventi in stile React:

import { useState } from 'react';

import { LsDocumentViewer } from 'legalesign-document-viewer-react';

const DocumentCompose = ({ templateId, recipients, token }) => {
const [isValid, setIsValid] = useState(false);
const [roleMap, setRoleMap] = useState({});

const handleValidate = (e) => {
setIsValid(e.detail.valid);
};

const handleUpdate = (e) => {
const roles = e.detail.template.roles;
const map = {};
roles.forEach((role) => {
map[role.signerIndex] = role.id;
});
setRoleMap(map);
};

const handleSend = async () => {
const mappedRecipients = recipients.map((r, i) => ({
...r,
roleId: roleMap[r.signerIndex],
order: i + 1,
}));

const response = await fetch('https://graphql.uk.legalesign.com/graphql', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${token}`,
},
body: JSON.stringify({
query: `mutation SendDocument {
send(input: {
groupId: "YOUR_GROUP_ID"
templateId: "${templateId}"
title: "Document"
recipients: ${JSON.stringify(mappedRecipients).replace(/"(\w+)":/g, '$1:')}
})
}`,
}),
});

const result = await response.json();
console.log('Task ID:', result.data.send);
};

if (!token) return null;

return (
<LsDocumentViewer
templateid={templateId}
token={token}
mode="compose"
recipients={JSON.stringify(recipients)}
onValidate={handleValidate}
onUpdate={handleUpdate}
>
<div slot="right-button">
<button onClick={handleSend} disabled={!isValid}>
Send
</button>
</div>
</LsDocumentViewer>
);
};

Testimoni

Per aggiungere un testimone per un firmatario, imposta roleType: "WITNESS" e usa un signerIndex pari all'indice del firmatario principale + 100. Per esempio, un testimone per il firmatario 2 ha signerIndex: 102:

<ls-document-viewer
mode="compose"
recipients='[
{"email": "signer@example.com", "firstname": "Alice", "lastname": "Jones", "signerIndex": 1},
{"email": "signer2@example.com", "firstname": "Bob", "lastname": "Brown", "signerIndex": 2},
{"email": "witness@example.com", "firstname": "Carol", "lastname": "White", "signerIndex": 102, "roleType": "WITNESS"}
]'
...
></ls-document-viewer>

Concetti Chiave

Concetto del visualizzatoreTipo GraphQLDescrizione
attributo templateidTemplateIl modello in fase di modifica o composizione
attributo recipientsRecipientInputDestinatari passati in modalità composizione
roleId dall'evento updateRoleCollega un destinatario ai suoi campi sul modello
evento validateIndica se il modello ha tutti i campi richiesti
mutazione sendsendInvia il documento dopo la composizione
attributo tokenToken da autenticazione
mode="compose"Modalità semplificata per posizionare campi e inviare
mode="editor"Modalità completa di modifica del modello
experience nell'input sendExperienceControlla branding, email e pagina di firma — vedi Esperienze spiegate

Correlati