Skip to content

Commit 80ae695

Browse files
committed
Added test case for #869
Improve active support for both accordion and expandable collapsibles.
1 parent 8695fde commit 80ae695

File tree

3 files changed

+31
-5
lines changed

3 files changed

+31
-5
lines changed

gwt-material/src/main/java/gwt/material/design/client/ui/MaterialCollapsible.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,17 @@
2323
import com.google.gwt.dom.client.Document;
2424
import com.google.gwt.dom.client.Element;
2525
import com.google.gwt.event.shared.HandlerRegistration;
26+
import com.google.gwt.user.client.ui.HasWidgets;
2627
import com.google.gwt.user.client.ui.Widget;
2728
import gwt.material.design.client.base.*;
2829
import gwt.material.design.client.base.mixin.CssTypeMixin;
2930
import gwt.material.design.client.constants.CollapsibleType;
3031
import gwt.material.design.client.constants.CssName;
32+
import gwt.material.design.client.constants.Display;
3133
import gwt.material.design.client.events.ClearActiveEvent;
3234
import gwt.material.design.client.events.ClearActiveEvent.ClearActiveHandler;
3335
import gwt.material.design.client.events.CollapseEvent;
3436
import gwt.material.design.client.events.ExpandEvent;
35-
import gwt.material.design.client.base.HasCollapsibleHandlers;
3637

3738
import static gwt.material.design.client.js.JsMaterialElement.$;
3839

@@ -173,13 +174,24 @@ public void clearActive() {
173174
ClearActiveEvent.fire(this);
174175
}
175176

177+
@Override
178+
protected void clearActiveClass(HasWidgets widget) {
179+
super.clearActiveClass(widget);
180+
181+
for (Widget child : widget) {
182+
if (child instanceof MaterialCollapsibleBody) {
183+
((MaterialCollapsibleBody) child).setDisplay(Display.NONE);
184+
}
185+
}
186+
}
187+
176188
/**
177189
* Open the given collapsible item.
178190
*
179191
* @param index the one-based collapsible item index.
180192
*/
181193
public void open(int index) {
182-
setActive(index, true);
194+
setActive(index);
183195
}
184196

185197
/**
@@ -236,7 +248,7 @@ public boolean isAccordion() {
236248

237249
@Override
238250
public void setActive(int index) {
239-
if (!isAccordion()) {
251+
if (isAccordion()) {
240252
clearActive();
241253
}
242254
setActive(index, true);

gwt-material/src/main/java/gwt/material/design/client/ui/MaterialCollapsibleItem.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ public void setActive(boolean active) {
156156
header.removeStyleName(CssName.ACTIVE);
157157
}
158158
if (active) {
159-
if (parent != null && !parent.isAccordion()) {
159+
if (parent != null && parent.isAccordion()) {
160160
parent.clearActive();
161161
}
162162
addStyleName(CssName.ACTIVE);

gwt-material/src/test/java/gwt/material/design/client/ui/MaterialCollapsibleTest.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
*/
2020
package gwt.material.design.client.ui;
2121

22-
import com.google.gwt.event.dom.client.ClickEvent;
2322
import com.google.gwt.user.client.ui.Widget;
2423
import gwt.material.design.client.base.MaterialWidget;
2524
import gwt.material.design.client.constants.*;
@@ -129,6 +128,7 @@ public void testMultipleExpansion() {
129128

130129
// when / then
131130
collapsible.setAccordion(false);
131+
assertFalse(collapsible.isAccordion());
132132
assertTrue(collapsible.getWidget(FIRST_ITEM) instanceof MaterialCollapsibleItem);
133133
assertTrue(collapsible.getWidget(SECOND_ITEM) instanceof MaterialCollapsibleItem);
134134

@@ -145,6 +145,20 @@ public void testMultipleExpansion() {
145145
assertTrue(item2.getElement().hasClassName(CssName.ACTIVE));
146146
item2.collapse();
147147
assertFalse(item2.getElement().hasClassName(CssName.ACTIVE));
148+
149+
// Test case for MaterialCollapsible Issue programtically setting more than one active
150+
// https://github.com/GwtMaterialDesign/gwt-material/issues/869
151+
item1.expand();
152+
assertTrue(item1.getElement().hasClassName(CssName.ACTIVE));
153+
item2.expand();
154+
assertTrue(item2.getElement().hasClassName(CssName.ACTIVE));
155+
assertTrue(item1.getElement().hasClassName(CssName.ACTIVE));
156+
item1.collapse();
157+
assertFalse(item1.getElement().hasClassName(CssName.ACTIVE));
158+
assertTrue(item2.getElement().hasClassName(CssName.ACTIVE));
159+
item2.collapse();
160+
assertFalse(item1.getElement().hasClassName(CssName.ACTIVE));
161+
assertFalse(item1.getElement().hasClassName(CssName.ACTIVE));
148162
}
149163

150164
public void testProgress() {

0 commit comments

Comments
 (0)