diff --git a/CHANGELOG.md b/CHANGELOG.md index 6df7d38..4a7f160 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 0.0.22 + +* Add opportunity to customize table header cells + ## 0.0.21 * Upfill `UIKitWidth` diff --git a/gradle.properties b/gradle.properties index 5db2102..330e4bb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,4 +9,4 @@ android.enableJetifier=true # Project data group=dev.inmo -version=0.0.21 +version=0.0.22 diff --git a/src/jsMain/kotlin/dev/inmo/jsuikit/elements/Table.kt b/src/jsMain/kotlin/dev/inmo/jsuikit/elements/Table.kt index 77db07e..911eae9 100644 --- a/src/jsMain/kotlin/dev/inmo/jsuikit/elements/Table.kt +++ b/src/jsMain/kotlin/dev/inmo/jsuikit/elements/Table.kt @@ -10,16 +10,16 @@ import org.w3c.dom.* @Composable fun DefaultTable( - heading: List, + headerBuilders: List>, dataList: SnapshotStateList, vararg tableModifiers: UIKitModifier, attributesCustomizer: AttrBuilderContext = {}, - headerCellCustomizer: AttrsBuilder.(i: Int, title: String) -> Unit = { _, _ -> }, + headerCellCustomizer: AttrsBuilder.(i: Int) -> Unit = { }, rowAttributes: AttrsBuilder.(t: T) -> Unit = {}, cellCustomizer: AttrsBuilder.(i: Int, t: T) -> Unit = { _, _ -> }, cellFiller: @Composable ElementScope.(i: Int, t: T) -> Unit ) { - val headingIndexes = heading.indices + val headingIndexes = headerBuilders.indices Table( { classes("uk-table") @@ -29,13 +29,13 @@ fun DefaultTable( ) { Thead { Tr { - heading.forEachIndexed { i, t -> + headerBuilders.forEachIndexed { i, t -> Th( { - headerCellCustomizer(i, t) + headerCellCustomizer(i) } ) { - Text(t) + t() } } } @@ -61,3 +61,37 @@ fun DefaultTable( } } } + +@Composable +fun DefaultTable( + heading: List, + dataList: SnapshotStateList, + vararg tableModifiers: UIKitModifier, + attributesCustomizer: AttrBuilderContext = {}, + headerCellCustomizer: AttrsBuilder.(i: Int, title: String) -> Unit = { _, _ -> }, + rowAttributes: AttrsBuilder.(t: T) -> Unit = {}, + cellCustomizer: AttrsBuilder.(i: Int, t: T) -> Unit = { _, _ -> }, + cellFiller: @Composable ElementScope.(i: Int, t: T) -> Unit +) { + val headersByIndex = heading.mapIndexed { index, s -> index to s }.toMap() + val headerCellCustomizer: AttrsBuilder.(i: Int) -> Unit = { i -> + val header = headersByIndex[i] + if (header != null) { + headerCellCustomizer(i, header) + } + } + inline fun headerFactory(header: String): ContentBuilder = { + Text(header) + } + val headerBuilders = heading.map(::headerFactory) + return DefaultTable( + headerBuilders, + dataList, + tableModifiers = tableModifiers, + attributesCustomizer, + headerCellCustomizer, + rowAttributes, + cellCustomizer, + cellFiller + ) +}