209 lines
5.8 KiB
JavaScript
Raw Permalink Normal View History

/** @odoo-module */
import * as spreadsheet from "@odoo/o-spreadsheet";
import { waitForDataSourcesLoaded } from "@spreadsheet/../tests/utils/model";
const { toCartesian, toZone, lettersToNumber } = spreadsheet.helpers;
/**
* @typedef {import("@spreadsheet/global_filters/plugins/global_filters_core_plugin").GlobalFilter} GlobalFilter
*/
/**
* Select a cell
*/
export function selectCell(model, xc, sheetId = model.getters.getActiveSheetId()) {
const { col, row } = toCartesian(xc);
if (sheetId !== model.getters.getActiveSheetId()) {
model.dispatch("ACTIVATE_SHEET", { sheetIdTo: sheetId });
}
return model.selection.selectCell(col, row);
}
/**
* Add a global filter and ensure the data sources are completely reloaded
* @param {Model} model
* @param {{filter: GlobalFilter}} filter
*/
export async function addGlobalFilter(model, filter, fieldMatchings = {}) {
const result = model.dispatch("ADD_GLOBAL_FILTER", { filter, ...fieldMatchings });
await waitForDataSourcesLoaded(model);
return result;
}
/**
* Remove a global filter and ensure the data sources are completely reloaded
*/
export async function removeGlobalFilter(model, id) {
const result = model.dispatch("REMOVE_GLOBAL_FILTER", { id });
await waitForDataSourcesLoaded(model);
return result;
}
/**
* Edit a global filter and ensure the data sources are completely reloaded
*/
export async function editGlobalFilter(model, filter) {
const result = model.dispatch("EDIT_GLOBAL_FILTER", { filter });
await waitForDataSourcesLoaded(model);
return result;
}
/**
* Set the value of a global filter and ensure the data sources are completely
* reloaded
*/
export async function setGlobalFilterValue(model, payload) {
const result = model.dispatch("SET_GLOBAL_FILTER_VALUE", payload);
await waitForDataSourcesLoaded(model);
return result;
}
export function moveGlobalFilter(model, id, delta) {
return model.dispatch("MOVE_GLOBAL_FILTER", { id, delta });
}
/**
* Set the selection
*/
export function setSelection(model, xc) {
const zone = toZone(xc);
model.selection.selectZone({ cell: { col: zone.left, row: zone.top }, zone });
}
/**
* Autofill from a zone to a cell
*/
export function autofill(model, from, to) {
setSelection(model, from);
model.dispatch("AUTOFILL_SELECT", toCartesian(to));
model.dispatch("AUTOFILL");
}
/**
* Set the content of a cell
*/
export function setCellContent(model, xc, content, sheetId = model.getters.getActiveSheetId()) {
model.dispatch("UPDATE_CELL", { ...toCartesian(xc), sheetId, content });
}
/**
* Set the format of a cell
*/
export function setCellFormat(model, xc, format, sheetId = model.getters.getActiveSheetId()) {
model.dispatch("UPDATE_CELL", { ...toCartesian(xc), sheetId, format });
}
/**
* Set the style of a cell
*/
export function setCellStyle(model, xc, style, sheetId = model.getters.getActiveSheetId()) {
model.dispatch("UPDATE_CELL", { ...toCartesian(xc), sheetId, style });
}
/**
* Add columns
* @param {Model} model
* @param {"before"|"after"} position
* @param {string} column
* @param {number} quantity
* @param {UID} sheetId
*/
export function addColumns(
model,
position,
column,
quantity,
sheetId = model.getters.getActiveSheetId()
) {
return model.dispatch("ADD_COLUMNS_ROWS", {
sheetId,
dimension: "COL",
position,
base: lettersToNumber(column),
quantity,
});
}
/**
* Delete columns
* @param {Model} model
* @param {string[]} columns
* @param {UID} sheetId
*/
export function deleteColumns(model, columns, sheetId = model.getters.getActiveSheetId()) {
return model.dispatch("REMOVE_COLUMNS_ROWS", {
sheetId,
dimension: "COL",
elements: columns.map(lettersToNumber),
});
}
/** Create a test chart in the active sheet*/
export function createBasicChart(model, chartId, sheetId = model.getters.getActiveSheetId()) {
model.dispatch("CREATE_CHART", {
id: chartId,
position: { x: 0, y: 0 },
sheetId: sheetId,
definition: {
title: "test",
dataSets: ["A1"],
type: "bar",
background: "#fff",
verticalAxisPosition: "left",
legendPosition: "top",
stackedBar: false,
},
});
}
/** Create a test scorecard chart in the active sheet*/
export function createScorecardChart(model, chartId, sheetId = model.getters.getActiveSheetId()) {
model.dispatch("CREATE_CHART", {
id: chartId,
position: { x: 0, y: 0 },
sheetId: sheetId,
definition: {
title: "test",
keyValue: "A1",
type: "scorecard",
background: "#fff",
baselineColorDown: "#DC6965",
baselineColorUp: "#00A04A",
baselineMode: "absolute",
},
});
}
/** Create a test scorecard chart in the active sheet*/
export function createGaugeChart(model, chartId, sheetId = model.getters.getActiveSheetId()) {
model.dispatch("CREATE_CHART", {
id: chartId,
position: { x: 0, y: 0 },
sheetId: sheetId,
definition: {
title: "test",
type: "gauge",
background: "#fff",
dataRange: "A1",
sectionRule: {
rangeMin: "0",
rangeMax: "100",
colors: {
lowerColor: "#112233",
middleColor: "#445566",
upperColor: "#778899",
},
lowerInflectionPoint: {
type: "number",
value: "25",
},
upperInflectionPoint: {
type: "number",
value: "85",
},
},
},
});
}