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(
+ '
a: 0
b: 1
' + ) + } + }