Skip to content

Commit

Permalink
fix type of contact in line listing #7829 (#8401)
Browse files Browse the repository at this point in the history
  • Loading branch information
syntakker committed Mar 16, 2022
1 parent ca8eae1 commit 48fad26
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 3 deletions.
@@ -1,6 +1,7 @@
package de.symeda.sormas.ui.contact.components.linelisting.contactfield;

import java.time.LocalDate;
import java.util.Arrays;

import com.vaadin.data.Binder;
import com.vaadin.data.BinderValidationStatus;
Expand All @@ -11,6 +12,8 @@
import com.vaadin.ui.DateField;
import com.vaadin.ui.HorizontalLayout;

import de.symeda.sormas.api.Disease;
import de.symeda.sormas.api.FacadeProvider;
import de.symeda.sormas.api.caze.CaseDataDto;
import de.symeda.sormas.api.contact.ContactDto;
import de.symeda.sormas.api.contact.ContactProximity;
Expand All @@ -24,6 +27,8 @@

public class ContactLineField extends CustomField<ContactLineFieldDto> {

private static final long serialVersionUID = 7634199030865304458L;

private final Binder<ContactLineFieldDto> binder = new Binder<>(ContactLineFieldDto.class);

private final DateField dateOfReport;
Expand Down Expand Up @@ -56,7 +61,6 @@ protected Component initContent() {
binder.forField(multiDay).bind(ContactLineFieldDto.MULTI_DAY_SELECTOR);

typeOfContact.setId("typeOfContact");
typeOfContact.setItems(ContactProximity.values());
typeOfContact.setWidth(150, Unit.PIXELS);
typeOfContact.addStyleName(CssStyles.CAPTION_OVERFLOW);
binder.forField(typeOfContact).bind(ContactLineFieldDto.TYPE_OF_CONTACT);
Expand All @@ -80,6 +84,14 @@ protected Component initContent() {
return layout;
}

public void updateTypeOfContactValues(Disease disease) {
ContactProximity[] values = ContactProximity.getValues(disease, FacadeProvider.getConfigFacade().getCountryLocale());
typeOfContact.setItems(values);
if (!Arrays.asList(values).contains(typeOfContact.getValue())) {
typeOfContact.setValue(null);
}
}

@Override
protected void doSetValue(ContactLineFieldDto contactFieldDto) {
binder.setBean(contactFieldDto);
Expand Down
Expand Up @@ -15,6 +15,8 @@
import com.vaadin.ui.Window;
import com.vaadin.ui.themes.ValoTheme;

import de.symeda.sormas.api.Disease;
import de.symeda.sormas.api.FacadeProvider;
import de.symeda.sormas.api.caze.BirthDateDto;
import de.symeda.sormas.api.caze.CaseDataDto;
import de.symeda.sormas.api.contact.ContactDto;
Expand All @@ -38,6 +40,8 @@

public class LineListingLayout extends VerticalLayout {

private static final long serialVersionUID = 5372515237174090496L;

public static final float DEFAULT_WIDTH = 1696;

private final SharedInfoField sharedInfoField;
Expand All @@ -57,6 +61,7 @@ private LineListingLayout(Window window, SharedInfoField sharedInfoField) {

this.sharedInfoField = sharedInfoField;
this.sharedInfoField.setId("lineListingSharedInfoField");
this.sharedInfoField.addDiseaseChangeHandler(this::updateTypeOfContactValues);
sharedInformationComponent.addComponent(this.sharedInfoField);

addComponent(sharedInformationComponent);
Expand All @@ -68,16 +73,20 @@ private LineListingLayout(Window window, SharedInfoField sharedInfoField) {
addComponent(lineComponent);
}

public LineListingLayout(Window window, CaseDataDto caseReferenceDto) {
this(window, new SharedInfoField(caseReferenceDto));
public LineListingLayout(Window window, CaseDataDto caseDataDto) {
this(window, new SharedInfoField(caseDataDto));

Disease disease = caseDataDto == null ? FacadeProvider.getDiseaseConfigurationFacade().getDefaultDisease() : caseDataDto.getDisease();

ContactLineLayout line = buildNewLine(lineComponent);
line.updateTypeOfContactValues(disease);
lines.add(line);
lineComponent.addComponent(line);

HorizontalLayout actionBar = new HorizontalLayout();
Button addLine = ButtonHelper.createIconButton(Captions.lineListingAddLine, VaadinIcons.PLUS, e -> {
ContactLineLayout newLine = buildNewLine(lineComponent);
newLine.updateTypeOfContactValues(sharedInfoField.getValue().getDisease());
lines.add(newLine);
lineComponent.addComponent(newLine);
lines.get(0).enableDelete(true);
Expand Down Expand Up @@ -114,11 +123,16 @@ public LineListingLayout(Window window, EventDto eventDto, Iterable<EventPartici
newLine.enablePersonField(false);
newLine.setPerson(eventParticipantDto.getPerson());
newLine.setBean(newLineDto);
if (eventDto != null) {
newLine.updateTypeOfContactValues(eventDto.getDisease());
}

lines.add(newLine);
lineComponent.addComponent(newLine);
}

Disease disease = eventDto == null ? FacadeProvider.getDiseaseConfigurationFacade().getDefaultDisease() : eventDto.getDisease();
updateTypeOfContactValues(disease);
addButtons();
}

Expand Down Expand Up @@ -205,6 +219,12 @@ public void setSaveCallback(Consumer<List<ContactLineDto>> saveCallback) {
this.saveCallback = saveCallback;
}

public void updateTypeOfContactValues(Disease disease) {
for (ContactLineLayout line : lines) {
line.updateTypeOfContactValues(disease);
}
}

private ContactLineLayout buildNewLine(VerticalLayout lineComponent) {
ContactLineLayout newLine = new ContactLineLayout(lines.size());
ContactLineLayoutDto newLineDto = new ContactLineLayoutDto();
Expand All @@ -227,6 +247,8 @@ private ContactLineLayout buildNewLine(VerticalLayout lineComponent) {

class ContactLineLayout extends LineLayout {

private static final long serialVersionUID = -6430490310394731389L;

private final Binder<ContactLineLayoutDto> binder = new Binder<>(ContactLineLayoutDto.class);

private final ContactLineField contactLineField;
Expand Down Expand Up @@ -254,6 +276,10 @@ public ContactLineLayout(int lineIndex) {
contactLineField.showCaptions();
}

public void updateTypeOfContactValues(Disease disease) {
contactLineField.updateTypeOfContactValues(disease);
}

public void setBean(ContactLineLayoutDto bean) {
binder.setBean(bean);
}
Expand Down Expand Up @@ -285,6 +311,8 @@ public PersonDto getPerson() {

public static class ContactLineLayoutDto implements Serializable {

private static final long serialVersionUID = 1043859942972062173L;

public static final String LINE_FIELD = "lineField";

private ContactLineFieldDto lineField;
Expand All @@ -300,6 +328,8 @@ public void setLineField(ContactLineFieldDto lineField) {

public static class ContactLineDto implements Serializable {

private static final long serialVersionUID = -4356132050282062118L;

private ContactDto contact;
private PersonDto person;

Expand Down
@@ -1,5 +1,7 @@
package de.symeda.sormas.ui.contact.components.linelisting.sharedinfo;

import java.util.function.Consumer;

import com.vaadin.data.Binder;
import com.vaadin.data.BinderValidationStatus;
import com.vaadin.ui.ComboBox;
Expand All @@ -26,6 +28,8 @@

public class SharedInfoField extends CustomField<SharedInfoFieldDto> {

private static final long serialVersionUID = 1869000092813141681L;

private final Binder<SharedInfoFieldDto> binder = new Binder<>(SharedInfoFieldDto.class);

private final CaseSelector caseSelector;
Expand Down Expand Up @@ -144,4 +148,8 @@ public boolean hasErrors() {
private void updateDistricts(RegionReferenceDto regionDto) {
FieldHelper.updateItems(district, regionDto != null ? FacadeProvider.getDistrictFacade().getAllActiveByRegion(regionDto.getUuid()) : null);
}

public void addDiseaseChangeHandler(Consumer<Disease> diseaseChangeHandler) {
disease.addValueChangeListener(e -> diseaseChangeHandler.accept(disease.getValue()));
}
}

0 comments on commit 48fad26

Please sign in to comment.