From ad72be0644e9053bee25e1838b704f0d6f2494fa Mon Sep 17 00:00:00 2001 From: "natan.nascimento" Date: Wed, 13 Sep 2023 19:14:59 -0300 Subject: [PATCH 1/2] Call onResume and implement forceUpdate --- .../inventoryframework/component/Pagination.java | 10 ++++++++++ .../component/PaginationImpl.java | 14 +++++++++++--- .../devnatan/inventoryframework/PlatformView.java | 4 ++++ 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/inventory-framework-api/src/main/java/me/devnatan/inventoryframework/component/Pagination.java b/inventory-framework-api/src/main/java/me/devnatan/inventoryframework/component/Pagination.java index 759471f6..b1f19eb6 100644 --- a/inventory-framework-api/src/main/java/me/devnatan/inventoryframework/component/Pagination.java +++ b/inventory-framework-api/src/main/java/me/devnatan/inventoryframework/component/Pagination.java @@ -203,6 +203,16 @@ public interface Pagination extends ComponentComposition, StateValue { @ApiStatus.Experimental boolean isLoading(); + /** + * Forces the pagination to update everything internally ignoring everything, including + * {@link #isLazy() lazy} data source to be computed again. + * + *

This API is experimental and is not subject to the general compatibility guarantees + * such API may be changed or may be removed completely in any further release. + */ + @ApiStatus.Experimental + void forceUpdate(); + /** * Gets all elements in a given page index based of the specified source. * diff --git a/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/component/PaginationImpl.java b/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/component/PaginationImpl.java index 674bd297..b552bca3 100644 --- a/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/component/PaginationImpl.java +++ b/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/component/PaginationImpl.java @@ -44,6 +44,7 @@ public class PaginationImpl extends AbstractStateValue implements Pagination, In private boolean pageWasChanged; private boolean initialized; private int pagesCount; + private boolean forceUpdated; // Number of elements that each page can have. -1 means uninitialized. private int pageSize = -1; @@ -107,7 +108,7 @@ private CompletableFuture> loadSourceForTheCurrentPage() { */ final boolean reuseLazy = isLazy() && initialized; - if ((isStatic() || reuseLazy) && !isComputed()) { + if ((isStatic() || reuseLazy) && !isComputed() && !forceUpdated) { // For unknown reasons already initialized but source is null, external modification? if (initialized && currSource == null) throw new IllegalStateException("User provided pagination source cannot be null"); @@ -359,7 +360,7 @@ public void updated(@NotNull IFSlotRenderContext context) { final IFRenderContext renderContext = context.getParent(); // If page was changed all components will be removed, so don't trigger update on them - if (pageWasChanged) { + if (forceUpdated || pageWasChanged) { getInternalComponents().forEach(child -> child.clear(renderContext)); components = new ArrayList<>(); getInternalComponents().clear(); @@ -570,7 +571,7 @@ public void clicked(@NotNull Component component, @NotNull IFSlotClickContext co if (child.getInteractionHandler() == null || !child.isVisible()) { continue; } - ; + if (child.isContainedWithin(context.getClickedSlot())) { child.getInteractionHandler().clicked(component, context); break; @@ -593,6 +594,13 @@ public void update() { ((IFContext) getRoot()).updateComponent(this); } + @Override + public void forceUpdate() { + forceUpdated = true; + update(); + forceUpdated = false; + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/inventory-framework-platform/src/main/java/me/devnatan/inventoryframework/PlatformView.java b/inventory-framework-platform/src/main/java/me/devnatan/inventoryframework/PlatformView.java index 5363eea6..7dea289d 100644 --- a/inventory-framework-platform/src/main/java/me/devnatan/inventoryframework/PlatformView.java +++ b/inventory-framework-platform/src/main/java/me/devnatan/inventoryframework/PlatformView.java @@ -167,6 +167,8 @@ public final void navigateTo( @SuppressWarnings({"rawtypes", "unchecked"}) @ApiStatus.Internal public final void back(@NotNull Viewer viewer) { + final IFRenderContext active = viewer.getActiveContext(); + System.out.println("active = " + active); final IFRenderContext target = viewer.getPreviousContext(); viewer.unsetPreviousContext(); viewer.setTransitioning(true); @@ -178,9 +180,11 @@ public final void back(@NotNull Viewer viewer) { final PlatformView root = (PlatformView) target.getRoot(); if (!root.hasContext(target.getId())) root.addContext(target); + System.out.println("target = " + target); root.renderContext(target); } viewer.setTransitioning(false); + ((PlatformView) target.getRoot()).onResume(active, target); } private void setupNavigateTo(@NotNull Viewer viewer, @NotNull IFRenderContext origin) { From 057afec2d1e4a81568a7decae4e99ea53ddeb406 Mon Sep 17 00:00:00 2001 From: "natan.nascimento" Date: Wed, 13 Sep 2023 19:16:28 -0300 Subject: [PATCH 2/2] Remove debugs --- .../main/java/me/devnatan/inventoryframework/PlatformView.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/inventory-framework-platform/src/main/java/me/devnatan/inventoryframework/PlatformView.java b/inventory-framework-platform/src/main/java/me/devnatan/inventoryframework/PlatformView.java index 7dea289d..dc413c05 100644 --- a/inventory-framework-platform/src/main/java/me/devnatan/inventoryframework/PlatformView.java +++ b/inventory-framework-platform/src/main/java/me/devnatan/inventoryframework/PlatformView.java @@ -168,7 +168,6 @@ public final void navigateTo( @ApiStatus.Internal public final void back(@NotNull Viewer viewer) { final IFRenderContext active = viewer.getActiveContext(); - System.out.println("active = " + active); final IFRenderContext target = viewer.getPreviousContext(); viewer.unsetPreviousContext(); viewer.setTransitioning(true); @@ -180,7 +179,6 @@ public final void back(@NotNull Viewer viewer) { final PlatformView root = (PlatformView) target.getRoot(); if (!root.hasContext(target.getId())) root.addContext(target); - System.out.println("target = " + target); root.renderContext(target); } viewer.setTransitioning(false);