From 2c43f9331a3b658ac9973852501224d4ee5d02d2 Mon Sep 17 00:00:00 2001 From: JesseBrault0709 <62299747+JesseBrault0709@users.noreply.github.com> Date: Wed, 12 Jun 2024 09:24:58 +0200 Subject: [PATCH] Each now accepts Maps. --- TODO.md | 3 +-- .../groowt/view/component/web/lib/Each.groovy | 14 +++++++++++--- .../groowt/view/component/web/lib/EachTests.groovy | 8 ++++++++ 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/TODO.md b/TODO.md index 7dda2c0..3a85103 100644 --- a/TODO.md +++ b/TODO.md @@ -15,8 +15,7 @@ ## 0.1.1 - [x] `Switch` and `Case` components - [x] Fix bug with multiline nested component attributes. -- [ ] `Each` with `Map` -- [ ] `Each` with children in addition to `render` +- [x] `Each` with `Map` - [ ] `WhenNotEmpty` with `Map` ## 0.1.0 diff --git a/web-view-components/src/main/groovy/groowt/view/component/web/lib/Each.groovy b/web-view-components/src/main/groovy/groowt/view/component/web/lib/Each.groovy index 3fca04b..a0f4ff5 100644 --- a/web-view-components/src/main/groovy/groowt/view/component/web/lib/Each.groovy +++ b/web-view-components/src/main/groovy/groowt/view/component/web/lib/Each.groovy @@ -6,7 +6,7 @@ import org.jetbrains.annotations.Nullable class Each extends DelegatingWebViewComponent { - private final Collection items + private final Object items private final @Nullable Closure transform Each(Map attr) { @@ -18,8 +18,16 @@ class Each extends DelegatingWebViewComponent { protected View getDelegate() { return { Writer w -> def cw = new DefaultComponentWriter(w, this.context.renderContext, this.context) - items.forEach { - cw << (transform ? transform(it) : it) + if (items instanceof Collection) { + items.each { + cw << (transform ? transform(it) : it) + } + } else if (items instanceof Map) { + items.each { + cw << (transform ? transform(it) : it) + } + } else { + throw new IllegalArgumentException("The 'items' attribute of Each may only be a Collection or Map.") } } } diff --git a/web-view-components/src/test/groovy/groowt/view/component/web/lib/EachTests.groovy b/web-view-components/src/test/groovy/groowt/view/component/web/lib/EachTests.groovy index 21bab20..6439d81 100644 --- a/web-view-components/src/test/groovy/groowt/view/component/web/lib/EachTests.groovy +++ b/web-view-components/src/test/groovy/groowt/view/component/web/lib/EachTests.groovy @@ -17,4 +17,12 @@ class EachTests extends AbstractWebViewComponentTests { ) } + @Test + void simpleMap() { + this.doTest( + '$it.key: $it.value

} />', + '

a: 0

b: 1

' + ) + } + }