Skip to content

Commit

Permalink
Set "is-valid" / "is-invalid" according to the component's error mess…
Browse files Browse the repository at this point in the history
…age (#1017)
  • Loading branch information
vrozkovec authored Dec 11, 2023
1 parent 4fff955 commit 83fd4cb
Showing 1 changed file with 42 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.feedback.FeedbackMessage;
import org.apache.wicket.feedback.FeedbackMessages;
import org.apache.wicket.markup.ComponentTag;
Expand Down Expand Up @@ -239,16 +240,50 @@ protected void onConfigure() {
stateClassName = "";
feedback.setDefaultModelObject("");

String validComponentClass = "is-valid";
String invalidComponentClass = "is-invalid";

final List<FormComponent<?>> formComponents = findFormComponents();

formComponents.forEach(c -> c.add(new Behavior() {
@Override
public void onComponentTag(Component component, ComponentTag tag)
{
Attributes.removeClass(tag, validComponentClass, invalidComponentClass);
}

@Override
public boolean isTemporary(Component component) {
return true;
}
}));

for (final FormComponent<?> fc : formComponents) {
final FeedbackMessages messages = fc.getFeedbackMessages();

if (!messages.isEmpty()) {
final FeedbackMessage worstMessage = getWorstMessage(messages);
worstMessage.markRendered();
feedback.setDefaultModelObject(worstMessage.getMessage());

stateClassName = toClassName(worstMessage);
feedback.setDefaultModelObject(worstMessage.getMessage());

worstMessage.getReporter().add(new Behavior() {
@Override
public void onComponentTag(Component component, ComponentTag tag)
{
if(FeedbackMessageToCssClassNameTransformer.INVALID_FEEDBACK.equals(stateClassName))
Attributes.addClass(tag, invalidComponentClass);
else
Attributes.addClass(tag, validComponentClass);
}

@Override
public boolean isTemporary(Component component) {
return true;
}
});


break; // render worst message of first found child component with feedback message
}
Expand Down Expand Up @@ -316,7 +351,10 @@ private String toClassName(final FeedbackMessage message) {
*/
public static class FeedbackMessageToCssClassNameTransformer implements Function<FeedbackMessage, String> {

@Override
private static final String VALID_FEEDBACK = "valid-feedback";
private static final String INVALID_FEEDBACK = "invalid-feedback";

@Override
public String apply(final FeedbackMessage message) {

if (message == null) {
Expand All @@ -326,9 +364,9 @@ public String apply(final FeedbackMessage message) {
switch (message.getLevel()) {
case FeedbackMessage.FATAL:
case FeedbackMessage.ERROR:
case FeedbackMessage.WARNING: return "invalid-feedback";
case FeedbackMessage.WARNING: return INVALID_FEEDBACK;
case FeedbackMessage.INFO:
case FeedbackMessage.SUCCESS: return "valid-feedback";
case FeedbackMessage.SUCCESS: return VALID_FEEDBACK;
default: return "";
}
}
Expand Down

0 comments on commit 83fd4cb

Please sign in to comment.