24 lines
625 B
TypeScript
24 lines
625 B
TypeScript
import * as Clipboard from "./clipboard"
|
|
|
|
type Toast = {
|
|
show: (input: { message: string; variant: "info" | "success" | "warning" | "error" }) => void
|
|
error: (err: unknown) => void
|
|
}
|
|
|
|
type Renderer = {
|
|
getSelection: () => { getSelectedText: () => string } | null
|
|
clearSelection: () => void
|
|
}
|
|
|
|
export function copy(renderer: Renderer, toast: Toast): boolean {
|
|
const text = renderer.getSelection()?.getSelectedText()
|
|
if (!text) return false
|
|
|
|
Clipboard.copy(text)
|
|
.then(() => toast.show({ message: "Copied to clipboard", variant: "info" }))
|
|
.catch(toast.error)
|
|
|
|
renderer.clearSelection()
|
|
return true
|
|
}
|