Skip to content

Commit

Permalink
add extensions in JS
Browse files Browse the repository at this point in the history
  • Loading branch information
InsanusMokrassar committed Sep 20, 2024
1 parent e83e0a8 commit 837cac6
Show file tree
Hide file tree
Showing 6 changed files with 100 additions and 0 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,12 @@
* `Okio`: `3.9.0` -> `3.9.1`
* `AndroidFragment`: `1.8.2` -> `1.8.3`
* `androidx.compose.material3:material3` has been replaced with `org.jetbrains.compose.material3:material3`
* `Common`:
* `JS`:
* Add several useful extensions
* `Compose`:
* `JS`:
* Add several useful extensions

## 0.22.2

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package dev.inmo.micro_utils.common.compose

import org.jetbrains.compose.web.dom.AttrBuilderContext
import org.w3c.dom.Element

operator fun <T : Element> AttrBuilderContext<T>?.plus(
other: AttrBuilderContext<T>?
) = when (this) {
null -> other ?: {}
else -> when (other) {
null -> this ?: {}
else -> {
{
invoke(this)
other(this)
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package dev.inmo.micro_utils.common.compose

import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.DisposableEffectResult
import androidx.compose.runtime.DisposableEffectScope
import org.jetbrains.compose.web.attributes.AttrsScope
import org.jetbrains.compose.web.dom.ElementScope
import org.w3c.dom.Element

/**
* This function must be called in the context of your tag content. It works like default [AttrsScope.ref],
* but able to be used several times. Uses [DisposableEffect] under the hood
*/
@Composable
fun <T : Element> ElementScope<T>.ref(
block: DisposableEffectScope.(T) -> DisposableEffectResult
) {
DisposableEffect(0) {
block(scopeElement)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package dev.inmo.micro_utils.common.compose

import org.jetbrains.compose.web.dom.AttrBuilderContext

fun tagClasses(vararg classnames: String): AttrBuilderContext<*> = {
classes(*classnames)
}

fun tagId(id: String): AttrBuilderContext<*> = {
id(id)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package dev.inmo.micro_utils.common

import kotlinx.browser.window

fun copyToClipboard(text: String): Boolean {
return runCatching {
window.navigator.clipboard.writeText(
text
)
}.onFailure {
it.printStackTrace()
}.isSuccess
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package dev.inmo.micro_utils.common

import kotlinx.browser.window
import org.w3c.files.Blob
import org.w3c.files.BlobPropertyBag
import kotlin.js.json

external class ClipboardItem(data: dynamic)

inline fun Blob.convertToClipboardItem(): ClipboardItem {
val itemData: dynamic = json(this.type to this)
return ClipboardItem(itemData)
}

suspend fun copyImageURLToClipboard(imageUrl: String): Boolean {
return runCatching {
val response = window.fetch(imageUrl).await()
val blob = response.blob().await()
val data = arrayOf(
Blob(
arrayOf(blob),
BlobPropertyBag("image/png")
).convertToClipboardItem()
).asDynamic()
window.navigator.clipboard.write(data)
}.onFailure {
it.printStackTrace()
}.isSuccess
}

0 comments on commit 837cac6

Please sign in to comment.