You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gristlabs_grist-core/app/client/components/CopySelection.js

46 lines
1.6 KiB

var ValueFormatter = require('app/common/ValueFormatter');
/**
* The CopySelection class is an abstraction for a subset of currently selected cells.
* @param {Array} rowIds - row ids of the rows selected
* @param {Array} fields - MetaRowModels of the selected view fields
* @param {Object} options.rowStyle - an object that maps rowId to an object containing
* style options. i.e. { 1: { height: 20px } }
* @param {Object} options.colStyle - an object that maps colId to an object containing
* style options.
*/
function CopySelection(tableData, rowIds, fields, options) {
this.fields = fields;
this.rowIds = rowIds || [];
this.colIds = fields.map(f => f.colId());
this.displayColIds = fields.map(f => f.displayColModel().colId());
this.rowStyle = options.rowStyle;
this.colStyle = options.colStyle;
this.columns = fields.map((f, i) => {
let formatter = ValueFormatter.createFormatter(
f.displayColModel().type(),
f.widgetOptionsJson(),
f.documentSettings()
);
let _fmtGetter = tableData.getRowPropFunc(this.displayColIds[i]);
let _rawGetter = tableData.getRowPropFunc(this.colIds[i]);
return {
colId: this.colIds[i],
fmtGetter: rowId => formatter.formatAny(_fmtGetter(rowId)),
rawGetter: rowId => _rawGetter(rowId)
};
});
}
CopySelection.prototype.isCellSelected = function(rowId, colId) {
return this.rowIds.includes(rowId) && this.colIds.includes(colId);
};
CopySelection.prototype.onlyAddRowSelected = function() {
return this.rowIds.length === 1 && this.rowIds[0] === "new";
};
module.exports = CopySelection;