Skip to content

Commit e425732

Browse files
committed
working
1 parent 7a40e1b commit e425732

1 file changed

Lines changed: 32 additions & 30 deletions

File tree

src/lib/Functions/handleCopy.ts

Lines changed: 32 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,40 @@
1-
import { ClipboardEvent } from '../Model/domEventsTypes';
2-
import { State } from '../Model/State';
3-
import { getDataToCopy } from './getDataToCopy';
4-
import { getActiveSelectedRange } from './getActiveSelectedRange';
5-
import { isBrowserSafari } from './safari';
1+
import { ClipboardEvent } from "../Model/domEventsTypes";
2+
import { State } from "../Model/State";
3+
import { getDataToCopy } from "./getDataToCopy";
4+
import { getActiveSelectedRange } from "./getActiveSelectedRange";
5+
import { isBrowserSafari } from "./safari";
66

77
export function handleCopy(event: ClipboardEvent, state: State, removeValues = false): State {
8-
const activeSelectedRange = getActiveSelectedRange(state);
9-
if (!activeSelectedRange) {
10-
return state;
11-
}
12-
const { div } = getDataToCopy(state, activeSelectedRange, removeValues);
13-
copyDataCommands(event, state, div);
14-
return { ...state, copyRange: activeSelectedRange };
8+
const activeSelectedRange = getActiveSelectedRange(state);
9+
if (!activeSelectedRange) {
10+
return state;
11+
}
12+
const { div } = getDataToCopy(state, activeSelectedRange, removeValues);
13+
copyDataCommands(event, state, div);
14+
return { ...state, copyRange: activeSelectedRange };
1515
}
1616

1717
export function copyDataCommands(event: ClipboardEvent, state: State, div: HTMLDivElement): void {
18-
const supportNavigatorClipboard = !!navigator?.clipboard?.write;
18+
// how document.execCommand is deprecated, we need try use Clipboard API if is available
19+
// https://developer.mozilla.org/en-US/docs/Web/API/Clipboard_API
20+
const supportNavigatorClipboard = !!navigator?.clipboard?.write;
1921

20-
if (isBrowserSafari()) {
21-
event.clipboardData.setData('text/html', div.innerHTML);
22-
} else if (supportNavigatorClipboard) {
23-
const clipboardItemData = {
24-
"text/html": div.innerHtml,
25-
};
26-
const clipboardItem = new ClipboardItem(clipboardItemData);
27-
await navigator.clipboard.write([clipboardItem]);
28-
} else {
29-
document.body.appendChild(div);
30-
div.focus();
31-
document.execCommand('selectAll', false);
32-
document.execCommand('copy');
33-
document.body.removeChild(div);
34-
}
22+
if (isBrowserSafari()) {
23+
event.clipboardData.setData("text/html", div.innerHTML);
24+
} else if (supportNavigatorClipboard) {
25+
const clipboardItemData = {
26+
"text/html": div.innerHTML,
27+
};
28+
const clipboardItem = new ClipboardItem(clipboardItemData);
29+
navigator.clipboard.write([clipboardItem]).then(() => ({}));
30+
} else {
31+
document.body.appendChild(div);
32+
div.focus();
33+
document.execCommand("selectAll", false);
34+
document.execCommand("copy");
35+
document.body.removeChild(div);
36+
}
3537

36-
state.hiddenFocusElement?.focus({ preventScroll: true });
37-
event.preventDefault();
38+
state.hiddenFocusElement?.focus({ preventScroll: true });
39+
event.preventDefault();
3840
}

0 commit comments

Comments
 (0)