Skip to content

Commit

Permalink
Minor refactoring of ClipboardEventsHandler
Browse files Browse the repository at this point in the history
  • Loading branch information
Schahen committed Mar 20, 2024
1 parent 763e588 commit cd17460
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -35,23 +35,23 @@ internal actual inline fun rememberClipboardEventsHandler(
if (isFocused) {
DisposableEffect(textFieldSelectionManager) {

val onCopy = EventListenerWrapper { event ->
val onCopy = EventListener { event ->
val textToCopy = textFieldSelectionManager.onCopyWithResult()
if (textToCopy != null && event is ClipboardEvent) {
event.clipboardData?.setData("text/plain", textToCopy)
event.preventDefault()
}
}

val onPaste = EventListenerWrapper { event ->
val onPaste = EventListener { event ->
if (event is ClipboardEvent) {
val textToPaste = event.clipboardData?.getData("text/plain") ?: ""
event.preventDefault()
textFieldSelectionManager.paste(AnnotatedString(textToPaste))
}
}

val onCut = EventListenerWrapper { event ->
val onCut = EventListener { event ->
if (event is ClipboardEvent) {
val cutText = textFieldSelectionManager.onCutWithResult()
event.clipboardData?.setData("text/plain", cutText ?: "")
Expand All @@ -63,14 +63,11 @@ internal actual inline fun rememberClipboardEventsHandler(
document.addEventListener("paste", onPaste)
document.addEventListener("cut", onCut)

return@DisposableEffect onDispose {
onDispose {
document.removeEventListener("copy", onCopy)
document.removeEventListener("paste", onPaste)
document.removeEventListener("cut", onCut)
}
}
}
}

private fun EventListenerWrapper(handler: (Event) -> Unit): EventListener =
EventListener { handler(it) }
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import androidx.compose.ui.text.AnnotatedString
import kotlinx.browser.document
import org.w3c.dom.clipboard.ClipboardEvent
import org.w3c.dom.events.Event
import org.w3c.dom.events.EventListener
import org.w3c.dom.events.EventListener as EventListenerInterface

@Composable
@NonRestartableComposable
Expand All @@ -35,23 +35,23 @@ internal actual inline fun rememberClipboardEventsHandler(
if (isFocused) {
DisposableEffect(textFieldSelectionManager) {

val onCopy = EventListenerWrapper { event ->
val onCopy = EventListener { event ->
val textToCopy = textFieldSelectionManager.onCopyWithResult()
if (textToCopy != null && event is ClipboardEvent) {
event.clipboardData?.setData("text/plain", textToCopy)
event.preventDefault()
}
}

val onPaste = EventListenerWrapper { event ->
val onPaste = EventListener { event ->
if (event is ClipboardEvent) {
val textToPaste = event.clipboardData?.getData("text/plain") ?: ""
event.preventDefault()
textFieldSelectionManager.paste(AnnotatedString(textToPaste))
}
}

val onCut = EventListenerWrapper { event ->
val onCut = EventListener { event ->
if (event is ClipboardEvent) {
val cutText = textFieldSelectionManager.onCutWithResult()
event.clipboardData?.setData("text/plain", cutText ?: "")
Expand All @@ -63,7 +63,7 @@ internal actual inline fun rememberClipboardEventsHandler(
document.addEventListener("paste", onPaste)
document.addEventListener("cut", onCut)

return@DisposableEffect onDispose {
onDispose {
document.removeEventListener("copy", onCopy)
document.removeEventListener("paste", onPaste)
document.removeEventListener("cut", onCut)
Expand All @@ -72,5 +72,5 @@ internal actual inline fun rememberClipboardEventsHandler(
}
}

private fun EventListenerWrapper(handler: (Event) -> Unit): EventListener =
private fun EventListener(handler: (Event) -> Unit): EventListenerInterface =
js("(event) => { handler(event) }")

0 comments on commit cd17460

Please sign in to comment.