mirror of
https://github.com/gristlabs/grist-core.git
synced 2024-10-27 20:44:07 +00:00
57 lines
1.7 KiB
JavaScript
57 lines
1.7 KiB
JavaScript
|
/* global document, grist, window */
|
||
|
|
||
|
/**
|
||
|
* This widget connects to the document, gets a list of all user tables in it,
|
||
|
* and then tries to replace all cells with the text 'zap'. It requires full
|
||
|
* access to do this.
|
||
|
*/
|
||
|
|
||
|
let failures = 0;
|
||
|
function problem(err) {
|
||
|
// Trying to zap formula columns will fail, but that's ok.
|
||
|
if (String(err).includes("formula column")) { return; }
|
||
|
console.error(err);
|
||
|
document.getElementById('placeholder').innerHTML = 'zap failed';
|
||
|
failures++;
|
||
|
}
|
||
|
|
||
|
async function zap() {
|
||
|
grist.ready();
|
||
|
try {
|
||
|
// If no access is granted, listTables will hang. Detect this condition with
|
||
|
// a timeout.
|
||
|
const timeout = setTimeout(() => problem(new Error('cannot connect')), 1000);
|
||
|
const tables = await grist.docApi.listTables();
|
||
|
clearTimeout(timeout);
|
||
|
// Iterate through user tables.
|
||
|
for (const tableId of tables) {
|
||
|
// Read table content.
|
||
|
const data = await grist.docApi.fetchTable(tableId);
|
||
|
const ids = data.id;
|
||
|
// Prepare to zap all columns except id and manualSort.
|
||
|
delete data.id;
|
||
|
delete data.manualSort;
|
||
|
for (const key of Object.keys(data)) {
|
||
|
const column = data[key];
|
||
|
for (let i = 0; i < ids.length; i++) {
|
||
|
column[i] = 'zap';
|
||
|
}
|
||
|
// Zap columns one by one since if they are a formula column they will fail.
|
||
|
await grist.docApi.applyUserActions([[
|
||
|
'BulkUpdateRecord',
|
||
|
tableId,
|
||
|
ids,
|
||
|
{[key]: column},
|
||
|
]]).catch(problem);
|
||
|
}
|
||
|
}
|
||
|
} catch(err) {
|
||
|
problem(err);
|
||
|
}
|
||
|
if (failures === 0) {
|
||
|
document.getElementById('placeholder').innerHTML = 'zap succeeded';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
window.onload = zap;
|