pgadmin4/web/pgadmin/static/js/selection/copy_data.js
Sarah McAlear 01bfa88309 Improvements to the Query Results grid:
- Improve the UI
- Allow copy/paste from sets of rows, columns or arbitrary blocks of cells

Patch by Matt, Shruti, Joao and Sarah @ Pivotal

Fixes #2476
2017-06-08 13:31:36 +01:00

51 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 (RangeSelectionHelper.areAllRangesCompleteRows(grid, selectedRanges)) {
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), [0, columnDefinitions.length - 1]);
};
return copyData
});