Untitled
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