Crash when setting a Java collection type as validator in JarbCheckboxMultipleSelect
arjanvlek opened this issue · 1 comments
arjanvlek commented
Background
I have a JarbCheckboxMultipleSelect
which has the following props:
<JarbCheckboxMultipleSelect
name="nestedObjects"
label="Geneste Objecten"
optionForValue={someValue => someValue.description}
options={getPossibleValuesBasedOnOtherValues(form.getState().values)}
jarb={{
validator: 'TheEntity.nestedObjects',
label: 'Geneste objecten'
}}
/>
The Java class for the root-level entity looks as following:
package nl._42.customer.project.the.package.to;
import java.util.List;
import java.util.UUID;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import nl._42.customer.project.the.package.to.TheNestedEntity;
/**
* A class to demonstrate the issue with Jarb
*/
@Entity
@Getter
@Setter
@EqualsAndHashCode(callSuper = false)
@ToString(callSuper = true)
public class TheEntity extends EntityWithCode {
private UUID someRelatedId;
private String description;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "the_entity_id", updatable = false, nullable = false)
private List<TheNestedEntity> nestedObjects;
}
This results in the /constraints
endpoint giving the following response for the field nestedObjects
:
"nestedObjects": {
"javaType":"nl._42.customer.project.the.package.to.TheEntity",
"required":false,
"maximumLength":2147483647,
"fractionLength":0,
"radix":10,
"name":"nestedObjects"
}
Expected behaviour
I expect that it is indicated whether or not it is required to pick at least one of the values using the checkboxes
Actual behaviour
The following error is logged and the application stops working:
utils.js:35 Uncaught TypeError: Cannot read property 'length' of undefined
at Object.mostSpecificInputTypeFor (utils.js:35)
at JarbField.getEnhancedValidate (JarbField.js:91)
at JarbField.render (JarbField.js:184)
at finishClassComponent (react-dom.development.js:17485)
at updateClassComponent (react-dom.development.js:17435)
at beginWork (react-dom.development.js:19073)
at HTMLUnknownElement.callCallback (react-dom.development.js:3945)
at Object.invokeGuardedCallbackDev (react-dom.development.js:3994)
at invokeGuardedCallback (react-dom.development.js:4056)
at beginWork$1 (react-dom.development.js:23964)
at performUnitOfWork (react-dom.development.js:22776)
at workLoopSync (react-dom.development.js:22707)
at renderRootSync (react-dom.development.js:22670)
at performSyncWorkOnRoot (react-dom.development.js:22293)
at react-dom.development.js:11327
at unstable_runWithPriority (scheduler.development.js:646)
at runWithPriority$1 (react-dom.development.js:11276)
at flushSyncCallbackQueueImpl (react-dom.development.js:11322)
at flushSyncCallbackQueue (react-dom.development.js:11309)
at discreteUpdates$1 (react-dom.development.js:22420)
at discreteUpdates (react-dom.development.js:3756)
at dispatchDiscreteEvent (react-dom.development.js:5889)
gidomanders commented
Your constraint has required false, if that would be true, you'd get the required message.