pgadmin4/web/pgadmin/static/js/selection/copy_data.js

53 lines
1.6 KiB
JavaScript

define([
'jquery',
'underscore',
'sources/selection/clipboard',
'sources/selection/range_selection_helper',
'sources/selection/range_boundary_navigator'],
function ($, _, clipboard, RangeSelectionHelper, rangeBoundaryNavigator) {
var copyData = function () {
var self = this;
var grid = self.slickgrid;
var columnDefinitions = grid.getColumns();
var selectedRanges = grid.getSelectionModel().getSelectedRanges();
var data = grid.getData();
var rows = grid.getSelectedRows();
if (allTheRangesAreFullRows(selectedRanges, columnDefinitions)) {
self.copied_rows = rows.map(function (rowIndex) {
return data[rowIndex];
});
setPasteRowButtonEnablement(self.can_edit, true);
} else {
self.copied_rows = [];
setPasteRowButtonEnablement(self.can_edit, false);
}
var csvText = rangeBoundaryNavigator.rangesToCsv(data, columnDefinitions, selectedRanges);
if (csvText) {
clipboard.copyTextToClipboard(csvText);
}
};
var setPasteRowButtonEnablement = function (canEditFlag, isEnabled) {
if (canEditFlag) {
$("#btn-paste-row").prop('disabled', !isEnabled);
}
};
var allTheRangesAreFullRows = function (ranges, columnDefinitions) {
var colRangeBounds = ranges.map(function (range) {
return [range.fromCell, range.toCell];
});
if(RangeSelectionHelper.isFirstColumnData(columnDefinitions)) {
return _.isEqual(_.union.apply(null, colRangeBounds), [0, columnDefinitions.length - 1]);
}
return _.isEqual(_.union.apply(null, colRangeBounds), [1, columnDefinitions.length - 1]);
};
return copyData;
});