This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch 3808-table.page.actions
in repository https://gitbox.apache.org/repos/asf/causeway.git
The following commit(s) were added to refs/heads/3808-table.page.actions by
this push:
new 39b2fe2d2b CAUSEWAY-3808: page ranged selection
39b2fe2d2b is described below
commit 39b2fe2d2bb2c1162bbf7574487777c93890ef34
Author: andi-huber <[email protected]>
AuthorDate: Tue Aug 27 15:14:54 2024 +0200
CAUSEWAY-3808: page ranged selection
---
.../core/metamodel/tabular/DataTableInteractive.java | 7 ++-----
.../tabular/internal/DataTableInternal.java | 20 +++++++-------------
.../table/DataTableWithPagesAndFilter.java | 15 ++++++++++++---
.../ui/components/table/nav/NavigationToolbar.java | 8 ++++----
.../table/nav/pageact/PageActionChooser.java | 4 +---
.../table/nav/pagesize/PagesizeChooser.html | 3 +--
.../table/nav/pagesize/PagesizeChooser.java | 7 +++----
7 files changed, 30 insertions(+), 34 deletions(-)
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/tabular/DataTableInteractive.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/tabular/DataTableInteractive.java
index c0a94daf14..41de442d3a 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/tabular/DataTableInteractive.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/tabular/DataTableInteractive.java
@@ -22,6 +22,7 @@ import java.io.Serializable;
import java.util.Comparator;
import java.util.Optional;
import java.util.Set;
+import java.util.stream.IntStream;
import org.apache.causeway.applib.annotation.TableDecorator;
import org.apache.causeway.applib.annotation.Where;
@@ -124,11 +125,7 @@ public interface DataTableInteractive extends
MultiselectChoices {
void doProgrammaticToggle(Runnable runnable);
Set<Integer> getSelectedRowIndexes();
Observable<Can<DataRow>> getDataRowsSelected();
-
- // -- PAGE SPECIFIC SELECTION
-
- void selectCurrentPageRows();
- void unselectCurrentPageRows();
+ void selectRangeOfRowsByIndex(IntStream range, boolean select);
// -- EXPORTING
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/tabular/internal/DataTableInternal.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/tabular/internal/DataTableInternal.java
index 36cc559561..e5449a1f1c 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/tabular/internal/DataTableInternal.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/tabular/internal/DataTableInternal.java
@@ -24,6 +24,7 @@ import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.function.Predicate;
import java.util.stream.Collectors;
+import java.util.stream.IntStream;
import org.springframework.lang.Nullable;
@@ -309,21 +310,14 @@ implements DataTableInteractive {
}
@Override
- public void selectCurrentPageRows() {
- //FIXME limit to page
+ public void selectRangeOfRowsByIndex(IntStream range, boolean select) {
doProgrammaticToggle(()->{
-
dataRows.getValue().forEach(dataRow->dataRow.getSelectToggle().setValue(true));
- });
- }
-
- @Override
- public void unselectCurrentPageRows() {
- //FIXME limit to page
- doProgrammaticToggle(()->{
-
dataRows.getValue().forEach(dataRow->dataRow.getSelectToggle().setValue(false));
- });
+ dataRows.getValue()
+ .pickByIndex(range)
+ .forEach(dataRow->dataRow.getSelectToggle().setValue(select));
+ });
}
-
+
// // -- DATA ROW VISIBILITY
//
// private boolean ignoreHidden(final ManagedObject adapter) {
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/DataTableWithPagesAndFilter.java
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/DataTableWithPagesAndFilter.java
index d63e8072e1..ccae80326b 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/DataTableWithPagesAndFilter.java
+++
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/DataTableWithPagesAndFilter.java
@@ -21,6 +21,7 @@ package org.apache.causeway.viewer.wicket.ui.components.table;
import java.util.List;
import java.util.Optional;
import java.util.OptionalLong;
+import java.util.stream.IntStream;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
@@ -138,7 +139,7 @@ public abstract class DataTableWithPagesAndFilter<T, S>
extends DataTable<T, S>
// -- PAGE ACTIONS
/**
- * Provides the page actions as provided in the table view's footer bar
(drop-down menu).
+ * Provides the page actions as presented in the table view's footer bar
(drop-down menu).
* @see #executePageAction(PageActionChoice)
*/
public List<PageActionChoice> getPageActionChoices() {
@@ -158,11 +159,11 @@ public abstract class DataTableWithPagesAndFilter<T, S>
extends DataTable<T, S>
public boolean executePageAction(PageActionChoice pageActionChoice) {
switch(pageActionChoice.getKey()) {
case "PAGE_SEL": {
- _TableUtils.interactive(this).selectCurrentPageRows();
+
_TableUtils.interactive(this).selectRangeOfRowsByIndex(getCurrentPageRowIndexes(),
true);
return true;
}
case "PAGE_UNSEL": {
- _TableUtils.interactive(this).unselectCurrentPageRows();
+
_TableUtils.interactive(this).selectRangeOfRowsByIndex(getCurrentPageRowIndexes(),
false);
return true;
}
default:
@@ -170,6 +171,14 @@ public abstract class DataTableWithPagesAndFilter<T, S>
extends DataTable<T, S>
}
}
+ public IntStream getCurrentPageRowIndexes() {
+ final int pageIndex = Math.toIntExact(getCurrentPage());
+ final int pageSize = Math.toIntExact(getItemsPerPage());
+ final int fromRowIndexInclusive = Math.toIntExact(pageIndex *
pageSize);
+ final int toRowIndexExclusive = Math.toIntExact(fromRowIndexInclusive
+ pageSize);
+ return IntStream.range(fromRowIndexInclusive, toRowIndexExclusive);
+ }
+
/**
* Used by the {@link PagesizeChooser}, to indicate the currently selected
page-size choice.
* (Typically a checkmark for the active choice within the drop-down
select, also disabling the choice's link.)
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/nav/NavigationToolbar.java
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/nav/NavigationToolbar.java
index 11d40e52f2..87457ddcdb 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/nav/NavigationToolbar.java
+++
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/nav/NavigationToolbar.java
@@ -37,8 +37,8 @@ implements HasCommonContext {
private static final long serialVersionUID = 1L;
private static final String NAVIGATOR_CONTAINER_ID = "span";
- private static final String ID_PAGESIZE_CHOOSER = "pagesizeChooser";
private static final String ID_PAGE_ACTION_CHOOSER = "pageActionChooser";
+ private static final String ID_PAGESIZE_CHOOSER = "pagesizeChooser";
/**
* @param table data-table this tool-bar is attached to
@@ -67,11 +67,11 @@ implements HasCommonContext {
var navigatorContainer = navigatorContainer();
Wkt.add(navigatorContainer,
- new PagesizeChooser(ID_PAGESIZE_CHOOSER, getTable()));
+ new PageActionChooser(ID_PAGE_ACTION_CHOOSER, getTable()));
Wkt.add(navigatorContainer,
- new PageActionChooser(ID_PAGE_ACTION_CHOOSER, getTable()));
-
+ new PagesizeChooser(ID_PAGESIZE_CHOOSER, getTable()));
+
Wkt.labelAdd(navigatorContainer, "prototypingLabel",
TimeTakenModel.createForPrototypingElseBlank(getMetaModelContext()));
}
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/nav/pageact/PageActionChooser.java
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/nav/pageact/PageActionChooser.java
index d6e67fcb19..7e0ea2d6ac 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/nav/pageact/PageActionChooser.java
+++
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/nav/pageact/PageActionChooser.java
@@ -60,8 +60,6 @@ public class PageActionChooser extends Panel {
private void buildGui() {
- //Wkt.labelAdd(this, ID_ENTRIES_PER_PAGE_LABEL,
table.getEntriesPerPageAsLiteral());
-
Wkt.listViewAdd(this, ID_PAGE_ACTION_CHOICES,
table.getPageActionChoices(), item->{
var link = Wkt.linkAdd(item, ID_PAGE_ACTION_CHOICE, target->{
var pageActionChoice = item.getModelObject();
@@ -75,7 +73,7 @@ public class PageActionChooser extends Panel {
Wkt.ajaxEnable(link);
});
- WktTooltips.addTooltip(this, translate("Execute a page specific
action."));
+ WktTooltips.addTooltip(this, translate("Page actions"));
}
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/nav/pagesize/PagesizeChooser.html
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/nav/pagesize/PagesizeChooser.html
index 8bfdfeed90..4bbc031287 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/nav/pagesize/PagesizeChooser.html
+++
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/nav/pagesize/PagesizeChooser.html
@@ -25,7 +25,7 @@
type="button"
data-bs-toggle="dropdown"
aria-expanded="false">
- <span wicket:id="entriesPerPageLabel"></span>
+ <span wicket:id="pagesizeLabel"></span>
</button>
<ul class="dropdown-menu" role="menu">
<li wicket:id="pagesizeChoices">
@@ -35,7 +35,6 @@
<span
wicket:id="viewItemTitle" class="ViewLinkItemTitle">[link title]</span>
<i
wicket:id="viewItemCheckmark" class="fa-solid fa-check"></i>
</a>
-
</li>
</ul>
</div>
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/nav/pagesize/PagesizeChooser.java
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/nav/pagesize/PagesizeChooser.java
index 5ed618ba48..6f70becc51 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/nav/pagesize/PagesizeChooser.java
+++
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/nav/pagesize/PagesizeChooser.java
@@ -39,7 +39,7 @@ import lombok.NonNull;
public class PagesizeChooser extends Panel {
private static final long serialVersionUID = 1L;
- private static final String ID_ENTRIES_PER_PAGE_LABEL =
"entriesPerPageLabel";
+ private static final String ID_PAGESIZE_LABEL = "pagesizeLabel";
private static final String ID_PAGESIZE_CHOICE = "pagesizeChoice";
private static final String ID_PAGESIZE_CHOICES = "pagesizeChoices";
@@ -64,7 +64,7 @@ public class PagesizeChooser extends Panel {
private void buildGui() {
- Wkt.labelAdd(this, ID_ENTRIES_PER_PAGE_LABEL,
table.getEntriesPerPageAsLiteral());
+ Wkt.labelAdd(this, ID_PAGESIZE_LABEL,
table.getEntriesPerPageAsLiteral());
Wkt.listViewAdd(this, ID_PAGESIZE_CHOICES, table.getPagesizeChoices(),
item->{
var link = Wkt.linkAdd(item, ID_PAGESIZE_CHOICE, target->{
@@ -81,8 +81,7 @@ public class PagesizeChooser extends Panel {
Wkt.ajaxEnable(link);
});
- WktTooltips.addTooltip(this, translate("Select your desired page size "
- + "(how many rows to display per page)."));
+ WktTooltips.addTooltip(this, translate("How many rows to display per
page"));
}