function ready(fn) {
// La fonction fn ne sera exécutée qu'après le chargement du DOM
if (document.readyState !== 'loading') {
fn();
} else {
document.addEventListener('DOMContentLoaded', fn);
}
}
ready(function () {
document.getElementById("acl").addEventListener("click", function () { ...; });
grist.ready(...);
grist.onRecords(table => { ... });
grist.onRecord(record => { ... });
...
});
On peut exécuter une API GRIST depuis un plugin
// Récupère le contenu d'une table du document async function query1(table) { const tokenInfo = await grist.docApi.getAccessToken({readOnly: true}); // le endpoint Tables/id_table/records pour le document courant const url = tokenInfo.baseUrl + `/tables/${table}/records?auth=${tokenInfo.token}`; const response = await fetch(url, { method: 'GET', headers: { 'Content-Type': 'application/json', } }); return response.json(); }Nom de la table :
On peut exécuter une API EXTERNE depuis un plugin
// Récupère le contenu de https://geo.api.gouv.fr/regions
async function query2() {
const url = "https://geo.api.gouv.fr/regions";
const response = await fetch(url, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
}
});
return response.json();
}
Récupèrer la liste des régions :
On peut spécifier les colonnes utilisables dans un widget
const columnsMappingOptions = [ { name: "dateValidite", title: "Date de validité", optional: false, type: "Date,DateTime", description: "début de la validité", allowMultiple: false, strictType: true }, { name: "type", title: "Type de référence", optional: true, type: "Choice,ChoiceList", description: "Type de la référence", allowMultiple: false } ]; grist.ready({ columns: columnsMappingOptions }); grist.onRecords((rows, mappings) => { document.getElementById('col1').innerHTML = mappings.dateValidite; document.getElementById('col2').innerHTML = mappings.type; });
2 colonnes paramétrables doivent apparaitre dans la barre latérale de configuration du widget
sont des paires cle-valeur qui persistent lorsqu'on enregistre le widget. On peut donc s'en servir pour un paramétrage externe du widget
grist.onOptions((options, settings) => { document.getElementById('dump3').innerHTML = "options.titre = " + options.titre; }); async function changeOption() { await grist.setOption("titre", document.getElementById('optiontitre').value); }option titre :
Lorsqu'on a plusieurs options à modifier, il est préférable de passer par grist.setOptions({...}) qui permet de passer un tableau de paires cle-valeur
On peut accéder au contenu d'une table avec fetchtable
function fetch_table(table, div) { grist.docApi.fetchTable(table).then(function(records) { document.getElementById(div).innerHTML = JSON.stringify(records, null, 2); }); }Nom de la table :
Avec applyUserActions
function add_agent() { let newagent = { "nom" : "newagent", "email": "new@yopmail.com", "role" : ["L","USER"] } grist.docApi.applyUserActions([ ['AddRecord', "Salaries", -1, newagent] ]).then(function(e) { msg("agent ajouté"); }).catch(function(e) { msg("erreur ajout agent " + String(e)); }); }
function supp_agent(id_agent) { grist.docApi.applyUserActions([ ['RemoveRecord', 'Salaries', id_agent] ]).then(function(e) { msg("agent supprimé"); }).catch(function(e) { msg("erreur suppression agent " + String(e)); }); }
function maj_team(id_user, texte) { grist.docApi.applyUserActions([ ['UpdateRecord', "Salaries", id_user, { ["lib"]: texte }]]).then(function(e) { msg("maj ok"); }).catch(function(e) { msg("erreur " + String(e)); }); }
Avec listTables()
function list_tables() { grist.docApi.listTables().then(function(tables) { document.getElementById('dump').innerHTML = JSON.stringify(tables); }); }