@mhmdaljefri/revogrid
Version:
Virtual reactive data grid component - RevoGrid.
40 lines (39 loc) • 1.33 kB
JavaScript
import slice from 'lodash/slice';
import { h } from '@stencil/core';
import { getRange } from '../../store/selection/selection.helpers';
export class ClipboardService {
constructor(sv) {
this.sv = sv;
}
onCopy(e) {
const canCopy = this.sv.internalCopy();
if (canCopy.defaultPrevented) {
return false;
}
let focus = this.sv.selectionStoreService.focused;
let range = this.sv.selectionStoreService.ranged;
let data;
if (!range) {
range = getRange(focus, focus);
}
if (range) {
const columns = [...this.sv.columnService.columns];
const props = slice(columns, range.x, range.x1 + 1).map(v => v.prop);
data = this.sv.columnService.copyRangeArray(range, props, this.sv.dataStore);
}
this.clipboard.doCopy(e, data);
return true;
}
renderClipboard() {
return h("revogr-clipboard", { onCopyRegion: e => this.onCopy(e.detail), ref: e => (this.clipboard = e), onPasteRegion: e => this.onPaste(e.detail) });
}
onPaste(data) {
const focus = this.sv.selectionStoreService.focused;
const isEditing = this.sv.selectionStoreService.edited !== null;
if (!focus || isEditing) {
return;
}
const { changed, range } = this.sv.columnService.getTransformedDataToApply(focus, data);
this.sv.onRangeApply(changed, range);
}
}