@directus/api
Version:
Directus is a real-time API and App dashboard for managing SQL database content
78 lines (77 loc) • 3.13 kB
JavaScript
export async function up(knex) {
const panels = await knex('directus_panels').where('type', '=', 'metric').select();
const updates = [];
for (const panel of panels) {
let options = panel.options;
// Check if the options are stringified and parse them
const wasStringified = typeof options === 'string';
if (wasStringified) {
options = JSON.parse(options);
}
// Not expected, just to be on the safe side
if (!options)
continue;
let needsUpdate = false;
// Check and update abbreviate -> notation
if (options.abbreviate === true) {
options.notation = 'compact';
delete options.abbreviate;
needsUpdate = true;
}
// Check and update decimals -> minimumFractionDigits and maximumFractionDigits
if (typeof options.decimals === 'number') {
options.minimumFractionDigits = options.decimals;
options.maximumFractionDigits = options.decimals;
delete options.decimals;
needsUpdate = true;
}
// Update the row with modified options if necessary
if (needsUpdate) {
// Convert the options back to string if they were stringified initially
if (wasStringified) {
options = JSON.stringify(options);
}
updates.push(knex('directus_panels').update({ options }).where('id', panel.id));
}
}
return Promise.all(updates);
}
export async function down(knex) {
const panels = await knex('directus_panels').where('type', '=', 'metric').select();
const updates = [];
for (const panel of panels) {
let options = panel.options;
// Check if the options are stringified and parse them
const wasStringified = typeof options === 'string';
if (wasStringified) {
options = JSON.parse(options);
}
// Not expected, just to be on the safe side
if (!options)
continue;
let needsUpdate = false;
// Revert notation -> abbreviate
if (options.notation === 'compact') {
options.abbreviate = true;
delete options.notation;
needsUpdate = true;
}
// Revert minimumFractionDigits and maximumFractionDigits -> decimals
if (typeof options.minimumFractionDigits === 'number' &&
options.minimumFractionDigits === options.maximumFractionDigits) {
options.decimals = options.minimumFractionDigits;
delete options.minimumFractionDigits;
delete options.maximumFractionDigits;
needsUpdate = true;
}
// Update the row with reverted options if necessary
if (needsUpdate) {
// Convert the options back to string if they were stringified initially
if (wasStringified) {
options = JSON.stringify(options);
}
updates.push(knex('directus_panels').update({ options }).where('id', panel.id));
}
}
return Promise.all(updates);
}