Skip to content

Commit 8782a68

Browse files
committed
Move DashTable onCopy event handler to document from container div
to prevent not being triggered in webkit browsers
1 parent 15e62c4 commit 8782a68

File tree

1 file changed

+13
-8
lines changed
  • components/dash-table/src/dash-table/components/ControlledTable

1 file changed

+13
-8
lines changed

components/dash-table/src/dash-table/components/ControlledTable/index.tsx

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ export default class ControlledTable extends PureComponent<ControlledTableProps>
127127
window.addEventListener('resize', this.forceHandleResize);
128128
document.addEventListener('mousedown', this.handleClick);
129129
document.addEventListener('paste', this.handlePaste);
130+
document.addEventListener('copy', this.handleCopy);
130131

131132
const {active_cell, selected_cells, setProps} = this.props;
132133

@@ -146,6 +147,7 @@ export default class ControlledTable extends PureComponent<ControlledTableProps>
146147
window.removeEventListener('resize', this.forceHandleResize);
147148
document.removeEventListener('mousedown', this.handleClick);
148149
document.removeEventListener('paste', this.handlePaste);
150+
document.removeEventListener('copy', this.handleCopy);
149151
}
150152

151153
componentDidUpdate() {
@@ -242,16 +244,20 @@ export default class ControlledTable extends PureComponent<ControlledTableProps>
242244
}
243245
};
244246

245-
handlePaste = (event: any) => {
246-
// no need to check for target as this will only be called if
247-
// a child fails to handle the paste event (e.g table, table input)
248-
// make sure the active element is in the scope of the component
249-
const $el = this.$el;
250-
if ($el && $el.contains(document.activeElement)) {
251-
this.onPaste(event);
247+
handleClipboardEvent = (event: ClipboardEvent, handler: (e: ClipboardEvent) => void) => {
248+
if (this.containsActiveElement()) {
249+
handler(event);
252250
}
253251
};
254252

253+
handleCopy = (event: ClipboardEvent) => {
254+
this.handleClipboardEvent(event, this.onCopy)
255+
};
256+
257+
handlePaste = (event: ClipboardEvent) => {
258+
this.handleClipboardEvent(event, this.onPaste)
259+
};
260+
255261
private clearCellWidth(cell: HTMLElement) {
256262
cell.style.width = '';
257263
cell.style.minWidth = '';
@@ -978,7 +984,6 @@ export default class ControlledTable extends PureComponent<ControlledTableProps>
978984
<div
979985
id={id}
980986
className='dash-table-container'
981-
onCopy={this.onCopy}
982987
onKeyDown={this.handleKeyDown}
983988
onPaste={this.onPaste}
984989
style={{position: 'relative'}}

0 commit comments

Comments
 (0)