Skip to content

Commit

Permalink
Adding support for tags in ComposableAsset
Browse files Browse the repository at this point in the history
  • Loading branch information
A1shK committed Dec 1, 2024
1 parent f3f90bc commit de0e73c
Show file tree
Hide file tree
Showing 4 changed files with 10 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public fun AssetContext.withContext(context: Context): AssetContext = copy(conte
public fun AssetContext.withStyles(@StyleRes vararg styles: Style?): AssetContext = withStyles(styles.filterNotNull())

/** Create a new, styled [AssetContext] */
public fun AssetContext.withStyles(@StyleRes styles: Styles): AssetContext = if (styles.isEmpty()) {
public fun AssetContext.withStyles(@StyleRes styles: Styles?): AssetContext = if (styles.isNullOrEmpty()) {
this
} else {
copy(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ public constructor(public val assetContext: AssetContext) : NodeWrapper {
.render()

/** Render a [View] with specific [styles] */
public fun RenderableAsset.render(@StyleRes styles: Styles, tag: String): View = assetContext
public fun RenderableAsset.render(@StyleRes styles: Styles?, tag: String): View = assetContext
.withContext(this@RenderableAsset.requireContext())
.withTag(tag)
.withStyles(styles)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,16 +69,17 @@ fun RenderableAsset.compose(androidViewAttributes: AndroidViewAttributes? = null
private fun RenderableAsset.composeAndroidView(androidViewAttributes: AndroidViewAttributes? = null) {
val modifier = androidViewAttributes?.modifier ?: Modifier
val styles = androidViewAttributes?.styles
val tag = androidViewAttributes?.tag

AndroidView(factory = ::FrameLayout, modifier) {
assetContext.withContext(it.context).build().run {
styles?.let { styles ->
render(styles)
} ?: render()
render(styles, tag ?: this@composeAndroidView.asset.id)
} into it
}
}

data class AndroidViewAttributes(
val modifier: Modifier = Modifier,
val styles: Styles? = null,
val tag: String? = null,
)
Original file line number Diff line number Diff line change
Expand Up @@ -35,15 +35,17 @@ class Collection(assetContext: AssetContext) : ComposableAsset<Collection.Data>(
Column(verticalArrangement = Arrangement.spacedBy(20.dp)) {
CompositionLocalProvider(LocalTextStyle provides TextStyle(fontSize = 16.sp)) {
data.label?.compose(
modifier = Modifier.padding(top = 10.dp).fillMaxWidth(),
androidViewAttributes = AndroidViewAttributes(
modifier = Modifier.padding(top = 10.dp).fillMaxWidth(),
styles = listOf(R.style.Text_Label),
),
)
}
Column(modifier = Modifier.fillMaxWidth(), verticalArrangement = Arrangement.spacedBy(8.dp)) {
data.values.map {
it.compose(modifier = Modifier.fillMaxWidth())
it.compose(androidViewAttributes = AndroidViewAttributes(
modifier = Modifier.fillMaxWidth()
))
}
}
}
Expand Down

0 comments on commit de0e73c

Please sign in to comment.