Untitled

 avatar
unknown
plain_text
5 months ago
13 kB
2
Indexable
Index: src/main/java/pl/xtb/ipax/backoffice/view/saxo/SaxoOptionRootListView.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/main/java/pl/xtb/ipax/backoffice/view/saxo/SaxoOptionRootListView.java b/src/main/java/pl/xtb/ipax/backoffice/view/saxo/SaxoOptionRootListView.java
--- a/src/main/java/pl/xtb/ipax/backoffice/view/saxo/SaxoOptionRootListView.java	(revision 50aefe6ab687ad3abbbe7b845068fd1cfaabc76f)
+++ b/src/main/java/pl/xtb/ipax/backoffice/view/saxo/SaxoOptionRootListView.java	(date 1729170049637)
@@ -1,9 +1,6 @@
 package pl.xtb.ipax.backoffice.view.saxo;
 
-import com.vaadin.flow.component.AbstractField;
-import com.vaadin.flow.component.ClickEvent;
 import com.vaadin.flow.component.Component;
-import com.vaadin.flow.component.Unit;
 import com.vaadin.flow.component.button.Button;
 import com.vaadin.flow.component.button.ButtonVariant;
 import com.vaadin.flow.component.details.Details;
@@ -34,7 +31,6 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
-import java.util.Set;
 
 @Route(value = Routes.SAXO_ROOT_LIST, layout = MainLayout.class)
 @Slf4j
@@ -43,38 +39,26 @@
 
 	private static final int INITIAL_PAGE_NUMBER = 1;
 	private static final int INITIAL_PAGE_SIZE = 10;
-	private static final List<Integer> AVAILABLE_PAGE_SIZE_LIST = List.of(10, 25, 50, 100);
-	private static final String SELECTION_COUNTER_TEXT_FORMAT = "Selected %s from %s";
 	private static final String UPDATE_OPTION_ROOT_DATETIME_TEXT_FORMAT = "Last update: %s";
 
 	private final OptionRootListProvider optionRootListProvider;
 
-	private int totalPagesCounter;
 	private int itemsPerPage = INITIAL_PAGE_SIZE;
 	private int currentPageNumber = INITIAL_PAGE_NUMBER;
-	private long rootTotalElementCounter;
 	private Sort sortBy = Sort.unsorted();
 
-	private Set<OptionRootData> selectedOptions = Set.of();
 	private final Grid<OptionRootData> grid = new Grid<>(OptionRootData.class, Boolean.FALSE);
-	private final Button batchOfferAddingButton = new Button("Add offers");
-	private final Span selectionCounter = new Span();
-
-	private final Span pageDescriptor = new Span();
-	private final Button nextPageButton = new Button("Next page");
-	private final Button previousPageButton = new Button("Previous page");
 
 	private final OptionRootListSearchCriteria searchCriteria = new OptionRootListSearchCriteria();
 
+	private final SaxoFooter footer;
+
 	public SaxoOptionRootListView(OptionRootListProvider optionRootListProvider) {
 		this.optionRootListProvider = optionRootListProvider;
 		setHeightFull();
 		initGrid();
 
-		nextPageButton.addClickListener(this::handleNextPageEvent);
-		previousPageButton.addClickListener(this::handlePreviousPageEvent);
-
-		Component footer = createFooterComponents();
+		this.footer = new SaxoFooter(this::refreshDataInTableAndComponentsState);
 		Component searchCriteria = createSearchCriteriaComponents();
 
 		add(searchCriteria, grid, footer);
@@ -85,9 +69,9 @@
 		grid.addThemeVariants(GridVariant.LUMO_WRAP_CELL_CONTENT);
 		grid.setSelectionMode(Grid.SelectionMode.MULTI);
 		grid.addSelectionListener(selectionEvent -> {
-			this.selectedOptions = selectionEvent.getAllSelectedItems();
-			refreshBatchAddingButton();
-			refreshSelectionCounterComponent();
+			footer.setSelectedOptions(selectionEvent.getAllSelectedItems());
+			footer.refreshBatchAddingButton();
+			footer.refreshSelectionCounterComponent();
 		});
 		grid.addColumn(OptionRootData::description).setHeader("Description");
 		grid.addColumn(OptionRootData::exchangeCountryCode).setHeader("Exchange country code");
@@ -150,36 +134,6 @@
 		return buttonsContainer;
 	}
 
-	private Component createFooterComponents() {
-		Select<Integer> pageSizeSelector = new Select<>();
-		pageSizeSelector.addValueChangeListener(this::handlePageSizeModificationEvent);
-		pageSizeSelector.setItems(AVAILABLE_PAGE_SIZE_LIST);
-		pageSizeSelector.setValue(itemsPerPage);
-
-		HorizontalLayout pagingContainer = new HorizontalLayout();
-		pagingContainer.setJustifyContentMode(JustifyContentMode.END);
-		pagingContainer.setAlignItems(Alignment.CENTER);
-		pagingContainer.setWidthFull();
-		pagingContainer.add(new Span("Page size"), pageSizeSelector, nextPageButton, pageDescriptor, previousPageButton);
-
-		batchOfferAddingButton.setEnabled(false);
-		batchOfferAddingButton.addClickListener(batchAddOffer -> {
-			new Dialog("TODO Add batch offer").open();
-		});
-
-		HorizontalLayout batchAction = new HorizontalLayout();
-		batchAction.setFlexGrow(0);
-		batchAction.setWidth(40, Unit.PERCENTAGE);
-		batchAction.setAlignItems(Alignment.CENTER);
-		batchAction.setJustifyContentMode(JustifyContentMode.START);
-		batchAction.add(batchOfferAddingButton, selectionCounter);
-
-		HorizontalLayout footer = new HorizontalLayout();
-		footer.setWidthFull();
-		footer.add(batchAction, pagingContainer);
-		return footer;
-	}
-
 	private Component createSearchCriteriaComponents() {
 		HorizontalLayout firstRowSearchCriteriaContainer = new HorizontalLayout();
 		firstRowSearchCriteriaContainer.setWidthFull();
@@ -281,73 +235,15 @@
 		return layout;
 	}
 
-	private void handlePageSizeModificationEvent(AbstractField.ComponentValueChangeEvent<Select<Integer>, Integer> event) {
-		grid.setPageSize(event.getValue());
-		setItemsPerPage(event.getValue());
-		resetCurrentPage();
-		refreshDataInTableAndComponentsState();
-	}
-
-	private void handleNextPageEvent(ClickEvent<Button> nextPageEvent) {
-		if (currentPageNumber >= totalPagesCounter) {
-			return;
-		}
-		setCurrentPageNumber(currentPageNumber + 1);
-		refreshDataInTableAndComponentsState();
-	}
-
-	private void handlePreviousPageEvent(ClickEvent<Button> previousPageEvent) {
-		if (currentPageNumber <= 1) {
-			return;
-		}
-		setCurrentPageNumber(currentPageNumber - 1);
-		refreshDataInTableAndComponentsState();
-	}
-
 	private void refreshDataInTableAndComponentsState() {
 		Page<OptionRootData> page = optionRootListProvider.getPage(PageRequest.of((currentPageNumber - 1), itemsPerPage, sortBy), searchCriteria);
 		grid.setItems(page.getContent());
-		this.rootTotalElementCounter = page.getTotalElements();
-		this.totalPagesCounter = page.getTotalPages();
-		refreshPagingButtonsState();
-		refreshPagingDescriptor();
-		refreshSelectionCounterComponent();
-	}
-
-	private void refreshPagingButtonsState() {
-		nextPageButton.setEnabled(currentPageNumber < totalPagesCounter);
-		previousPageButton.setEnabled(currentPageNumber > 1);
-	}
-
-	private void refreshPagingDescriptor() {
-		pageDescriptor.setText("%s of %s".formatted(currentPageNumber, totalPagesCounter));
-	}
-
-	private void refreshBatchAddingButton() {
-		batchOfferAddingButton.setEnabled(this.getSelectedOptions().size() >= 2);
-	}
-
-
-	private void refreshSelectionCounterComponent() {
-		selectionCounter.setText(SELECTION_COUNTER_TEXT_FORMAT.formatted(getSelectedOptions().size(), rootTotalElementCounter));
-	}
-
-	private void resetCurrentPage() {
-		setCurrentPageNumber(INITIAL_PAGE_NUMBER);
-	}
-
-	private void setCurrentPageNumber(int currentPageNumber) {
-		this.currentPageNumber = currentPageNumber;
-	}
-
-	private void setItemsPerPage(int itemsPerPage) {
-		this.itemsPerPage = itemsPerPage;
+		footer.setRootTotalElementCounter(page.getTotalElements());
+		footer.setRootTotalElementCounter(page.getTotalPages());
+		footer.refreshPagingButtonsState();
+		footer.refreshPagingDescriptor();
+		footer.refreshSelectionCounterComponent();
 	}
-
-	private Set<OptionRootData> getSelectedOptions() {
-		return selectedOptions == null ? Set.of() : selectedOptions;
-	}
-
 
 	@RequiredArgsConstructor
 	private enum SearchCriteriaKey {
Index: src/main/java/pl/xtb/ipax/backoffice/view/saxo/SaxoFooter.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/main/java/pl/xtb/ipax/backoffice/view/saxo/SaxoFooter.java b/src/main/java/pl/xtb/ipax/backoffice/view/saxo/SaxoFooter.java
new file mode 100644
--- /dev/null	(date 1729170049648)
+++ b/src/main/java/pl/xtb/ipax/backoffice/view/saxo/SaxoFooter.java	(date 1729170049648)
@@ -0,0 +1,143 @@
+package pl.xtb.ipax.backoffice.view.saxo;
+
+import com.vaadin.flow.component.AbstractField;
+import com.vaadin.flow.component.ClickEvent;
+import com.vaadin.flow.component.Unit;
+import com.vaadin.flow.component.button.Button;
+import com.vaadin.flow.component.dialog.Dialog;
+import com.vaadin.flow.component.grid.Grid;
+import com.vaadin.flow.component.html.Span;
+import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
+import com.vaadin.flow.component.select.Select;
+import pl.xtb.ipax.backoffice.domain.saxo.root.OptionRootData;
+
+import java.util.List;
+import java.util.Set;
+import java.util.function.Consumer;
+
+public class SaxoFooter extends HorizontalLayout {
+
+	private static final int INITIAL_PAGE_NUMBER = 1;
+	private static final int INITIAL_PAGE_SIZE = 10;
+	private static final List<Integer> AVAILABLE_PAGE_SIZE_LIST = List.of(10, 25, 50, 100);
+	private static final String SELECTION_COUNTER_TEXT_FORMAT = "Selected %s from %s";
+	private static final String UPDATE_OPTION_ROOT_DATETIME_TEXT_FORMAT = "Last update: %s";
+
+	private int totalPagesCounter;
+	private int itemsPerPage = INITIAL_PAGE_SIZE;
+	private int currentPageNumber = INITIAL_PAGE_NUMBER;
+	private long rootTotalElementCounter;
+
+	private Set<OptionRootData> selectedOptions = Set.of();
+
+	private final Button nextPageButton = new Button("Next page");
+	private final Button previousPageButton = new Button("Previous page");
+	private final Button batchOfferAddingButton = new Button("Add offers");
+	private final Span selectionCounter = new Span();
+	private final Span pageDescriptor = new Span();
+
+	private final Grid<OptionRootData> grid = new Grid<>(OptionRootData.class, Boolean.FALSE);
+
+	private final Runnable refreshData;
+
+	public SaxoFooter(Runnable refreshData) {
+		this.refreshData = refreshData;
+
+		nextPageButton.addClickListener(this::handleNextPageEvent);
+		previousPageButton.addClickListener(this::handlePreviousPageEvent);
+
+		Select<Integer> pageSizeSelector = new Select<>();
+		pageSizeSelector.addValueChangeListener(this::handlePageSizeModificationEvent);
+		pageSizeSelector.setItems(AVAILABLE_PAGE_SIZE_LIST);
+		pageSizeSelector.setValue(itemsPerPage);
+
+		HorizontalLayout pagingContainer = new HorizontalLayout();
+		pagingContainer.setJustifyContentMode(JustifyContentMode.END);
+		pagingContainer.setAlignItems(Alignment.CENTER);
+		pagingContainer.setWidthFull();
+		pagingContainer.add(new Span("Page size"), pageSizeSelector, nextPageButton, pageDescriptor, previousPageButton);
+
+		batchOfferAddingButton.setEnabled(false);
+		batchOfferAddingButton.addClickListener(batchAddOffer -> {
+			new Dialog("TODO Add batch offer").open();
+		});
+
+		HorizontalLayout batchAction = new HorizontalLayout();
+		batchAction.setFlexGrow(0);
+		batchAction.setWidth(40, Unit.PERCENTAGE);
+		batchAction.setAlignItems(Alignment.CENTER);
+		batchAction.setJustifyContentMode(JustifyContentMode.START);
+		batchAction.add(batchOfferAddingButton, selectionCounter);
+
+		setWidthFull();
+		add(batchAction, pagingContainer);
+	}
+
+	private void handleNextPageEvent(ClickEvent<Button> nextPageEvent) {
+		if (currentPageNumber >= totalPagesCounter) {
+			return;
+		}
+		setCurrentPageNumber(currentPageNumber + 1);
+		refreshData.run();
+	}
+
+	private void handlePreviousPageEvent(ClickEvent<Button> previousPageEvent) {
+		if (currentPageNumber <= 1) {
+			return;
+		}
+		setCurrentPageNumber(currentPageNumber - 1);
+		refreshData.run();
+	}
+
+	private void handlePageSizeModificationEvent(AbstractField.ComponentValueChangeEvent<Select<Integer>, Integer> event) {
+		grid.setPageSize(event.getValue());
+		setItemsPerPage(event.getValue());
+		resetCurrentPage();
+		refreshData.run();
+	}
+
+	void refreshPagingButtonsState() {
+		nextPageButton.setEnabled(currentPageNumber < totalPagesCounter);
+		previousPageButton.setEnabled(currentPageNumber > 1);
+	}
+
+	void refreshPagingDescriptor() {
+		pageDescriptor.setText("%s of %s".formatted(currentPageNumber, totalPagesCounter));
+	}
+
+	void refreshBatchAddingButton() {
+		batchOfferAddingButton.setEnabled(this.getSelectedOptions().size() >= 2);
+	}
+
+	void refreshSelectionCounterComponent() {
+		selectionCounter.setText(SELECTION_COUNTER_TEXT_FORMAT.formatted(getSelectedOptions().size(), rootTotalElementCounter));
+	}
+
+	private void resetCurrentPage() {
+		setCurrentPageNumber(INITIAL_PAGE_NUMBER);
+	}
+
+	private void setCurrentPageNumber(int currentPageNumber) {
+		this.currentPageNumber = currentPageNumber;
+	}
+
+	private void setItemsPerPage(int itemsPerPage) {
+		this.itemsPerPage = itemsPerPage;
+	}
+
+	private Set<OptionRootData> getSelectedOptions() {
+		return selectedOptions == null ? Set.of() : selectedOptions;
+	}
+
+	void setSelectedOptions(Set<OptionRootData> selectedOptions) {
+		this.selectedOptions = selectedOptions;
+	}
+
+	void setTotalPagesCounter(int totalPagesCounter) {
+		this.totalPagesCounter = totalPagesCounter;
+	}
+
+	void setRootTotalElementCounter(long rootTotalElementCounter) {
+		this.rootTotalElementCounter = rootTotalElementCounter;
+	}
+}
Editor is loading...
Leave a Comment